diff --git a/test/tests/unit/view/item.js b/test/tests/unit/view/item.js new file mode 100644 index 00000000..a99c5d38 --- /dev/null +++ b/test/tests/unit/view/item.js @@ -0,0 +1,134 @@ +(function () { +'use strict'; + +var ID = 'view/item'; +var DEPS = ['_', '$', 'core/format', 'core/location', 'core/resource', 'core/settings']; + +describe('module \'' + ID + '\'', function () { + + before(function () { + + this.definition = modulejs._private.definitions[ID]; + + this.xFormat = { + formatDate: sinon.stub().returns(util.uniqId()), + formatSize: sinon.stub().returns(util.uniqId()) + }; + this.xLocation = { + setLink: sinon.stub().returns(util.uniqId()) + }; + this.xResource = { + icon: sinon.stub().returns(util.uniqId()) + }; + this.xSettings = {view: { + setParentFolderLabels: false + }}; + + this.applyFn = function () { + + this.xFormat.formatDate.reset(); + this.xFormat.formatSize.reset(); + this.xLocation.setLink.reset(); + this.xResource.icon.reset(); + + return this.definition.fn(_, $, this.xFormat, this.xLocation, this.xResource, this.xSettings); + }; + }); + + describe('definition', function () { + + it('is defined', function () { + + assert.isPlainObject(this.definition); + }); + + it('has correct id', function () { + + assert.strictEqual(this.definition.id, ID); + }); + + it('requires correct', function () { + + assert.deepEqual(this.definition.deps, DEPS); + }); + + it('args for each request', function () { + + assert.strictEqual(this.definition.deps.length, this.definition.fn.length); + }); + + it('has no instance', function () { + + assert.notProperty(modulejs._private.instances, ID); + }); + + it('inits without errors', function () { + + this.applyFn(); + }); + }); + + describe('application', function () { + + it('returns object with 1 property', function () { + + var instance = this.applyFn(); + assert.isPlainObject(instance); + assert.lengthOfKeys(instance, 1); + }); + }); + + describe('.render()', function () { + + before(function () { + + this.createItem = function () { + + return { + isFolder: sinon.stub().returns(false), + label: util.uniqId(), + time: 0, + size: 0, + type: util.uniqId(), + isManaged: false, + icon: null, + isCurrentParentFolder: sinon.stub().returns(false) + }; + }; + }); + + it('is function', function () { + + var instance = this.applyFn(); + assert.isFunction(instance.render); + }); + + it('returns jQuery instance of single HTML element', function () { + + var item = this.createItem(); + var instance = this.applyFn(); + var $item = instance.render(item); + assert.isObject($item); + assert.lengthOf($item, 1); + assert.isString($item.jquery); + }); + + it('$item.data(\'item\') is back reference to item', function () { + + var item = this.createItem(); + var instance = this.applyFn(); + var $item = instance.render(item); + assert.strictEqual($item.data('item'), item); + }); + + it('sets item.$view as reference to $item', function () { + + var item = this.createItem(); + var instance = this.applyFn(); + var $item = instance.render(item); + assert.strictEqual(item.$view, $item); + }); + }); +}); + +}());