From 99d5bf9dfb6387c1e8beae04ea2ae5302bc3b88c Mon Sep 17 00:00:00 2001 From: chaoen Date: Thu, 14 Apr 2016 08:14:55 +0000 Subject: [PATCH 1/2] Add bucket list unit test. Add /src/components/bucket/bucket.spec.js. Test bucket.controller and bucket.service. --- src/components/bucket/bucket.spec.js | 116 +++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 src/components/bucket/bucket.spec.js diff --git a/src/components/bucket/bucket.spec.js b/src/components/bucket/bucket.spec.js new file mode 100644 index 0000000..37957ca --- /dev/null +++ b/src/components/bucket/bucket.spec.js @@ -0,0 +1,116 @@ +import bucketCtrl from './bucket.controller'; +import bucketServ from './bucket.service'; +import app from './../../index.js'; + +describe('bucket list', function() { + let $rootScope; + let makeService; + let makeController; + let $httpBackend; + let $auth; + let $toast; + let $mdDialog; + let $fetch; + + beforeEach(angular.mock.module('app')); + + beforeEach(inject(($q, _$rootScope_, _$auth_, _$toast_, _$mdDialog_, _$state_, _$fetch_, _$httpBackend_) => { + $rootScope = _$rootScope_; + + $fetch = _$fetch_; + + $toast = _$toast_; + + $mdDialog = _$mdDialog_; + + $auth = _$auth_; + + $auth.isAuthenticated = () => true; + + $httpBackend = _$httpBackend_; + + makeService = () => { + return new bucketServ($fetch, $toast, $mdDialog); + } + + makeController = (service) => { + return new bucketCtrl($rootScope, service); + }; + })); + describe('when init service', function() { + it('should let state.lists.requesting to be false', function() { + const service = makeService(); + $rootScope.$digest(); + expect(service.state.lists.requesting).to.eq(false); + }); + it('should let state.lists.error to be false', function() { + const service = makeService(); + $rootScope.$digest(); + expect(service.state.lists.error).to.eq(false); + }); + }); + describe('when init controller', function() { + it('should invoke getBuckets in service', function() { + const service = makeService(); + const getB = sinon.spy(service, 'getBuckets'); + const controller = makeController(service); + const data = { Buckets: [ + { + Name: 'BucketName', + CreationDate: '2016-04-08T14:46:28.000Z' + } + ] }; + $httpBackend.expectPOST($fetch.API_URL + '/v1/bucket/list').respond(200, data); + $httpBackend.flush(); + $rootScope.$digest(); + expect(getB.called).to.eq(true); + }); + it('should invoke sortByName in servcie', function() { + const service = makeService(); + const sortFunction = sinon.spy(service, 'sortByName'); + const controller = makeController(service); + const data = { + Buckets: + [ + { + Name: 'BucketName', + CreationDate: '2016-04-08T14:46:28.000Z' + }, + { + Name: 'BucketName1', + CreationDate: '2016-04-08T14:36:16.000Z' + } + ] + }; + $httpBackend.expectPOST($fetch.API_URL + '/v1/bucket/list').respond(200, data); + $httpBackend.flush(); + $rootScope.$digest(); + expect(sortFunction.called).to.eq(true); + }); + it('should let state.lists.data save what backend response', function() { + const service = makeService(); + expect(service.state.lists.data).to.be.empty; + const controller = makeController(service); + const data = { + Buckets: + [ + { + Name: 'BucketName', + CreationDate: '2016-04-08T14:46:28.000Z' + }, + { + Name: 'BucketName1', + CreationDate: '2016-04-08T14:36:16.000Z' + } + ] + }; + $httpBackend.expectPOST($fetch.API_URL + '/v1/bucket/list').respond(200, data); + $httpBackend.flush(); + $rootScope.$digest(); + expect(service.state.lists.data).not.to.empty; + }); + }); +}); + + + From 15082066c4374fe8d94f93b3f48eea528ebc87c0 Mon Sep 17 00:00:00 2001 From: chaoen Date: Fri, 15 Apr 2016 12:40:00 +0800 Subject: [PATCH 2/2] Edit Bucket unit test Edit bucket unit test. Edit at src/components/bucket/bucket.spec.js Test every method that related bucket list. Test when init service and controller. Test when getBucket resolve and reject. Test sortByName. --- src/components/bucket/bucket.spec.js | 163 ++++++++++++++++----------- 1 file changed, 100 insertions(+), 63 deletions(-) diff --git a/src/components/bucket/bucket.spec.js b/src/components/bucket/bucket.spec.js index 37957ca..12a5e36 100644 --- a/src/components/bucket/bucket.spec.js +++ b/src/components/bucket/bucket.spec.js @@ -2,18 +2,19 @@ import bucketCtrl from './bucket.controller'; import bucketServ from './bucket.service'; import app from './../../index.js'; -describe('bucket list', function() { +describe('bucket testing', function() { let $rootScope; let makeService; + let makeDeferred; let makeController; let $httpBackend; let $auth; let $toast; let $mdDialog; let $fetch; - + beforeEach(angular.mock.module('app')); - + beforeEach(inject(($q, _$rootScope_, _$auth_, _$toast_, _$mdDialog_, _$state_, _$fetch_, _$httpBackend_) => { $rootScope = _$rootScope_; @@ -29,88 +30,124 @@ describe('bucket list', function() { $httpBackend = _$httpBackend_; + makeDeferred = () => { + return $q.defer(); + } + makeService = () => { - return new bucketServ($fetch, $toast, $mdDialog); + return new bucketServ($fetch, $toast, $mdDialog); } makeController = (service) => { - return new bucketCtrl($rootScope, service); + return new bucketCtrl($rootScope, service); }; })); describe('when init service', function() { it('should let state.lists.requesting to be false', function() { - const service = makeService(); - $rootScope.$digest(); - expect(service.state.lists.requesting).to.eq(false); + const service = makeService(); + $rootScope.$digest(); + expect(service.state.lists.requesting).to.eq(false); }); it('should let state.lists.error to be false', function() { + const service = makeService(); + $rootScope.$digest(); + expect(service.state.lists.error).to.eq(false); + }); + }); + describe('when init controller', function() { + it('should invoke getBuckets', function() { + const service = makeService(); + service.getBuckets = () => {}; + const getB = sinon.spy(service, 'getBuckets'); + const controller = makeController(service); + $rootScope.$digest(); + expect(getB.called).to.eq(true); + }); + }); + describe('when getBuckets resolve', function() { + it('should let error to be false', function() { + const data = { + Buckets: [] + }; const service = makeService(); + const deferred = makeDeferred(); + const fetchMock = sinon.mock(service.$fetch); + fetchMock.expects('post').returns(deferred.promise); + deferred.resolve({ data }); + service.getBuckets(); $rootScope.$digest(); expect(service.state.lists.error).to.eq(false); }); - }); - describe('when init controller', function() { - it('should invoke getBuckets in service', function() { + it('should invoke sortByName', function() { + const data = { + "Buckets": [{ + Name: 'abc', + CreationDate: '2016-04-08T14:46:28.000z' + }, { + Name: 'abd22', + CreationDate: '2016-04-08T14:45:28.000z' + }] + }; const service = makeService(); - const getB = sinon.spy(service, 'getBuckets'); - const controller = makeController(service); - const data = { Buckets: [ - { - Name: 'BucketName', - CreationDate: '2016-04-08T14:46:28.000Z' - } - ] }; - $httpBackend.expectPOST($fetch.API_URL + '/v1/bucket/list').respond(200, data); - $httpBackend.flush(); + service.sortByName = () => {}; + const deferred = makeDeferred(); + const fetchMock = sinon.mock(service.$fetch); + fetchMock.expects('post').returns(deferred.promise); + deferred.resolve({ data }); + const sorted = sinon.spy(service, 'sortByName'); + service.getBuckets(); $rootScope.$digest(); - expect(getB.called).to.eq(true); + expect(sorted.called).to.eq(true); }); - it('should invoke sortByName in servcie', function() { + }); + describe('when getBuckets reject', function() { + it('should let error to be true', function() { const service = makeService(); - const sortFunction = sinon.spy(service, 'sortByName'); - const controller = makeController(service); - const data = { - Buckets: - [ - { - Name: 'BucketName', - CreationDate: '2016-04-08T14:46:28.000Z' - }, - { - Name: 'BucketName1', - CreationDate: '2016-04-08T14:36:16.000Z' - } - ] - }; - $httpBackend.expectPOST($fetch.API_URL + '/v1/bucket/list').respond(200, data); - $httpBackend.flush(); + const deferred = makeDeferred(); + const fetchMock = sinon.mock(service.$fetch); + fetchMock.expects('post').returns(deferred.promise); + deferred.reject(); + service.getBuckets(); $rootScope.$digest(); - expect(sortFunction.called).to.eq(true); + expect(service.state.lists.error).to.eq(true); }); - it('should let state.lists.data save what backend response', function() { + }); + describe('when sortByName', function() { + it('should get sorted data', function() { const service = makeService(); - expect(service.state.lists.data).to.be.empty; - const controller = makeController(service); - const data = { - Buckets: - [ - { - Name: 'BucketName', - CreationDate: '2016-04-08T14:46:28.000Z' - }, - { - Name: 'BucketName1', - CreationDate: '2016-04-08T14:36:16.000Z' - } - ] - }; - $httpBackend.expectPOST($fetch.API_URL + '/v1/bucket/list').respond(200, data); - $httpBackend.flush(); + const data = { + "Buckets": [{ + Name: 'abc', + CreationDate: '2016-04-08T14:46:28.000z' + }, { + Name: 'abd22', + CreationDate: '2016-04-08T14:45:28.000z' + }, { + Name: 'abd2', + CreationDate: '2016-04-08T14:36:28.000z' + }, { + Name: 'abd11', + CreationDate: '2016-04-08T14:16:28.000z' + }, { + Name: 'abd1', + CreationDate: '2016-04-08T14:28:28.000z' + }, { + Name: 'ab', + CreationDate: '2016-04-08T14:08:28.000z' + }, { + Name: 'abd', + CreationDate: '2016-04-08T14:15:28.000z' + }] + }; + const sorted = data.Buckets.sort(service.sortByName); $rootScope.$digest(); - expect(service.state.lists.data).not.to.empty; + expect(sorted[0].Name).to.eq('ab'); + expect(sorted[1].Name).to.eq('abc'); + expect(sorted[2].Name).to.eq('abd'); + expect(sorted[3].Name).to.eq('abd1'); + expect(sorted[4].Name).to.eq('abd2'); + expect(sorted[5].Name).to.eq('abd11'); + expect(sorted[6].Name).to.eq('abd22'); }); }); }); - - -