@@ -53,14 +53,17 @@ pub fn doc(operation: TransformOperation) -> TransformOperation {
5353 operation
5454 . id ( "deactivateUser" )
5555 . summary ( "Deactivate a user" )
56- . description ( "Calling this endpoint will lock and deactivate the user, preventing them from doing any action.
57- This invalidates any existing session, and will ask the homeserver to make them leave all rooms." )
56+ . description (
57+ "Calling this endpoint will deactivate the user, preventing them from doing any action.
58+ This invalidates any existing session, and will ask the homeserver to make them leave all rooms." ,
59+ )
5860 . tag ( "user" )
5961 . response_with :: < 200 , Json < SingleResponse < User > > , _ > ( |t| {
6062 // In the samples, the third user is the one locked
6163 let [ _alice, _bob, charlie, ..] = User :: samples ( ) ;
6264 let id = charlie. id ( ) ;
63- let response = SingleResponse :: new ( charlie, format ! ( "/api/admin/v1/users/{id}/deactivate" ) ) ;
65+ let response =
66+ SingleResponse :: new ( charlie, format ! ( "/api/admin/v1/users/{id}/deactivate" ) ) ;
6467 t. description ( "User was deactivated" ) . example ( response)
6568 } )
6669 . response_with :: < 404 , RouteError , _ > ( |t| {
@@ -78,15 +81,13 @@ pub async fn handler(
7881 id : UlidPathParam ,
7982) -> Result < Json < SingleResponse < User > > , RouteError > {
8083 let id = * id;
81- let mut user = repo
84+ let user = repo
8285 . user ( )
8386 . lookup ( id)
8487 . await ?
8588 . ok_or ( RouteError :: NotFound ( id) ) ?;
8689
87- if user. locked_at . is_none ( ) {
88- user = repo. user ( ) . lock ( & clock, user) . await ?;
89- }
90+ let user = repo. user ( ) . deactivate ( & clock, user) . await ?;
9091
9192 info ! ( %user. id, "Scheduling deactivation of user" ) ;
9293 repo. queue_job ( )
@@ -132,12 +133,18 @@ mod tests {
132133 response. assert_status ( StatusCode :: OK ) ;
133134 let body: serde_json:: Value = response. json ( ) ;
134135
135- // The locked_at timestamp should be the same as the current time
136+ // The deactivated_at timestamp should be the same as the current time
136137 assert_eq ! (
137- body[ "data" ] [ "attributes" ] [ "locked_at " ] ,
138+ body[ "data" ] [ "attributes" ] [ "deactivated_at " ] ,
138139 serde_json:: json!( state. clock. now( ) )
139140 ) ;
140141
142+ // Deactivating the user should not lock it
143+ assert_eq ! (
144+ body[ "data" ] [ "attributes" ] [ "locked_at" ] ,
145+ serde_json:: Value :: Null
146+ ) ;
147+
141148 // Make sure to run the jobs in the queue
142149 state. run_jobs_in_queue ( ) . await ;
143150
@@ -156,7 +163,7 @@ mod tests {
156163 "attributes": {
157164 "username": "alice",
158165 "created_at": "2022-01-16T14:40:00Z",
159- "locked_at": "2022-01-16T14:40:00Z" ,
166+ "locked_at": null ,
160167 "deactivated_at": "2022-01-16T14:40:00Z",
161168 "admin": false
162169 },
@@ -196,10 +203,16 @@ mod tests {
196203 response. assert_status ( StatusCode :: OK ) ;
197204 let body: serde_json:: Value = response. json ( ) ;
198205
199- // The locked_at timestamp should be different from the current time
206+ // The deactivated_at timestamp should be the same as the current time
207+ assert_eq ! (
208+ body[ "data" ] [ "attributes" ] [ "deactivated_at" ] ,
209+ serde_json:: json!( state. clock. now( ) )
210+ ) ;
211+
212+ // The deactivated_at timestamp should be different from the locked_at timestamp
200213 assert_ne ! (
214+ body[ "data" ] [ "attributes" ] [ "deactivated_at" ] ,
201215 body[ "data" ] [ "attributes" ] [ "locked_at" ] ,
202- serde_json:: json!( state. clock. now( ) )
203216 ) ;
204217
205218 // Make sure to run the jobs in the queue
0 commit comments