88 create_api_key ,
99 get_api_key ,
1010 list_api_keys ,
11- revoke_api_key ,
1211)
1312from utilities .general import generate_random_name
1413
@@ -42,9 +41,8 @@ def test_create_api_key(
4241 api_key_name = key_name ,
4342 )
4443
45- assert "id" in body , "Expected 'id' field in create response"
46- assert "key" in body , "Expected 'key' field in create response"
47- assert "name" in body , "Expected 'name' field in create response"
44+ for field in ("id" , "key" , "name" ):
45+ assert field in body , f"Expected '{ field } ' field in create response"
4846
4947 key = body ["key" ]
5048 assert key .startswith ("sk-oai-" ), "Expected key to start with 'sk-oai-' prefix"
@@ -70,26 +68,9 @@ def test_list_api_keys(
7068 request_session_http : requests .Session ,
7169 base_url : str ,
7270 ocp_token_for_actor : str ,
71+ two_active_api_key_ids : list [str ],
7372 ) -> None :
74- """Verify active API keys are listed and pagination works."""
75-
76- key1_name = f"e2e-crud-list-1-{ generate_random_name ()} "
77- key2_name = f"e2e-crud-list-2-{ generate_random_name ()} "
78-
79- _ , key1_body = create_api_key (
80- base_url = base_url ,
81- ocp_user_token = ocp_token_for_actor ,
82- request_session_http = request_session_http ,
83- api_key_name = key1_name ,
84- )
85- _ , key2_body = create_api_key (
86- base_url = base_url ,
87- ocp_user_token = ocp_token_for_actor ,
88- request_session_http = request_session_http ,
89- api_key_name = key2_name ,
90- )
91- key1_id = key1_body ["id" ]
92- key2_id = key2_body ["id" ]
73+ """Verify active API keys are listed and no plaintext key is exposed."""
9374
9475 list_resp , list_body = list_api_keys (
9576 request_session_http = request_session_http ,
@@ -107,14 +88,24 @@ def test_list_api_keys(
10788 assert len (items ) >= 2 , f"Expected at least 2 active keys, got { len (items )} "
10889
10990 key_ids = [item ["id" ] for item in items ]
110- assert key1_id in key_ids , f"key1 id= { key1_id } not found in listed keys: { key_ids } "
111- assert key2_id in key_ids , f"key2 id={ key2_id } not found in listed keys: { key_ids } "
91+ for created_id in two_active_api_key_ids :
92+ assert created_id in key_ids , f"Created key id={ created_id } not found in listed keys"
11293
11394 for item in items :
11495 assert "key" not in item , f"Plaintext key must not appear in any list item: { item } "
11596
11697 LOGGER .info (f"[list] Found { len (items )} active keys" )
11798
99+ @pytest .mark .tier1
100+ @pytest .mark .parametrize ("ocp_token_for_actor" , [{"type" : "admin" }], indirect = True )
101+ def test_list_api_keys_pagination (
102+ self ,
103+ request_session_http : requests .Session ,
104+ base_url : str ,
105+ ocp_token_for_actor : str ,
106+ ) -> None :
107+ """Verify that the search endpoint respects the pagination limit."""
108+
118109 page_resp , page_body = list_api_keys (
119110 request_session_http = request_session_http ,
120111 base_url = base_url ,
@@ -137,40 +128,18 @@ def test_revoke_api_key(
137128 request_session_http : requests .Session ,
138129 base_url : str ,
139130 ocp_token_for_actor : str ,
131+ revoked_api_key_id : str ,
140132 ) -> None :
141- """Verify an API key can be revoked and remains revoked on GET."""
142-
143- key_name = f"e2e-crud-revoke-{ generate_random_name ()} "
144-
145- _ , body = create_api_key (
146- base_url = base_url ,
147- ocp_user_token = ocp_token_for_actor ,
148- request_session_http = request_session_http ,
149- api_key_name = key_name ,
150- )
151- key_id = body ["id" ]
152-
153- revoke_resp , revoke_body = revoke_api_key (
154- request_session_http = request_session_http ,
155- base_url = base_url ,
156- key_id = key_id ,
157- ocp_user_token = ocp_token_for_actor ,
158- )
159- assert revoke_resp .status_code == 200 , (
160- f"Expected 200 on DELETE /v1/api-keys/{ key_id } , got { revoke_resp .status_code } : { revoke_resp .text [:200 ]} "
161- )
162- assert revoke_body .get ("status" ) == "revoked" , (
163- f"Expected status='revoked' in DELETE response, got: { revoke_body } "
164- )
133+ """Verify a revoked API key shows status='revoked' on subsequent GET."""
165134
166135 get_resp , get_body = get_api_key (
167136 request_session_http = request_session_http ,
168137 base_url = base_url ,
169- key_id = key_id ,
138+ key_id = revoked_api_key_id ,
170139 ocp_user_token = ocp_token_for_actor ,
171140 )
172141 assert get_resp .status_code == 200 , (
173142 f"Expected 200 on GET after revoke, got { get_resp .status_code } : { get_resp .text [:200 ]} "
174143 )
175144 assert get_body .get ("status" ) == "revoked" , f"Expected status='revoked' on GET after revoke, got: { get_body } "
176- LOGGER .info (f"[revoke] Key { key_id } confirmed revoked" )
145+ LOGGER .info (f"[revoke] Key { revoked_api_key_id } confirmed revoked" )
0 commit comments