20210913153942-migrate-slack-app-integration-schema.integ.ts 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import type { Collection } from 'mongodb';
  2. import * as mongoose from 'mongoose';
  3. describe('migrate-slack-app-integration-schema', () => {
  4. let collection: Collection;
  5. // biome-ignore lint/suspicious/noExplicitAny: ignore
  6. let migrate: any;
  7. beforeAll(async () => {
  8. // Use dynamic import for ESM/CJS interop - Vitest handles the mixed syntax
  9. const migrateModule = await import(
  10. './20210913153942-migrate-slack-app-integration-schema.js'
  11. );
  12. migrate = migrateModule.default || migrateModule;
  13. collection = mongoose.connection.collection('slackappintegrations');
  14. await collection.insertMany([
  15. {
  16. tokenGtoP: 'tokenGtoP1',
  17. tokenPtoG: 'tokenPtoG1',
  18. permissionsForBroadcastUseCommands: { foo: true },
  19. permissionsForSingleUseCommands: { bar: true },
  20. },
  21. {
  22. tokenGtoP: 'tokenGtoP2',
  23. tokenPtoG: 'tokenPtoG2',
  24. supportedCommandsForBroadcastUse: ['foo'],
  25. supportedCommandsForSingleUse: ['bar'],
  26. },
  27. {
  28. tokenGtoP: 'tokenGtoP3',
  29. tokenPtoG: 'tokenPtoG3',
  30. },
  31. ]);
  32. });
  33. test('up is applied successfully', async () => {
  34. // setup
  35. const doc1 = await collection.findOne({ tokenGtoP: 'tokenGtoP1' });
  36. const doc2 = await collection.findOne({ tokenGtoP: 'tokenGtoP2' });
  37. const doc3 = await collection.findOne({ tokenGtoP: 'tokenGtoP3' });
  38. expect(doc1 != null).toBeTruthy();
  39. expect(doc2 != null).toBeTruthy();
  40. expect(doc3 != null).toBeTruthy();
  41. expect(doc1).toStrictEqual({
  42. _id: doc1?._id,
  43. tokenGtoP: 'tokenGtoP1',
  44. tokenPtoG: 'tokenPtoG1',
  45. permissionsForBroadcastUseCommands: {
  46. foo: true,
  47. },
  48. permissionsForSingleUseCommands: {
  49. bar: true,
  50. },
  51. });
  52. expect(doc2).toStrictEqual({
  53. _id: doc2?._id,
  54. tokenGtoP: 'tokenGtoP2',
  55. tokenPtoG: 'tokenPtoG2',
  56. supportedCommandsForBroadcastUse: ['foo'],
  57. supportedCommandsForSingleUse: ['bar'],
  58. });
  59. expect(doc3).toStrictEqual({
  60. _id: doc3?._id,
  61. tokenGtoP: 'tokenGtoP3',
  62. tokenPtoG: 'tokenPtoG3',
  63. });
  64. // when
  65. await migrate.up(mongoose.connection.db);
  66. // then
  67. const fixedDoc1 = await collection.findOne({ tokenGtoP: 'tokenGtoP1' });
  68. const fixedDoc2 = await collection.findOne({ tokenGtoP: 'tokenGtoP2' });
  69. const fixedDoc3 = await collection.findOne({ tokenGtoP: 'tokenGtoP3' });
  70. expect(fixedDoc1 != null).toBeTruthy();
  71. expect(fixedDoc2 != null).toBeTruthy();
  72. expect(fixedDoc3 != null).toBeTruthy();
  73. expect(fixedDoc1?.supportedCommandsForBroadcastUse).toBeUndefined();
  74. expect(fixedDoc1?.supportedCommandsForSingleUse).toBeUndefined();
  75. expect(fixedDoc2?.supportedCommandsForBroadcastUse).toBeUndefined();
  76. expect(fixedDoc2?.supportedCommandsForSingleUse).toBeUndefined();
  77. expect(fixedDoc3?.supportedCommandsForBroadcastUse).toBeUndefined();
  78. expect(fixedDoc3?.supportedCommandsForSingleUse).toBeUndefined();
  79. expect(fixedDoc1).toStrictEqual({
  80. _id: doc1?._id,
  81. tokenGtoP: 'tokenGtoP1',
  82. tokenPtoG: 'tokenPtoG1',
  83. permissionsForBroadcastUseCommands: {
  84. foo: true,
  85. search: false,
  86. },
  87. permissionsForSingleUseCommands: {
  88. bar: true,
  89. note: false,
  90. keep: false,
  91. },
  92. });
  93. expect(fixedDoc2).toStrictEqual({
  94. _id: doc2?._id,
  95. tokenGtoP: 'tokenGtoP2',
  96. tokenPtoG: 'tokenPtoG2',
  97. permissionsForBroadcastUseCommands: {
  98. foo: true,
  99. search: false,
  100. },
  101. permissionsForSingleUseCommands: {
  102. bar: true,
  103. note: false,
  104. keep: false,
  105. },
  106. });
  107. expect(fixedDoc3).toStrictEqual({
  108. _id: doc3?._id,
  109. tokenGtoP: 'tokenGtoP3',
  110. tokenPtoG: 'tokenPtoG3',
  111. permissionsForBroadcastUseCommands: {
  112. search: true,
  113. },
  114. permissionsForSingleUseCommands: {
  115. note: true,
  116. keep: true,
  117. },
  118. });
  119. });
  120. });