11import json
22from datetime import datetime , timezone
33from unittest .mock import Mock , patch
4- from uuid import UUID
4+ from uuid import UUID , uuid4
55
66import pytest
77from freezegun import freeze_time
@@ -183,7 +183,10 @@ async def test_returns_40x_if_not_authenticated(
183183
184184 @pytest .mark .asyncio
185185 @pytest .mark .parametrize ("test_db" , ["sqlite" , "postgres" ], indirect = True )
186- async def test_returns_fleet (self , test_db , session : AsyncSession , client : AsyncClient ):
186+ @pytest .mark .parametrize ("deleted" , [False , True ])
187+ async def test_returns_fleet_by_id (
188+ self , test_db , session : AsyncSession , client : AsyncClient , deleted : bool
189+ ):
187190 user = await create_user (session , global_role = GlobalRole .USER )
188191 project = await create_project (session )
189192 await add_project_member (
@@ -193,11 +196,12 @@ async def test_returns_fleet(self, test_db, session: AsyncSession, client: Async
193196 session = session ,
194197 project = project ,
195198 created_at = datetime (2023 , 1 , 2 , 3 , 4 , tzinfo = timezone .utc ),
199+ deleted = deleted ,
196200 )
197201 response = await client .post (
198202 f"/api/project/{ project .name } /fleets/get" ,
199203 headers = get_auth_headers (user .token ),
200- json = {"name " : fleet .name },
204+ json = {"id " : str ( fleet .id ) },
201205 )
202206 assert response .status_code == 200
203207 assert response .json () == {
@@ -213,7 +217,67 @@ async def test_returns_fleet(self, test_db, session: AsyncSession, client: Async
213217
214218 @pytest .mark .asyncio
215219 @pytest .mark .parametrize ("test_db" , ["sqlite" , "postgres" ], indirect = True )
216- async def test_returns_400_if_fleet_does_not_exist (
220+ async def test_returns_not_deleted_fleet_by_name (
221+ self , test_db , session : AsyncSession , client : AsyncClient
222+ ):
223+ user = await create_user (session , global_role = GlobalRole .USER )
224+ project = await create_project (session )
225+ await add_project_member (
226+ session = session , project = project , user = user , project_role = ProjectRole .USER
227+ )
228+ active_fleet = await create_fleet (
229+ session = session ,
230+ project = project ,
231+ created_at = datetime (2023 , 1 , 2 , 3 , 4 , tzinfo = timezone .utc ),
232+ fleet_id = uuid4 (),
233+ )
234+ deleted_fleet = await create_fleet (
235+ session = session ,
236+ project = project ,
237+ created_at = datetime (2023 , 1 , 2 , 3 , 5 , tzinfo = timezone .utc ),
238+ fleet_id = uuid4 (),
239+ deleted = True ,
240+ )
241+ assert active_fleet .name == deleted_fleet .name
242+ assert active_fleet .id != deleted_fleet .id
243+ response = await client .post (
244+ f"/api/project/{ project .name } /fleets/get" ,
245+ headers = get_auth_headers (user .token ),
246+ json = {"name" : active_fleet .name },
247+ )
248+ assert response .status_code == 200
249+ assert response .json () == {
250+ "id" : str (active_fleet .id ),
251+ "name" : active_fleet .name ,
252+ "project_name" : project .name ,
253+ "spec" : json .loads (active_fleet .spec ),
254+ "created_at" : "2023-01-02T03:04:00+00:00" ,
255+ "status" : active_fleet .status .value ,
256+ "status_message" : None ,
257+ "instances" : [],
258+ }
259+
260+ @pytest .mark .asyncio
261+ @pytest .mark .parametrize ("test_db" , ["sqlite" , "postgres" ], indirect = True )
262+ async def test_not_returns_by_name_if_fleet_deleted (
263+ self , test_db , session : AsyncSession , client : AsyncClient
264+ ):
265+ user = await create_user (session , global_role = GlobalRole .USER )
266+ project = await create_project (session )
267+ await add_project_member (
268+ session = session , project = project , user = user , project_role = ProjectRole .USER
269+ )
270+ fleet = await create_fleet (session = session , project = project , deleted = True )
271+ response = await client .post (
272+ f"/api/project/{ project .name } /fleets/get" ,
273+ headers = get_auth_headers (user .token ),
274+ json = {"name" : fleet .name },
275+ )
276+ assert response .status_code == 400
277+
278+ @pytest .mark .asyncio
279+ @pytest .mark .parametrize ("test_db" , ["sqlite" , "postgres" ], indirect = True )
280+ async def test_not_returns_by_name_if_fleet_does_not_exist (
217281 self , test_db , session : AsyncSession , client : AsyncClient
218282 ):
219283 user = await create_user (session , global_role = GlobalRole .USER )
0 commit comments