BackFillUsersAnalyticsId.mjs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { expect } from 'chai'
  2. import { db, ObjectId } from '../../../app/src/infrastructure/mongodb.mjs'
  3. import { exec } from 'node:child_process'
  4. describe('BackFillUsersAnalyticsId', function () {
  5. beforeEach('insert data', async function () {
  6. await db.users.insertMany([
  7. {
  8. _id: new ObjectId('50e434d90000000000000000'),
  9. email: 'foo0@bar.com',
  10. },
  11. {
  12. _id: new ObjectId('50e434d90000000000000001'),
  13. email: 'foo1@bar.com',
  14. },
  15. {
  16. _id: new ObjectId('50e434d90000000000000002'),
  17. analyticsId: '32dc5866-1451-4209-ba9d-23e96caafecd',
  18. email: 'foo2@bar.com',
  19. },
  20. {
  21. _id: new ObjectId('50e434d90000000000000003'),
  22. analyticsId: '32dc5866-1451-4209-ba9d-23e96caafecf',
  23. email: 'foo3@bar.com',
  24. },
  25. ])
  26. })
  27. beforeEach('run migration', function (done) {
  28. exec(
  29. 'cd ../../tools/migrations && yarn run migrations migrate -t saas --force 20260424120000_back_fill_users_analyticsId',
  30. done
  31. )
  32. })
  33. it('should update the users', async function () {
  34. expect(
  35. await db.users
  36. .find({}, { projection: { _id: 1, email: 1, analyticsId: 1 } })
  37. .toArray()
  38. ).to.deep.equal([
  39. {
  40. _id: new ObjectId('50e434d90000000000000000'),
  41. analyticsId: '50e434d90000000000000000',
  42. email: 'foo0@bar.com',
  43. },
  44. {
  45. _id: new ObjectId('50e434d90000000000000001'),
  46. analyticsId: '50e434d90000000000000001',
  47. email: 'foo1@bar.com',
  48. },
  49. {
  50. _id: new ObjectId('50e434d90000000000000002'),
  51. analyticsId: '32dc5866-1451-4209-ba9d-23e96caafecd',
  52. email: 'foo2@bar.com',
  53. },
  54. {
  55. _id: new ObjectId('50e434d90000000000000003'),
  56. analyticsId: '32dc5866-1451-4209-ba9d-23e96caafecf',
  57. email: 'foo3@bar.com',
  58. },
  59. ])
  60. })
  61. describe('after rolling back', function () {
  62. beforeEach(function (done) {
  63. exec(
  64. 'cd ../../tools/migrations && yarn run migrations rollback -t saas --force 20260424120000_back_fill_users_analyticsId',
  65. done
  66. )
  67. })
  68. it('should update the users and roll back', async function () {
  69. expect(
  70. await db.users
  71. .find({}, { projection: { _id: 1, email: 1, analyticsId: 1 } })
  72. .toArray()
  73. ).to.deep.equal([
  74. {
  75. _id: new ObjectId('50e434d90000000000000000'),
  76. email: 'foo0@bar.com',
  77. },
  78. {
  79. _id: new ObjectId('50e434d90000000000000001'),
  80. email: 'foo1@bar.com',
  81. },
  82. {
  83. _id: new ObjectId('50e434d90000000000000002'),
  84. analyticsId: '32dc5866-1451-4209-ba9d-23e96caafecd',
  85. email: 'foo2@bar.com',
  86. },
  87. {
  88. _id: new ObjectId('50e434d90000000000000003'),
  89. analyticsId: '32dc5866-1451-4209-ba9d-23e96caafecf',
  90. email: 'foo3@bar.com',
  91. },
  92. ])
  93. })
  94. })
  95. })