bulk.ts 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
  2. import { expect } from 'chai'
  3. import {
  4. BulkCommand,
  5. cleanupTests,
  6. createMultipleServers,
  7. doubleFollow,
  8. PeerTubeServer,
  9. setAccessTokensToServers,
  10. waitJobs
  11. } from '@shared/server-commands'
  12. describe('Test bulk actions', function () {
  13. const commentsUser3: { videoId: number, commentId: number }[] = []
  14. let servers: PeerTubeServer[] = []
  15. let user1Token: string
  16. let user2Token: string
  17. let user3Token: string
  18. let bulkCommand: BulkCommand
  19. before(async function () {
  20. this.timeout(120000)
  21. servers = await createMultipleServers(2)
  22. // Get the access tokens
  23. await setAccessTokensToServers(servers)
  24. {
  25. const user = { username: 'user1', password: 'password' }
  26. await servers[0].users.create({ username: user.username, password: user.password })
  27. user1Token = await servers[0].login.getAccessToken(user)
  28. }
  29. {
  30. const user = { username: 'user2', password: 'password' }
  31. await servers[0].users.create({ username: user.username, password: user.password })
  32. user2Token = await servers[0].login.getAccessToken(user)
  33. }
  34. {
  35. const user = { username: 'user3', password: 'password' }
  36. await servers[1].users.create({ username: user.username, password: user.password })
  37. user3Token = await servers[1].login.getAccessToken(user)
  38. }
  39. await doubleFollow(servers[0], servers[1])
  40. bulkCommand = new BulkCommand(servers[0])
  41. })
  42. describe('Bulk remove comments', function () {
  43. async function checkInstanceCommentsRemoved () {
  44. {
  45. const { data } = await servers[0].videos.list()
  46. // Server 1 should not have these comments anymore
  47. for (const video of data) {
  48. const { data } = await servers[0].comments.listThreads({ videoId: video.id })
  49. const comment = data.find(c => c.text === 'comment by user 3')
  50. expect(comment).to.not.exist
  51. }
  52. }
  53. {
  54. const { data } = await servers[1].videos.list()
  55. // Server 1 should not have these comments on videos of server 1
  56. for (const video of data) {
  57. const { data } = await servers[1].comments.listThreads({ videoId: video.id })
  58. const comment = data.find(c => c.text === 'comment by user 3')
  59. if (video.account.host === servers[0].host) {
  60. expect(comment).to.not.exist
  61. } else {
  62. expect(comment).to.exist
  63. }
  64. }
  65. }
  66. }
  67. before(async function () {
  68. this.timeout(120000)
  69. await servers[0].videos.upload({ attributes: { name: 'video 1 server 1' } })
  70. await servers[0].videos.upload({ attributes: { name: 'video 2 server 1' } })
  71. await servers[0].videos.upload({ token: user1Token, attributes: { name: 'video 3 server 1' } })
  72. await servers[1].videos.upload({ attributes: { name: 'video 1 server 2' } })
  73. await waitJobs(servers)
  74. {
  75. const { data } = await servers[0].videos.list()
  76. for (const video of data) {
  77. await servers[0].comments.createThread({ videoId: video.id, text: 'comment by root server 1' })
  78. await servers[0].comments.createThread({ token: user1Token, videoId: video.id, text: 'comment by user 1' })
  79. await servers[0].comments.createThread({ token: user2Token, videoId: video.id, text: 'comment by user 2' })
  80. }
  81. }
  82. {
  83. const { data } = await servers[1].videos.list()
  84. for (const video of data) {
  85. await servers[1].comments.createThread({ videoId: video.id, text: 'comment by root server 2' })
  86. const comment = await servers[1].comments.createThread({ token: user3Token, videoId: video.id, text: 'comment by user 3' })
  87. commentsUser3.push({ videoId: video.id, commentId: comment.id })
  88. }
  89. }
  90. await waitJobs(servers)
  91. })
  92. it('Should delete comments of an account on my videos', async function () {
  93. this.timeout(60000)
  94. await bulkCommand.removeCommentsOf({
  95. token: user1Token,
  96. attributes: {
  97. accountName: 'user2',
  98. scope: 'my-videos'
  99. }
  100. })
  101. await waitJobs(servers)
  102. for (const server of servers) {
  103. const { data } = await server.videos.list()
  104. for (const video of data) {
  105. const { data } = await server.comments.listThreads({ videoId: video.id })
  106. const comment = data.find(c => c.text === 'comment by user 2')
  107. if (video.name === 'video 3 server 1') expect(comment).to.not.exist
  108. else expect(comment).to.exist
  109. }
  110. }
  111. })
  112. it('Should delete comments of an account on the instance', async function () {
  113. this.timeout(60000)
  114. await bulkCommand.removeCommentsOf({
  115. attributes: {
  116. accountName: 'user3@' + servers[1].host,
  117. scope: 'instance'
  118. }
  119. })
  120. await waitJobs(servers)
  121. await checkInstanceCommentsRemoved()
  122. })
  123. it('Should not re create the comment on video update', async function () {
  124. this.timeout(60000)
  125. for (const obj of commentsUser3) {
  126. await servers[1].comments.addReply({
  127. token: user3Token,
  128. videoId: obj.videoId,
  129. toCommentId: obj.commentId,
  130. text: 'comment by user 3 bis'
  131. })
  132. }
  133. await waitJobs(servers)
  134. await checkInstanceCommentsRemoved()
  135. })
  136. })
  137. after(async function () {
  138. await cleanupTests(servers)
  139. })
  140. })