ConvertArchivedState.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. const { expect } = require('chai')
  2. const { exec } = require('child_process')
  3. const { ObjectId } = require('mongodb')
  4. const User = require('./helpers/User').promises
  5. describe('ConvertArchivedState', function () {
  6. let userOne, userTwo, userThree, userFour
  7. let projectOne, projectOneId
  8. let projectTwo, projectTwoId
  9. let projectThree, projectThreeId
  10. let projectFour, projectFourId
  11. let projectIdTrashed
  12. let projectIdNotTrashed
  13. let projectIdArchivedAndTrashed
  14. let projectIdNotArchivedNotTrashed
  15. beforeEach(async function () {
  16. userOne = new User()
  17. userTwo = new User()
  18. userThree = new User()
  19. userFour = new User()
  20. await userOne.login()
  21. await userTwo.login()
  22. await userThree.login()
  23. await userFour.login()
  24. projectOneId = await userOne.createProject('old-archived-1', {
  25. template: 'blank',
  26. })
  27. projectOne = await userOne.getProject(projectOneId)
  28. projectOne.archived = true
  29. projectOne.collaberator_refs.push(userTwo._id)
  30. projectOne.tokenAccessReadOnly_refs.push(userThree._id)
  31. await userOne.saveProject(projectOne)
  32. projectTwoId = await userOne.createProject('old-archived-2', {
  33. template: 'blank',
  34. })
  35. projectTwo = await userOne.getProject(projectTwoId)
  36. projectTwo.archived = true
  37. projectTwo.tokenAccessReadAndWrite_refs.push(userThree._id)
  38. projectTwo.tokenAccessReadOnly_refs.push(userFour._id)
  39. await userOne.saveProject(projectTwo)
  40. projectThreeId = await userOne.createProject('already-new-archived', {
  41. template: 'blank',
  42. })
  43. projectThree = await userOne.getProject(projectThreeId)
  44. projectThree.archived = [
  45. ObjectId(userOne._id),
  46. ObjectId(userTwo._id),
  47. ObjectId(userFour._id),
  48. ]
  49. projectThree.collaberator_refs.push(userTwo._id)
  50. projectThree.tokenAccessReadOnly_refs.push(userFour._id)
  51. await userOne.saveProject(projectThree)
  52. projectFourId = await userOne.createProject('not-archived', {
  53. template: 'blank',
  54. })
  55. projectFour = await userOne.getProject(projectFourId)
  56. projectFour.archived = false
  57. await userOne.saveProject(projectFour)
  58. projectIdTrashed = await userOne.createProject('trashed', {
  59. template: 'blank',
  60. })
  61. {
  62. const p = await userOne.getProject(projectIdTrashed)
  63. p.trashed = true
  64. p.collaberator_refs.push(userTwo._id)
  65. await userOne.saveProject(p)
  66. }
  67. projectIdNotTrashed = await userOne.createProject('not-trashed', {
  68. template: 'blank',
  69. })
  70. {
  71. const p = await userOne.getProject(projectIdNotTrashed)
  72. p.trashed = false
  73. p.collaberator_refs.push(userTwo._id)
  74. await userOne.saveProject(p)
  75. }
  76. projectIdArchivedAndTrashed = await userOne.createProject('not-trashed', {
  77. template: 'blank',
  78. })
  79. {
  80. const p = await userOne.getProject(projectIdArchivedAndTrashed)
  81. p.archived = true
  82. p.trashed = true
  83. p.collaberator_refs.push(userTwo._id)
  84. await userOne.saveProject(p)
  85. }
  86. projectIdNotArchivedNotTrashed = await userOne.createProject(
  87. 'not-archived,not-trashed',
  88. {
  89. template: 'blank',
  90. }
  91. )
  92. {
  93. const p = await userOne.getProject(projectIdNotArchivedNotTrashed)
  94. p.archived = false
  95. p.trashed = false
  96. p.collaberator_refs.push(userTwo._id)
  97. await userOne.saveProject(p)
  98. }
  99. })
  100. beforeEach(function (done) {
  101. exec(
  102. 'CONNECT_DELAY=1 node scripts/convert_archived_state.js FIRST,SECOND',
  103. (error, stdout, stderr) => {
  104. if (error) {
  105. console.log(stdout)
  106. console.error(stderr)
  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. })