@@ -842,3 +842,104 @@ def test_hard_limits(client, monkeypatch, values):
842842 params = {"limit" : hard_limit + 1 },
843843 )
844844 assert response .status_code != 200
845+
846+
847+ @pytest .mark .parametrize (
848+ "values" ,
849+ [
850+ {"response_code" : 200 , "expected_feed_ids" : ["gbfs-system_id_1" , "gbfs-system_id_2" , "gbfs-system_id_3" ]},
851+ {
852+ "provider" : "Provider Name 1" ,
853+ "response_code" : 200 ,
854+ "expected_feed_ids" : ["gbfs-system_id_1" , "gbfs-system_id_2" ],
855+ },
856+ {"provider" : "Provider Name 2" , "response_code" : 200 , "expected_feed_ids" : ["gbfs-system_id_3" ]},
857+ {
858+ "country_code" : "CA" ,
859+ "response_code" : 200 ,
860+ "expected_feed_ids" : ["gbfs-system_id_1" , "gbfs-system_id_2" , "gbfs-system_id_3" ],
861+ },
862+ {"country_code" : "US" , "response_code" : 200 , "expected_feed_ids" : []},
863+ {"municipality" : "Laval" , "response_code" : 200 , "expected_feed_ids" : ["gbfs-system_id_2" ]},
864+ {
865+ "producer_url" : "https://www.example.com/gbfs_feed_3/" ,
866+ "response_code" : 200 ,
867+ "expected_feed_ids" : ["gbfs-system_id_3" ],
868+ },
869+ {"system_id" : "system_id_1" , "response_code" : 200 , "expected_feed_ids" : ["gbfs-system_id_1" ]},
870+ {"version" : "3.0" , "response_code" : 200 , "expected_feed_ids" : ["gbfs-system_id_1" ]},
871+ {"version" : "2.3" , "response_code" : 200 , "expected_feed_ids" : ["gbfs-system_id_1" , "gbfs-system_id_2" ]},
872+ {"version" : "1.0" , "response_code" : 200 , "expected_feed_ids" : []},
873+ {"system_id" : "system_id_1" , "response_code" : 200 , "expected_feed_ids" : ["gbfs-system_id_1" ]},
874+ {"system_id" : "doesnt_exist" , "response_code" : 200 , "expected_feed_ids" : []},
875+ ],
876+ ids = [
877+ "all_none" ,
878+ "provider_name_1" ,
879+ "provider_name_2" ,
880+ "country_code_ca" ,
881+ "country_code_us" ,
882+ "municipality_laval" ,
883+ "producer_url" ,
884+ "system_id" ,
885+ "version_3.0" ,
886+ "version_2.3" ,
887+ "version_1.0" ,
888+ "system_id_1" ,
889+ "system_id_doesnt_exist" ,
890+ ],
891+ )
892+ def test_gbfs_filters (client , values ):
893+ """Test /v1/gbfs_feeds filters by system_id"""
894+ params = {
895+ "provider" : values ["provider" ] if "provider" in values else None ,
896+ "country_code" : values ["country_code" ] if "country_code" in values else None ,
897+ "municipality" : values ["municipality" ] if "municipality" in values else None ,
898+ "producer_url" : values ["producer_url" ] if "producer_url" in values else None ,
899+ "system_id" : values ["system_id" ] if "system_id" in values else None ,
900+ "version" : values ["version" ] if "version" in values else None ,
901+ }
902+ params = {k : v for k , v in params .items () if v is not None }
903+
904+ response = client .request (
905+ "GET" ,
906+ "/v1/gbfs_feeds" ,
907+ headers = authHeaders ,
908+ params = params ,
909+ )
910+ assert response .status_code == values ["response_code" ]
911+ if values ["response_code" ] != 200 :
912+ return
913+
914+ feeds = response .json ()
915+ assert isinstance (feeds , list ), "Response should be a list."
916+ assert len (feeds ) == len (values ["expected_feed_ids" ]), (
917+ f"Expected { len (values ['expected_feed_ids' ])} feeds, " f"got { len (feeds )} ."
918+ )
919+ if len (values ["expected_feed_ids" ]) != 0 :
920+ assert any (feed ["id" ] in values ["expected_feed_ids" ] for feed in feeds )
921+
922+
923+ @pytest .mark .parametrize (
924+ "values" ,
925+ [
926+ {"response_code" : 200 , "expected_feed_ids" : ["gbfs-system_id_1" ]},
927+ {"response_code" : 200 , "expected_feed_ids" : ["gbfs-system_id_2" ]},
928+ {"response_code" : 200 , "expected_feed_ids" : ["gbfs-system_id_3" ]},
929+ {"response_code" : 404 },
930+ ],
931+ ids = ["valid_id" , "valid_id_2" , "valid_id_3" , "invalid_id" ],
932+ )
933+ def test_gbfs_feed_id_get (client : TestClient , values ):
934+ """Test case for gbfs_feed_id_get"""
935+ test_id = values .get ("expected_feed_ids" , ["dummy_id" ])[0 ]
936+ response = client .request (
937+ "GET" ,
938+ "/v1/gbfs_feeds/{id}" .format (id = test_id ),
939+ headers = authHeaders ,
940+ )
941+
942+ assert response .status_code == values ["response_code" ]
943+ if values ["response_code" ] != 200 :
944+ return
945+ assert response .json ()["id" ] == test_id
0 commit comments