@@ -172,3 +172,51 @@ async def test_deletes_users(self, test_db, session: AsyncSession):
172172 assert response .status_code == 200
173173 res = await session .execute (select (UserModel ).where (UserModel .name == user .name ))
174174 assert len (res .scalars ().all ()) == 0
175+
176+
177+ class TestRefreshToken :
178+ def test_returns_40x_if_not_authenticated (self ):
179+ response = client .post ("/api/users/refresh_token" )
180+ assert response .status_code in [401 , 403 ]
181+
182+ @pytest .mark .asyncio
183+ async def test_refreshes_token (self , test_db , session : AsyncSession ):
184+ user1 = await create_user (name = "user1" , session = session )
185+ old_token = user1 .token
186+ response = client .post (
187+ "/api/users/refresh_token" ,
188+ headers = get_auth_headers (user1 .token ),
189+ json = {"username" : user1 .name },
190+ )
191+ assert response .status_code == 200
192+ assert response .json ()["creds" ]["token" ] != old_token
193+ await session .refresh (user1 )
194+ assert user1 .token != old_token
195+
196+ @pytest .mark .asyncio
197+ async def test_returns_403_if_non_admin_refreshes_for_other_user (
198+ self , test_db , session : AsyncSession
199+ ):
200+ user1 = await create_user (name = "user1" , session = session , global_role = GlobalRole .USER )
201+ user2 = await create_user (name = "user2" , session = session )
202+ response = client .post (
203+ "/api/users/refresh_token" ,
204+ headers = get_auth_headers (user1 .token ),
205+ json = {"username" : user2 .name },
206+ )
207+ assert response .status_code == 403
208+
209+ @pytest .mark .asyncio
210+ async def test_global_admin_refreshes_token (self , test_db , session : AsyncSession ):
211+ user1 = await create_user (name = "user1" , session = session , global_role = GlobalRole .ADMIN )
212+ user2 = await create_user (name = "user2" , session = session )
213+ old_token = user2 .token
214+ response = client .post (
215+ "/api/users/refresh_token" ,
216+ headers = get_auth_headers (user1 .token ),
217+ json = {"username" : user2 .name },
218+ )
219+ assert response .status_code == 200
220+ assert response .json ()["creds" ]["token" ] != old_token
221+ await session .refresh (user2 )
222+ assert user2 .token != old_token
0 commit comments