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 | |
parent | bcba311485074e75ad62f338cc8159bf99522fab (diff) |
add a unittest for itemcontroller, fix #92
Diffstat (limited to 'js')
-rw-r--r-- | js/app/controllers/itemcontroller.coffee | 2 | ||||
-rw-r--r-- | js/app/services/businesslayer/itembusinesslayer.coffee | 4 | ||||
-rw-r--r-- | js/public/app.js | 4 | ||||
-rw-r--r-- | js/tests/controllers/itemcontrollerSpec.coffee | 119 |
4 files changed, 125 insertions, 4 deletions
diff --git a/js/app/controllers/itemcontroller.coffee b/js/app/controllers/itemcontroller.coffee index d803ad484..fc52d969d 100644 --- a/js/app/controllers/itemcontroller.coffee +++ b/js/app/controllers/itemcontroller.coffee @@ -51,7 +51,7 @@ Language, AutoPageLoading) -> else return '' - # TODO: unittest + @_$scope.getRelativeDate = (date) => if date return @_language.getMomentFromTimestamp(date).fromNow() diff --git a/js/app/services/businesslayer/itembusinesslayer.coffee b/js/app/services/businesslayer/itembusinesslayer.coffee index 0b79cd638..99a400385 100644 --- a/js/app/services/businesslayer/itembusinesslayer.coffee +++ b/js/app/services/businesslayer/itembusinesslayer.coffee @@ -107,10 +107,12 @@ StarredBusinessLayer) -> loadNext: (callback) -> lowestItemId = @_itemModel.getLowestId() - if angular.isDefined(lowestItemId) + if lowestItemId != 0 @_persistence.getItems @_activeFeed.getType(), @_activeFeed.getId(), lowestItemId, callback + else + callback() diff --git a/js/public/app.js b/js/public/app.js index de1725c2c..8922625ab 100644 --- a/js/public/app.js +++ b/js/public/app.js @@ -1283,8 +1283,10 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>. var lowestItemId; lowestItemId = this._itemModel.getLowestId(); - if (angular.isDefined(lowestItemId)) { + if (lowestItemId !== 0) { return this._persistence.getItems(this._activeFeed.getType(), this._activeFeed.getId(), lowestItemId, callback); + } else { + return callback(); } }; 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) + |