1
- use actix_web:: Result ;
1
+ use actix_web:: { test, web, App } ;
2
+ use anyhow:: Result ;
2
3
use async_trait:: async_trait;
3
- use atcoder_problems_backend:: server:: { run_server, Authentication , GitHubUserResponse } ;
4
- use rand:: Rng ;
4
+ use atcoder_problems_backend:: server:: {
5
+ config_services, AppData , Authentication , GitHubUserResponse ,
6
+ } ;
7
+ use reqwest:: StatusCode ;
5
8
use serde_json:: { json, Value } ;
6
- use sql_client:: PgPool ;
7
9
8
10
pub mod utils;
9
11
@@ -12,50 +14,39 @@ struct MockAuth;
12
14
13
15
#[ async_trait( ?Send ) ]
14
16
impl Authentication for MockAuth {
15
- async fn get_token ( & self , _: & str ) -> Result < String > {
17
+ async fn get_token ( & self , _: & str ) -> actix_web :: Result < String > {
16
18
unimplemented ! ( )
17
19
}
18
- async fn get_user_id ( & self , _: & str ) -> Result < GitHubUserResponse > {
20
+ async fn get_user_id ( & self , _: & str ) -> actix_web :: Result < GitHubUserResponse > {
19
21
unimplemented ! ( )
20
22
}
21
23
}
22
24
23
- async fn prepare_data_set ( conn : & PgPool ) {
25
+ #[ actix_web:: test]
26
+ async fn test_ac_ranking ( ) -> Result < ( ) > {
27
+ let pg_pool = sql_client:: initialize_pool ( utils:: get_sql_url_from_env ( ) ) . await ?;
28
+ sql_client:: query ( "TRUNCATE accepted_count" )
29
+ . execute ( & pg_pool)
30
+ . await ?;
24
31
sql_client:: query (
25
32
r"INSERT INTO accepted_count (user_id, problem_count) VALUES ('u1', 1), ('u2', 2), ('u3', 1)" ,
26
33
)
27
- . execute ( conn)
28
- . await
29
- . unwrap ( ) ;
30
- }
31
-
32
- fn url ( path : & str , port : u16 ) -> String {
33
- format ! ( "http://localhost:{}{}" , port, path)
34
- }
35
-
36
- async fn setup ( ) -> u16 {
37
- prepare_data_set ( & utils:: initialize_and_connect_to_test_sql ( ) . await ) . await ;
38
- let mut rng = rand:: thread_rng ( ) ;
39
- rng. gen :: < u16 > ( ) % 30000 + 30000
40
- }
41
-
42
- #[ actix_web:: test]
43
- async fn test_ac_ranking ( ) {
44
- let port = setup ( ) . await ;
45
- let server = actix_web:: rt:: spawn ( async move {
46
- let pg_pool = sql_client:: initialize_pool ( utils:: get_sql_url_from_env ( ) )
47
- . await
48
- . unwrap ( ) ;
49
- run_server ( pg_pool, MockAuth , port) . await . unwrap ( ) ;
50
- } ) ;
51
- actix_web:: rt:: time:: sleep ( std:: time:: Duration :: from_millis ( 1000 ) ) . await ;
52
-
53
- let response = reqwest:: get ( url ( "/atcoder-api/v3/ac_ranking?from=0&to=10" , port) )
54
- . await
55
- . unwrap ( )
56
- . json :: < Value > ( )
57
- . await
58
- . unwrap ( ) ;
34
+ . execute ( & pg_pool)
35
+ . await ?;
36
+ let app_data = AppData :: new ( pg_pool, MockAuth ) ;
37
+ let mut app = test:: init_service (
38
+ App :: new ( )
39
+ . app_data ( web:: Data :: new ( app_data) )
40
+ . configure ( config_services :: < MockAuth > ) ,
41
+ )
42
+ . await ;
43
+
44
+ let request = test:: TestRequest :: get ( )
45
+ . uri ( "/atcoder-api/v3/ac_ranking?from=0&to=10" )
46
+ . to_request ( ) ;
47
+ let response = test:: call_service ( & mut app, request) . await ;
48
+ assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
49
+ let response: Value = test:: read_body_json ( response) . await ;
59
50
assert_eq ! (
60
51
response,
61
52
json!( [
@@ -65,12 +56,12 @@ async fn test_ac_ranking() {
65
56
] )
66
57
) ;
67
58
68
- let response = reqwest :: get ( url ( "/atcoder-api/v3/ac_ranking?from=1&to=3" , port ) )
69
- . await
70
- . unwrap ( )
71
- . json :: < Value > ( )
72
- . await
73
- . unwrap ( ) ;
59
+ let request = test :: TestRequest :: get ( )
60
+ . uri ( "/atcoder-api/v3/ac_ranking?from=1&to=3" )
61
+ . to_request ( ) ;
62
+ let response = test :: call_service ( & mut app , request ) . await ;
63
+ assert_eq ! ( response . status ( ) , StatusCode :: OK ) ;
64
+ let response : Value = test :: read_body_json ( response ) . await ;
74
65
assert_eq ! (
75
66
response,
76
67
json!( [
@@ -79,80 +70,79 @@ async fn test_ac_ranking() {
79
70
] )
80
71
) ;
81
72
82
- let response = reqwest :: get ( url ( "/atcoder-api/v3/ac_ranking?from=10&to=0" , port ) )
83
- . await
84
- . unwrap ( )
85
- . json :: < Value > ( )
86
- . await
87
- . unwrap ( ) ;
73
+ let request = test :: TestRequest :: get ( )
74
+ . uri ( "/atcoder-api/v3/ac_ranking?from=10&to=0" )
75
+ . to_request ( ) ;
76
+ let response = test :: call_service ( & mut app , request ) . await ;
77
+ assert_eq ! ( response . status ( ) , StatusCode :: OK ) ;
78
+ let response : Value = test :: read_body_json ( response ) . await ;
88
79
assert_eq ! ( response. as_array( ) . unwrap( ) . len( ) , 0 ) ;
89
80
90
- let response = reqwest:: get ( url ( "/atcoder-api/v3/ac_ranking?from=0&to=2000" , port) )
91
- . await
92
- . unwrap ( ) ;
93
- assert_eq ! ( response. status( ) , 400 ) ;
94
-
95
- let response = reqwest:: get ( url ( "/atcoder-api/v3/ac_ranking?from=-1&to=10" , port) )
96
- . await
97
- . unwrap ( ) ;
98
- assert_eq ! ( response. status( ) , 400 ) ;
99
-
100
- let response = reqwest:: get ( url ( "/atcoder-api/v3/user/ac_rank?user=u1" , port) )
101
- . await
102
- . unwrap ( )
103
- . json :: < Value > ( )
104
- . await
105
- . unwrap ( ) ;
81
+ let request = test:: TestRequest :: get ( )
82
+ . uri ( "/atcoder-api/v3/ac_ranking?from=0&to=2000" )
83
+ . to_request ( ) ;
84
+ let response = test:: call_service ( & mut app, request) . await ;
85
+ assert_eq ! ( response. status( ) , StatusCode :: BAD_REQUEST ) ;
86
+
87
+ let request = test:: TestRequest :: get ( )
88
+ . uri ( "/atcoder-api/v3/ac_ranking?from=-1&to=10" )
89
+ . to_request ( ) ;
90
+ let response = test:: call_service ( & mut app, request) . await ;
91
+ assert_eq ! ( response. status( ) , StatusCode :: BAD_REQUEST ) ;
92
+
93
+ let request = test:: TestRequest :: get ( )
94
+ . uri ( "/atcoder-api/v3/user/ac_rank?user=u1" )
95
+ . to_request ( ) ;
96
+ let response = test:: call_service ( & mut app, request) . await ;
97
+ assert_eq ! ( response. status( ) , StatusCode :: OK ) ;
98
+ let response: Value = test:: read_body_json ( response) . await ;
106
99
assert_eq ! ( response, json!( { "count" : 1 , "rank" : 1 } ) ) ;
107
100
108
- let response = reqwest :: get ( url ( "/atcoder-api/v3/user/ac_rank?user=u2" , port ) )
109
- . await
110
- . unwrap ( )
111
- . json :: < Value > ( )
112
- . await
113
- . unwrap ( ) ;
101
+ let request = test :: TestRequest :: get ( )
102
+ . uri ( "/atcoder-api/v3/user/ac_rank?user=u2" )
103
+ . to_request ( ) ;
104
+ let response = test :: call_service ( & mut app , request ) . await ;
105
+ assert_eq ! ( response . status ( ) , StatusCode :: OK ) ;
106
+ let response : Value = test :: read_body_json ( response ) . await ;
114
107
assert_eq ! ( response, json!( { "count" : 2 , "rank" : 0 } ) ) ;
115
108
116
- let response = reqwest :: get ( url ( "/atcoder-api/v3/user/ac_rank?user=u3" , port ) )
117
- . await
118
- . unwrap ( )
119
- . json :: < Value > ( )
120
- . await
121
- . unwrap ( ) ;
109
+ let request = test :: TestRequest :: get ( )
110
+ . uri ( "/atcoder-api/v3/user/ac_rank?user=u3" )
111
+ . to_request ( ) ;
112
+ let response = test :: call_service ( & mut app , request ) . await ;
113
+ assert_eq ! ( response . status ( ) , StatusCode :: OK ) ;
114
+ let response : Value = test :: read_body_json ( response ) . await ;
122
115
assert_eq ! ( response, json!( { "count" : 1 , "rank" : 1 } ) ) ;
123
116
124
- let response = reqwest :: get ( url ( "/atcoder-api/v3/user/ac_rank?user=U1" , port ) )
125
- . await
126
- . unwrap ( )
127
- . json :: < Value > ( )
128
- . await
129
- . unwrap ( ) ;
117
+ let request = test :: TestRequest :: get ( )
118
+ . uri ( "/atcoder-api/v3/user/ac_rank?user=U1" )
119
+ . to_request ( ) ;
120
+ let response = test :: call_service ( & mut app , request ) . await ;
121
+ assert_eq ! ( response . status ( ) , StatusCode :: OK ) ;
122
+ let response : Value = test :: read_body_json ( response ) . await ;
130
123
assert_eq ! ( response, json!( { "count" : 1 , "rank" : 1 } ) ) ;
131
124
132
- let response = reqwest :: get ( url ( "/atcoder-api/v3/user/ac_rank?user=U2" , port ) )
133
- . await
134
- . unwrap ( )
135
- . json :: < Value > ( )
136
- . await
137
- . unwrap ( ) ;
125
+ let request = test :: TestRequest :: get ( )
126
+ . uri ( "/atcoder-api/v3/user/ac_rank?user=U2" )
127
+ . to_request ( ) ;
128
+ let response = test :: call_service ( & mut app , request ) . await ;
129
+ assert_eq ! ( response . status ( ) , StatusCode :: OK ) ;
130
+ let response : Value = test :: read_body_json ( response ) . await ;
138
131
assert_eq ! ( response, json!( { "count" : 2 , "rank" : 0 } ) ) ;
139
132
140
- let response = reqwest :: get ( url ( "/atcoder-api/v3/user/ac_rank?user=U3" , port ) )
141
- . await
142
- . unwrap ( )
143
- . json :: < Value > ( )
144
- . await
145
- . unwrap ( ) ;
133
+ let request = test :: TestRequest :: get ( )
134
+ . uri ( "/atcoder-api/v3/user/ac_rank?user=U3" )
135
+ . to_request ( ) ;
136
+ let response = test :: call_service ( & mut app , request ) . await ;
137
+ assert_eq ! ( response . status ( ) , StatusCode :: OK ) ;
138
+ let response : Value = test :: read_body_json ( response ) . await ;
146
139
assert_eq ! ( response, json!( { "count" : 1 , "rank" : 1 } ) ) ;
147
140
148
- let response = reqwest:: get ( url (
149
- "/atcoder-api/v3/user/ac_rank?user=does_not_exist" ,
150
- port,
151
- ) )
152
- . await
153
- . unwrap ( ) ;
154
- assert_eq ! ( response. status( ) , 404 ) ;
141
+ let request = test:: TestRequest :: get ( )
142
+ . uri ( "/atcoder-api/v3/user/ac_rank?user=does_not_exist" )
143
+ . to_request ( ) ;
144
+ let response = test:: call_service ( & mut app, request) . await ;
145
+ assert_eq ! ( response. status( ) , StatusCode :: NOT_FOUND ) ;
155
146
156
- server. abort ( ) ;
157
- server. await . unwrap_err ( ) ;
147
+ Ok ( ( ) )
158
148
}
0 commit comments