]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - shared/server-commands/users/registrations-command.ts
Add signup approval API tests
[github/Chocobozzz/PeerTube.git] / shared / server-commands / users / registrations-command.ts
1 import { pick } from '@shared/core-utils'
2 import { HttpStatusCode, ResultList, UserRegistration, UserRegistrationRequest } from '@shared/models'
3 import { unwrapBody } from '../requests'
4 import { AbstractCommand, OverrideCommandOptions } from '../shared'
5
6 export class RegistrationsCommand extends AbstractCommand {
7
8 register (options: OverrideCommandOptions & Partial<UserRegistrationRequest> & Pick<UserRegistrationRequest, 'username'>) {
9 const { password = 'password', email = options.username + '@example.com' } = options
10 const path = '/api/v1/users/register'
11
12 return this.postBodyRequest({
13 ...options,
14
15 path,
16 fields: {
17 ...pick(options, [ 'username', 'displayName', 'channel' ]),
18
19 password,
20 email
21 },
22 implicitToken: false,
23 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
24 })
25 }
26
27 requestRegistration (
28 options: OverrideCommandOptions & Partial<UserRegistrationRequest> & Pick<UserRegistrationRequest, 'username' | 'registrationReason'>
29 ) {
30 const { password = 'password', email = options.username + '@example.com' } = options
31 const path = '/api/v1/users/registrations/request'
32
33 return unwrapBody<UserRegistration>(this.postBodyRequest({
34 ...options,
35
36 path,
37 fields: {
38 ...pick(options, [ 'username', 'displayName', 'channel', 'registrationReason' ]),
39
40 password,
41 email
42 },
43 implicitToken: false,
44 defaultExpectedStatus: HttpStatusCode.OK_200
45 }))
46 }
47
48 // ---------------------------------------------------------------------------
49
50 accept (options: OverrideCommandOptions & {
51 id: number
52 moderationResponse: string
53 }) {
54 const { id, moderationResponse } = options
55 const path = '/api/v1/users/registrations/' + id + '/accept'
56
57 return this.postBodyRequest({
58 ...options,
59
60 path,
61 fields: { moderationResponse },
62 implicitToken: true,
63 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
64 })
65 }
66
67 reject (options: OverrideCommandOptions & {
68 id: number
69 moderationResponse: string
70 }) {
71 const { id, moderationResponse } = options
72 const path = '/api/v1/users/registrations/' + id + '/reject'
73
74 return this.postBodyRequest({
75 ...options,
76
77 path,
78 fields: { moderationResponse },
79 implicitToken: true,
80 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
81 })
82 }
83
84 // ---------------------------------------------------------------------------
85
86 delete (options: OverrideCommandOptions & {
87 id: number
88 }) {
89 const { id } = options
90 const path = '/api/v1/users/registrations/' + id
91
92 return this.deleteRequest({
93 ...options,
94
95 path,
96 implicitToken: true,
97 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
98 })
99 }
100
101 // ---------------------------------------------------------------------------
102
103 list (options: OverrideCommandOptions & {
104 start?: number
105 count?: number
106 sort?: string
107 search?: string
108 } = {}) {
109 const path = '/api/v1/users/registrations'
110
111 return this.getRequestBody<ResultList<UserRegistration>>({
112 ...options,
113
114 path,
115 query: pick(options, [ 'start', 'count', 'sort', 'search' ]),
116 implicitToken: true,
117 defaultExpectedStatus: HttpStatusCode.OK_200
118 })
119 }
120
121 // ---------------------------------------------------------------------------
122
123 askSendVerifyEmail (options: OverrideCommandOptions & {
124 email: string
125 }) {
126 const { email } = options
127 const path = '/api/v1/users/registrations/ask-send-verify-email'
128
129 return this.postBodyRequest({
130 ...options,
131
132 path,
133 fields: { email },
134 implicitToken: false,
135 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
136 })
137 }
138
139 verifyEmail (options: OverrideCommandOptions & {
140 registrationId: number
141 verificationString: string
142 }) {
143 const { registrationId, verificationString } = options
144 const path = '/api/v1/users/registrations/' + registrationId + '/verify-email'
145
146 return this.postBodyRequest({
147 ...options,
148
149 path,
150 fields: {
151 verificationString
152 },
153 implicitToken: false,
154 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
155 })
156 }
157 }