Skip to content

Commit f2f1c57

Browse files
committed
test: added authorization tests for the category context
1 parent 2f35d64 commit f2f1c57

File tree

1 file changed

+173
-100
lines changed

1 file changed

+173
-100
lines changed

tests/e2e/web/api/v1/contexts/category/contract.rs

+173-100
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,11 @@ use torrust_index::web::api;
44

55
use crate::common::asserts::assert_json_ok_response;
66
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;
108
use crate::common::contexts::category::responses::ListResponse;
119
use crate::e2e::environment::TestEnv;
1210
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;
1412

1513
#[tokio::test]
1614
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() {
4846
}
4947

5048
#[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() {
5250
let mut env = TestEnv::new();
5351
env.start(api::Version::V1).await;
5452

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);
5655

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()];
6357

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+
}
6568
}
6669

6770
#[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() {
6972
let mut env = TestEnv::new();
7073
env.start(api::Version::V1).await;
7174

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;
7576

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;
8279

83-
assert_eq!(response.status, 403);
80+
assert_eq!(response.status, 400);
8481
}
8582

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;
9085

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;
9390

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();
9594

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;
10296

103-
assert_added_category_response(&response, &category_name);
104-
}
97+
let client = Client::unauthenticated(&env.server_socket_addr().unwrap());
10598

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;
110100

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+
}
113103

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());
115110

116-
for invalid_name in invalid_category_names {
117111
let response = client
118112
.add_category(AddCategoryForm {
119-
name: invalid_name,
113+
name: "CATEGORY NAME".to_string(),
120114
icon: None,
121115
})
122116
.await;
123117

124-
assert_eq!(response.status, 400);
118+
assert_eq!(response.status, 401);
125119
}
126-
}
127120

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;
132125

133-
let added_category_name = add_random_category(&env).await;
126+
let client = Client::unauthenticated(&env.server_socket_addr().unwrap());
134127

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;
137129

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+
}
139139
}
140140

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;
145143

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;
148149

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();
150153

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;
157155

158-
assert_deleted_category_response(&response, &added_category_name);
159-
}
156+
let authenticated_user = new_logged_in_user(&env).await;
160157

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);
165159

166-
let added_category_name = add_random_category(&env).await;
160+
let response = client.get_categories().await;
167161

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+
}
170164

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;
177169

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+
}
179203
}
180204

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 {
185206

186-
let client = Client::unauthenticated(&env.server_socket_addr().unwrap());
207+
use torrust_index::web::api;
187208

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();
189220

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;
196222

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+
}
198271
}

0 commit comments

Comments
 (0)