UNPKG

khoaijs-ajax

Version:

![http://i.imgur.com/RmD50NR.jpg](http://i.imgur.com/RmD50NR.jpg)

362 lines (336 loc) 14 kB
describe('KhoaiJS - ContentManager', function () { var expect = chai.expect, chai_assert = chai.assert; var items; function reset_each_descibe() { Khoai.util.resetID('ContentManager'); if (items) { Khoai.util.resetID(items.id); Khoai.util.resetID(items.id + '_string'); Khoai.util.resetID(items.id + '_number'); Khoai.util.resetID(items.id + '_boolean'); Khoai.util.resetID(items.id + '_Array'); } items = new ContentManager(); } before(reset_each_descibe); describe('Static property of KhoaiJS', function () { it('ContentManager must be a static property of KhoaiJS if exists', function (cb) { if (window.hasOwnProperty('Khoai')) { chai_assert.property(Khoai, 'ContentManager'); cb(); } else { cb(); } }); it('Static property of KhoaiJS and standalone object of ContentManager must be same', function (cb) { if (window.hasOwnProperty('Khoai')) { chai_assert.strictEqual(Khoai.ContentManager, ContentManager); cb(); } else { cb(); } }) }); describe('Add, check exists by key, content type and content value, get content', function () { before(reset_each_descibe); it('Add', function () { var val = 'a', key, detail; chai_assert.isString(key = items.add(val)); chai_assert.isTrue(items.isValidKey(key)); chai_assert.isTrue(items.has(key)); chai_assert.isTrue(items.hasType('string')); chai_assert.isTrue(items.hasContent(val)); chai_assert.isTrue(items.hasContent(val, 'string')); // chai_assert.isObject(detail = items.get(key)); chai_assert.property(detail, 'content'); chai_assert.strictEqual(detail.content, val); chai_assert.property(detail, 'meta'); chai_assert.isUndefined(detail.meta); // var keys = items.keys(); // chai_assert.isObject(keys); chai_assert.property(keys, 'string'); chai_assert.sameMembers(keys['string'], [key]); }); it('Add, unique', function () { var val = Khoai.util.randomString(20), key = items.add(val); chai_assert.strictEqual(items.addUnique(val), key); chai_assert.notEqual(items.addUnique(val + '_'), key); }); it('Add, meta', function () { var val = true, meta = {id: 1}, key, detail; chai_assert.isString(key = items.add(val, meta)); chai_assert.isTrue(items.has(key)); chai_assert.isTrue(items.hasType('boolean')); chai_assert.isTrue(items.hasContent(val)); chai_assert.isTrue(items.hasContent(val, 'boolean')); // chai_assert.isObject(detail = items.get(key)); chai_assert.property(detail, 'content'); chai_assert.strictEqual(detail.content, val); chai_assert.property(detail, 'meta'); chai_assert.deepEqual(detail.meta, meta); chai_assert.deepEqual(detail.meta, items.getMeta(key)); }); it('Add, meta, custom type', function () { var val = [1, 2, 3], meta = {name: 'M'}, type = 'yahoo', key, detail; chai_assert.isString(key = items.add(val, meta, type)); chai_assert.isTrue(items.has(key)); chai_assert.isTrue(items.hasType(type)); // chai_assert.isObject(detail = items.get(key)); chai_assert.property(detail, 'content'); chai_assert.sameMembers(detail.content, val); chai_assert.property(detail, 'meta'); chai_assert.deepEqual(detail.meta, meta); chai_assert.deepEqual(detail.meta, items.getMeta(key)); // chai_assert.sameMembers(items.getContent(key), val); }); it('Return false when get non-exists key', function () { chai_assert.isFalse(items.get('non-exists-key')); }); it('Return default value when get non-exists key', function () { chai_assert.strictEqual(items.getContent('non-exists-key', 'yahoo'), 'yahoo'); }); }); describe('Update', function () { before(reset_each_descibe); it('content', function () { var val_before = 1, val_after = 2, key = items.add(val_before); // chai_assert.strictEqual(items.getContent(key), val_before); chai_assert.doesNotThrow(function () { items.update(key, val_after); }); chai_assert.strictEqual(items.getContent(key), val_after); }); it('content and meta', function () { var val_before = 1, val_after = 2, meta_before = {id: 1}, meta_after = {id: 2}, key = items.add(val_before, meta_before); // chai_assert.strictEqual(items.getContent(key), val_before); chai_assert.deepEqual(items.getMeta(key), meta_before); chai_assert.doesNotThrow(function () { items.update(key, val_after, meta_after); }); chai_assert.strictEqual(items.getContent(key), val_after); chai_assert.deepEqual(items.getMeta(key), meta_after); }); it('meta only', function () { var val = 1, meta_before = {id: 1}, meta_after = {id: 2}, key = items.add(val, meta_before); // chai_assert.strictEqual(items.getContent(key), val); chai_assert.deepEqual(items.getMeta(key), meta_before); chai_assert.doesNotThrow(function () { items.updateMeta(key, meta_after); }); chai_assert.deepEqual(items.getMeta(key), meta_after); }); }); describe('Remove', function () { before(reset_each_descibe); function valid_remove_key(key) { var removed = []; chai_assert.isTrue(items.has(key)); chai_assert.doesNotThrow(function () { removed = items.remove(key); }); chai_assert.isArray(removed); chai_assert.sameDeepMembers(removed, [{ type: 'string', key: key }]); chai_assert.isFalse(items.has(key)); } it('remove by an exists key', function () { var key = items.add('a'); // valid_remove_key(key); }); it('only remove special key', function () { var value = Khoai.util.randomString(10), key = items.add(value), key_2 = items.add(value); // valid_remove_key(key); chai_assert.isTrue(items.has(key_2)); }); it('remove all item by value', function () { var value = Khoai.util.randomString(20), key = items.add(value), key_2 = items.add(value); // chai_assert.isTrue(items.has(key)); chai_assert.isTrue(items.has(key_2)); chai_assert.isTrue(items.hasContent(value)); // items.removeContent(value); // chai_assert.isFalse(items.has(key)); chai_assert.isFalse(items.has(key_2)); // chai_assert.isFalse(items.hasContent(value)); }); }); describe('Filter', function () { var values = [], must_be = []; var callback = function (content, meta, key, type) { return -1 !== values.indexOf(content); }; before(function () { reset_each_descibe(); values = [Khoai.util.randomString(10), true, 123, Khoai.util.randomString(10)]; _.each(values, function (item) { must_be.push({ type: Khoai.util.contentType(item), key: items.add(item), meta: undefined, content: item }); }); }); it('All of types', function () { var filtered = items.filter(callback); // chai_assert.sameDeepMembers(filtered, must_be); }); it('Special type', function () { var filtered = items.filter(callback, 'string'); // chai_assert.sameDeepMembers(filtered, _.filter(must_be, function (must_be_item) { return must_be_item.type === 'string'; })); }); }); describe('Find', function () { var value, must_be; var callback = function (content) { return content === value; }; before(function () { reset_each_descibe(); value = Khoai.util.randomString(20); must_be = { type: 'string', key: items.add(value), meta: undefined, content: value }; }); it('must return object if found', function () { var found = items.find(callback); chai_assert.deepEqual(found, must_be); }); it('custom type, must return object if found', function () { chai_assert.deepEqual(items.find(callback, 'string'), must_be); }); it('must return false if not found', function () { chai_assert.isFalse(items.find(function () { return false; })); }); it('must return false when custom type non-exists', function () { chai_assert.isFalse(items.find(callback, 'other_type')); }); }); describe('Using', function () { before(reset_each_descibe); var value = 'item', key; it('Return true for an exists key', function () { key = items.add(value); // chai_assert.isTrue(items.has(key)); chai_assert.isTrue(items.using(key)); chai_assert.isTrue(items.isUsing(key)); }); it('Return false if key isn\'t exists', function () { var non_exists_key = _.now() + Khoai.util.randomString(5); // chai_assert.isFalse(items.has(non_exists_key)); chai_assert.isFalse(items.using(non_exists_key)); chai_assert.isFalse(items.isUsing(non_exists_key)); }); it('Return true if a content is using', function () { chai_assert.isTrue(items.isUsing(key)); chai_assert.isTrue(items.isUsingContent(value)); }); it('Return false if a content is unused', function () { var non_exists_content = _.now() + Khoai.util.randomString(5); // chai_assert.isFalse(items.hasContent(non_exists_content)); chai_assert.isFalse(items.isUsingContent(non_exists_content)); }); it('unused an using key', function () { var other_using_key = items.add(Khoai.util.randomString(10)); // chai_assert.isTrue(items.using(other_using_key)); chai_assert.isTrue(items.isUsing(other_using_key)); // items.unused(other_using_key); // chai_assert.isTrue(items.has(other_using_key)); chai_assert.isFalse(items.isUsing(other_using_key)); items.remove(other_using_key); }); it('Valid usingKeys', function () { var using_keys = items.usingKeys(); // chai_assert.isArray(using_keys); chai_assert.isAbove(using_keys.length, 0); chai_assert.include(using_keys, key); }); it('Valid usingKeys grouped', function () { var using_keys_grouped = items.usingKeys(true); // chai_assert.isObject(using_keys_grouped); chai_assert.property(using_keys_grouped, 'string'); chai_assert.sameMembers(using_keys_grouped['string'], [key]); }); it('remove using keys', function () { var using_keys = items.usingKeys(true), removed_using_keys = _.groupBy(items.removeUsing(), 'type'); // removed_using_keys = _.mapValues(removed_using_keys, function (array_of_detail) { return _.map(array_of_detail, 'key'); }); chai_assert.deepEqual(using_keys, removed_using_keys); chai_assert.isFalse(items.isUsing(key)); }); it('remove unused keys', function () { var other_key = items.add(Khoai.util.randomString(10)), unused_keys = items.unusedKeys(true), removed_unused_keys = _.groupBy(items.removeNotUsing(), 'type'); // removed_unused_keys = _.mapValues(removed_unused_keys, function (array_of_detail) { return _.map(array_of_detail, 'key'); }); chai_assert.deepEqual(unused_keys, removed_unused_keys); chai_assert.isFalse(items.has(other_key)); chai_assert.isFalse(items.isUsing(other_key)); }); }); });