|
|
|
@ -2,11 +2,10 @@ import LocalStorage from 'storage_manager/model/LocalStorage'; |
|
|
|
import RemoteStorage from 'storage_manager/model/RemoteStorage'; |
|
|
|
|
|
|
|
describe('LocalStorage', () => { |
|
|
|
var obj; |
|
|
|
var itemName = 'testItem'; |
|
|
|
var data = { |
|
|
|
let obj; |
|
|
|
let data = { |
|
|
|
item1: 'value1', |
|
|
|
item2: 'value2' |
|
|
|
item2: 'value2', |
|
|
|
}; |
|
|
|
|
|
|
|
beforeEach(() => { |
|
|
|
@ -17,141 +16,84 @@ describe('LocalStorage', () => { |
|
|
|
obj = null; |
|
|
|
}); |
|
|
|
|
|
|
|
test('Store and load items', () => { |
|
|
|
obj.store(data); |
|
|
|
var result = obj.load(['item1', 'item2']); |
|
|
|
test('Store and load items', async () => { |
|
|
|
await obj.store(data); |
|
|
|
const result = await obj.load(); |
|
|
|
expect(result).toEqual(data); |
|
|
|
}); |
|
|
|
|
|
|
|
test('Store, update and load items', () => { |
|
|
|
obj.store(data); |
|
|
|
obj.store({ item3: 'value3' }); |
|
|
|
obj.store({ item2: 'value22' }); |
|
|
|
var result = obj.load(['item1', 'item2', 'item3']); |
|
|
|
expect(result).toEqual({ |
|
|
|
item1: 'value1', |
|
|
|
item2: 'value22', |
|
|
|
item3: 'value3' |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
test('Remove items', () => { |
|
|
|
var items = ['item1', 'item2', 'item3']; |
|
|
|
obj.store(data); |
|
|
|
obj.remove(items); |
|
|
|
expect(obj.load(items)).toEqual({}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
describe('RemoteStorage', () => { |
|
|
|
var obj; |
|
|
|
var itemName = 'testItem'; |
|
|
|
var endpointStore = 'testStoreEndpoint'; |
|
|
|
var endpointLoad = 'testLoadEndpoint'; |
|
|
|
var params = { test: 'testValue' }; |
|
|
|
var storageOptions; |
|
|
|
var data; |
|
|
|
var mockResponse = (body = {}) => { |
|
|
|
let obj; |
|
|
|
let data; |
|
|
|
let defaultOpts = { |
|
|
|
urlStore: '/store', |
|
|
|
urlLoad: '/load', |
|
|
|
credentials: true, |
|
|
|
headers: { 'X-Requested-With': 'XMLHttpRequest' }, |
|
|
|
}; |
|
|
|
let mockResponse = (body = {}) => { |
|
|
|
return new window.Response(JSON.stringify(body), { |
|
|
|
status: 200, |
|
|
|
headers: { 'Content-type': 'application/json' } |
|
|
|
headers: { 'Content-type': 'application/json' }, |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
beforeEach(() => { |
|
|
|
data = { |
|
|
|
item1: 'value1', |
|
|
|
item2: 'value2' |
|
|
|
}; |
|
|
|
storageOptions = { |
|
|
|
urlStore: endpointStore, |
|
|
|
urlLoad: endpointLoad, |
|
|
|
params |
|
|
|
item2: 'value2', |
|
|
|
}; |
|
|
|
obj = new RemoteStorage(storageOptions); |
|
|
|
sinon |
|
|
|
.stub(obj, 'fetch') |
|
|
|
.returns(Promise.resolve(mockResponse({ data: 1 }))); |
|
|
|
obj = new RemoteStorage(); |
|
|
|
obj.request = jest.fn(() => Promise.resolve(mockResponse({ data: 1 }))); |
|
|
|
}); |
|
|
|
|
|
|
|
afterEach(() => { |
|
|
|
obj.fetch.restore(); |
|
|
|
obj.request.mockRestore(); |
|
|
|
obj = null; |
|
|
|
}); |
|
|
|
|
|
|
|
test('Store data', () => { |
|
|
|
obj.store(data); |
|
|
|
const callResult = obj.fetch; |
|
|
|
expect(callResult.called).toEqual(true); |
|
|
|
expect(callResult.firstCall.args[0]).toEqual(endpointStore); |
|
|
|
}); |
|
|
|
|
|
|
|
test('Load data', () => { |
|
|
|
obj.load(['item1', 'item2']); |
|
|
|
const callResult = obj.fetch; |
|
|
|
expect(callResult.called).toEqual(true); |
|
|
|
expect(callResult.firstCall.args[0]).toEqual(endpointLoad); |
|
|
|
}); |
|
|
|
|
|
|
|
test("Load data with credentials option as 'include' by default", () => { |
|
|
|
obj.load(['item1', 'item2']); |
|
|
|
const callResult = obj.fetch; |
|
|
|
expect(callResult.called).toEqual(true); |
|
|
|
expect(callResult.firstCall.args[1]).toMatchObject({ |
|
|
|
credentials: 'include' |
|
|
|
test('Store data', async () => { |
|
|
|
await obj.store(data, defaultOpts); |
|
|
|
const { calls } = obj.request.mock; |
|
|
|
expect(calls.length).toBe(1); |
|
|
|
expect(calls[0][0]).toBe(defaultOpts.urlStore); |
|
|
|
// expect(obj.request).toBeCalledWith(opts.urlStore, defaultOpts, opts);
|
|
|
|
const { body, ...args } = calls[0][1]; |
|
|
|
expect(args).toEqual({ |
|
|
|
method: 'POST', |
|
|
|
headers: defaultOpts.headers, |
|
|
|
credentials: defaultOpts.credentials, |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
test("Store data with credentials option as 'include' by default", () => { |
|
|
|
obj.store(data); |
|
|
|
const callResult = obj.fetch; |
|
|
|
expect(callResult.called).toEqual(true); |
|
|
|
expect(callResult.firstCall.args[1]).toMatchObject({ |
|
|
|
credentials: 'include' |
|
|
|
test('Load data', async () => { |
|
|
|
await obj.load(defaultOpts); |
|
|
|
const { calls } = obj.request.mock; |
|
|
|
expect(obj.request).toBeCalledTimes(1); |
|
|
|
expect(calls[0][0]).toBe(defaultOpts.urlLoad); |
|
|
|
expect(calls[0][1]).toEqual({ |
|
|
|
method: 'GET', |
|
|
|
body: undefined, |
|
|
|
headers: defaultOpts.headers, |
|
|
|
credentials: defaultOpts.credentials, |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
test('Store data with credentials option as false ', () => { |
|
|
|
obj = new RemoteStorage({ ...storageOptions, credentials: false }); |
|
|
|
sinon |
|
|
|
.stub(obj, 'fetch') |
|
|
|
.returns(Promise.resolve(mockResponse({ data: 1 }))); |
|
|
|
|
|
|
|
obj.store(data); |
|
|
|
const callResult = obj.fetch; |
|
|
|
expect(callResult.called).toEqual(true); |
|
|
|
expect(callResult.firstCall.args[1]).toMatchObject({ |
|
|
|
credentials: false |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
test('Load data with credentials option as false', () => { |
|
|
|
obj = new RemoteStorage({ ...storageOptions, credentials: false }); |
|
|
|
sinon |
|
|
|
.stub(obj, 'fetch') |
|
|
|
.returns(Promise.resolve(mockResponse({ data: 1 }))); |
|
|
|
obj.load(['item1', 'item2']); |
|
|
|
const callResult = obj.fetch; |
|
|
|
expect(callResult.called).toEqual(true); |
|
|
|
expect(callResult.firstCall.args[1]).toMatchObject({ |
|
|
|
credentials: false |
|
|
|
test('Load data with custom fetch options', async () => { |
|
|
|
const customOpts = { customOpt: 'customValue' }; |
|
|
|
await obj.load({ |
|
|
|
...defaultOpts, |
|
|
|
fetchOptions: () => customOpts, |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
test('Load data with custom fetch options as function', () => { |
|
|
|
const customOpts = { customOpt: 'customValue' }; |
|
|
|
obj = new RemoteStorage({ |
|
|
|
...storageOptions, |
|
|
|
fetchOptions: () => { |
|
|
|
return customOpts; |
|
|
|
} |
|
|
|
expect(obj.request).toBeCalledTimes(1); |
|
|
|
expect(obj.request.mock.calls[0][1]).toEqual({ |
|
|
|
method: 'GET', |
|
|
|
body: undefined, |
|
|
|
headers: defaultOpts.headers, |
|
|
|
credentials: defaultOpts.credentials, |
|
|
|
...customOpts, |
|
|
|
}); |
|
|
|
sinon |
|
|
|
.stub(obj, 'fetch') |
|
|
|
.returns(Promise.resolve(mockResponse({ data: 1 }))); |
|
|
|
obj.load(['item1', 'item2']); |
|
|
|
const callResult = obj.fetch; |
|
|
|
expect(callResult.called).toEqual(true); |
|
|
|
expect(callResult.firstCall.args[1]).toMatchObject(customOpts); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|