@@ -80,7 +80,7 @@ pub(crate) async fn service(
8080 rb. append_header ( ( PARENT_VERSION_ID_HEADER , parent_version_id. to_string ( ) ) ) ;
8181 Ok ( rb. finish ( ) )
8282 }
83- Err ( ServerError :: NoSuchClient ) => {
83+ Err ( ServerError :: NoSuchClient ) if server_state . web_config . create_clients => {
8484 // Create a new client and repeat the `add_version` call.
8585 let mut txn = server_state
8686 . server
@@ -97,11 +97,11 @@ pub(crate) async fn service(
9797
9898#[ cfg( test) ]
9999mod test {
100- use crate :: api:: CLIENT_ID_HEADER ;
101100 use crate :: WebServer ;
101+ use crate :: { api:: CLIENT_ID_HEADER , WebConfig } ;
102102 use actix_web:: { http:: StatusCode , test, App } ;
103103 use pretty_assertions:: assert_eq;
104- use taskchampion_sync_server_core:: { InMemoryStorage , Storage } ;
104+ use taskchampion_sync_server_core:: { InMemoryStorage , ServerConfig , Storage } ;
105105 use uuid:: Uuid ;
106106
107107 #[ actix_rt:: test]
@@ -118,11 +118,11 @@ mod test {
118118 txn. commit ( ) . unwrap ( ) ;
119119 }
120120
121- let server = WebServer :: new ( Default :: default ( ) , None , storage) ;
121+ let server = WebServer :: new ( ServerConfig :: default ( ) , WebConfig :: default ( ) , storage) ;
122122 let app = App :: new ( ) . configure ( |sc| server. config ( sc) ) ;
123123 let app = test:: init_service ( app) . await ;
124124
125- let uri = format ! ( "/v1/client/add-version/{}" , parent_version_id ) ;
125+ let uri = format ! ( "/v1/client/add-version/{parent_version_id}" ) ;
126126 let req = test:: TestRequest :: post ( )
127127 . uri ( & uri)
128128 . append_header ( (
@@ -152,11 +152,15 @@ mod test {
152152 let client_id = Uuid :: new_v4 ( ) ;
153153 let version_id = Uuid :: new_v4 ( ) ;
154154 let parent_version_id = Uuid :: new_v4 ( ) ;
155- let server = WebServer :: new ( Default :: default ( ) , None , InMemoryStorage :: new ( ) ) ;
155+ let server = WebServer :: new (
156+ ServerConfig :: default ( ) ,
157+ WebConfig :: default ( ) ,
158+ InMemoryStorage :: new ( ) ,
159+ ) ;
156160 let app = App :: new ( ) . configure ( |sc| server. config ( sc) ) ;
157161 let app = test:: init_service ( app) . await ;
158162
159- let uri = format ! ( "/v1/client/add-version/{}" , parent_version_id ) ;
163+ let uri = format ! ( "/v1/client/add-version/{parent_version_id}" ) ;
160164 let req = test:: TestRequest :: post ( )
161165 . uri ( & uri)
162166 . append_header ( (
@@ -190,6 +194,36 @@ mod test {
190194 }
191195 }
192196
197+ #[ actix_rt:: test]
198+ async fn test_auto_add_client_disabled ( ) {
199+ let client_id = Uuid :: new_v4 ( ) ;
200+ let parent_version_id = Uuid :: new_v4 ( ) ;
201+ let server = WebServer :: new (
202+ ServerConfig :: default ( ) ,
203+ WebConfig {
204+ create_clients : false ,
205+ ..WebConfig :: default ( )
206+ } ,
207+ InMemoryStorage :: new ( ) ,
208+ ) ;
209+ let app = App :: new ( ) . configure ( |sc| server. config ( sc) ) ;
210+ let app = test:: init_service ( app) . await ;
211+
212+ let uri = format ! ( "/v1/client/add-version/{parent_version_id}" ) ;
213+ let req = test:: TestRequest :: post ( )
214+ . uri ( & uri)
215+ . append_header ( (
216+ "Content-Type" ,
217+ "application/vnd.taskchampion.history-segment" ,
218+ ) )
219+ . append_header ( ( CLIENT_ID_HEADER , client_id. to_string ( ) ) )
220+ . set_payload ( b"abcd" . to_vec ( ) )
221+ . to_request ( ) ;
222+ let resp = test:: call_service ( & app, req) . await ;
223+ // Client is not added, and returns 404.
224+ assert_eq ! ( resp. status( ) , StatusCode :: NOT_FOUND ) ;
225+ }
226+
193227 #[ actix_rt:: test]
194228 async fn test_conflict ( ) {
195229 let client_id = Uuid :: new_v4 ( ) ;
@@ -204,11 +238,11 @@ mod test {
204238 txn. commit ( ) . unwrap ( ) ;
205239 }
206240
207- let server = WebServer :: new ( Default :: default ( ) , None , storage) ;
241+ let server = WebServer :: new ( ServerConfig :: default ( ) , WebConfig :: default ( ) , storage) ;
208242 let app = App :: new ( ) . configure ( |sc| server. config ( sc) ) ;
209243 let app = test:: init_service ( app) . await ;
210244
211- let uri = format ! ( "/v1/client/add-version/{}" , parent_version_id ) ;
245+ let uri = format ! ( "/v1/client/add-version/{parent_version_id}" ) ;
212246 let req = test:: TestRequest :: post ( )
213247 . uri ( & uri)
214248 . append_header ( (
@@ -232,11 +266,11 @@ mod test {
232266 let client_id = Uuid :: new_v4 ( ) ;
233267 let parent_version_id = Uuid :: new_v4 ( ) ;
234268 let storage = InMemoryStorage :: new ( ) ;
235- let server = WebServer :: new ( Default :: default ( ) , None , storage) ;
269+ let server = WebServer :: new ( ServerConfig :: default ( ) , WebConfig :: default ( ) , storage) ;
236270 let app = App :: new ( ) . configure ( |sc| server. config ( sc) ) ;
237271 let app = test:: init_service ( app) . await ;
238272
239- let uri = format ! ( "/v1/client/add-version/{}" , parent_version_id ) ;
273+ let uri = format ! ( "/v1/client/add-version/{parent_version_id}" ) ;
240274 let req = test:: TestRequest :: post ( )
241275 . uri ( & uri)
242276 . append_header ( ( "Content-Type" , "not/correct" ) )
@@ -252,11 +286,11 @@ mod test {
252286 let client_id = Uuid :: new_v4 ( ) ;
253287 let parent_version_id = Uuid :: new_v4 ( ) ;
254288 let storage = InMemoryStorage :: new ( ) ;
255- let server = WebServer :: new ( Default :: default ( ) , None , storage) ;
289+ let server = WebServer :: new ( ServerConfig :: default ( ) , WebConfig :: default ( ) , storage) ;
256290 let app = App :: new ( ) . configure ( |sc| server. config ( sc) ) ;
257291 let app = test:: init_service ( app) . await ;
258292
259- let uri = format ! ( "/v1/client/add-version/{}" , parent_version_id ) ;
293+ let uri = format ! ( "/v1/client/add-version/{parent_version_id}" ) ;
260294 let req = test:: TestRequest :: post ( )
261295 . uri ( & uri)
262296 . append_header ( (
0 commit comments