local-storage.test.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { expect } from 'chai'
  2. import sinon from 'sinon'
  3. import customLocalStorage from '@/infrastructure/local-storage'
  4. import { debugConsole } from '@/utils/debugging'
  5. describe('localStorage', function () {
  6. let originalLocalStorage
  7. before(function () {
  8. originalLocalStorage = global.localStorage
  9. })
  10. after(function () {
  11. Object.defineProperty(global, 'localStorage', {
  12. value: originalLocalStorage,
  13. })
  14. })
  15. let spyOnDebugConsoleError
  16. beforeEach(function () {
  17. Object.defineProperty(global, 'localStorage', {
  18. value: {
  19. getItem: sinon.stub().returns(null),
  20. setItem: sinon.stub(),
  21. clear: sinon.stub(),
  22. removeItem: sinon.stub(),
  23. },
  24. })
  25. spyOnDebugConsoleError = sinon.spy(debugConsole, 'error')
  26. })
  27. afterEach(function () {
  28. spyOnDebugConsoleError.restore()
  29. Object.defineProperty(global, 'localStorage', { value: undefined })
  30. })
  31. it('getItem', function () {
  32. expect(customLocalStorage.getItem('foo')).to.be.null
  33. global.localStorage.getItem.returns('false')
  34. expect(customLocalStorage.getItem('foo')).to.equal(false)
  35. global.localStorage.getItem.returns('{"foo":"bar"}')
  36. expect(customLocalStorage.getItem('foo')).to.deep.equal({ foo: 'bar' })
  37. global.localStorage.getItem.throws(new Error('Nope'))
  38. expect(customLocalStorage.getItem('foo')).to.be.null
  39. expect(debugConsole.error).to.be.calledOnce
  40. })
  41. it('setItem', function () {
  42. customLocalStorage.setItem('foo', 'bar')
  43. expect(global.localStorage.setItem).to.be.calledOnceWith('foo', '"bar"')
  44. global.localStorage.setItem.reset()
  45. customLocalStorage.setItem('foo', true)
  46. expect(global.localStorage.setItem).to.be.calledOnceWith('foo', 'true')
  47. global.localStorage.setItem.reset()
  48. customLocalStorage.setItem('foo', { bar: 1 })
  49. expect(global.localStorage.setItem).to.be.calledOnceWith('foo', '{"bar":1}')
  50. global.localStorage.setItem.reset()
  51. global.localStorage.setItem.throws(new Error('Nope'))
  52. expect(customLocalStorage.setItem('foo', 'bar')).to.be.null
  53. expect(debugConsole.error).to.be.calledOnce
  54. })
  55. it('clear', function () {
  56. customLocalStorage.clear()
  57. expect(global.localStorage.clear).to.be.calledOnce
  58. global.localStorage.clear.throws(new Error('Nope'))
  59. expect(customLocalStorage.clear()).to.be.null
  60. expect(debugConsole.error).to.be.calledOnce
  61. })
  62. it('removeItem', function () {
  63. customLocalStorage.removeItem('foo')
  64. expect(global.localStorage.removeItem).to.be.calledOnceWith('foo')
  65. global.localStorage.removeItem.reset()
  66. global.localStorage.removeItem.throws(new Error('Nope'))
  67. expect(customLocalStorage.removeItem('foo')).to.be.null
  68. expect(debugConsole.error).to.be.calledOnce
  69. })
  70. })