@@ -4,13 +4,11 @@ use torrust_index::web::api;
4
4
5
5
use crate :: common:: asserts:: assert_json_ok_response;
6
6
use crate :: common:: client:: Client ;
7
- use crate :: common:: contexts:: category:: asserts:: { assert_added_category_response, assert_deleted_category_response} ;
8
- use crate :: common:: contexts:: category:: fixtures:: random_category_name;
9
- use crate :: common:: contexts:: category:: forms:: { AddCategoryForm , DeleteCategoryForm } ;
7
+ use crate :: common:: contexts:: category:: forms:: AddCategoryForm ;
10
8
use crate :: common:: contexts:: category:: responses:: ListResponse ;
11
9
use crate :: e2e:: environment:: TestEnv ;
12
10
use crate :: e2e:: web:: api:: v1:: contexts:: category:: steps:: { add_category, add_random_category} ;
13
- use crate :: e2e:: web:: api:: v1:: contexts:: user:: steps:: { new_logged_in_admin, new_logged_in_user } ;
11
+ use crate :: e2e:: web:: api:: v1:: contexts:: user:: steps:: new_logged_in_admin;
14
12
15
13
#[ tokio:: test]
16
14
async fn it_should_return_an_empty_category_list_when_there_are_no_categories ( ) {
@@ -48,151 +46,226 @@ async fn it_should_return_a_category_list() {
48
46
}
49
47
50
48
#[ tokio:: test]
51
- async fn it_should_not_allow_adding_a_new_category_to_unauthenticated_users ( ) {
49
+ async fn it_should_not_allow_adding_empty_categories ( ) {
52
50
let mut env = TestEnv :: new ( ) ;
53
51
env. start ( api:: Version :: V1 ) . await ;
54
52
55
- let client = Client :: unauthenticated ( & env. server_socket_addr ( ) . unwrap ( ) ) ;
53
+ let logged_in_admin = new_logged_in_admin ( & env) . await ;
54
+ let client = Client :: authenticated ( & env. server_socket_addr ( ) . unwrap ( ) , & logged_in_admin. token ) ;
56
55
57
- let response = client
58
- . add_category ( AddCategoryForm {
59
- name : "CATEGORY NAME" . to_string ( ) ,
60
- icon : None ,
61
- } )
62
- . await ;
56
+ let invalid_category_names = vec ! [ String :: new( ) , " " . to_string( ) ] ;
63
57
64
- assert_eq ! ( response. status, 401 ) ;
58
+ for invalid_name in invalid_category_names {
59
+ let response = client
60
+ . add_category ( AddCategoryForm {
61
+ name : invalid_name,
62
+ icon : None ,
63
+ } )
64
+ . await ;
65
+
66
+ assert_eq ! ( response. status, 400 ) ;
67
+ }
65
68
}
66
69
67
70
#[ tokio:: test]
68
- async fn it_should_not_allow_adding_a_new_category_to_non_admins ( ) {
71
+ async fn it_should_not_allow_adding_duplicated_categories ( ) {
69
72
let mut env = TestEnv :: new ( ) ;
70
73
env. start ( api:: Version :: V1 ) . await ;
71
74
72
- let logged_non_admin = new_logged_in_user ( & env) . await ;
73
-
74
- let client = Client :: authenticated ( & env. server_socket_addr ( ) . unwrap ( ) , & logged_non_admin. token ) ;
75
+ let added_category_name = add_random_category ( & env) . await ;
75
76
76
- let response = client
77
- . add_category ( AddCategoryForm {
78
- name : "CATEGORY NAME" . to_string ( ) ,
79
- icon : None ,
80
- } )
81
- . await ;
77
+ // Try to add the same category again
78
+ let response = add_category ( & added_category_name, & env) . await ;
82
79
83
- assert_eq ! ( response. status, 403 ) ;
80
+ assert_eq ! ( response. status, 400 ) ;
84
81
}
85
82
86
- #[ tokio:: test]
87
- async fn it_should_allow_admins_to_add_new_categories ( ) {
88
- let mut env = TestEnv :: new ( ) ;
89
- env. start ( api:: Version :: V1 ) . await ;
83
+ mod for_guest_users {
84
+ use torrust_index:: web:: api;
90
85
91
- let logged_in_admin = new_logged_in_admin ( & env) . await ;
92
- let client = Client :: authenticated ( & env. server_socket_addr ( ) . unwrap ( ) , & logged_in_admin. token ) ;
86
+ use crate :: common:: client:: Client ;
87
+ use crate :: common:: contexts:: category:: forms:: { AddCategoryForm , DeleteCategoryForm } ;
88
+ use crate :: e2e:: environment:: TestEnv ;
89
+ use crate :: e2e:: web:: api:: v1:: contexts:: category:: steps:: add_random_category;
93
90
94
- let category_name = random_category_name ( ) ;
91
+ #[ tokio:: test]
92
+ async fn it_should_allow_guest_users_to_get_the_categories ( ) {
93
+ let mut env = TestEnv :: new ( ) ;
95
94
96
- let response = client
97
- . add_category ( AddCategoryForm {
98
- name : category_name. to_string ( ) ,
99
- icon : None ,
100
- } )
101
- . await ;
95
+ env. start ( api:: Version :: V1 ) . await ;
102
96
103
- assert_added_category_response ( & response, & category_name) ;
104
- }
97
+ let client = Client :: unauthenticated ( & env. server_socket_addr ( ) . unwrap ( ) ) ;
105
98
106
- #[ tokio:: test]
107
- async fn it_should_not_allow_adding_empty_categories ( ) {
108
- let mut env = TestEnv :: new ( ) ;
109
- env. start ( api:: Version :: V1 ) . await ;
99
+ let response = client. get_categories ( ) . await ;
110
100
111
- let logged_in_admin = new_logged_in_admin ( & env ) . await ;
112
- let client = Client :: authenticated ( & env . server_socket_addr ( ) . unwrap ( ) , & logged_in_admin . token ) ;
101
+ assert_eq ! ( response . status , 200 ) ;
102
+ }
113
103
114
- let invalid_category_names = vec ! [ String :: new( ) , " " . to_string( ) ] ;
104
+ #[ tokio:: test]
105
+ async fn it_should_not_allow_adding_a_new_category_to_guest_users ( ) {
106
+ let mut env = TestEnv :: new ( ) ;
107
+ env. start ( api:: Version :: V1 ) . await ;
108
+
109
+ let client = Client :: unauthenticated ( & env. server_socket_addr ( ) . unwrap ( ) ) ;
115
110
116
- for invalid_name in invalid_category_names {
117
111
let response = client
118
112
. add_category ( AddCategoryForm {
119
- name : invalid_name ,
113
+ name : "CATEGORY NAME" . to_string ( ) ,
120
114
icon : None ,
121
115
} )
122
116
. await ;
123
117
124
- assert_eq ! ( response. status, 400 ) ;
118
+ assert_eq ! ( response. status, 401 ) ;
125
119
}
126
- }
127
120
128
- #[ tokio:: test]
129
- async fn it_should_not_allow_adding_duplicated_categories ( ) {
130
- let mut env = TestEnv :: new ( ) ;
131
- env. start ( api:: Version :: V1 ) . await ;
121
+ #[ tokio:: test]
122
+ async fn it_should_not_allow_guests_to_delete_categories ( ) {
123
+ let mut env = TestEnv :: new ( ) ;
124
+ env. start ( api:: Version :: V1 ) . await ;
132
125
133
- let added_category_name = add_random_category ( & env) . await ;
126
+ let client = Client :: unauthenticated ( & env. server_socket_addr ( ) . unwrap ( ) ) ;
134
127
135
- // Try to add the same category again
136
- let response = add_category ( & added_category_name, & env) . await ;
128
+ let added_category_name = add_random_category ( & env) . await ;
137
129
138
- assert_eq ! ( response. status, 400 ) ;
130
+ let response = client
131
+ . delete_category ( DeleteCategoryForm {
132
+ name : added_category_name. to_string ( ) ,
133
+ icon : None ,
134
+ } )
135
+ . await ;
136
+
137
+ assert_eq ! ( response. status, 401 ) ;
138
+ }
139
139
}
140
140
141
- #[ tokio:: test]
142
- async fn it_should_allow_admins_to_delete_categories ( ) {
143
- let mut env = TestEnv :: new ( ) ;
144
- env. start ( api:: Version :: V1 ) . await ;
141
+ mod for_authenticated_users {
142
+ use torrust_index:: web:: api;
145
143
146
- let logged_in_admin = new_logged_in_admin ( & env) . await ;
147
- let client = Client :: authenticated ( & env. server_socket_addr ( ) . unwrap ( ) , & logged_in_admin. token ) ;
144
+ use crate :: common:: client:: Client ;
145
+ use crate :: common:: contexts:: category:: forms:: { AddCategoryForm , DeleteCategoryForm } ;
146
+ use crate :: e2e:: environment:: TestEnv ;
147
+ use crate :: e2e:: web:: api:: v1:: contexts:: category:: steps:: add_random_category;
148
+ use crate :: e2e:: web:: api:: v1:: contexts:: user:: steps:: new_logged_in_user;
148
149
149
- let added_category_name = add_random_category ( & env) . await ;
150
+ #[ tokio:: test]
151
+ async fn it_should_allow_authenticated_users_to_get_the_categories ( ) {
152
+ let mut env = TestEnv :: new ( ) ;
150
153
151
- let response = client
152
- . delete_category ( DeleteCategoryForm {
153
- name : added_category_name. to_string ( ) ,
154
- icon : None ,
155
- } )
156
- . await ;
154
+ env. start ( api:: Version :: V1 ) . await ;
157
155
158
- assert_deleted_category_response ( & response, & added_category_name) ;
159
- }
156
+ let authenticated_user = new_logged_in_user ( & env) . await ;
160
157
161
- #[ tokio:: test]
162
- async fn it_should_not_allow_non_admins_to_delete_categories ( ) {
163
- let mut env = TestEnv :: new ( ) ;
164
- env. start ( api:: Version :: V1 ) . await ;
158
+ let client = Client :: authenticated ( & env. server_socket_addr ( ) . unwrap ( ) , & authenticated_user. token ) ;
165
159
166
- let added_category_name = add_random_category ( & env ) . await ;
160
+ let response = client . get_categories ( ) . await ;
167
161
168
- let logged_in_non_admin = new_logged_in_user ( & env ) . await ;
169
- let client = Client :: authenticated ( & env . server_socket_addr ( ) . unwrap ( ) , & logged_in_non_admin . token ) ;
162
+ assert_eq ! ( response . status , 200 ) ;
163
+ }
170
164
171
- let response = client
172
- . delete_category ( DeleteCategoryForm {
173
- name : added_category_name. to_string ( ) ,
174
- icon : None ,
175
- } )
176
- . await ;
165
+ #[ tokio:: test]
166
+ async fn it_should_not_allow_adding_a_new_category_to_authenticated_users ( ) {
167
+ let mut env = TestEnv :: new ( ) ;
168
+ env. start ( api:: Version :: V1 ) . await ;
177
169
178
- assert_eq ! ( response. status, 403 ) ;
170
+ let logged_non_admin = new_logged_in_user ( & env) . await ;
171
+
172
+ let client = Client :: authenticated ( & env. server_socket_addr ( ) . unwrap ( ) , & logged_non_admin. token ) ;
173
+
174
+ let response = client
175
+ . add_category ( AddCategoryForm {
176
+ name : "CATEGORY NAME" . to_string ( ) ,
177
+ icon : None ,
178
+ } )
179
+ . await ;
180
+
181
+ assert_eq ! ( response. status, 403 ) ;
182
+ }
183
+
184
+ #[ tokio:: test]
185
+ async fn it_should_not_allow_authenticated_users_to_delete_categories ( ) {
186
+ let mut env = TestEnv :: new ( ) ;
187
+ env. start ( api:: Version :: V1 ) . await ;
188
+
189
+ let added_category_name = add_random_category ( & env) . await ;
190
+
191
+ let logged_in_non_admin = new_logged_in_user ( & env) . await ;
192
+ let client = Client :: authenticated ( & env. server_socket_addr ( ) . unwrap ( ) , & logged_in_non_admin. token ) ;
193
+
194
+ let response = client
195
+ . delete_category ( DeleteCategoryForm {
196
+ name : added_category_name. to_string ( ) ,
197
+ icon : None ,
198
+ } )
199
+ . await ;
200
+
201
+ assert_eq ! ( response. status, 403 ) ;
202
+ }
179
203
}
180
204
181
- #[ tokio:: test]
182
- async fn it_should_not_allow_guests_to_delete_categories ( ) {
183
- let mut env = TestEnv :: new ( ) ;
184
- env. start ( api:: Version :: V1 ) . await ;
205
+ mod for_admin_users {
185
206
186
- let client = Client :: unauthenticated ( & env . server_socket_addr ( ) . unwrap ( ) ) ;
207
+ use torrust_index :: web :: api ;
187
208
188
- let added_category_name = add_random_category ( & env) . await ;
209
+ use crate :: common:: client:: Client ;
210
+ use crate :: common:: contexts:: category:: asserts:: { assert_added_category_response, assert_deleted_category_response} ;
211
+ use crate :: common:: contexts:: category:: fixtures:: random_category_name;
212
+ use crate :: common:: contexts:: category:: forms:: { AddCategoryForm , DeleteCategoryForm } ;
213
+ use crate :: e2e:: environment:: TestEnv ;
214
+ use crate :: e2e:: web:: api:: v1:: contexts:: category:: steps:: add_random_category;
215
+ use crate :: e2e:: web:: api:: v1:: contexts:: user:: steps:: new_logged_in_admin;
216
+
217
+ #[ tokio:: test]
218
+ async fn it_should_allow_admins_to_get_categories ( ) {
219
+ let mut env = TestEnv :: new ( ) ;
189
220
190
- let response = client
191
- . delete_category ( DeleteCategoryForm {
192
- name : added_category_name. to_string ( ) ,
193
- icon : None ,
194
- } )
195
- . await ;
221
+ env. start ( api:: Version :: V1 ) . await ;
196
222
197
- assert_eq ! ( response. status, 401 ) ;
223
+ let logged_in_admin = new_logged_in_admin ( & env) . await ;
224
+
225
+ let client = Client :: authenticated ( & env. server_socket_addr ( ) . unwrap ( ) , & logged_in_admin. token ) ;
226
+
227
+ let response = client. get_categories ( ) . await ;
228
+
229
+ assert_eq ! ( response. status, 200 ) ;
230
+ }
231
+
232
+ #[ tokio:: test]
233
+ async fn it_should_allow_admins_to_add_new_categories ( ) {
234
+ let mut env = TestEnv :: new ( ) ;
235
+ env. start ( api:: Version :: V1 ) . await ;
236
+
237
+ let logged_in_admin = new_logged_in_admin ( & env) . await ;
238
+ let client = Client :: authenticated ( & env. server_socket_addr ( ) . unwrap ( ) , & logged_in_admin. token ) ;
239
+
240
+ let category_name = random_category_name ( ) ;
241
+
242
+ let response = client
243
+ . add_category ( AddCategoryForm {
244
+ name : category_name. to_string ( ) ,
245
+ icon : None ,
246
+ } )
247
+ . await ;
248
+
249
+ assert_added_category_response ( & response, & category_name) ;
250
+ }
251
+
252
+ #[ tokio:: test]
253
+ async fn it_should_allow_admins_to_delete_categories ( ) {
254
+ let mut env = TestEnv :: new ( ) ;
255
+ env. start ( api:: Version :: V1 ) . await ;
256
+
257
+ let logged_in_admin = new_logged_in_admin ( & env) . await ;
258
+ let client = Client :: authenticated ( & env. server_socket_addr ( ) . unwrap ( ) , & logged_in_admin. token ) ;
259
+
260
+ let added_category_name = add_random_category ( & env) . await ;
261
+
262
+ let response = client
263
+ . delete_category ( DeleteCategoryForm {
264
+ name : added_category_name. to_string ( ) ,
265
+ icon : None ,
266
+ } )
267
+ . await ;
268
+
269
+ assert_deleted_category_response ( & response, & added_category_name) ;
270
+ }
198
271
}
0 commit comments