2
1

follows-moderation.ts 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /* tslint:disable:no-unused-expression */
  2. import * as chai from 'chai'
  3. import 'mocha'
  4. import {
  5. acceptFollower,
  6. cleanupTests,
  7. flushAndRunMultipleServers,
  8. ServerInfo,
  9. setAccessTokensToServers,
  10. updateCustomSubConfig
  11. } from '../../../../shared/extra-utils/index'
  12. import {
  13. follow,
  14. getFollowersListPaginationAndSort,
  15. getFollowingListPaginationAndSort,
  16. rejectFollower,
  17. removeFollower
  18. } from '../../../../shared/extra-utils/server/follows'
  19. import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
  20. import { ActorFollow } from '../../../../shared/models/actors'
  21. const expect = chai.expect
  22. async function checkServer1And2HasFollowers (servers: ServerInfo[], state = 'accepted') {
  23. {
  24. const res = await getFollowingListPaginationAndSort(servers[0].url, 0, 5, 'createdAt')
  25. expect(res.body.total).to.equal(1)
  26. const follow = res.body.data[0] as ActorFollow
  27. expect(follow.state).to.equal(state)
  28. expect(follow.follower.url).to.equal('http://localhost:' + servers[0].port + '/accounts/peertube')
  29. expect(follow.following.url).to.equal('http://localhost:' + servers[1].port + '/accounts/peertube')
  30. }
  31. {
  32. const res = await getFollowersListPaginationAndSort(servers[1].url, 0, 5, 'createdAt')
  33. expect(res.body.total).to.equal(1)
  34. const follow = res.body.data[0] as ActorFollow
  35. expect(follow.state).to.equal(state)
  36. expect(follow.follower.url).to.equal('http://localhost:' + servers[0].port + '/accounts/peertube')
  37. expect(follow.following.url).to.equal('http://localhost:' + servers[1].port + '/accounts/peertube')
  38. }
  39. }
  40. async function checkNoFollowers (servers: ServerInfo[]) {
  41. {
  42. const res = await getFollowingListPaginationAndSort(servers[ 0 ].url, 0, 5, 'createdAt')
  43. expect(res.body.total).to.equal(0)
  44. }
  45. {
  46. const res = await getFollowersListPaginationAndSort(servers[ 1 ].url, 0, 5, 'createdAt')
  47. expect(res.body.total).to.equal(0)
  48. }
  49. }
  50. describe('Test follows moderation', function () {
  51. let servers: ServerInfo[] = []
  52. before(async function () {
  53. this.timeout(30000)
  54. servers = await flushAndRunMultipleServers(3)
  55. // Get the access tokens
  56. await setAccessTokensToServers(servers)
  57. })
  58. it('Should have server 1 following server 2', async function () {
  59. this.timeout(30000)
  60. await follow(servers[0].url, [ servers[1].url ], servers[0].accessToken)
  61. await waitJobs(servers)
  62. })
  63. it('Should have correct follows', async function () {
  64. await checkServer1And2HasFollowers(servers)
  65. })
  66. it('Should remove follower on server 2', async function () {
  67. await removeFollower(servers[1].url, servers[1].accessToken, servers[0])
  68. await waitJobs(servers)
  69. })
  70. it('Should not not have follows anymore', async function () {
  71. await checkNoFollowers(servers)
  72. })
  73. it('Should disable followers on server 2', async function () {
  74. const subConfig = {
  75. followers: {
  76. instance: {
  77. enabled: false,
  78. manualApproval: false
  79. }
  80. }
  81. }
  82. await updateCustomSubConfig(servers[1].url, servers[1].accessToken, subConfig)
  83. await follow(servers[0].url, [ servers[1].url ], servers[0].accessToken)
  84. await waitJobs(servers)
  85. await checkNoFollowers(servers)
  86. })
  87. it('Should re enable followers on server 2', async function () {
  88. const subConfig = {
  89. followers: {
  90. instance: {
  91. enabled: true,
  92. manualApproval: false
  93. }
  94. }
  95. }
  96. await updateCustomSubConfig(servers[1].url, servers[1].accessToken, subConfig)
  97. await follow(servers[0].url, [ servers[1].url ], servers[0].accessToken)
  98. await waitJobs(servers)
  99. await checkServer1And2HasFollowers(servers)
  100. })
  101. it('Should manually approve followers', async function () {
  102. this.timeout(20000)
  103. await removeFollower(servers[1].url, servers[1].accessToken, servers[0])
  104. await waitJobs(servers)
  105. const subConfig = {
  106. followers: {
  107. instance: {
  108. enabled: true,
  109. manualApproval: true
  110. }
  111. }
  112. }
  113. await updateCustomSubConfig(servers[1].url, servers[1].accessToken, subConfig)
  114. await updateCustomSubConfig(servers[2].url, servers[2].accessToken, subConfig)
  115. await follow(servers[0].url, [ servers[1].url ], servers[0].accessToken)
  116. await waitJobs(servers)
  117. await checkServer1And2HasFollowers(servers, 'pending')
  118. })
  119. it('Should accept a follower', async function () {
  120. await acceptFollower(servers[1].url, servers[1].accessToken, 'peertube@localhost:' + servers[0].port)
  121. await waitJobs(servers)
  122. await checkServer1And2HasFollowers(servers)
  123. })
  124. it('Should reject another follower', async function () {
  125. this.timeout(20000)
  126. await follow(servers[0].url, [ servers[2].url ], servers[0].accessToken)
  127. await waitJobs(servers)
  128. {
  129. const res = await getFollowingListPaginationAndSort(servers[0].url, 0, 5, 'createdAt')
  130. expect(res.body.total).to.equal(2)
  131. }
  132. {
  133. const res = await getFollowersListPaginationAndSort(servers[1].url, 0, 5, 'createdAt')
  134. expect(res.body.total).to.equal(1)
  135. }
  136. {
  137. const res = await getFollowersListPaginationAndSort(servers[2].url, 0, 5, 'createdAt')
  138. expect(res.body.total).to.equal(1)
  139. }
  140. await rejectFollower(servers[2].url, servers[2].accessToken, 'peertube@localhost:' + servers[0].port)
  141. await waitJobs(servers)
  142. await checkServer1And2HasFollowers(servers)
  143. {
  144. const res = await getFollowersListPaginationAndSort(servers[ 2 ].url, 0, 5, 'createdAt')
  145. expect(res.body.total).to.equal(0)
  146. }
  147. })
  148. after(async function () {
  149. await cleanupTests(servers)
  150. })
  151. })