summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2014-05-23 02:54:58 +0200
committerBernhard Posselt <dev@bernhard-posselt.com>2014-05-23 02:54:58 +0200
commit66dc3028d75c455f118c484b9de0708409026451 (patch)
tree488560633254ff7aa1eda58fd4681db660e4c803
parent8cafa3c21ee456f8e35d6b0e03687fb591cfc928 (diff)
stuff
-rw-r--r--js/build/app.js39
-rw-r--r--js/service/FeedResource.js42
-rw-r--r--js/service/Publisher.js2
-rw-r--r--js/tests/unit/controller/SettingsControllerSpec.js17
-rw-r--r--js/tests/unit/service/FeedResourceSpec.js55
5 files changed, 147 insertions, 8 deletions
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 <dev@bernhard-posselt.com>
+ * @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);
+ }));
+});