overleaf/services/web/test/frontend/infrastructure/local-storage.test.js

89 lines
2.7 KiB
JavaScript
Raw Normal View History

import { expect } from 'chai'
import sinon from 'sinon'
import customLocalStorage from '../../../frontend/js/infrastructure/local-storage'
import { debugConsole } from '@/utils/debugging'
describe('localStorage', function () {
let originalLocalStorage
before(function () {
originalLocalStorage = global.localStorage
})
after(function () {
Object.defineProperty(global, 'localStorage', {
value: originalLocalStorage,
})
})
let spyOnDebugConsoleError
beforeEach(function () {
Object.defineProperty(global, 'localStorage', {
value: {
getItem: sinon.stub().returns(null),
setItem: sinon.stub(),
clear: sinon.stub(),
removeItem: sinon.stub(),
},
})
spyOnDebugConsoleError = sinon.spy(debugConsole, 'error')
})
afterEach(function () {
spyOnDebugConsoleError.restore()
Object.defineProperty(global, 'localStorage', { value: undefined })
})
it('getItem', function () {
expect(customLocalStorage.getItem('foo')).to.be.null
global.localStorage.getItem.returns('false')
expect(customLocalStorage.getItem('foo')).to.equal(false)
global.localStorage.getItem.returns('{"foo":"bar"}')
expect(customLocalStorage.getItem('foo')).to.deep.equal({ foo: 'bar' })
global.localStorage.getItem.throws(new Error('Nope'))
expect(customLocalStorage.getItem('foo')).to.be.null
expect(debugConsole.error).to.be.calledOnce
})
it('setItem', function () {
customLocalStorage.setItem('foo', 'bar')
expect(global.localStorage.setItem).to.be.calledOnceWith('foo', '"bar"')
global.localStorage.setItem.reset()
customLocalStorage.setItem('foo', true)
expect(global.localStorage.setItem).to.be.calledOnceWith('foo', 'true')
global.localStorage.setItem.reset()
customLocalStorage.setItem('foo', { bar: 1 })
expect(global.localStorage.setItem).to.be.calledOnceWith('foo', '{"bar":1}')
global.localStorage.setItem.reset()
global.localStorage.setItem.throws(new Error('Nope'))
expect(customLocalStorage.setItem('foo', 'bar')).to.be.null
expect(debugConsole.error).to.be.calledOnce
})
it('clear', function () {
customLocalStorage.clear()
expect(global.localStorage.clear).to.be.calledOnce
global.localStorage.clear.throws(new Error('Nope'))
expect(customLocalStorage.clear()).to.be.null
expect(debugConsole.error).to.be.calledOnce
})
it('removeItem', function () {
customLocalStorage.removeItem('foo')
expect(global.localStorage.removeItem).to.be.calledOnceWith('foo')
global.localStorage.removeItem.reset()
global.localStorage.removeItem.throws(new Error('Nope'))
expect(customLocalStorage.removeItem('foo')).to.be.null
expect(debugConsole.error).to.be.calledOnce
})
})