// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.

import assert from 'assert';
import TestHelper from './test_helper.jsx';

describe('Client.Posts', function() {
    this.timeout(100000);

    it('createPost', function(done) {
        TestHelper.initBasic(() => {
            var post = TestHelper.fakePost();
            post.channel_id = TestHelper.basicChannel().id;

            TestHelper.basicClient().createPost(
                post,
                function(data) {
                    assert.equal(data.id.length > 0, true);
                    done();
                },
                function(err) {
                    done(new Error(err.message));
                }
            );
        });
    });

    it('getPostById', function(done) {
        TestHelper.initBasic(() => {
            TestHelper.basicClient().getPostById(
                TestHelper.basicPost().id,
                function(data) {
                    assert.equal(data.order[0], TestHelper.basicPost().id);
                    done();
                },
                function(err) {
                    done(new Error(err.message));
                }
            );
        });
    });

    it('getPost', function(done) {
        TestHelper.initBasic(() => {
            TestHelper.basicClient().getPost(
                TestHelper.basicChannel().id,
                TestHelper.basicPost().id,
                function(data) {
                    assert.equal(data.order[0], TestHelper.basicPost().id);
                    done();
                },
                function(err) {
                    done(new Error(err.message));
                }
            );
        });
    });

    it('updatePost', function(done) {
        TestHelper.initBasic(() => {
            var post = TestHelper.basicPost();
            post.message = 'new message';
            post.channel_id = TestHelper.basicChannel().id;

            TestHelper.basicClient().updatePost(
                post,
                function(data) {
                    assert.equal(data.id.length > 0, true);
                    done();
                },
                function(err) {
                    done(new Error(err.message));
                }
            );
        });
    });

    it('deletePost', function(done) {
        TestHelper.initBasic(() => {
            TestHelper.basicClient().deletePost(
                TestHelper.basicChannel().id,
                TestHelper.basicPost().id,
                function(data) {
                    assert.equal(data.id, TestHelper.basicPost().id);
                    done();
                },
                function(err) {
                    done(new Error(err.message));
                }
            );
        });
    });

    it('searchPost', function(done) {
        TestHelper.initBasic(() => {
            TestHelper.basicClient().search(
                'unit test',
                false,
                function(data) {
                    assert.equal(data.order[0], TestHelper.basicPost().id);
                    done();
                },
                function(err) {
                    done(new Error(err.message));
                }
            );
        });
    });

    it('getPostsPage', function(done) {
        TestHelper.initBasic(() => {
            TestHelper.basicClient().getPostsPage(
                TestHelper.basicChannel().id,
                0,
                10,
                function(data) {
                    assert.equal(data.order[0], TestHelper.basicPost().id);
                    done();
                },
                function(err) {
                    done(new Error(err.message));
                }
            );
        });
    });

    it('getPosts', function(done) {
        TestHelper.initBasic(() => {
            TestHelper.basicClient().getPosts(
                TestHelper.basicChannel().id,
                0,
                function(data) {
                    assert.equal(data.order[0], TestHelper.basicPost().id);
                    done();
                },
                function(err) {
                    done(new Error(err.message));
                }
            );
        });
    });

    it('getPostsBefore', function(done) {
        TestHelper.initBasic(() => {
            var post = TestHelper.fakePost();
            post.channel_id = TestHelper.basicChannel().id;

            TestHelper.basicClient().createPost(
                post,
                function(rpost) {
                    TestHelper.basicClient().getPostsBefore(
                        TestHelper.basicChannel().id,
                        rpost.id,
                        0,
                        10,
                        function(data) {
                            assert.equal(data.order[0], TestHelper.basicPost().id);
                            done();
                        },
                        function(err) {
                            done(new Error(err.message));
                        }
                    );
                },
                function(err) {
                    done(new Error(err.message));
                }
            );
        });
    });

    it('getPostsAfter', function(done) {
        TestHelper.initBasic(() => {
            var post = TestHelper.fakePost();
            post.channel_id = TestHelper.basicChannel().id;

            TestHelper.basicClient().createPost(
                post,
                function(rpost) {
                    TestHelper.basicClient().getPostsAfter(
                        TestHelper.basicChannel().id,
                        TestHelper.basicPost().id,
                        0,
                        10,
                        function(data) {
                            assert.equal(data.order[0], rpost.id);
                            done();
                        },
                        function(err) {
                            done(new Error(err.message));
                        }
                    );
                },
                function(err) {
                    done(new Error(err.message));
                }
            );
        });
    });

    it('getFlaggedPosts', function(done) {
        TestHelper.initBasic(() => {
            var pref = {};
            pref.user_id = TestHelper.basicUser().id;
            pref.category = 'flagged_post';
            pref.name = TestHelper.basicPost().id;
            pref.value = 'true';

            var prefs = [];
            prefs.push(pref);

            TestHelper.basicClient().savePreferences(
                prefs,
                function() {
                    TestHelper.basicClient().getFlaggedPosts(
                        0,
                        2,
                        function(data) {
                            assert.equal(data.order[0], TestHelper.basicPost().id);
                            done();
                        },
                        function(err) {
                            done(new Error(err.message));
                        }
                    );
                },
                function(err) {
                    done(new Error(err.message));
                }
            );
        });
    });

    // getFileInfosForPost is tested in client_files.test.jsx
});

