@@ -31,19 +31,31 @@ def app_environment(
3131 )
3232
3333
34- async def test_services_manifest_api (
34+ @pytest .fixture
35+ async def director_client (
3536 repository_lifespan_disabled : None ,
3637 rabbitmq_and_rpc_setup_disabled : None ,
3738 mocked_director_rest_api : MockRouter ,
3839 app : FastAPI ,
39- ):
40- director_api = get_director_client (app )
40+ ) -> DirectorClient :
41+ _client = get_director_client (app )
42+ assert app .state .director_api == _client
43+ assert isinstance (_client , DirectorClient )
44+ return _client
4145
42- assert app .state .director_api == director_api
43- assert isinstance (director_api , DirectorClient )
4446
45- # LIST
46- all_services_map = await manifest .get_services_map (director_api )
47+ @pytest .fixture
48+ async def all_services_map (
49+ director_client : DirectorClient ,
50+ ) -> manifest .ServiceMetaDataPublishedDict :
51+ return await manifest .get_services_map (director_client )
52+
53+
54+ async def test_get_services_map (
55+ mocked_director_rest_api : MockRouter ,
56+ director_client : DirectorClient ,
57+ ):
58+ all_services_map = await manifest .get_services_map (director_client )
4759 assert mocked_director_rest_api ["list_services" ].called
4860
4961 for service in all_services_map .values ():
@@ -57,22 +69,69 @@ async def test_services_manifest_api(
5769 }
5870 assert len (services_image_digest ) < len (all_services_map )
5971
60- # GET
72+
73+ async def test_get_service (
74+ mocked_director_rest_api : MockRouter ,
75+ director_client : DirectorClient ,
76+ all_services_map : manifest .ServiceMetaDataPublishedDict ,
77+ ):
78+
6179 for expected_service in all_services_map .values ():
6280 service = await manifest .get_service (
6381 key = expected_service .key ,
6482 version = expected_service .version ,
65- director_client = director_api ,
83+ director_client = director_client ,
6684 )
6785
6886 assert service == expected_service
6987 if not is_function_service (service .key ):
7088 assert mocked_director_rest_api ["get_service" ].called
7189
72- # BATCH
90+
91+ async def test_get_service_ports (
92+ director_client : DirectorClient ,
93+ all_services_map : manifest .ServiceMetaDataPublishedDict ,
94+ ):
95+
96+ for expected_service in all_services_map .values ():
97+ ports = await manifest .get_service_ports (
98+ key = expected_service .key ,
99+ version = expected_service .version ,
100+ director_client = director_client ,
101+ )
102+
103+ # Verify all ports are properly retrieved
104+ assert isinstance (ports , list )
105+
106+ # Check input ports
107+ input_ports = [p for p in ports if p .kind == "input" ]
108+ if expected_service .inputs :
109+ assert len (input_ports ) == len (expected_service .inputs )
110+ for port in input_ports :
111+ assert port .key in expected_service .inputs
112+ assert port .port == expected_service .inputs [port .key ]
113+ else :
114+ assert not input_ports
115+
116+ # Check output ports
117+ output_ports = [p for p in ports if p .kind == "output" ]
118+ if expected_service .outputs :
119+ assert len (output_ports ) == len (expected_service .outputs )
120+ for port in output_ports :
121+ assert port .key in expected_service .outputs
122+ assert port .port == expected_service .outputs [port .key ]
123+ else :
124+ assert not output_ports
125+
126+
127+ async def test_get_batch_services (
128+ director_client : DirectorClient ,
129+ all_services_map : manifest .ServiceMetaDataPublishedDict ,
130+ ):
131+
73132 for expected_services in toolz .partition (2 , all_services_map .values ()):
74133 selection = [(s .key , s .version ) for s in expected_services ]
75- got_services = await manifest .get_batch_services (selection , director_api )
134+ got_services = await manifest .get_batch_services (selection , director_client )
76135
77136 assert [(s .key , s .version ) for s in got_services ] == selection
78137
0 commit comments