piskel/test/js/service/storage/StorageServiceTest.js

127 lines
4.4 KiB
JavaScript

describe("Storage Service test suite", function() {
var storageService = null;
var piskel = {};
beforeEach(function() {
pskl.app.galleryStorageService = {
save : function () {}
};
pskl.app.desktopStorageService = {
save : function () {}
};
pskl.app.fileDownloadStorageService = {
save : function () {}
};
pskl.app.localStorageService = {
save : function () {}
};
pskl.app.shortcutService = {
registerShortcut : function () {}
};
storageService = new pskl.service.storage.StorageService();
storageService.init();
});
var checkSubServiceSuccessfulSave = function (service, methodName, done) {
spyOn(service, 'save').and.returnValue(Q.resolve());
storageService[methodName](piskel).then(function () {
expect(service.save).toHaveBeenCalledWith(piskel, undefined);
}, function (err) {
expect(false).toBe(true, 'Error callback should not have been called');
}).then(function () {
done();
});
};
var checkSubServiceFailedSave = function (service, methodName, done) {
spyOn(service, 'save').and.returnValue(Q.reject());
storageService[methodName](piskel).then(function () {
expect(false).toBe(true, 'Success callback should not have been called');
},function () {
expect(service.save).toHaveBeenCalledWith(piskel, undefined);
}).then(function () {
done();
});
};
// GalleryStorage
it("calls GalleryStorage#save in saveToGallery", function(done) {
checkSubServiceSuccessfulSave(pskl.app.galleryStorageService, 'saveToGallery', done);
});
it("calls GalleryStorage#save in saveToGallery - error case", function(done) {
checkSubServiceFailedSave(pskl.app.galleryStorageService, 'saveToGallery', done);
});
// DesktopStorage
it("calls DesktopStorage#save in saveToDesktop", function(done) {
checkSubServiceSuccessfulSave(pskl.app.desktopStorageService, 'saveToDesktop', done);
});
it("calls DesktopStorage#save in saveToDesktop - error case", function(done) {
checkSubServiceFailedSave(pskl.app.desktopStorageService, 'saveToDesktop', done);
});
// FileDownloadStorage
it("calls FileDownloadStorage#save in saveToFileDownload", function(done) {
checkSubServiceSuccessfulSave(pskl.app.fileDownloadStorageService, 'saveToFileDownload', done);
});
it("calls FileDownloadStorage#save in saveToFileDownload - error case", function(done) {
checkSubServiceFailedSave(pskl.app.fileDownloadStorageService, 'saveToFileDownload', done);
});
// LocalStorage
it("calls LocalStorage#save in saveToLocalStorage", function(done) {
checkSubServiceSuccessfulSave(pskl.app.localStorageService, 'saveToLocalStorage', done);
});
it("calls LocalStorage#save in saveToLocalStorage - error case", function(done) {
checkSubServiceFailedSave(pskl.app.localStorageService, 'saveToLocalStorage', done);
});
it("updates saving status properly", function(done) {
var deferred = Q.defer();
spyOn(pskl.app.galleryStorageService, 'save').and.returnValue(deferred.promise);
// check storageService is not in saving mode
expect(storageService.isSaving()).toBe(false);
// save
var storageServicePromise = storageService.saveToGallery(piskel);
// storageService is now in saving mode
expect(storageService.isSaving()).toBe(true);
// we have called save once
expect(pskl.app.galleryStorageService.save.calls.count()).toBe(1);
// call save again, should be ignored
storageService.saveToGallery(piskel);
expect(pskl.app.galleryStorageService.save.calls.count()).toBe(1);
deferred.resolve();
storageServicePromise.then(function () {
// after saving, isSaving() should be false again
expect(storageService.isSaving()).toBe(false);
done();
});
});
it("updates saving status on BEFORE_SAVING_PISKEL and AFTER_SAVING_PISKEL events", function() {
spyOn(pskl.app.galleryStorageService, 'save').and.returnValue(Q.resolve());
// check storageService is not in saving mode
expect(storageService.isSaving()).toBe(false);
// trigger before save event
$.publish(Events.BEFORE_SAVING_PISKEL);
expect(storageService.isSaving()).toBe(true);
// call save, should have been ignored
storageService.saveToGallery(piskel);
expect(pskl.app.galleryStorageService.save.calls.count()).toBe(0);
// trigger before save event
$.publish(Events.AFTER_SAVING_PISKEL);
expect(storageService.isSaving()).toBe(false);
});
});