UNPKG

superdata

Version:

A lightweight data layer module motivated by extjs' data layer. It can be used with any client-side framework.

177 lines (148 loc) 6.03 kB
var localStorageProxyCore = require("../../src/proxy/localStorageCore"); describe("localStorage proxy", function() { describe("with missing dependecies", function() { it("should throw error if dependencies.createMemoryProxy is missing", function() { expect(function() { localStorageProxyCore({ storage: {} }); }).toThrowError("dependencies.createMemoryProxy is mandatory!"); }); it("should throw error if dependencies.storage is missing", function() { expect(function() { localStorageProxyCore({ createMemoryProxy: {} }); }).toThrowError("dependencies.storage is mandatory!"); }); }); describe("creator function", function() { var createLocalStorageProxy; var localStorageProxy; var proxyConf = { idProperty: "id", idType: "number", proxyName: "testName", generateId: (function() { var nextId = 0; return function() { return nextId += 1; }; }()) }; var mockMemoryInterface = { idProperty: "id", generateId: function() {}, read: function(options, cb) { cb(null, {}); }, createOne: function() {}, readOneById: function() {}, patchOneById: function() {}, updateOneById: function() {}, destroyOneById: function() {} }; var mockStorageInterface = { getItem: function() { return JSON.stringify({ items: [] }); }, setItem: function() {} }; beforeEach(function() { spyOn(mockMemoryInterface, "generateId").and.callThrough(); spyOn(mockMemoryInterface, "read").and.callThrough(); spyOn(mockMemoryInterface, "createOne").and.callThrough(); spyOn(mockMemoryInterface, "readOneById").and.callThrough(); spyOn(mockMemoryInterface, "updateOneById").and.callThrough(); spyOn(mockMemoryInterface, "patchOneById").and.callThrough(); spyOn(mockMemoryInterface, "destroyOneById").and.callThrough(); spyOn(mockStorageInterface, "getItem").and.callThrough(); spyOn(mockStorageInterface, "setItem").and.callThrough(); var dependencies = { createMemoryProxy: function() { return { idProperty: mockMemoryInterface.idProperty, generateId: mockMemoryInterface.generateId, read: mockMemoryInterface.read, createOne: mockMemoryInterface.createOne, readOneById: mockMemoryInterface.readOneById, updateOneById: mockMemoryInterface.updateOneById, patchOneById: mockMemoryInterface.patchOneById, destroyOneById: mockMemoryInterface.destroyOneById }; }, storage: { getItem: mockStorageInterface.getItem, setItem: mockStorageInterface.setItem } }; createLocalStorageProxy = localStorageProxyCore(dependencies); localStorageProxy = createLocalStorageProxy(proxyConf); }); it("interface", function() { expect(typeof localStorageProxy.idProperty).toBe("string"); expect(typeof localStorageProxy.generateId).toBe("function"); expect(typeof localStorageProxy.read).toBe("function"); expect(typeof localStorageProxy.createOne).toBe("function"); expect(typeof localStorageProxy.readOneById).toBe("function"); expect(typeof localStorageProxy.updateOneById).toBe("function"); expect(typeof localStorageProxy.patchOneById).toBe("function"); expect(typeof localStorageProxy.destroyOneById).toBe("function"); }); it("read", function() { localStorageProxy.read({}, function() {}); expect(mockMemoryInterface.read).toHaveBeenCalled(); }); it("createOne", function() { localStorageProxy.createOne(); expect(mockMemoryInterface.createOne).toHaveBeenCalled(); expect(mockMemoryInterface.read).toHaveBeenCalled(); expect(mockStorageInterface.setItem).toHaveBeenCalled(); expect(mockMemoryInterface.readOneById).not.toHaveBeenCalled(); expect(mockMemoryInterface.updateOneById).not.toHaveBeenCalled(); expect(mockMemoryInterface.patchOneById).not.toHaveBeenCalled(); expect(mockMemoryInterface.destroyOneById).not.toHaveBeenCalled(); }); it("readOneById", function() { localStorageProxy.readOneById(); expect(mockMemoryInterface.readOneById).toHaveBeenCalled(); expect(mockMemoryInterface.read).not.toHaveBeenCalled(); expect(mockMemoryInterface.createOne).not.toHaveBeenCalled(); expect(mockMemoryInterface.updateOneById).not.toHaveBeenCalled(); expect(mockMemoryInterface.patchOneById).not.toHaveBeenCalled(); expect(mockMemoryInterface.destroyOneById).not.toHaveBeenCalled(); expect(mockStorageInterface.setItem).not.toHaveBeenCalled(); }); it("updateOneById", function() { localStorageProxy.updateOneById(); expect(mockMemoryInterface.updateOneById).toHaveBeenCalled(); expect(mockMemoryInterface.read).toHaveBeenCalled(); expect(mockStorageInterface.setItem).toHaveBeenCalled(); expect(mockMemoryInterface.patchOneById).not.toHaveBeenCalled(); expect(mockMemoryInterface.readOneById).not.toHaveBeenCalled(); expect(mockMemoryInterface.createOne).not.toHaveBeenCalled(); expect(mockMemoryInterface.destroyOneById).not.toHaveBeenCalled(); }); it("patchOneById", function() { localStorageProxy.patchOneById(); expect(mockMemoryInterface.patchOneById).toHaveBeenCalled(); expect(mockMemoryInterface.read).toHaveBeenCalled(); expect(mockStorageInterface.setItem).toHaveBeenCalled(); expect(mockMemoryInterface.updateOneById).not.toHaveBeenCalled(); expect(mockMemoryInterface.readOneById).not.toHaveBeenCalled(); expect(mockMemoryInterface.createOne).not.toHaveBeenCalled(); expect(mockMemoryInterface.destroyOneById).not.toHaveBeenCalled(); }); it("destroyOneById", function() { localStorageProxy.destroyOneById(); expect(mockMemoryInterface.destroyOneById).toHaveBeenCalled(); expect(mockMemoryInterface.read).toHaveBeenCalled(); expect(mockStorageInterface.setItem).toHaveBeenCalled(); expect(mockMemoryInterface.readOneById).not.toHaveBeenCalled(); expect(mockMemoryInterface.updateOneById).not.toHaveBeenCalled(); expect(mockMemoryInterface.createOne).not.toHaveBeenCalled(); }); }); });