'use strict'; /*global require, after, before*/ var async = require('async'); var assert = require('assert'); var db = require('./mocks/databasemock'); var Categories = require('../src/categories'); var Topics = require('../src/topics'); var User = require('../src/user'); describe('Categories', function () { var categoryObj; var posterUid; before(function (done) { User.create({username: 'poster'}, function (err, _posterUid) { if (err) { return done(err); } posterUid = _posterUid; done(); }); }); describe('.create', function () { it('should create a new category', function (done) { Categories.create({ name: 'Test Category', description: 'Test category created by testing script', icon: 'fa-check', blockclass: 'category-blue', order: '5' }, function (err, category) { assert.equal(err, null); categoryObj = category; done.apply(this, arguments); }); }); }); describe('.getCategoryById', function () { it('should retrieve a newly created category by its ID', function (done) { Categories.getCategoryById({ cid: categoryObj.cid, set: 'cid:' + categoryObj.cid + ':tids', reverse: true, start: 0, stop: -1, uid: 0 }, function (err, categoryData) { assert.equal(err, null); assert(categoryData); assert.equal(categoryObj.name, categoryData.name); assert.equal(categoryObj.description, categoryData.description); done(); }); }); }); describe('Categories.getRecentTopicReplies', function () { it('should not throw', function (done) { Categories.getCategoryById({ cid: categoryObj.cid, set: 'cid:' + categoryObj.cid + ':tids', reverse: true, start: 0, stop: -1, uid: 0 }, function (err, categoryData) { assert.ifError(err); Categories.getRecentTopicReplies(categoryData, 0, function (err) { assert.ifError(err); done(); }); }); }); }); describe('.getCategoryTopics', function () { it('should return a list of topics', function (done) { Categories.getCategoryTopics({ cid: categoryObj.cid, set: 'cid:' + categoryObj.cid + ':tids', reverse: true, start: 0, stop: 10, uid: 0 }, function (err, result) { assert.equal(err, null); assert(Array.isArray(result.topics)); assert(result.topics.every(function (topic) { return topic instanceof Object; })); done(); }); }); it('should return a list of topics by a specific user', function (done) { Categories.getCategoryTopics({ cid: categoryObj.cid, set: 'cid:' + categoryObj.cid + ':uid:' + 1 + ':tids', reverse: true, start: 0, stop: 10, uid: 0, targetUid: 1 }, function (err, result) { assert.equal(err, null); assert(Array.isArray(result.topics)); assert(result.topics.every(function (topic) { return topic instanceof Object && topic.uid === '1'; })); done(); }); }); }); describe('Categories.moveRecentReplies', function () { var moveCid; var moveTid; before(function (done) { async.parallel({ category: function (next) { Categories.create({ name: 'Test Category 2', description: 'Test category created by testing script' }, next); }, topic: function (next) { Topics.post({ uid: posterUid, cid: categoryObj.cid, title: 'Test Topic Title', content: 'The content of test topic' }, next); } }, function (err, results) { if (err) { return done(err); } moveCid = results.category.cid; moveTid = results.topic.topicData.tid; Topics.reply({uid: posterUid, content: 'test post', tid: moveTid}, function (err) { done(err); }); }); }); it('should move posts from one category to another', function (done) { Categories.moveRecentReplies(moveTid, categoryObj.cid, moveCid, function (err) { assert.ifError(err); db.getSortedSetRange('cid:' + categoryObj.cid + ':pids', 0, -1, function (err, pids) { assert.ifError(err); assert.equal(pids.length, 0); db.getSortedSetRange('cid:' + moveCid + ':pids', 0, -1, function (err, pids) { assert.ifError(err); assert.equal(pids.length, 2); done(); }); }); }); }); }); after(function (done) { db.emptydb(done); }); });