summaryrefslogtreecommitdiffstats
path: root/js-old/tests/unit/service/ItemResourceSpec.js
diff options
context:
space:
mode:
Diffstat (limited to 'js-old/tests/unit/service/ItemResourceSpec.js')
-rw-r--r--js-old/tests/unit/service/ItemResourceSpec.js387
1 files changed, 387 insertions, 0 deletions
diff --git a/js-old/tests/unit/service/ItemResourceSpec.js b/js-old/tests/unit/service/ItemResourceSpec.js
new file mode 100644
index 000000000..ea573cfbe
--- /dev/null
+++ b/js-old/tests/unit/service/ItemResourceSpec.js
@@ -0,0 +1,387 @@
+/**
+ * Nextcloud - 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', function () {
+ 'use strict';
+
+ var http;
+
+ beforeEach(module('News', function ($provide) {
+ $provide.value('BASE_URL', 'base');
+ $provide.constant('ITEM_BATCH_SIZE', 5);
+ }));
+
+ beforeEach(inject(function ($httpBackend) {
+ http = $httpBackend;
+ }));
+
+ afterEach(function () {
+ http.verifyNoOutstandingExpectation();
+ http.verifyNoOutstandingRequest();
+ });
+
+
+ it('should receive the newestItemId', inject(function (ItemResource) {
+ ItemResource.receive(3, 'newestItemId');
+
+ expect(ItemResource.getNewestItemId()).toBe(3);
+ }));
+
+ it('should filter out item duplicates', inject(function (ItemResource) {
+ ItemResource.receive([{
+ id: 3,
+ fingerprint: 'a'
+ }, {
+ id: 4,
+ fingerprint: 'a'
+ }, {
+ id: 2,
+ fingerprint: 'b'
+ }], 'items');
+ expect(ItemResource.get(3).fingerprint).toBe('a');
+ expect(ItemResource.get(2).fingerprint).toBe('b');
+ expect(ItemResource.get(4)).toBe(undefined);
+ expect(ItemResource.highestId).toBe(4);
+ expect(ItemResource.lowestId).toBe(2);
+ }));
+
+
+ it('should receive the newestItemId', inject(function (ItemResource) {
+ ItemResource.receive(2, 'starred');
+
+ expect(ItemResource.getStarredCount()).toBe(2);
+ }));
+
+
+ it('should mark item as read', inject(function (ItemResource) {
+ http.expectPOST('base/items/3/read', {isRead: true}).respond(200, {});
+
+ ItemResource.receive([
+ {
+ id: 3,
+ feedId: 4,
+ unread: true,
+ fingerprint: 'a'
+ },
+ {
+ id: 4,
+ feedId: 3,
+ unread: true,
+ fingerprint: 'b'
+ }
+ ], 'items');
+
+ ItemResource.markItemRead(3);
+
+ http.flush();
+
+ expect(ItemResource.get(3).unread).toBe(false);
+ }));
+
+
+ it('should mark multiple item as read', inject(function (ItemResource) {
+ http.expectPOST('base/items/read/multiple', {
+ itemIds: [3, 4]
+ }).respond(200, {});
+
+ ItemResource.receive([
+ {
+ id: 3,
+ feedId: 4,
+ unread: true,
+ fingerprint: 'a'
+ },
+ {
+ id: 4,
+ feedId: 3,
+ unread: true,
+ fingerprint: 'b'
+ }
+ ], 'items');
+
+ ItemResource.markItemsRead([3, 4]);
+
+ http.flush();
+
+ expect(ItemResource.get(3).unread).toBe(false);
+ expect(ItemResource.get(4).unread).toBe(false);
+ }));
+
+
+ it('should star item', inject(function (ItemResource) {
+ http.expectPOST('base/items/4/a/star', {isStarred: true})
+ .respond(200, {});
+
+ ItemResource.receive([
+ {
+ id: 3,
+ feedId: 4,
+ fingerprint: 'a',
+ starred: false,
+ guidHash: 'a'
+ },
+ {
+ id: 4,
+ feedId: 3,
+ fingerprint: 'b',
+ starred: false
+ }
+ ], 'items');
+
+ ItemResource.star(3);
+
+ http.flush();
+
+ expect(ItemResource.get(3).starred).toBe(true);
+ expect(ItemResource.getStarredCount()).toBe(1);
+ }));
+
+
+ it('should mark feed as read', inject(function (ItemResource) {
+ http.expectPOST('base/feeds/4/read', {
+ highestItemId: 5
+ }).respond(200, {});
+
+ ItemResource.receive([
+ {
+ id: 3,
+ feedId: 4,
+ fingerprint: 'a',
+ unread: true
+ },
+ {
+ id: 4,
+ feedId: 3,
+ fingerprint: 'b',
+ unread: true
+ },
+ {
+ id: 5,
+ feedId: 4,
+ fingerprint: 'c',
+ unread: true
+ }
+ ], 'items');
+ ItemResource.receive(5, 'newestItemId');
+
+ ItemResource.markFeedRead(4);
+
+ http.flush();
+
+ expect(ItemResource.get(3).unread).toBe(false);
+ expect(ItemResource.get(5).unread).toBe(false);
+ }));
+
+
+ it('should mark all as read', inject(function (ItemResource) {
+ http.expectPOST('base/items/read', {
+ highestItemId: 5
+ }).respond(200, {});
+
+ ItemResource.receive([
+ {
+ id: 3,
+ feedId: 4,
+ fingerprint: 'a',
+ unread: true
+ },
+ {
+ id: 5,
+ feedId: 3,
+ fingerprint: 'b',
+ unread: true
+ },
+ {
+ id: 4,
+ feedId: 4,
+ fingerprint: 'c',
+ unread: true
+ }
+ ], 'items');
+ ItemResource.receive(5, 'newestItemId');
+
+ ItemResource.markRead();
+
+ http.flush();
+
+ expect(ItemResource.get(3).unread).toBe(false);
+ expect(ItemResource.get(4).unread).toBe(false);
+ expect(ItemResource.get(5).unread).toBe(false);
+ }));
+
+
+ it('toggle star', inject(function (ItemResource) {
+ ItemResource.receive([
+ {
+ id: 3,
+ fingerprint: 'a',
+ starred: true
+ },
+ {
+ id: 5,
+ fingerprint: 'b',
+ starred: false
+ }
+ ], 'items');
+
+ ItemResource.star = jasmine.createSpy('star');
+
+ ItemResource.toggleStar(3);
+ expect(ItemResource.star).toHaveBeenCalledWith(3, false);
+
+ ItemResource.toggleStar(5);
+ expect(ItemResource.star).toHaveBeenCalledWith(5, true);
+ }));
+
+
+ it('should auto page newest first', inject(function (ItemResource) {
+ http.expectGET(
+ 'base/items?id=4&limit=5&offset=3&oldestFirst=false&type=3')
+ .respond(200, {});
+
+ ItemResource.receive([
+ {
+ id: 3,
+ feedId: 4,
+ fingerprint: 'a',
+ unread: true
+ },
+ {
+ id: 5,
+ feedId: 3,
+ fingerprint: 'b',
+ unread: true
+ },
+ {
+ id: 4,
+ feedId: 4,
+ fingerprint: 'c',
+ unread: true
+ }
+ ], 'items');
+
+ ItemResource.autoPage(3, 4, false);
+
+ http.flush();
+ }));
+
+
+ it('should auto page oldest first', inject(function (ItemResource) {
+ http.expectGET(
+ 'base/items?id=4&limit=5&offset=5&oldestFirst=true&type=3')
+ .respond(200, {});
+
+ ItemResource.receive([
+ {
+ id: 3,
+ feedId: 4,
+ fingerprint: 'a',
+ unread: true
+ },
+ {
+ id: 5,
+ feedId: 3,
+ fingerprint: 'b',
+ unread: true
+ },
+ {
+ id: 4,
+ feedId: 4,
+ fingerprint: 'c',
+ unread: true
+ }
+ ], 'items');
+
+ ItemResource.autoPage(3, 4, true);
+
+ http.flush();
+ }));
+
+
+ it('should auto page all', inject(function (ItemResource) {
+ http.expectGET(
+ 'base/items?id=4&limit=5&offset=5&oldestFirst=true' +
+ '&search=some+string&showAll=true&type=3')
+ .respond(200, {});
+
+ ItemResource.receive([
+ {
+ id: 3,
+ feedId: 4,
+ fingerprint: 'a',
+ unread: true
+ },
+ {
+ id: 5,
+ feedId: 3,
+ fingerprint: 'b',
+ unread: true
+ },
+ {
+ id: 4,
+ feedId: 4,
+ fingerprint: 'c',
+ unread: true
+ }
+ ], 'items');
+
+ ItemResource.autoPage(3, 4, true, true, 'some string');
+
+ http.flush();
+ }));
+
+
+ it('should clear all state', inject(function (ItemResource) {
+ ItemResource.receive([
+ {
+ id: 3,
+ feedId: 4,
+ fingerprint: 'a',
+ unread: true
+ },
+ {
+ id: 5,
+ feedId: 3,
+ fingerprint: 'b',
+ unread: true
+ },
+ {
+ id: 4,
+ feedId: 4,
+ fingerprint: 'c',
+ unread: true
+ }
+ ], 'items');
+ ItemResource.receive(5, 'newestItemId');
+ ItemResource.receive(4, 'starred');
+
+ ItemResource.clear();
+
+ expect(ItemResource.size()).toBe(0);
+ expect(ItemResource.highestId).toBe(0);
+ expect(ItemResource.lowestId).toBe(0);
+ expect(ItemResource.starredCount).toBe(0);
+ }));
+
+
+ it('should import articles', inject(function (ItemResource) {
+ var json = 'test';
+
+ http.expectPOST('base/feeds/import/articles', {
+ json: json
+ }).respond(200, {});
+
+ ItemResource.importArticles(json);
+
+ http.flush();
+
+ }));
+
+
+}); \ No newline at end of file