1
0
mirror of https://github.com/chylex/Nextcloud-News.git synced 2024-12-05 00:42:45 +01:00
Nextcloud-News/js/tests/unit/controller/SettingsControllerSpec.js
Daniel Schaal 1fbb81e469 Fix tests
2017-06-10 11:19:07 +02:00

169 lines
4.8 KiB
JavaScript

/**
* 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('SettingsController', function () {
'use strict';
var route;
beforeEach(module('News', function ($provide) {
$provide.value('BASE_URL', 'base');
$provide.value('ITEM_BATCH_SIZE', 3);
}));
beforeEach(function () {
route = {
reload: jasmine.createSpy('Route')
};
});
it('should set values', inject(function ($controller) {
var SettingsResource = {
set: jasmine.createSpy('SettingsResource'),
get: function (key) { return key; }
};
var ctrl = $controller('SettingsController', {
SettingsResource: SettingsResource,
$route: route
});
ctrl.toggleSetting(3);
expect(SettingsResource.set).toHaveBeenCalledWith(3, false);
}));
it('should reload page if set needed', inject(function ($controller) {
var SettingsResource = {
set: jasmine.createSpy('SettingsResource'),
get: function (key) { return key; }
};
var ctrl = $controller('SettingsController', {
SettingsResource: SettingsResource,
$route: route
});
ctrl.toggleSetting('showAll');
ctrl.toggleSetting('oldestFirst');
expect(SettingsResource.set).toHaveBeenCalledWith('showAll', false);
expect(route.reload).toHaveBeenCalled();
expect(route.reload.calls.count()).toBe(2);
}));
it('should import articles', inject(function ($controller, ItemResource,
Publisher) {
var response = {data: 1};
ItemResource.importArticles = jasmine.createSpy('importArticles')
.and.callFake(function () {
return {
then: function (callback) {
callback(response.data);
return {
finally: function (finalCallback) {
finalCallback();
}
};
}
};
});
Publisher.publishAll = jasmine.createSpy('publishAll');
var ctrl = $controller('SettingsController', {
ItemResource: ItemResource,
Publisher: Publisher
});
var content = '{"test":1}';
ctrl.importArticles(content);
expect(ItemResource.importArticles)
.toHaveBeenCalledWith(JSON.parse(content));
expect(Publisher.publishAll).toHaveBeenCalledWith(response.data);
expect(ctrl.isArticlesImporting).toBe(false);
expect(ctrl.articleImportError).toBe(false);
}));
it('should display import articles error', inject(function ($controller) {
var ctrl = $controller('SettingsController');
var content = '{"test:1}';
ctrl.importArticles(content);
expect(ctrl.isArticlesImporting).toBe(false);
expect(ctrl.articleImportError).toBe(true);
}));
it('should import opml', inject(function ($controller, OPMLImporter,
OPMLParser) {
var queue = 4;
var opml = {
feeds: [
{name: 'hi'}
],
folders: []
};
OPMLParser.parse = jasmine.createSpy('parse').and.returnValue(opml);
OPMLImporter.importFolders = jasmine.createSpy('importFolders')
.and.returnValue({
then: function (callback) {
callback(queue, 5);
return {
finally: function (finalCallback) {
finalCallback();
}
};
}
});
OPMLImporter.importFeedQueue = jasmine.createSpy('importFeedQueue');
var ctrl = $controller('SettingsController', {
OPMLImporter: OPMLImporter,
OPMLParser: OPMLParser
});
var content = '{"folders":[{name:"b"}]}';
ctrl.importOPML(content);
expect(OPMLParser.parse).toHaveBeenCalledWith(content);
expect(OPMLImporter.importFolders).toHaveBeenCalledWith(opml);
expect(OPMLImporter.importFeedQueue).toHaveBeenCalledWith(4, 5);
expect(ctrl.isOPMLImporting).toBe(false);
expect(ctrl.opmlImportError).toBe(false);
}));
it('should display import opml error', inject(function (
$controller, OPMLParser) {
OPMLParser.parse = jasmine.createSpy('parse').and.callFake(function () {
throw 1;
});
var ctrl = $controller('SettingsController', {
OPMLParser: OPMLParser
});
ctrl.importOPML('content');
expect(ctrl.isOPMLImporting).toBe(false);
expect(ctrl.opmlImportError).toBe(true);
}));
});