SafeJsonParse.test.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { vi, expect, describe, beforeEach, it } from 'vitest'
  2. const modulePath = '../../../app/js/SafeJsonParse'
  3. describe('SafeJsonParse', function () {
  4. beforeEach(async function (ctx) {
  5. vi.doMock('@overleaf/settings', () => ({
  6. default: (ctx.Settings = {
  7. maxUpdateSize: 16 * 1024,
  8. }),
  9. }))
  10. ctx.SafeJsonParse = (await import(modulePath)).default
  11. })
  12. describe('parse', function () {
  13. it('should parse documents correctly', async function (ctx) {
  14. await new Promise((resolve, reject) => {
  15. ctx.SafeJsonParse.parse('{"foo": "bar"}', (error, parsed) => {
  16. if (error) return reject(error)
  17. expect(parsed).to.deep.equal({ foo: 'bar' })
  18. resolve()
  19. })
  20. })
  21. })
  22. it('should return an error on bad data', async function (ctx) {
  23. await new Promise((resolve, reject) => {
  24. ctx.SafeJsonParse.parse('blah', (error, parsed) => {
  25. expect(error).to.exist
  26. resolve()
  27. })
  28. })
  29. })
  30. it('should return an error on oversized data', async function (ctx) {
  31. await new Promise((resolve, reject) => {
  32. // we have a 2k overhead on top of max size
  33. const bigBlob = Array(16 * 1024).join('A')
  34. const data = `{"foo": "${bigBlob}"}`
  35. ctx.Settings.maxUpdateSize = 2 * 1024
  36. ctx.SafeJsonParse.parse(data, (error, parsed) => {
  37. ctx.logger.error.called.should.equal(false)
  38. expect(error).to.exist
  39. resolve()
  40. })
  41. })
  42. })
  43. })
  44. })