diff options
Diffstat (limited to 'server/tests')
-rw-r--r-- | server/tests/api/videos/video-change-ownership.ts | 262 | ||||
-rw-r--r-- | server/tests/utils/index.ts | 1 | ||||
-rw-r--r-- | server/tests/utils/videos/video-change-ownership.ts | 54 |
3 files changed, 317 insertions, 0 deletions
diff --git a/server/tests/api/videos/video-change-ownership.ts b/server/tests/api/videos/video-change-ownership.ts new file mode 100644 index 000000000..275be40be --- /dev/null +++ b/server/tests/api/videos/video-change-ownership.ts | |||
@@ -0,0 +1,262 @@ | |||
1 | /* tslint:disable:no-unused-expression */ | ||
2 | |||
3 | import * as chai from 'chai' | ||
4 | import 'mocha' | ||
5 | import { | ||
6 | acceptChangeOwnership, | ||
7 | changeVideoOwnership, | ||
8 | createUser, | ||
9 | flushTests, | ||
10 | getMyUserInformation, | ||
11 | getVideoChangeOwnershipList, | ||
12 | getVideosList, | ||
13 | killallServers, | ||
14 | refuseChangeOwnership, | ||
15 | runServer, | ||
16 | ServerInfo, | ||
17 | setAccessTokensToServers, | ||
18 | uploadVideo, | ||
19 | userLogin | ||
20 | } from '../../utils' | ||
21 | import { waitJobs } from '../../utils/server/jobs' | ||
22 | import { User } from '../../../../shared/models/users' | ||
23 | |||
24 | const expect = chai.expect | ||
25 | |||
26 | describe('Test video change ownership - nominal', function () { | ||
27 | let server: ServerInfo = undefined | ||
28 | const firstUser = { | ||
29 | username: 'first', | ||
30 | password: 'My great password' | ||
31 | } | ||
32 | const secondUser = { | ||
33 | username: 'second', | ||
34 | password: 'My other password' | ||
35 | } | ||
36 | let firstUserAccessToken = '' | ||
37 | let secondUserAccessToken = '' | ||
38 | let lastRequestChangeOwnershipId = undefined | ||
39 | |||
40 | before(async function () { | ||
41 | this.timeout(50000) | ||
42 | |||
43 | // Run one server | ||
44 | await flushTests() | ||
45 | server = await runServer(1) | ||
46 | await setAccessTokensToServers([server]) | ||
47 | |||
48 | const videoQuota = 42000000 | ||
49 | await createUser(server.url, server.accessToken, firstUser.username, firstUser.password, videoQuota) | ||
50 | await createUser(server.url, server.accessToken, secondUser.username, secondUser.password, videoQuota) | ||
51 | |||
52 | firstUserAccessToken = await userLogin(server, firstUser) | ||
53 | secondUserAccessToken = await userLogin(server, secondUser) | ||
54 | |||
55 | // Upload some videos on the server | ||
56 | const video1Attributes = { | ||
57 | name: 'my super name', | ||
58 | description: 'my super description' | ||
59 | } | ||
60 | await uploadVideo(server.url, firstUserAccessToken, video1Attributes) | ||
61 | |||
62 | await waitJobs(server) | ||
63 | |||
64 | const res = await getVideosList(server.url) | ||
65 | const videos = res.body.data | ||
66 | |||
67 | expect(videos.length).to.equal(1) | ||
68 | |||
69 | server.video = videos.find(video => video.name === 'my super name') | ||
70 | }) | ||
71 | |||
72 | it('Should not have video change ownership', async function () { | ||
73 | const resFirstUser = await getVideoChangeOwnershipList(server.url, firstUserAccessToken) | ||
74 | |||
75 | expect(resFirstUser.body.total).to.equal(0) | ||
76 | expect(resFirstUser.body.data).to.be.an('array') | ||
77 | expect(resFirstUser.body.data.length).to.equal(0) | ||
78 | |||
79 | const resSecondUser = await getVideoChangeOwnershipList(server.url, secondUserAccessToken) | ||
80 | |||
81 | expect(resSecondUser.body.total).to.equal(0) | ||
82 | expect(resSecondUser.body.data).to.be.an('array') | ||
83 | expect(resSecondUser.body.data.length).to.equal(0) | ||
84 | }) | ||
85 | |||
86 | it('Should send a request to change ownership of a video', async function () { | ||
87 | this.timeout(15000) | ||
88 | |||
89 | await changeVideoOwnership(server.url, firstUserAccessToken, server.video.id, secondUser.username) | ||
90 | }) | ||
91 | |||
92 | it('Should only return a request to change ownership for the second user', async function () { | ||
93 | const resFirstUser = await getVideoChangeOwnershipList(server.url, firstUserAccessToken) | ||
94 | |||
95 | expect(resFirstUser.body.total).to.equal(0) | ||
96 | expect(resFirstUser.body.data).to.be.an('array') | ||
97 | expect(resFirstUser.body.data.length).to.equal(0) | ||
98 | |||
99 | const resSecondUser = await getVideoChangeOwnershipList(server.url, secondUserAccessToken) | ||
100 | |||
101 | expect(resSecondUser.body.total).to.equal(1) | ||
102 | expect(resSecondUser.body.data).to.be.an('array') | ||
103 | expect(resSecondUser.body.data.length).to.equal(1) | ||
104 | |||
105 | lastRequestChangeOwnershipId = resSecondUser.body.data[0].id | ||
106 | }) | ||
107 | |||
108 | it('Should accept the same change ownership request without crashing', async function () { | ||
109 | this.timeout(10000) | ||
110 | |||
111 | await changeVideoOwnership(server.url, firstUserAccessToken, server.video.id, secondUser.username) | ||
112 | }) | ||
113 | |||
114 | it('Should not create multiple change ownership requests while one is waiting', async function () { | ||
115 | this.timeout(10000) | ||
116 | |||
117 | const resSecondUser = await getVideoChangeOwnershipList(server.url, secondUserAccessToken) | ||
118 | |||
119 | expect(resSecondUser.body.total).to.equal(1) | ||
120 | expect(resSecondUser.body.data).to.be.an('array') | ||
121 | expect(resSecondUser.body.data.length).to.equal(1) | ||
122 | }) | ||
123 | |||
124 | it('Should not be possible to refuse the change of ownership from first user', async function () { | ||
125 | this.timeout(10000) | ||
126 | |||
127 | await refuseChangeOwnership(server.url, firstUserAccessToken, lastRequestChangeOwnershipId, 403) | ||
128 | }) | ||
129 | |||
130 | it('Should be possible to refuse the change of ownership from second user', async function () { | ||
131 | this.timeout(10000) | ||
132 | |||
133 | await refuseChangeOwnership(server.url, secondUserAccessToken, lastRequestChangeOwnershipId) | ||
134 | }) | ||
135 | |||
136 | it('Should send a new request to change ownership of a video', async function () { | ||
137 | this.timeout(15000) | ||
138 | |||
139 | await changeVideoOwnership(server.url, firstUserAccessToken, server.video.id, secondUser.username) | ||
140 | }) | ||
141 | |||
142 | it('Should return two requests to change ownership for the second user', async function () { | ||
143 | const resFirstUser = await getVideoChangeOwnershipList(server.url, firstUserAccessToken) | ||
144 | |||
145 | expect(resFirstUser.body.total).to.equal(0) | ||
146 | expect(resFirstUser.body.data).to.be.an('array') | ||
147 | expect(resFirstUser.body.data.length).to.equal(0) | ||
148 | |||
149 | const resSecondUser = await getVideoChangeOwnershipList(server.url, secondUserAccessToken) | ||
150 | |||
151 | expect(resSecondUser.body.total).to.equal(2) | ||
152 | expect(resSecondUser.body.data).to.be.an('array') | ||
153 | expect(resSecondUser.body.data.length).to.equal(2) | ||
154 | |||
155 | lastRequestChangeOwnershipId = resSecondUser.body.data[0].id | ||
156 | }) | ||
157 | |||
158 | it('Should not be possible to accept the change of ownership from first user', async function () { | ||
159 | this.timeout(10000) | ||
160 | |||
161 | const secondUserInformationResponse = await getMyUserInformation(server.url, secondUserAccessToken) | ||
162 | const secondUserInformation: User = secondUserInformationResponse.body | ||
163 | const channelId = secondUserInformation.videoChannels[0].id | ||
164 | await acceptChangeOwnership(server.url, firstUserAccessToken, lastRequestChangeOwnershipId, channelId, 403) | ||
165 | }) | ||
166 | |||
167 | it('Should be possible to accept the change of ownership from second user', async function () { | ||
168 | this.timeout(10000) | ||
169 | |||
170 | const secondUserInformationResponse = await getMyUserInformation(server.url, secondUserAccessToken) | ||
171 | const secondUserInformation: User = secondUserInformationResponse.body | ||
172 | const channelId = secondUserInformation.videoChannels[0].id | ||
173 | await acceptChangeOwnership(server.url, secondUserAccessToken, lastRequestChangeOwnershipId, channelId) | ||
174 | }) | ||
175 | |||
176 | after(async function () { | ||
177 | killallServers([server]) | ||
178 | }) | ||
179 | }) | ||
180 | |||
181 | describe('Test video change ownership - quota too small', function () { | ||
182 | let server: ServerInfo = undefined | ||
183 | const firstUser = { | ||
184 | username: 'first', | ||
185 | password: 'My great password' | ||
186 | } | ||
187 | const secondUser = { | ||
188 | username: 'second', | ||
189 | password: 'My other password' | ||
190 | } | ||
191 | let firstUserAccessToken = '' | ||
192 | let secondUserAccessToken = '' | ||
193 | let lastRequestChangeOwnershipId = undefined | ||
194 | |||
195 | before(async function () { | ||
196 | this.timeout(50000) | ||
197 | |||
198 | // Run one server | ||
199 | await flushTests() | ||
200 | server = await runServer(1) | ||
201 | await setAccessTokensToServers([server]) | ||
202 | |||
203 | const videoQuota = 42000000 | ||
204 | const limitedVideoQuota = 10 | ||
205 | await createUser(server.url, server.accessToken, firstUser.username, firstUser.password, videoQuota) | ||
206 | await createUser(server.url, server.accessToken, secondUser.username, secondUser.password, limitedVideoQuota) | ||
207 | |||
208 | firstUserAccessToken = await userLogin(server, firstUser) | ||
209 | secondUserAccessToken = await userLogin(server, secondUser) | ||
210 | |||
211 | // Upload some videos on the server | ||
212 | const video1Attributes = { | ||
213 | name: 'my super name', | ||
214 | description: 'my super description' | ||
215 | } | ||
216 | await uploadVideo(server.url, firstUserAccessToken, video1Attributes) | ||
217 | |||
218 | await waitJobs(server) | ||
219 | |||
220 | const res = await getVideosList(server.url) | ||
221 | const videos = res.body.data | ||
222 | |||
223 | expect(videos.length).to.equal(1) | ||
224 | |||
225 | server.video = videos.find(video => video.name === 'my super name') | ||
226 | }) | ||
227 | |||
228 | it('Should send a request to change ownership of a video', async function () { | ||
229 | this.timeout(15000) | ||
230 | |||
231 | await changeVideoOwnership(server.url, firstUserAccessToken, server.video.id, secondUser.username) | ||
232 | }) | ||
233 | |||
234 | it('Should only return a request to change ownership for the second user', async function () { | ||
235 | const resFirstUser = await getVideoChangeOwnershipList(server.url, firstUserAccessToken) | ||
236 | |||
237 | expect(resFirstUser.body.total).to.equal(0) | ||
238 | expect(resFirstUser.body.data).to.be.an('array') | ||
239 | expect(resFirstUser.body.data.length).to.equal(0) | ||
240 | |||
241 | const resSecondUser = await getVideoChangeOwnershipList(server.url, secondUserAccessToken) | ||
242 | |||
243 | expect(resSecondUser.body.total).to.equal(1) | ||
244 | expect(resSecondUser.body.data).to.be.an('array') | ||
245 | expect(resSecondUser.body.data.length).to.equal(1) | ||
246 | |||
247 | lastRequestChangeOwnershipId = resSecondUser.body.data[0].id | ||
248 | }) | ||
249 | |||
250 | it('Should not be possible to accept the change of ownership from second user because of exceeded quota', async function () { | ||
251 | this.timeout(10000) | ||
252 | |||
253 | const secondUserInformationResponse = await getMyUserInformation(server.url, secondUserAccessToken) | ||
254 | const secondUserInformation: User = secondUserInformationResponse.body | ||
255 | const channelId = secondUserInformation.videoChannels[0].id | ||
256 | await acceptChangeOwnership(server.url, secondUserAccessToken, lastRequestChangeOwnershipId, channelId, 403) | ||
257 | }) | ||
258 | |||
259 | after(async function () { | ||
260 | killallServers([server]) | ||
261 | }) | ||
262 | }) | ||
diff --git a/server/tests/utils/index.ts b/server/tests/utils/index.ts index 391db18cf..897389824 100644 --- a/server/tests/utils/index.ts +++ b/server/tests/utils/index.ts | |||
@@ -13,5 +13,6 @@ export * from './videos/video-abuses' | |||
13 | export * from './videos/video-blacklist' | 13 | export * from './videos/video-blacklist' |
14 | export * from './videos/video-channels' | 14 | export * from './videos/video-channels' |
15 | export * from './videos/videos' | 15 | export * from './videos/videos' |
16 | export * from './videos/video-change-ownership' | ||
16 | export * from './feeds/feeds' | 17 | export * from './feeds/feeds' |
17 | export * from './search/videos' | 18 | export * from './search/videos' |
diff --git a/server/tests/utils/videos/video-change-ownership.ts b/server/tests/utils/videos/video-change-ownership.ts new file mode 100644 index 000000000..f288692ea --- /dev/null +++ b/server/tests/utils/videos/video-change-ownership.ts | |||
@@ -0,0 +1,54 @@ | |||
1 | import * as request from 'supertest' | ||
2 | |||
3 | function changeVideoOwnership (url: string, token: string, videoId: number | string, username) { | ||
4 | const path = '/api/v1/videos/' + videoId + '/give-ownership' | ||
5 | |||
6 | return request(url) | ||
7 | .post(path) | ||
8 | .set('Accept', 'application/json') | ||
9 | .set('Authorization', 'Bearer ' + token) | ||
10 | .send({ username }) | ||
11 | .expect(204) | ||
12 | } | ||
13 | |||
14 | function getVideoChangeOwnershipList (url: string, token: string) { | ||
15 | const path = '/api/v1/videos/ownership' | ||
16 | |||
17 | return request(url) | ||
18 | .get(path) | ||
19 | .query({ sort: '-createdAt' }) | ||
20 | .set('Accept', 'application/json') | ||
21 | .set('Authorization', 'Bearer ' + token) | ||
22 | .expect(200) | ||
23 | .expect('Content-Type', /json/) | ||
24 | } | ||
25 | |||
26 | function acceptChangeOwnership (url: string, token: string, ownershipId: string, channelId: number, expectedStatus = 204) { | ||
27 | const path = '/api/v1/videos/ownership/' + ownershipId + '/accept' | ||
28 | |||
29 | return request(url) | ||
30 | .post(path) | ||
31 | .set('Accept', 'application/json') | ||
32 | .set('Authorization', 'Bearer ' + token) | ||
33 | .send({ channelId }) | ||
34 | .expect(expectedStatus) | ||
35 | } | ||
36 | |||
37 | function refuseChangeOwnership (url: string, token: string, ownershipId: string, expectedStatus = 204) { | ||
38 | const path = '/api/v1/videos/ownership/' + ownershipId + '/refuse' | ||
39 | |||
40 | return request(url) | ||
41 | .post(path) | ||
42 | .set('Accept', 'application/json') | ||
43 | .set('Authorization', 'Bearer ' + token) | ||
44 | .expect(expectedStatus) | ||
45 | } | ||
46 | |||
47 | // --------------------------------------------------------------------------- | ||
48 | |||
49 | export { | ||
50 | changeVideoOwnership, | ||
51 | getVideoChangeOwnershipList, | ||
52 | acceptChangeOwnership, | ||
53 | refuseChangeOwnership | ||
54 | } | ||