diff options
author | Bernhard Posselt <nukeawhale@gmail.com> | 2013-04-22 11:15:51 +0200 |
---|---|---|
committer | Bernhard Posselt <nukeawhale@gmail.com> | 2013-04-22 11:15:51 +0200 |
commit | 6c7883d284640d02d79fc48cbbaaff9c95e62461 (patch) | |
tree | 6e7d20820fed554cb75b953b8a803ff09154dc08 /js/tests | |
parent | bcba311485074e75ad62f338cc8159bf99522fab (diff) |
add a unittest for itemcontroller, fix #92
Diffstat (limited to 'js/tests')
-rw-r--r-- | js/tests/controllers/itemcontrollerSpec.coffee | 119 |
1 files changed, 118 insertions, 1 deletions
diff --git a/js/tests/controllers/itemcontrollerSpec.coffee b/js/tests/controllers/itemcontrollerSpec.coffee index 2316ee509..d700dc89f 100644 --- a/js/tests/controllers/itemcontrollerSpec.coffee +++ b/js/tests/controllers/itemcontrollerSpec.coffee @@ -27,13 +27,22 @@ describe 'ItemController', -> beforeEach module 'News' beforeEach module ($provide) => + @imagePath = jasmine.createSpy('imagePath') + @utils = + imagePath: @imagePath + $provide.value 'Utils', @utils + @persistence = getItems: -> + readItem: -> $provide.value 'Persistence', @persistence return beforeEach inject ($controller, @ItemBusinessLayer, @FeedBusinessLayer, - $rootScope) => + $rootScope, @FeedLoading, @AutoPageLoading, @FeedModel, @ItemModel, + @ActiveFeed, @FeedType) => + + @ActiveFeed.handle({type: @FeedType.Folder, id: 3}) @scope = $rootScope.$new() replace = $scope: @scope @@ -48,3 +57,111 @@ describe 'ItemController', -> expect(@scope.feedBusinessLayer).toBe(@FeedBusinessLayer) + it 'should make feedloading available', => + expect(@scope.isLoading()).toBe(false) + @FeedLoading.increase() + expect(@scope.isLoading()).toBe(true) + + + it 'should make autopagin available', => + expect(@scope.isAutoPaging()).toBe(false) + @AutoPageLoading.increase() + expect(@scope.isAutoPaging()).toBe(true) + + + it 'should return the feedtitle', => + item = {id: 3, faviconLink: null, url: 'hi', title: 'heheh'} + @FeedModel.add(item) + + expect(@scope.getFeedTitle(3)).toBe(item.title) + + + it 'should return no value if feedtitle is not found', => + expect(@scope.getFeedTitle(3)).toBe('') + + + it 'should return no value if relative date gets no value', => + expect(@scope.getRelativeDate()).toBe('') + + + it 'should set an item read on readItem broadcast', => + item1 = {id: 4, guidHash: 'abc', feedId: 3} + @ItemModel.add(item1) + item1.setUnread() + + expect(item1.isRead()).toBe(false) + @scope.$broadcast 'readItem', 4 + + expect(item1.isRead()).toBe(true) + + + it 'should not autopage if there are no items', => + @persistence.getItems = jasmine.createSpy('getItems') + @scope.$broadcast 'autoPage' + expect(@persistence.getItems).not.toHaveBeenCalled() + + + it 'should autoPage with the lowest Item Id', => + @persistence.getItems = jasmine.createSpy('getItems') + item1 = {id: 4, guidHash: 'abc', feedId: 3} + @ItemModel.add(item1) + + item1 = {id: 3, guidHash: 'abcd', feedId: 3} + @ItemModel.add(item1) + + item1 = {id: 6, guidHash: 'abce', feedId: 1} + @ItemModel.add(item1) + + @scope.$broadcast 'autoPage' + expect(@persistence.getItems).toHaveBeenCalledWith( + @FeedType.Folder, 3, 3, jasmine.any(Function) + ) + + + it 'should not prevent autopaging if there are no items', => + @scope.$broadcast 'autoPage' + @persistence.getItems = jasmine.createSpy('getItems') + + item1 = {id: 3, guidHash: 'abcd', feedId: 3} + @ItemModel.add(item1) + + @scope.$broadcast 'autoPage' + expect(@persistence.getItems).toHaveBeenCalledWith( + @FeedType.Folder, 3, 3, jasmine.any(Function) + ) + + + it 'should not send multiple autopage requests at once', => + @persistence.getItems = jasmine.createSpy('getItems') + item1 = {id: 3, guidHash: 'abcd', feedId: 3} + @ItemModel.add(item1) + + @scope.$broadcast 'autoPage' + + item1 = {id: 2, guidHash: 'abcd', feedId: 3} + @ItemModel.add(item1) + + @scope.$broadcast 'autoPage' + + expect(@persistence.getItems).not.toHaveBeenCalledWith( + @FeedType.Folder, 2, 3, jasmine.any(Function) + ) + + + it 'should allow another autopaging request if the last one finished', => + @persistence.getItems = jasmine.createSpy('getItems') + @persistence.getItems.andCallFake (type, id, offset, onSuccess) -> + onSuccess() + + item1 = {id: 3, guidHash: 'abcd', feedId: 3} + @ItemModel.add(item1) + + @scope.$broadcast 'autoPage' + + item1 = {id: 2, guidHash: 'abcd', feedId: 3} + @ItemModel.add(item1) + + @scope.$broadcast 'autoPage' + + expect(@persistence.getItems.callCount).toBe(2) + |