]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/tests/api/check-params/user-notifications.ts
Fix zh locales
[github/Chocobozzz/PeerTube.git] / server / tests / api / check-params / user-notifications.ts
CommitLineData
cef534ed
C
1/* tslint:disable:no-unused-expression */
2
3import 'mocha'
4import * as io from 'socket.io-client'
5
6import {
7c3b7976
C
7 cleanupTests,
8 flushAndRunServer,
cef534ed 9 immutableAssign,
cef534ed
C
10 makeGetRequest,
11 makePostBodyRequest,
12 makePutBodyRequest,
cef534ed
C
13 ServerInfo,
14 setAccessTokensToServers,
15 wait
94565d52 16} from '../../../../shared/extra-utils'
cef534ed
C
17import {
18 checkBadCountPagination,
19 checkBadSortPagination,
20 checkBadStartPagination
94565d52 21} from '../../../../shared/extra-utils/requests/check-api-params'
cef534ed
C
22import { UserNotificationSetting, UserNotificationSettingValue } from '../../../../shared/models/users'
23
24describe('Test user notifications API validators', function () {
25 let server: ServerInfo
26
27 // ---------------------------------------------------------------
28
29 before(async function () {
30 this.timeout(30000)
31
210feb6c 32 server = await flushAndRunServer(1)
cef534ed
C
33
34 await setAccessTokensToServers([ server ])
35 })
36
37 describe('When listing my notifications', function () {
38 const path = '/api/v1/users/me/notifications'
39
40 it('Should fail with a bad start pagination', async function () {
41 await checkBadStartPagination(server.url, path, server.accessToken)
42 })
43
44 it('Should fail with a bad count pagination', async function () {
45 await checkBadCountPagination(server.url, path, server.accessToken)
46 })
47
48 it('Should fail with an incorrect sort', async function () {
49 await checkBadSortPagination(server.url, path, server.accessToken)
50 })
51
dc133480
C
52 it('Should fail with an incorrect unread parameter', async function () {
53 await makeGetRequest({
54 url: server.url,
55 path,
56 query: {
57 unread: 'toto'
58 },
59 token: server.accessToken,
60 statusCodeExpected: 200
61 })
62 })
63
cef534ed
C
64 it('Should fail with a non authenticated user', async function () {
65 await makeGetRequest({
66 url: server.url,
67 path,
68 statusCodeExpected: 401
69 })
70 })
71
72 it('Should succeed with the correct parameters', async function () {
73 await makeGetRequest({
74 url: server.url,
75 path,
76 token: server.accessToken,
77 statusCodeExpected: 200
78 })
79 })
80 })
81
82 describe('When marking as read my notifications', function () {
83 const path = '/api/v1/users/me/notifications/read'
84
85 it('Should fail with wrong ids parameters', async function () {
86 await makePostBodyRequest({
87 url: server.url,
88 path,
89 fields: {
90 ids: [ 'hello' ]
91 },
92 token: server.accessToken,
93 statusCodeExpected: 400
94 })
95
2f1548fd
C
96 await makePostBodyRequest({
97 url: server.url,
98 path,
99 fields: {
100 ids: [ ]
101 },
102 token: server.accessToken,
103 statusCodeExpected: 400
104 })
105
cef534ed
C
106 await makePostBodyRequest({
107 url: server.url,
108 path,
109 fields: {
110 ids: 5
111 },
112 token: server.accessToken,
113 statusCodeExpected: 400
114 })
115 })
116
117 it('Should fail with a non authenticated user', async function () {
118 await makePostBodyRequest({
119 url: server.url,
120 path,
121 fields: {
122 ids: [ 5 ]
123 },
124 statusCodeExpected: 401
125 })
126 })
127
128 it('Should succeed with the correct parameters', async function () {
129 await makePostBodyRequest({
130 url: server.url,
131 path,
132 fields: {
133 ids: [ 5 ]
134 },
135 token: server.accessToken,
136 statusCodeExpected: 204
137 })
138 })
139 })
140
2f1548fd
C
141 describe('When marking as read my notifications', function () {
142 const path = '/api/v1/users/me/notifications/read-all'
143
144 it('Should fail with a non authenticated user', async function () {
145 await makePostBodyRequest({
146 url: server.url,
147 path,
148 statusCodeExpected: 401
149 })
150 })
151
152 it('Should succeed with the correct parameters', async function () {
153 await makePostBodyRequest({
154 url: server.url,
155 path,
156 token: server.accessToken,
157 statusCodeExpected: 204
158 })
159 })
160 })
161
cef534ed
C
162 describe('When updating my notification settings', function () {
163 const path = '/api/v1/users/me/notification-settings'
164 const correctFields: UserNotificationSetting = {
2f1548fd
C
165 newVideoFromSubscription: UserNotificationSettingValue.WEB,
166 newCommentOnMyVideo: UserNotificationSettingValue.WEB,
167 videoAbuseAsModerator: UserNotificationSettingValue.WEB,
7ccddd7b 168 videoAutoBlacklistAsModerator: UserNotificationSettingValue.WEB,
2f1548fd
C
169 blacklistOnMyVideo: UserNotificationSettingValue.WEB,
170 myVideoImportFinished: UserNotificationSettingValue.WEB,
171 myVideoPublished: UserNotificationSettingValue.WEB,
172 commentMention: UserNotificationSettingValue.WEB,
173 newFollow: UserNotificationSettingValue.WEB,
883993c8
C
174 newUserRegistration: UserNotificationSettingValue.WEB,
175 newInstanceFollower: UserNotificationSettingValue.WEB
cef534ed
C
176 }
177
178 it('Should fail with missing fields', async function () {
179 await makePutBodyRequest({
180 url: server.url,
181 path,
182 token: server.accessToken,
2f1548fd 183 fields: { newVideoFromSubscription: UserNotificationSettingValue.WEB },
cef534ed
C
184 statusCodeExpected: 400
185 })
186 })
187
188 it('Should fail with incorrect field values', async function () {
189 {
190 const fields = immutableAssign(correctFields, { newCommentOnMyVideo: 15 })
191
192 await makePutBodyRequest({
193 url: server.url,
194 path,
195 token: server.accessToken,
196 fields,
197 statusCodeExpected: 400
198 })
199 }
200
201 {
202 const fields = immutableAssign(correctFields, { newCommentOnMyVideo: 'toto' })
203
204 await makePutBodyRequest({
205 url: server.url,
206 path,
207 fields,
208 token: server.accessToken,
209 statusCodeExpected: 400
210 })
211 }
212 })
213
214 it('Should fail with a non authenticated user', async function () {
215 await makePutBodyRequest({
216 url: server.url,
217 path,
218 fields: correctFields,
219 statusCodeExpected: 401
220 })
221 })
222
223 it('Should succeed with the correct parameters', async function () {
224 await makePutBodyRequest({
225 url: server.url,
226 path,
227 token: server.accessToken,
228 fields: correctFields,
229 statusCodeExpected: 204
230 })
231 })
232 })
233
234 describe('When connecting to my notification socket', function () {
235 it('Should fail with no token', function (next) {
7c3b7976 236 const socket = io(`http://localhost:${server.port}/user-notifications`, { reconnection: false })
cef534ed
C
237
238 socket.on('error', () => {
239 socket.removeListener('error', this)
240 socket.disconnect()
241 next()
242 })
243
244 socket.on('connect', () => {
245 socket.disconnect()
246 next(new Error('Connected with a missing token.'))
247 })
248 })
249
250 it('Should fail with an invalid token', function (next) {
7c3b7976 251 const socket = io(`http://localhost:${server.port}/user-notifications`, {
cef534ed
C
252 query: { accessToken: 'bad_access_token' },
253 reconnection: false
254 })
255
256 socket.on('error', () => {
257 socket.removeListener('error', this)
258 socket.disconnect()
259 next()
260 })
261
262 socket.on('connect', () => {
263 socket.disconnect()
264 next(new Error('Connected with an invalid token.'))
265 })
266 })
267
268 it('Should success with the correct token', function (next) {
7c3b7976 269 const socket = io(`http://localhost:${server.port}/user-notifications`, {
cef534ed
C
270 query: { accessToken: server.accessToken },
271 reconnection: false
272 })
273
274 const errorListener = socket.on('error', err => {
275 next(new Error('Error in connection: ' + err))
276 })
277
278 socket.on('connect', async () => {
279 socket.removeListener('error', errorListener)
280 socket.disconnect()
281
282 await wait(500)
283 next()
284 })
285 })
286 })
287
7c3b7976
C
288 after(async function () {
289 await cleanupTests([ server ])
cef534ed
C
290 })
291})