local-storage.test.js 2.6 KB

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