From 66dc3028d75c455f118c484b9de0708409026451 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Fri, 23 May 2014 02:54:58 +0200 Subject: stuff --- js/build/app.js | 39 ++++++++++++++- js/service/FeedResource.js | 42 +++++++++++++++++ js/service/Publisher.js | 2 +- js/tests/unit/controller/SettingsControllerSpec.js | 17 ++++--- js/tests/unit/service/FeedResourceSpec.js | 55 ++++++++++++++++++++++ 5 files changed, 147 insertions(+), 8 deletions(-) create mode 100644 js/tests/unit/service/FeedResourceSpec.js diff --git a/js/build/app.js b/js/build/app.js index b4bd09d3b..422adafb1 100644 --- a/js/build/app.js +++ b/js/build/app.js @@ -244,9 +244,46 @@ var $__build_47_app__ = function () { BASE_URL, 'url' ]); + this.ids = {}; }; var $FeedResource = FeedResource; - $traceurRuntime.createClass(FeedResource, {}, {}, Resource); + $traceurRuntime.createClass(FeedResource, { + add: function (value) { + $traceurRuntime.superCall(this, $FeedResource.prototype, 'add', [value]); + $traceurRuntime.setProperty(this.ids, value.id, this.hashMap[$traceurRuntime.toProperty(value.url)]); + }, + delete: function (id) { + var feed = this.get(id); + delete this.ids[$traceurRuntime.toProperty(feed.id)]; + $traceurRuntime.superCall(this, $FeedResource.prototype, 'delete', [id]); + }, + markRead: function () { + for (var $__3 = this.values[$traceurRuntime.toProperty(Symbol.iterator)](), $__4; !($__4 = $__3.next()).done;) { + try { + throw undefined; + } catch (feed) { + feed = $__4.value; + { + feed.unreadCount = 0; + } + } + } + }, + markFeedRead: function (feedId) { + this.ids[$traceurRuntime.toProperty(feedId)].unreadCount = 0; + }, + markItemOfFeedRead: function (feedId) { + this.ids[$traceurRuntime.toProperty(feedId)].unreadCount -= 1; + }, + markItemOfFeedUnread: function (feedId) { + this.ids[$traceurRuntime.toProperty(feedId)].unreadCount += 1; + }, + getUnreadCount: function () { + return this.values.reduce(function (sum, feed) { + return sum + feed.unreadCount; + }, 0); + } + }, {}, Resource); return new FeedResource($http, BASE_URL); } ]); diff --git a/js/service/FeedResource.js b/js/service/FeedResource.js index 2eb9e4818..1f0c6c34d 100644 --- a/js/service/FeedResource.js +++ b/js/service/FeedResource.js @@ -14,8 +14,50 @@ app.factory('FeedResource', (Resource, $http, BASE_URL) => { constructor ($http, BASE_URL) { super($http, BASE_URL, 'url'); + this.ids = {}; } + + add (value) { + super.add(value); + this.ids[value.id] = this.hashMap[value.url]; + } + + + delete (id) { + let feed = this.get(id); + delete this.ids[feed.id]; + super.delete(id); + } + + + markRead () { + for(let feed of this.values) { + feed.unreadCount = 0; + } + } + + + markFeedRead (feedId) { + this.ids[feedId].unreadCount = 0; + } + + + markItemOfFeedRead (feedId) { + this.ids[feedId].unreadCount -= 1; + } + + + markItemOfFeedUnread (feedId) { + this.ids[feedId].unreadCount += 1; + } + + + getUnreadCount () { + return this.values.reduce((sum, feed) => sum + feed.unreadCount, 0); + } + + } return new FeedResource($http, BASE_URL); diff --git a/js/service/Publisher.js b/js/service/Publisher.js index dd420f629..9e17e1494 100644 --- a/js/service/Publisher.js +++ b/js/service/Publisher.js @@ -29,7 +29,7 @@ app.service('Publisher', function () { this.publishAll = (data) => { for (let [channel, messages] of items(data)) { if (this.channels[channel] !== undefined) { - for (let listener of this.channels[channel]) { + for(let listener of this.channels[channel]) { listener.receive(messages, channel); } } diff --git a/js/tests/unit/controller/SettingsControllerSpec.js b/js/tests/unit/controller/SettingsControllerSpec.js index c438fbcd0..523d74bc0 100644 --- a/js/tests/unit/controller/SettingsControllerSpec.js +++ b/js/tests/unit/controller/SettingsControllerSpec.js @@ -10,10 +10,17 @@ describe('SettingsController', () => { 'use strict'; + let route; + beforeEach(module('News', ($provide) => { $provide.value('BASE_URL', 'base'); })); + beforeEach(() => { + route = { + reload: jasmine.createSpy('Route') + }; + }); it('should set values', inject(($controller) => { let Settings = { @@ -22,7 +29,8 @@ describe('SettingsController', () => { }; let ctrl = $controller('SettingsController', { - Settings: Settings + Settings: Settings, + $route: route }); ctrl.toggleSetting(3); @@ -37,10 +45,6 @@ describe('SettingsController', () => { get: key => key }; - let route = { - reload: jasmine.createSpy('Route') - }; - let ctrl = $controller('SettingsController', { Settings: settings, $route: route @@ -59,7 +63,8 @@ describe('SettingsController', () => { FeedResource.add({url: 'hi'}); let ctrl = $controller('SettingsController', { - FeedResource: FeedResource + FeedResource: FeedResource, + $route: route }); expect(ctrl.feedSize()).toBe(1); diff --git a/js/tests/unit/service/FeedResourceSpec.js b/js/tests/unit/service/FeedResourceSpec.js new file mode 100644 index 000000000..8b941d99d --- /dev/null +++ b/js/tests/unit/service/FeedResourceSpec.js @@ -0,0 +1,55 @@ +/** + * ownCloud - News + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Bernhard Posselt + * @copyright Bernhard Posselt 2014 + */ +describe('ItemResource', () => { + 'use strict'; + + let resource; + + beforeEach(module('News', ($provide) => { + $provide.value('BASE_URL', 'base'); + })); + + + beforeEach(inject((FeedResource) => { + resource = FeedResource; + FeedResource.add({id: 1, url: 'ye', unreadCount: 45}); + FeedResource.add({id: 2, url: 'sye', unreadCount: 25}); + FeedResource.add({id: 3, url: '1sye', unreadCount: 0}); + })); + + it('should mark all read', inject((FeedResource) => { + + FeedResource.markRead(); + + expect(FeedResource.getUnreadCount()).toBe(0); + })); + + it('should mark a feed read', inject((FeedResource) => { + + FeedResource.markFeedRead(1); + + expect(FeedResource.get('ye').unreadCount).toBe(0); + })); + + + it('should mark an item read', inject((FeedResource) => { + + FeedResource.markItemOfFeedRead(1); + + expect(FeedResource.get('ye').unreadCount).toBe(44); + })); + + it('should mark an item unread', inject((FeedResource) => { + + FeedResource.markItemOfFeedUnread(1); + + expect(FeedResource.get('ye').unreadCount).toBe(46); + })); +}); -- cgit v1.2.3