UNPKG

kontainer-di

Version:

A simple lightweight Dependency Injection container

121 lines (105 loc) 2.96 kB
var assert = require('assert'), containerConfig = require('../helpers/containerConfig'); describe('Todo Service', function(){ var subject, knex; var mockTodos = [ { id: 1, text: 'foo', completed: false }, { id: 2, text: 'bar', completed: true } ]; before(function(){ var container = containerConfig.configure(); subject = container.get('todoService'); knex = container.get('database'); }); beforeEach(function(){ knex.clean(); }); it('Should be an object', function(){ assert.equal('object', typeof(subject)); }); it('Should fetch all todos from database', function(done){ //setup fake data with our mock knex('Todo').setup(mockTodos); subject.getTodos().then(function(res){ assert(Array.isArray(res)); assert.equal(2, res.length); done(); }); }); it('Should fetch a single todo from database', function(done){ knex('Todo').setup(mockTodos); subject.getTodo(1) .then(function(todo){ assert.deepEqual(todo, mockTodos[0]); done(); }); }); it('Should update a todo', function(done){ var mockTodo = { id: 1, text: 'updated', completed: false }; knex('Todo').setup(1); subject.updateTodo(mockTodo) .then(function(todo){ assert.deepEqual(todo, mockTodo); done(); }); }); it('Should fail when updating a todo fails', function(done){ var mockTodo = { id: 3 }; knex('Todo').setup(0); subject.updateTodo(mockTodo) .catch(function(err){ assert(err.match(/Not found/)); done(); }); }); it('Should create a todo and return the newly created item', function(done){ var mockTodo = { text: 'Do something', completed: false }; knex('Todo').setup([1]); subject.createTodo(mockTodo) .then(function(newTodo){ assert.equal(newTodo.text, mockTodo.text); assert.equal(newTodo.completed, mockTodo.completed); done(); }); }); it('Should fail when creating a todo fails', function(done){ var mockTodo = { foo: 'bar' }; knex('Todo').shouldThrow(true, new Error('Something failed')); subject.createTodo(mockTodo) .catch(function(err){ assert(err.match(/Something failed/)); done(); }); }); it('Should delete a todo', function(done){ knex('Todo').setup(1); subject.deleteTodo(25) .then(function(success){ assert.equal(success, true); done(); }); }); it('Should fail when deleting a todo affect 0 rows', function(done){ knex('Todo').setup(0); subject.deleteTodo(25) .catch(function(err){ assert(err.match(/not found/)); done(); }); }); it('Should fail when deleting a todo and DB fails', function(done){ knex('Todo').shouldThrow(true, new Error('Something failed')); subject.deleteTodo(25) .catch(function(err){ assert(err.match(/Something failed/)); done(); }); }); });