1
- use rand:: Rng ;
1
+ use actix_web:: { test, web, App } ;
2
+ use atcoder_problems_backend:: server:: config_services;
2
3
use serde_json:: { json, Value } ;
3
4
use sql_client:: PgPool ;
4
5
@@ -21,45 +22,23 @@ async fn prepare_data_set(conn: &PgPool) {
21
22
. unwrap ( ) ;
22
23
}
23
24
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
-
34
25
#[ actix_web:: test]
35
26
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 ;
63
42
assert_eq ! (
64
43
response,
65
44
json!( [
@@ -68,77 +47,61 @@ async fn test_language_ranking() {
68
47
] )
69
48
) ;
70
49
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 ;
80
56
assert_eq ! (
81
57
response,
82
58
json!( [
83
59
{ "user_id" : "user2" , "count" : 2 }
84
60
] )
85
61
) ;
86
62
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 ;
96
69
assert ! ( response. as_array( ) . unwrap( ) . is_empty( ) ) ;
97
70
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 ;
107
77
assert ! ( response. as_array( ) . unwrap( ) . is_empty( ) ) ;
108
78
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 ;
115
83
assert_eq ! ( response. status( ) , 400 ) ;
116
84
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 ;
126
91
assert ! ( response. as_array( ) . unwrap( ) . is_empty( ) ) ;
127
92
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 ;
134
97
assert_eq ! ( response. status( ) , 400 ) ;
135
98
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 ;
142
105
assert_eq ! (
143
106
response,
144
107
json!( [
@@ -160,12 +123,12 @@ async fn test_language_ranking() {
160
123
] )
161
124
) ;
162
125
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 ;
169
132
assert_eq ! (
170
133
response,
171
134
json!( [
@@ -182,12 +145,12 @@ async fn test_language_ranking() {
182
145
] )
183
146
) ;
184
147
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 ;
191
154
assert_eq ! (
192
155
response,
193
156
json!( [
@@ -204,22 +167,17 @@ async fn test_language_ranking() {
204
167
] )
205
168
) ;
206
169
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 ;
216
176
assert_eq ! ( response, json!( [ ] ) ) ;
217
177
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 ;
221
182
assert_eq ! ( response. status( ) , 400 ) ;
222
-
223
- server. abort ( ) ;
224
- server. await . unwrap_err ( ) ;
225
183
}
0 commit comments