summaryrefslogtreecommitdiffstats
path: root/js
diff options
context:
space:
mode:
authorBernhard Posselt <nukeawhale@gmail.com>2013-04-22 11:15:51 +0200
committerBernhard Posselt <nukeawhale@gmail.com>2013-04-22 11:15:51 +0200
commit6c7883d284640d02d79fc48cbbaaff9c95e62461 (patch)
tree6e7d20820fed554cb75b953b8a803ff09154dc08 /js
parentbcba311485074e75ad62f338cc8159bf99522fab (diff)
add a unittest for itemcontroller, fix #92
Diffstat (limited to 'js')
-rw-r--r--js/app/controllers/itemcontroller.coffee2
-rw-r--r--js/app/services/businesslayer/itembusinesslayer.coffee4
-rw-r--r--js/public/app.js4
-rw-r--r--js/tests/controllers/itemcontrollerSpec.coffee119
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)
+