Podcast/test/unit/services.js
2013-04-07 10:12:25 +02:00

140 lines
No EOL
5.6 KiB
JavaScript

describe('Filter: timeAgo', function() {
it('should format a number in seconds to "x seconds/minutes/hours ago"', function() {
var timeAgo, testTime;
module('podcasts.services');
inject(function($filter) {
timeAgo = $filter('timeAgo');
testTime = new Date().getTime();
});
expect(timeAgo(testTime - 45000)).toEqual('just now');
expect(timeAgo(testTime - 90000)).toEqual('1 minute ago');
expect(timeAgo(testTime - 260000)).toEqual('4 minutes ago');
expect(timeAgo(testTime - 4000000)).toEqual('1 hour ago');
expect(timeAgo(testTime - 38000000)).toEqual('10 hours ago');
expect(timeAgo(testTime - 90000000)).toEqual('Yesterday');
expect(timeAgo(testTime - 865000000)).toEqual('2 weeks ago');
expect(timeAgo(testTime - 3457000000)).toEqual('older than a month');
});
});
describe('Filter: time', function() {
it('should format seconds to a time format"', function() {
module('podcasts.services');
inject(function($filter) {
time = $filter('time');
});
expect(time(10)).toEqual('10s');
expect(time(10)).toEqual('10s');
expect(time(70)).toEqual('70s');
expect(time(150)).toEqual('2:30');
expect(time(123)).toEqual('2:03');
expect(time(3675)).toEqual('1:01:15');
expect(time(18000)).toEqual('5:00:00');
});
//TODO: test skip option. not sure if I want to change how that works though
});
/*
describe('Service: Settings', function() {
it('should store a new setting to the DB', function() {
var settingService;
module('podcasts.services');
inject(function($service) {
settingService = $service;
});
expect(settingService(10)).toEqual('10s');
expect(time(10)).toEqual('10s');
expect(time(70)).toEqual('70s');
expect(time(150)).toEqual('2:30');
expect(time(123)).toEqual('2:03');
expect(time(3675)).toEqual('1:01:15');
expect(time(18000)).toEqual('5:00:00');
});
});
*/
describe('Service: Importer', function() {
var _feeds = function() {
return {
add: jasmine.createSpy('add')
};
};
beforeEach(module('podcasts.importer'));
beforeEach(module('podcasts.services'));
beforeEach(module(function($provide) {
$provide.service('feeds', _feeds);
}));
it('should parse JSON and pass the URLs to the feeds service', inject(function(feeds, google) {
google.addFeedsFromJsonResponse(testFixtures.googleReaderSubscriptions);
expect(feeds.add.calls.length).toEqual(3);
expect(feeds.add).toHaveBeenCalledWith("http://feeds.5by5.tv/b2w-afterdark");
expect(feeds.add).toHaveBeenCalledWith("http://pod.drs.ch/heutemorgen_mpx.xml");
expect(feeds.add).toHaveBeenCalledWith("http://pod.drs.ch/mailbox_mpx.xml");
}));
});
describe('Service: Feeds', function() {
var _downloaderBackend = function($q, xmlParser) {
return {
downloadXml: function(url) {
var deferred = $q.defer();
deferred.resolve(xmlParser.parse(testFixtures.feedXml));
return deferred.promise;
}
};
},
_feeditems = function($delegate, $q) {
return {
getFeedItemFromXml: $delegate.getFeedItemFromXml,
add: function(feedObject) {
var deferred = $q.defer();
deferred.resolve('');
return deferred.promise;
}
}
},
_db = function() {
return {};
};
beforeEach(function() {
module('podcasts.services');
module(function($provide) {
$provide.service('db', _db);
$provide.decorator('feedItems', _feeditems);
$provide.service('downloaderBackend', _downloaderBackend);
});
});
it('should save feedItems to DB with correct queued value', inject(function(feeds, feedItems, $rootScope, downloaderBackend) {
spyOn(downloaderBackend, 'downloadXml').andCallThrough();
spyOn(feedItems, 'add').andCallThrough();
feedItem = {id: 1, url: 'http://www.example.com/feed.xml'};
feeds.downloadItems(feedItem, null);
$rootScope.$apply();
expect(downloaderBackend.downloadXml.calls.length).toEqual(1);
expect(downloaderBackend.downloadXml).toHaveBeenCalledWith('http://www.example.com/feed.xml');
expect(feedItems.add.calls.length).toEqual(3); //TODO: adjust as per global setting at some point
expect(feedItems.add).toHaveBeenCalledWith({ guid : 'http://example.org/podcast/1.mp3', title : 'Example Item 1', link : '', date : 1362124800000, description : 'Example Description 1', audioUrl : 'http://example.org/podcast/1.mp3', queued : 1, feedId : 1 });
expect(feedItems.add).toHaveBeenCalledWith({ guid : 'http://example.org/podcast/2.mp3', title : 'Example Item 2', link : '', date : 1362038400000, description : 'Example Description 2', audioUrl : 'http://example.org/podcast/2.mp3', queued : 0, feedId : 1 });
expect(feedItems.add).toHaveBeenCalledWith({ guid : 'http://example.org/podcast/3.mp3', title : 'Example Item 3', link : '', date : 1361952000000, description : 'Example Description 3', audioUrl : 'http://example.org/podcast/3.mp3', queued : 0, feedId : 1 });
expect(feedItems.add).not.toHaveBeenCalledWith({ guid : 'http://example.org/podcast/4.mp3', title : 'Example Item 4', link : '', date : 1361952000000, description : 'Example Description 4', audioUrl : 'http://example.org/podcast/4.mp3', queued : 0, feedId : 1 });
}));
});