Skip to content

Commit 7e582e8

Browse files
authored
Merge pull request #1118 from kenkoooo/fix/actix-test
rewrite tests
2 parents e17d7a0 + 8cabf81 commit 7e582e8

File tree

3 files changed

+99
-164
lines changed

3 files changed

+99
-164
lines changed

atcoder-problems-backend/tests/test_server_e2e_ac_ranking.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
use actix_web::http::StatusCode;
12
use actix_web::{test, web, App};
23
use atcoder_problems_backend::server::config_services;
3-
use reqwest::StatusCode;
44
use serde_json::{json, Value};
55

66
pub mod utils;
Lines changed: 21 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
use rand::Rng;
1+
use actix_web::{test, web, App};
2+
use atcoder_problems_backend::server::config_services;
23
use serde_json::{json, Value};
34
use sql_client::PgPool;
45

@@ -30,55 +31,31 @@ async fn insert_data_set2(conn: &PgPool) {
3031
.unwrap();
3132
}
3233

33-
fn url(path: &str, port: u16) -> String {
34-
format!("http://localhost:{}{}", port, path)
35-
}
36-
37-
async fn setup() -> (u16, PgPool) {
38-
let conn = utils::initialize_and_connect_to_test_sql().await;
39-
let mut rng = rand::thread_rng();
40-
(rng.gen::<u16>() % 30000 + 30000, conn)
41-
}
42-
4334
#[actix_web::test]
4435
async fn test_language_count() {
45-
let (port, conn) = setup().await;
46-
let server = actix_web::rt::spawn(async move {
47-
let pg_pool = sql_client::initialize_pool(utils::get_sql_url_from_env())
48-
.await
49-
.unwrap();
50-
51-
actix_web::HttpServer::new(move || {
52-
actix_web::App::new()
53-
.app_data(actix_web::web::Data::new(pg_pool.clone()))
54-
.configure(atcoder_problems_backend::server::config_services)
55-
})
56-
.bind(("0.0.0.0", port))
57-
.unwrap()
58-
.run()
59-
.await
60-
.unwrap();
61-
});
62-
actix_web::rt::time::sleep(std::time::Duration::from_millis(1000)).await;
36+
let conn = utils::initialize_and_connect_to_test_sql().await;
37+
let mut app = test::init_service(
38+
App::new()
39+
.app_data(web::Data::new(conn.clone()))
40+
.configure(config_services),
41+
)
42+
.await;
6343

6444
insert_data_set1(&conn).await;
65-
let response = reqwest::get(url("/atcoder-api/v3/language_list", port))
66-
.await
67-
.unwrap()
68-
.json::<Value>()
69-
.await
70-
.unwrap();
45+
let request = test::TestRequest::get()
46+
.uri("/atcoder-api/v3/language_list")
47+
.to_request();
48+
let response = test::call_service(&mut app, request).await;
49+
assert_eq!(response.status(), actix_web::http::StatusCode::OK);
50+
let response: Value = test::read_body_json(response).await;
7151
assert_eq!(response, json!(["lang1", "lang2", "lang3"]));
7252

7353
insert_data_set2(&conn).await;
74-
let response = reqwest::get(url("/atcoder-api/v3/language_list", port))
75-
.await
76-
.unwrap()
77-
.json::<Value>()
78-
.await
79-
.unwrap();
54+
let request = test::TestRequest::get()
55+
.uri("/atcoder-api/v3/language_list")
56+
.to_request();
57+
let response = test::call_service(&mut app, request).await;
58+
assert_eq!(response.status(), actix_web::http::StatusCode::OK);
59+
let response: Value = test::read_body_json(response).await;
8060
assert_eq!(response, json!(["lang1", "lang2", "lang3", "lang4"]));
81-
82-
server.abort();
83-
server.await.unwrap_err();
8461
}
Lines changed: 77 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
use rand::Rng;
1+
use actix_web::{test, web, App};
2+
use atcoder_problems_backend::server::config_services;
23
use serde_json::{json, Value};
34
use sql_client::PgPool;
45

@@ -21,45 +22,23 @@ async fn prepare_data_set(conn: &PgPool) {
2122
.unwrap();
2223
}
2324

