saven
Version:
442 lines (384 loc) • 14 kB
JavaScript
/* eslint-disable */
import Saven from '../index.js'
import mockConsole from 'jest-mock-console'
Saven.initNativeApi(Saven)
describe('storage', () => {
beforeEach(() => {
localStorage.clear()
})
describe('setStorage', () => {
test('options should be object', () => {
mockConsole()
expect.assertions(4)
return Promise.all([
Saven.setStorage()
.catch(err => {
const expectErrMsg = 'setStorage:fail parameter error: parameter should be Object instead of Undefined'
expect(console.error).toHaveBeenNthCalledWith(1, expectErrMsg)
expect(err.errMsg).toMatch(expectErrMsg)
}),
Saven.setStorage(null)
.catch(err => {
const expectErrMsg = 'setStorage:fail parameter error: parameter should be Object instead of Null'
expect(console.error).toHaveBeenNthCalledWith(2, expectErrMsg)
expect(err.errMsg).toMatch(expectErrMsg)
})
])
})
test('options.key should be string', () => {
mockConsole()
const success = jest.fn()
const fail = jest.fn()
const complete = jest.fn()
expect.assertions(7)
return Saven.setStorage({
success,
fail,
complete
})
.catch(err => {
const expectErrMsg = 'setStorage:fail parameter error: parameter.key should be String instead of Undefined'
expect(success.mock.calls.length).toBe(0)
expect(fail.mock.calls.length).toBe(1)
expect(fail.mock.calls[0][0]).toEqual({ errMsg: expectErrMsg })
expect(complete.mock.calls.length).toBe(1)
expect(complete.mock.calls[0][0]).toEqual({ errMsg: expectErrMsg })
expect(console.error).toHaveBeenCalledWith(expectErrMsg)
expect(err.errMsg).toMatch(expectErrMsg)
})
})
test('should save to localStorage', () => {
const key = 'foo'
const data = 'bar'
const success = jest.fn()
const fail = jest.fn()
const complete = jest.fn()
expect.assertions(7)
return Saven.setStorage({
key,
data,
success,
fail,
complete
})
.then(res => {
const expectMsg = 'setStorage:ok'
const expectData = JSON.stringify({ data })
expect(success.mock.calls.length).toBe(1)
expect(success.mock.calls[0][0]).toEqual({ errMsg: expectMsg })
expect(fail.mock.calls.length).toBe(0)
expect(complete.mock.calls.length).toBe(1)
expect(complete.mock.calls[0][0]).toEqual({ errMsg: expectMsg })
expect(res.errMsg).toMatch(expectMsg)
expect(localStorage.__STORE__[key]).toBe(expectData)
})
})
})
describe('setStorageSync', () => {
test('key should be a string', () => {
mockConsole()
Saven.setStorageSync()
const expectErrMsg = 'setStorage:fail parameter error: parameter should be String instead of Undefined'
expect(console.error).toHaveBeenCalledWith(expectErrMsg)
})
test('should data default to a empty string', () => {
const key = 'foo'
Saven.setStorageSync(key)
const expectData = JSON.stringify({ data: '' })
expect(localStorage.__STORE__[key]).toBe(expectData)
})
test('should save to localStorage', () => {
const key = 'foo'
const data = {
env: 'h5',
mixArr: [1, { bar: '_bar' }, 'test'],
obj: {
xyz: '_xyz'
}
}
Saven.setStorageSync(key, data)
const expectData = JSON.stringify({ data })
expect(localStorage.__STORE__[key]).toBe(expectData)
})
})
describe('getStorage', () => {
test('options should be object', () => {
mockConsole()
expect.assertions(4)
return Promise.all([
Saven.getStorage()
.catch(err => {
const expectErrMsg = 'getStorage:fail parameter error: parameter should be Object instead of Undefined'
expect(console.error).toHaveBeenNthCalledWith(1, expectErrMsg)
expect(err.errMsg).toMatch(expectErrMsg)
}),
Saven.getStorage(null)
.catch(err => {
const expectErrMsg = 'getStorage:fail parameter error: parameter should be Object instead of Null'
expect(console.error).toHaveBeenNthCalledWith(2, expectErrMsg)
expect(err.errMsg).toMatch(expectErrMsg)
})
])
})
test('options.key should be string', () => {
mockConsole()
const success = jest.fn()
const fail = jest.fn()
const complete = jest.fn()
expect.assertions(7)
return Saven.getStorage({
success,
fail,
complete
})
.catch(err => {
const expectErrMsg = 'getStorage:fail parameter error: parameter.key should be String instead of Undefined'
expect(success.mock.calls.length).toBe(0)
expect(fail.mock.calls.length).toBe(1)
expect(fail.mock.calls[0][0]).toEqual({ errMsg: expectErrMsg })
expect(complete.mock.calls.length).toBe(1)
expect(complete.mock.calls[0][0]).toEqual({ errMsg: expectErrMsg })
expect(console.error).toHaveBeenCalledWith(expectErrMsg)
expect(err.errMsg).toMatch(expectErrMsg)
})
})
test('should not contain data when no found in storage', () => {
const success = jest.fn()
const fail = jest.fn()
const complete = jest.fn()
expect.assertions(6)
return Saven.getStorage({
key: 'test',
success,
fail,
complete
})
.catch(err => {
const expectObj = { errMsg: 'getStorage:fail data not found' }
expect(success.mock.calls.length).toBe(0)
expect(fail.mock.calls.length).toBe(1)
expect(fail.mock.calls[0][0]).toEqual({ errMsg: expectObj.errMsg })
expect(complete.mock.calls.length).toBe(1)
expect(complete.mock.calls[0][0]).toEqual({ errMsg: expectObj.errMsg })
expect(err).toEqual(expectObj)
})
})
test('should not contain data when data is not stored by Saven Storage Api', () => {
localStorage.setItem('test', 'xxx')
expect.assertions(1)
return Saven.getStorage({ key: 'test' })
.catch(err => {
expect(err).toEqual({ errMsg: 'getStorage:fail data not found' })
})
})
test('should get from localStorage', () => {
const key = 'foo'
const data = 'bar'
const success = jest.fn()
const fail = jest.fn()
const complete = jest.fn()
Saven.setStorageSync(key, data)
expect.assertions(6)
return Saven.getStorage({
key,
success,
fail,
complete
})
.then(res => {
const expectObj = { errMsg: 'getStorage:ok', data }
expect(success.mock.calls.length).toBe(1)
expect(success.mock.calls[0][0]).toEqual(expectObj)
expect(fail.mock.calls.length).toBe(0)
expect(complete.mock.calls.length).toBe(1)
expect(complete.mock.calls[0][0]).toEqual(expectObj)
expect(res).toEqual(expectObj)
})
})
})
describe('getStorageSync', () => {
test('key should be a string', () => {
mockConsole()
const res = Saven.getStorageSync(1)
const expectErrMsg = 'getStorage:fail parameter error: parameter should be String instead of Number'
expect(console.error).toHaveBeenCalledWith(expectErrMsg)
expect(res).toBe(undefined)
})
test('should return a number', () => {
const key = 'test'
const data = 100
Saven.setStorageSync(key, data)
expect(Saven.getStorageSync(key)).toBe(data)
})
test('should return a string', () => {
const key = 'test'
const data = 'xyz'
Saven.setStorageSync(key, data)
expect(Saven.getStorageSync(key)).toBe(data)
})
test('should return a boolean', () => {
const key = 'test'
const data = true
Saven.setStorageSync(key, data)
expect(Saven.getStorageSync(key)).toBe(data)
})
test('should return a null', () => {
const key = 'test'
const data = null
Saven.setStorageSync(key, data)
expect(Saven.getStorageSync(key)).toBe(data)
})
test('should return a string when stored data is undefined', () => {
const key = 'test'
Saven.setStorageSync(key)
expect(Saven.getStorageSync(key)).toBe('')
})
test('should return a object', () => {
const key = 'test'
const data = {
env: 'h5',
mixArr: [1, { bar: '_bar' }, 'test'],
obj: {
xyz: '_xyz'
}
}
Saven.setStorageSync(key, data)
expect(Saven.getStorageSync(key)).toEqual(data)
})
test('should return a empty string', () => {
const key = 'test'
const data = Symbol()
Saven.setStorageSync(key, data)
expect(Saven.getStorageSync(key)).toBe('')
})
test('should not contain data when no found in storage', () => {
expect(Saven.getStorageSync('test')).toBe('')
})
test('should not contain data when data is not stored by Saven Storage Api', () => {
localStorage.setItem('test', 'xxx')
expect(Saven.getStorageSync('test')).toBe('')
})
})
describe('getStorageInfo', () => {
test('should resolve storage info', () => {
const success = jest.fn()
const complete = jest.fn()
Saven.setStorageSync('foo', 1)
Saven.setStorageSync('bar', 2)
expect.assertions(8)
return Saven.getStorageInfo({ success, complete })
.then(res => {
const { keys, limitSize, currentSize, errMsg } = res
expect(keys).toEqual(['foo', 'bar'])
expect(limitSize).toBeNull()
expect(currentSize).toBeNull()
expect(errMsg).toMatch('getStorageInfo:ok')
expect(success.mock.calls.length).toBe(1)
expect(success.mock.calls[0][0]).toEqual(res)
expect(complete.mock.calls.length).toBe(1)
expect(complete.mock.calls[0][0]).toEqual(res)
})
})
})
describe('getStorageInfoSync', () => {
test('should return storage info', () => {
Saven.setStorageSync('foo', 1)
Saven.setStorageSync('bar', 2)
const res = Saven.getStorageInfoSync()
const { keys, limitSize, currentSize } = res
expect(keys).toEqual(['foo', 'bar'])
expect(limitSize).toBeNull()
expect(currentSize).toBeNull()
})
})
describe('removeStorage', () => {
test('options should be object', () => {
mockConsole()
expect.assertions(4)
return Promise.all([
Saven.removeStorage()
.catch(err => {
const expectErrMsg = 'removeStorage:fail parameter error: parameter should be Object instead of Undefined'
expect(console.error).toHaveBeenNthCalledWith(1, expectErrMsg)
expect(err.errMsg).toMatch(expectErrMsg)
}),
Saven.removeStorage(null)
.catch(err => {
const expectErrMsg = 'removeStorage:fail parameter error: parameter should be Object instead of Null'
expect(console.error).toHaveBeenNthCalledWith(2, expectErrMsg)
expect(err.errMsg).toMatch(expectErrMsg)
})
])
})
test('options.key should be string', () => {
mockConsole()
const success = jest.fn()
const fail = jest.fn()
const complete = jest.fn()
expect.assertions(7)
return Saven.removeStorage({
success,
fail,
complete
})
.catch(err => {
const expectErrMsg = 'removeStorage:fail parameter error: parameter.key should be String instead of Undefined'
expect(success.mock.calls.length).toBe(0)
expect(fail.mock.calls.length).toBe(1)
expect(fail.mock.calls[0][0]).toEqual({ errMsg: expectErrMsg })
expect(complete.mock.calls.length).toBe(1)
expect(complete.mock.calls[0][0]).toEqual({ errMsg: expectErrMsg })
expect(console.error).toHaveBeenCalledWith(expectErrMsg)
expect(err.errMsg).toMatch(expectErrMsg)
})
})
test('should remove storage successfully', () => {
const key = 'foo'
const data = 'bar'
const success = jest.fn()
const complete = jest.fn()
localStorage.setItem(key, data)
expect.assertions(7)
return Saven.removeStorage({
key,
success,
complete
})
.then(res => {
const expectObj = { errMsg: 'removeStorage:ok' }
expect(localStorage.removeItem).toHaveBeenLastCalledWith(key)
expect(localStorage.__STORE__[key]).toBeUndefined()
expect(success.mock.calls.length).toBe(1)
expect(success.mock.calls[0][0]).toEqual(expectObj)
expect(complete.mock.calls.length).toBe(1)
expect(complete.mock.calls[0][0]).toEqual(expectObj)
expect(res).toEqual(expectObj)
})
})
})
describe('removeStorageSync', () => {
test('key should be a string', () => {
mockConsole()
Saven.removeStorageSync()
const expectErrMsg = 'removeStorage:fail parameter error: parameter should be String instead of Undefined'
expect(console.error).toHaveBeenCalledWith(expectErrMsg)
})
test('should remove storage successfully', () => {
const key = 'foo'
const data = 'bar'
localStorage.setItem(key, data)
Saven.removeStorageSync(key)
expect(localStorage.removeItem).toHaveBeenLastCalledWith(key)
expect(localStorage.__STORE__[key]).toBeUndefined()
})
})
describe('clearStorage', () => {
test('', () => {
Saven.setStorageSync('foo', 1)
Saven.setStorageSync('bar', 2)
Saven.clearStorage()
expect(localStorage.clear).toHaveBeenCalled()
expect(Object.keys(localStorage.__STORE__).length).toBe(0)
})
})
})