20210913153942-migrate-slack-app-integration-schema.test.ts 3.6 KB

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