24-
fn url(path: &str, port: u16) -> String {
25-
format!("http://localhost:{}{}", port, path)
26-
}
27-
28-
async fn setup() -> u16 {
29-
prepare_data_set(&utils::initialize_and_connect_to_test_sql().await).await;
30-
let mut rng = rand::thread_rng();
31-
rng.gen::<u16>() % 30000 + 30000
32-
}
33-
3425
#[actix_web::test]
3526
async fn test_language_ranking() {
36-
let port = setup().await;
37-
let server = actix_web::rt::spawn(async move {
38-
let pg_pool = sql_client::initialize_pool(utils::get_sql_url_from_env())
39-
.await
40-
.unwrap();
41-
actix_web::HttpServer::new(move || {
42-
actix_web::App::new()
43-
.app_data(actix_web::web::Data::new(pg_pool.clone()))
44-
.configure(atcoder_problems_backend::server::config_services)
45-
})
46-
.bind(("0.0.0.0", port))
47-
.unwrap()
48-
.run()
49-
.await
50-
.unwrap();
51-
});
52-
actix_web::rt::time::sleep(std::time::Duration::from_millis(1000)).await;
53-
54-
let response = reqwest::get(url(
55-
"/atcoder-api/v3/language_ranking?from=1&to=3&language=lang2",
56-
port,
57-
))
58-
.await
59-
.unwrap()
60-
.json::<Value>()
61-
.await
62-
.unwrap();
27+
let conn = utils::initialize_and_connect_to_test_sql().await;
28+
prepare_data_set(&conn).await;
29+
let mut app = test::init_service(
30+
App::new()
31+
.app_data(web::Data::new(conn.clone()))
32+
.configure(config_services),
33+
)
34+
.await;
35+
36+
let request = test::TestRequest::get()
37+
.uri("/atcoder-api/v3/language_ranking?from=1&to=3&language=lang2")
38+
.to_request();
39+
let response = test::call_service(&mut app, request).await;
40+
assert_eq!(response.status(), actix_web::http::StatusCode::OK);
41+
let response: Value = test::read_body_json(response).await;
6342
assert_eq!(
6443
response,
6544
json!([
@@ -68,77 +47,61 @@ async fn test_language_ranking() {
6847
])
6948
);
7049

71-
let response = reqwest::get(url(
72-
"/atcoder-api/v3/language_ranking?from=0&to=1&language=lang2",
73-
port,
74-
))
75-
.await
76-
.unwrap()
77-
.json::<Value>()
78-
.await
79-
.unwrap();
50+
let request = test::TestRequest::get()
51+
.uri("/atcoder-api/v3/language_ranking?from=0&to=1&language=lang2")
52+
.to_request();
53+
let response = test::call_service(&mut app, request).await;
54+
assert_eq!(response.status(), actix_web::http::StatusCode::OK);
55+
let response: Value = test::read_body_json(response).await;
8056
assert_eq!(
8157
response,
8258
json!([
8359
{"user_id": "user2", "count": 2}
8460
])
8561
);
8662

87-
let response = reqwest::get(url(
88-
"/atcoder-api/v3/language_ranking?from=10&to=20&language=lang2",
89-
port,
90-
))
91-
.await
92-
.unwrap()
93-
.json::<Value>()
94-
.await
95-
.unwrap();
63+
let request = test::TestRequest::get()
64+
.uri("/atcoder-api/v3/language_ranking?from=10&to=20&language=lang2")
65+
.to_request();
66+
let response = test::call_service(&mut app, request).await;
67+
assert_eq!(response.status(), actix_web::http::StatusCode::OK);
68+
let response: Value = test::read_body_json(response).await;
9669
assert!(response.as_array().unwrap().is_empty());
9770

98-
let response = reqwest::get(url(
99-
"/atcoder-api/v3/language_ranking?from=0&to=1&language=does_not_exist",
100-
port,
101-
))
102-
.await
103-
.unwrap()
104-
.json::<Value>()
105-
.await
106-
.unwrap();
71+
let request = test::TestRequest::get()
72+
.uri("/atcoder-api/v3/language_ranking?from=0&to=1&language=does_not_exist")
73+
.to_request();
74+
let response = test::call_service(&mut app, request).await;
75+
assert_eq!(response.status(), actix_web::http::StatusCode::OK);
76+
let response: Value = test::read_body_json(response).await;
10777
assert!(response.as_array().unwrap().is_empty());
10878

109-
let response = reqwest::get(url(
110-
"/atcoder-api/v3/language_ranking?from=0&to=2000&language=lang2",
111-
port,
112-
))
113-
.await
114-
.unwrap();
79+
let request = test::TestRequest::get()
80+
.uri("/atcoder-api/v3/language_ranking?from=0&to=2000&language=lang2")
81+
.to_request();
82+
let response = test::call_service(&mut app, request).await;
11583
assert_eq!(response.status(), 400);
11684

117-
let response = reqwest::get(url(
118-
"/atcoder-api/v3/language_ranking?from=1&to=0&language=lang2",
119-
port,
120-
))
121-
.await
122-
.unwrap()
123-
.json::<Value>()
124-
.await
125-
.unwrap();
85+
let request = test::TestRequest::get()
86+
.uri("/atcoder-api/v3/language_ranking?from=1&to=0&language=lang2")
87+
.to_request();
88+
let response = test::call_service(&mut app, request).await;
89+
assert_eq!(response.status(), actix_web::http::StatusCode::OK);
90+
let response: Value = test::read_body_json(response).await;
12691
assert!(response.as_array().unwrap().is_empty());
12792

128-
let response = reqwest::get(url(
129-
"/atcoder-api/v3/language_ranking?from=-1&to=0&language=lang2",
130-
port,
131-
))
132-
.await
133-
.unwrap();
93+
let request = test::TestRequest::get()
94+
.uri("/atcoder-api/v3/language_ranking?from=-1&to=0&language=lang2")
95+
.to_request();
96+
let response = test::call_service(&mut app, request).await;
13497
assert_eq!(response.status(), 400);
13598

136-
let response = reqwest::get(url("/atcoder-api/v3/user/language_rank?user=user1", port))
137-
.await
138-
.unwrap()
139-
.json::<Value>()
140-
.await
141-
.unwrap();
99+
let request = test::TestRequest::get()
100+
.uri("/atcoder-api/v3/user/language_rank?user=user1")
101+
.to_request();
102+
let response = test::call_service(&mut app, request).await;
103+
assert_eq!(response.status(), actix_web::http::StatusCode::OK);
104+
let response: Value = test::read_body_json(response).await;
142105
assert_eq!(
143106
response,
144107
json!([
@@ -160,12 +123,12 @@ async fn test_language_ranking() {
160123
])
161124
);
162125

163-
let response = reqwest::get(url("/atcoder-api/v3/user/language_rank?user=user2", port))
164-
.await
165-
.unwrap()
166-
.json::<Value>()
167-
.await
168-
.unwrap();
126+
let request = test::TestRequest::get()
127+
.uri("/atcoder-api/v3/user/language_rank?user=user2")
128+
.to_request();
129+
let response = test::call_service(&mut app, request).await;
130+
assert_eq!(response.status(), actix_web::http::StatusCode::OK);
131+
let response: Value = test::read_body_json(response).await;
169132
assert_eq!(
170133
response,
171134
json!([
@@ -182,12 +145,12 @@ async fn test_language_ranking() {
182145
])
183146
);
184147

185-
let response = reqwest::get(url("/atcoder-api/v3/user/language_rank?user=user3", port))
186-
.await
187-
.unwrap()
188-
.json::<Value>()
189-
.await
190-
.unwrap();
148+
let request = test::TestRequest::get()
149+
.uri("/atcoder-api/v3/user/language_rank?user=user3")
150+
.to_request();
151+
let response = test::call_service(&mut app, request).await;
152+
assert_eq!(response.status(), actix_web::http::StatusCode::OK);
153+
let response: Value = test::read_body_json(response).await;
191154
assert_eq!(
192155
response,
193156
json!([
@@ -204,22 +167,17 @@ async fn test_language_ranking() {
204167
])
205168
);
206169

207-
let response = reqwest::get(url(
208-
"/atcoder-api/v3/user/language_rank?user=does_not_exist",
209-
port,
210-
))
211-
.await
212-
.unwrap()
213-
.json::<Value>()
214-
.await
215-
.unwrap();
170+
let request = test::TestRequest::get()
171+
.uri("/atcoder-api/v3/user/language_rank?user=does_not_exist")
172+
.to_request();
173+
let response = test::call_service(&mut app, request).await;
174+
assert_eq!(response.status(), actix_web::http::StatusCode::OK);
175+
let response: Value = test::read_body_json(response).await;
216176
assert_eq!(response, json!([]));
217177

218-
let response = reqwest::get(url("/atcoder-api/v3/user/language_rank?bad=request", port))
219-
.await
220-
.unwrap();
178+
let request = test::TestRequest::get()
179+
.uri("/atcoder-api/v3/user/language_rank?bad=request")
180+
.to_request();
181+
let response = test::call_service(&mut app, request).await;
221182
assert_eq!(response.status(), 400);
222-
223-
server.abort();
224-
server.await.unwrap_err();
225183
}

0 commit comments

Comments
 (0)