Skip to content

Commit 06df3a2

Browse files
committed
Add signature value to the tests
1 parent 1596855 commit 06df3a2

File tree

1 file changed

+34
-16
lines changed

1 file changed

+34
-16
lines changed

tests/integration/test_key_value_store.py

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,20 @@
66

77
import impit
88
import pytest
9+
from apify_shared.utils import create_hmac_signature, create_storage_content_signature
910

1011
from integration.integration_test_utils import parametrized_api_urls, random_resource_name
1112

1213
from apify_client import ApifyClient, ApifyClientAsync
1314
from apify_client.client import DEFAULT_API_URL
1415

16+
MOCKED_ID = 'someID'
17+
1518

1619
def _get_mocked_api_kvs_response(signing_key: str | None = None) -> str:
1720
response_data = {
1821
'data': {
19-
'id': 'someID',
22+
'id': MOCKED_ID,
2023
'name': 'name',
2124
'userId': 'userId',
2225
'createdAt': '2025-09-11T08:48:51.806Z',
@@ -78,7 +81,7 @@ def test_key_value_store_should_create_public_keys_non_expiring_url(self, apify_
7881
@parametrized_api_urls
7982
def test_public_url(self, api_token: str, api_url: str, api_public_url: str, signing_key: str) -> None:
8083
apify_client = ApifyClient(token=api_token, api_url=api_url, api_public_url=api_public_url)
81-
kvs = apify_client.key_value_store('someID')
84+
kvs = apify_client.key_value_store(MOCKED_ID)
8285

8386
# Mock the API call to return predefined response
8487
with mock.patch.object(
@@ -87,7 +90,13 @@ def test_public_url(self, api_token: str, api_url: str, api_public_url: str, sig
8790
return_value=Mock(text=_get_mocked_api_kvs_response(signing_key=signing_key)),
8891
):
8992
public_url = kvs.create_keys_public_url()
90-
expected_signature = f'?signature={public_url.split("signature=")[1]}' if signing_key else ''
93+
expected_signature = (
94+
f'?signature={
95+
create_storage_content_signature(resource_id=MOCKED_ID, url_signing_secret_key=signing_key)
96+
}'
97+
if signing_key
98+
else ''
99+
)
91100
assert public_url == (
92101
f'{(api_public_url or DEFAULT_API_URL).strip("/")}/v2/key-value-stores/someID/keys{expected_signature}'
93102
)
@@ -96,19 +105,20 @@ def test_public_url(self, api_token: str, api_url: str, api_public_url: str, sig
96105
@parametrized_api_urls
97106
def test_record_public_url(self, api_token: str, api_url: str, api_public_url: str, signing_key: str) -> None:
98107
apify_client = ApifyClient(token=api_token, api_url=api_url, api_public_url=api_public_url)
99-
kvs = apify_client.key_value_store('someID')
108+
key = 'some_key'
109+
kvs = apify_client.key_value_store(MOCKED_ID)
100110

101111
# Mock the API call to return predefined response
102112
with mock.patch.object(
103113
apify_client.http_client,
104114
'call',
105115
return_value=Mock(text=_get_mocked_api_kvs_response(signing_key=signing_key)),
106116
):
107-
public_url = kvs.get_record_public_url(key='key')
108-
expected_signature = f'?signature={public_url.split("signature=")[1]}' if signing_key else ''
117+
public_url = kvs.get_record_public_url(key=key)
118+
expected_signature = f'?signature={create_hmac_signature(signing_key, key)}' if signing_key else ''
109119
assert public_url == (
110120
f'{(api_public_url or DEFAULT_API_URL).strip("/")}/v2/key-value-stores/someID/'
111-
f'records/key{expected_signature}'
121+
f'records/{key}{expected_signature}'
112122
)
113123

114124

@@ -157,37 +167,45 @@ async def test_key_value_store_should_create_public_keys_non_expiring_url(
157167

158168
@pytest.mark.parametrize('signing_key', [None, 'custom-signing-key'])
159169
@parametrized_api_urls
160-
async def test_record_public_url(self, api_token: str, api_url: str, api_public_url: str, signing_key: str) -> None:
170+
async def test_public_url(self, api_token: str, api_url: str, api_public_url: str, signing_key: str) -> None:
161171
apify_client = ApifyClientAsync(token=api_token, api_url=api_url, api_public_url=api_public_url)
162-
kvs = apify_client.key_value_store('someID')
172+
kvs = apify_client.key_value_store(MOCKED_ID)
173+
mocked_response = _get_mocked_api_kvs_response(signing_key=signing_key)
163174

164175
# Mock the API call to return predefined response
165176
with mock.patch.object(
166177
apify_client.http_client,
167178
'call',
168-
return_value=Mock(text=_get_mocked_api_kvs_response(signing_key=signing_key)),
179+
return_value=Mock(text=mocked_response),
169180
):
170181
public_url = await kvs.create_keys_public_url()
171-
expected_signature = f'?signature={public_url.split("signature=")[1]}' if signing_key else ''
182+
expected_signature = (
183+
f'?signature={
184+
create_storage_content_signature(resource_id=MOCKED_ID, url_signing_secret_key=signing_key)
185+
}'
186+
if signing_key
187+
else ''
188+
)
172189
assert public_url == (
173190
f'{(api_public_url or DEFAULT_API_URL).strip("/")}/v2/key-value-stores/someID/keys{expected_signature}'
174191
)
175192

176193
@pytest.mark.parametrize('signing_key', [None, 'custom-signing-key'])
177194
@parametrized_api_urls
178-
async def test_public_url(self, api_token: str, api_url: str, api_public_url: str, signing_key: str) -> None:
195+
async def test_record_public_url(self, api_token: str, api_url: str, api_public_url: str, signing_key: str) -> None:
179196
apify_client = ApifyClientAsync(token=api_token, api_url=api_url, api_public_url=api_public_url)
180-
kvs = apify_client.key_value_store('someID')
197+
key = 'some_key'
198+
kvs = apify_client.key_value_store(MOCKED_ID)
181199

182200
# Mock the API call to return predefined response
183201
with mock.patch.object(
184202
apify_client.http_client,
185203
'call',
186204
return_value=Mock(text=_get_mocked_api_kvs_response(signing_key=signing_key)),
187205
):
188-
public_url = await kvs.get_record_public_url(key='key')
189-
expected_signature = f'?signature={public_url.split("signature=")[1]}' if signing_key else ''
206+
public_url = await kvs.get_record_public_url(key=key)
207+
expected_signature = f'?signature={create_hmac_signature(signing_key, key)}' if signing_key else ''
190208
assert public_url == (
191209
f'{(api_public_url or DEFAULT_API_URL).strip("/")}/v2/key-value-stores/someID/'
192-
f'records/key{expected_signature}'
210+
f'records/{key}{expected_signature}'
193211
)

0 commit comments

Comments
 (0)