ConvertArchivedState.mjs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. import { expect } from 'chai'
  2. import { exec } from 'child_process'
  3. import mongodb from 'mongodb-legacy'
  4. import UserHelper from './helpers/User.js'
  5. const User = UserHelper.promises
  6. const ObjectId = mongodb.ObjectId
  7. describe('ConvertArchivedState', function () {
  8. let userOne, userTwo, userThree, userFour
  9. let projectOne, projectOneId
  10. let projectTwo, projectTwoId
  11. let projectThree, projectThreeId
  12. let projectFour, projectFourId
  13. let projectIdTrashed
  14. let projectIdNotTrashed
  15. let projectIdArchivedAndTrashed
  16. let projectIdNotArchivedNotTrashed
  17. beforeEach(async function () {
  18. userOne = new User()
  19. userTwo = new User()
  20. userThree = new User()
  21. userFour = new User()
  22. await userOne.login()
  23. await userTwo.login()
  24. await userThree.login()
  25. await userFour.login()
  26. projectOneId = await userOne.createProject('old-archived-1', {
  27. template: 'blank',
  28. })
  29. projectOne = await userOne.getProject(projectOneId)
  30. projectOne.archived = true
  31. projectOne.collaberator_refs.push(userTwo._id)
  32. projectOne.tokenAccessReadOnly_refs.push(userThree._id)
  33. await userOne.saveProject(projectOne)
  34. projectTwoId = await userOne.createProject('old-archived-2', {
  35. template: 'blank',
  36. })
  37. projectTwo = await userOne.getProject(projectTwoId)
  38. projectTwo.archived = true
  39. projectTwo.tokenAccessReadAndWrite_refs.push(userThree._id)
  40. projectTwo.tokenAccessReadOnly_refs.push(userFour._id)
  41. await userOne.saveProject(projectTwo)
  42. projectThreeId = await userOne.createProject('already-new-archived', {
  43. template: 'blank',
  44. })
  45. projectThree = await userOne.getProject(projectThreeId)
  46. projectThree.archived = [
  47. new ObjectId(userOne._id),
  48. new ObjectId(userTwo._id),
  49. new ObjectId(userFour._id),
  50. ]
  51. projectThree.collaberator_refs.push(userTwo._id)
  52. projectThree.tokenAccessReadOnly_refs.push(userFour._id)
  53. await userOne.saveProject(projectThree)
  54. projectFourId = await userOne.createProject('not-archived', {
  55. template: 'blank',
  56. })
  57. projectFour = await userOne.getProject(projectFourId)
  58. projectFour.archived = false
  59. await userOne.saveProject(projectFour)
  60. projectIdTrashed = await userOne.createProject('trashed', {
  61. template: 'blank',
  62. })
  63. {
  64. const p = await userOne.getProject(projectIdTrashed)
  65. p.trashed = true
  66. p.collaberator_refs.push(userTwo._id)
  67. await userOne.saveProject(p)
  68. }
  69. projectIdNotTrashed = await userOne.createProject('not-trashed', {
  70. template: 'blank',
  71. })
  72. {
  73. const p = await userOne.getProject(projectIdNotTrashed)
  74. p.trashed = false
  75. p.collaberator_refs.push(userTwo._id)
  76. await userOne.saveProject(p)
  77. }
  78. projectIdArchivedAndTrashed = await userOne.createProject('not-trashed', {
  79. template: 'blank',
  80. })
  81. {
  82. const p = await userOne.getProject(projectIdArchivedAndTrashed)
  83. p.archived = true
  84. p.trashed = true
  85. p.collaberator_refs.push(userTwo._id)
  86. await userOne.saveProject(p)
  87. }
  88. projectIdNotArchivedNotTrashed = await userOne.createProject(
  89. 'not-archived,not-trashed',
  90. {
  91. template: 'blank',
  92. }
  93. )
  94. {
  95. const p = await userOne.getProject(projectIdNotArchivedNotTrashed)
  96. p.archived = false
  97. p.trashed = false
  98. p.collaberator_refs.push(userTwo._id)
  99. await userOne.saveProject(p)
  100. }
  101. })
  102. beforeEach(function (done) {
  103. exec(
  104. 'CONNECT_DELAY=1 node scripts/convert_archived_state.mjs FIRST,SECOND',
  105. error => {
  106. if (error) {
  107. return done(error)
  108. }
  109. done()
  110. }
  111. )
  112. })
  113. describe('main method', function () {
  114. it('should change a project archived boolean to an array', async function () {
  115. projectOne = await userOne.getProject(projectOneId)
  116. projectTwo = await userOne.getProject(projectTwoId)
  117. expect(convertObjectIdsToStrings(projectOne.archived)).to.deep.equal([
  118. userOne._id,
  119. userTwo._id,
  120. userThree._id,
  121. ])
  122. expect(convertObjectIdsToStrings(projectTwo.archived)).to.deep.equal([
  123. userOne._id,
  124. userThree._id,
  125. userFour._id,
  126. ])
  127. expect(projectTwo.trashed).to.deep.equal([])
  128. })
  129. it('should not change the value of a project already archived with an array', async function () {
  130. projectThree = await userOne.getProject(projectThreeId)
  131. expect(convertObjectIdsToStrings(projectThree.archived)).to.deep.equal([
  132. userOne._id,
  133. userTwo._id,
  134. userFour._id,
  135. ])
  136. expect(projectThree.trashed).to.deep.equal([])
  137. })
  138. it('should change a none-archived project with a boolean value to an array', async function () {
  139. projectFour = await userOne.getProject(projectFourId)
  140. expect(convertObjectIdsToStrings(projectFour.archived)).to.deep.equal([])
  141. expect(projectFour.trashed).to.deep.equal([])
  142. })
  143. it('should change a archived and trashed project with a boolean value to an array', async function () {
  144. const p = await userOne.getProject(projectIdArchivedAndTrashed)
  145. expect(convertObjectIdsToStrings(p.archived)).to.deep.equal([
  146. userOne._id,
  147. userTwo._id,
  148. ])
  149. expect(convertObjectIdsToStrings(p.trashed)).to.deep.equal([
  150. userOne._id,
  151. userTwo._id,
  152. ])
  153. })
  154. it('should change a trashed project with a boolean value to an array', async function () {
  155. const p = await userOne.getProject(projectIdTrashed)
  156. expect(p.archived).to.not.exist
  157. expect(convertObjectIdsToStrings(p.trashed)).to.deep.equal([
  158. userOne._id,
  159. userTwo._id,
  160. ])
  161. })
  162. it('should change a not-trashed project with a boolean value to an array', async function () {
  163. const p = await userOne.getProject(projectIdNotTrashed)
  164. expect(p.archived).to.not.exist
  165. expect(convertObjectIdsToStrings(p.trashed)).to.deep.equal([])
  166. })
  167. it('should change a not-archived/not-trashed project with a boolean value to an array', async function () {
  168. const p = await userOne.getProject(projectIdNotArchivedNotTrashed)
  169. expect(p.archived).to.deep.equal([])
  170. expect(p.trashed).to.deep.equal([])
  171. })
  172. })
  173. function convertObjectIdsToStrings(ids) {
  174. if (typeof ids === 'object') {
  175. return ids.map(id => {
  176. return id.toString()
  177. })
  178. }
  179. }
  180. })