BackFillDocRevTests.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. const { db, ObjectId } = require('../../../app/src/infrastructure/mongodb')
  2. const { promisify } = require('util')
  3. const { exec } = require('child_process')
  4. const logger = require('@overleaf/logger/logging-manager')
  5. const { expect } = require('chai')
  6. describe('BackFillDocRevTests', function () {
  7. const docId1 = ObjectId.createFromTime(1)
  8. const docId2 = ObjectId.createFromTime(2)
  9. const docId3 = ObjectId.createFromTime(3)
  10. beforeEach('insert docs', async function () {
  11. await db.docs.insertMany([
  12. { _id: docId1, deleted: true },
  13. { _id: docId2 },
  14. { _id: docId3, rev: 42 },
  15. ])
  16. })
  17. async function runScript(dryRun) {
  18. let result
  19. try {
  20. result = await promisify(exec)(
  21. ['node', 'scripts/back_fill_doc_rev', dryRun].join(' ')
  22. )
  23. } catch (error) {
  24. // dump details like exit code, stdErr and stdOut
  25. logger.error({ error }, 'script failed')
  26. throw error
  27. }
  28. const { stdout: stdOut, stderr: stdErr } = result
  29. expect(stdOut).to.include('rev missing 2 | deleted=true 1')
  30. expect(stdErr).to.include(`Completed batch ending ${docId2}`)
  31. }
  32. describe('dry-run=true', function () {
  33. beforeEach('run script', async function () {
  34. await runScript('--dry-run=true')
  35. })
  36. it('should not back fill the rev', async function () {
  37. const docs = await db.docs.find({}, { $sort: { _id: 1 } }).toArray()
  38. expect(docs).to.deep.equal([
  39. { _id: docId1, deleted: true },
  40. { _id: docId2 },
  41. { _id: docId3, rev: 42 },
  42. ])
  43. })
  44. })
  45. describe('dry-run=false', function () {
  46. beforeEach('run script', async function () {
  47. await runScript('--dry-run=false')
  48. })
  49. it('should back fill the rev', async function () {
  50. const docs = await db.docs.find({}, { $sort: { _id: 1 } }).toArray()
  51. expect(docs).to.deep.equal([
  52. { _id: docId1, rev: 1, deleted: true },
  53. { _id: docId2, rev: 1 },
  54. { _id: docId3, rev: 42 },
  55. ])
  56. })
  57. })
  58. })