Skip to content

Commit 78f23d8

Browse files
committed
unit - actor
1 parent 1a08ac3 commit 78f23d8

9 files changed

+580
-600
lines changed

tests/unit/actor/test_actor_create_proxy_configuration.py

Lines changed: 107 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -24,122 +24,120 @@ def patched_apify_client(apify_client_async_patcher: ApifyClientAsyncPatcher) ->
2424
return ApifyClientAsync()
2525

2626

27-
class TestActorCreateProxyConfiguration:
28-
async def test_create_proxy_configuration_basic(
29-
self: TestActorCreateProxyConfiguration,
30-
monkeypatch: pytest.MonkeyPatch,
31-
respx_mock: MockRouter,
32-
patched_apify_client: ApifyClientAsync,
33-
) -> None:
34-
dummy_proxy_status_url = 'http://dummy-proxy-status-url.com'
35-
monkeypatch.setenv(ApifyEnvVars.TOKEN.value, 'DUMMY_TOKEN')
36-
monkeypatch.setenv(ApifyEnvVars.PROXY_STATUS_URL.value, dummy_proxy_status_url)
37-
38-
route = respx_mock.get(dummy_proxy_status_url)
39-
route.mock(
40-
httpx.Response(
41-
200,
42-
json={
43-
'connected': True,
44-
'connectionError': None,
45-
'isManInTheMiddle': True,
46-
},
47-
)
27+
async def test_basic_proxy_configuration_creation(
28+
monkeypatch: pytest.MonkeyPatch,
29+
respx_mock: MockRouter,
30+
patched_apify_client: ApifyClientAsync,
31+
) -> None:
32+
dummy_proxy_status_url = 'http://dummy-proxy-status-url.com'
33+
monkeypatch.setenv(ApifyEnvVars.TOKEN.value, 'DUMMY_TOKEN')
34+
monkeypatch.setenv(ApifyEnvVars.PROXY_STATUS_URL.value, dummy_proxy_status_url)
35+
36+
route = respx_mock.get(dummy_proxy_status_url)
37+
route.mock(
38+
httpx.Response(
39+
200,
40+
json={
41+
'connected': True,
42+
'connectionError': None,
43+
'isManInTheMiddle': True,
44+
},
4845
)
46+
)
4947

50-
groups = ['GROUP1', 'GROUP2']
51-
country_code = 'US'
52-
53-
await Actor.init()
54-
55-
proxy_configuration = await Actor.create_proxy_configuration(groups=groups, country_code=country_code)
56-
57-
assert proxy_configuration is not None
58-
assert proxy_configuration._groups == groups
59-
assert proxy_configuration._password == DUMMY_PASSWORD
60-
assert proxy_configuration._country_code == country_code
61-
62-
assert len(patched_apify_client.calls['user']['get']) == 1 # type: ignore
63-
assert len(route.calls) == 1
64-
65-
await Actor.exit()
66-
67-
async def test_create_proxy_configuration_actor_proxy_input(
68-
self: TestActorCreateProxyConfiguration,
69-
monkeypatch: pytest.MonkeyPatch,
70-
respx_mock: MockRouter,
71-
patched_apify_client: ApifyClientAsync,
72-
) -> None:
73-
dummy_proxy_status_url = 'http://dummy-proxy-status-url.com'
74-
dummy_proxy_url = 'http://dummy-proxy.com:8000'
75-
76-
monkeypatch.setenv(ApifyEnvVars.TOKEN.value, 'DUMMY_TOKEN')
77-
monkeypatch.setenv(ApifyEnvVars.PROXY_STATUS_URL.value, dummy_proxy_status_url)
78-
79-
route = respx_mock.get(dummy_proxy_status_url)
80-
route.mock(
81-
httpx.Response(
82-
200,
83-
json={
84-
'connected': True,
85-
'connectionError': None,
86-
'isManInTheMiddle': True,
87-
},
88-
)
89-
)
48+
groups = ['GROUP1', 'GROUP2']
49+
country_code = 'US'
9050

91-
await Actor.init()
51+
await Actor.init()
9252

93-
proxy_configuration = await Actor.create_proxy_configuration(actor_proxy_input={})
94-
assert proxy_configuration is None
53+
proxy_configuration = await Actor.create_proxy_configuration(groups=groups, country_code=country_code)
9554

96-
proxy_configuration = await Actor.create_proxy_configuration(
97-
actor_proxy_input={
98-
'useApifyProxy': False,
99-
}
100-
)
101-
assert proxy_configuration is None
55+
assert proxy_configuration is not None
56+
assert proxy_configuration._groups == groups
57+
assert proxy_configuration._password == DUMMY_PASSWORD
58+
assert proxy_configuration._country_code == country_code
10259

103-
proxy_configuration = await Actor.create_proxy_configuration(
104-
actor_proxy_input={
105-
'proxyUrls': [],
106-
}
107-
)
108-
assert proxy_configuration is None
60+
assert len(patched_apify_client.calls['user']['get']) == 1 # type: ignore
61+
assert len(route.calls) == 1
10962

110-
proxy_configuration = await Actor.create_proxy_configuration(
111-
actor_proxy_input={
112-
'useApifyProxy': False,
113-
'proxyUrls': [dummy_proxy_url],
114-
}
115-
)
116-
assert proxy_configuration is not None
117-
assert await proxy_configuration.new_url() == dummy_proxy_url
63+
await Actor.exit()
11864

119-
proxy_configuration = await Actor.create_proxy_configuration(
120-
actor_proxy_input={
121-
'useApifyProxy': True,
122-
}
123-
)
124-
assert proxy_configuration is not None
125-
assert await proxy_configuration.new_url() == f'http://auto:{DUMMY_PASSWORD}@proxy.apify.com:8000'
126-
127-
groups = ['GROUP1', 'GROUP2']
128-
country_code = 'US'
129-
proxy_configuration = await Actor.create_proxy_configuration(
130-
actor_proxy_input={
131-
'useApifyProxy': True,
132-
'apifyProxyGroups': groups,
133-
'apifyProxyCountry': country_code,
134-
}
135-
)
136-
assert proxy_configuration is not None
137-
assert (
138-
await proxy_configuration.new_url()
139-
== f'http://groups-{"+".join(groups)},country-{country_code}:{DUMMY_PASSWORD}@proxy.apify.com:8000'
140-
)
14165

142-
assert len(patched_apify_client.calls['user']['get']) == 2 # type: ignore
143-
assert len(route.calls) == 2
66+
async def test_proxy_configuration_with_actor_proxy_input(
67+
monkeypatch: pytest.MonkeyPatch,
68+
respx_mock: MockRouter,
69+
patched_apify_client: ApifyClientAsync,
70+
) -> None:
71+
dummy_proxy_status_url = 'http://dummy-proxy-status-url.com'
72+
dummy_proxy_url = 'http://dummy-proxy.com:8000'
14473

145-
await Actor.exit()
74+
monkeypatch.setenv(ApifyEnvVars.TOKEN.value, 'DUMMY_TOKEN')
75+
monkeypatch.setenv(ApifyEnvVars.PROXY_STATUS_URL.value, dummy_proxy_status_url)
76+
77+
route = respx_mock.get(dummy_proxy_status_url)
78+
route.mock(
79+
httpx.Response(
80+
200,
81+
json={
82+
'connected': True,
83+
'connectionError': None,
84+
'isManInTheMiddle': True,
85+
},
86+
)
87+
)
88+
89+
await Actor.init()
90+
91+
proxy_configuration = await Actor.create_proxy_configuration(actor_proxy_input={})
92+
assert proxy_configuration is None
93+
94+
proxy_configuration = await Actor.create_proxy_configuration(
95+
actor_proxy_input={
96+
'useApifyProxy': False,
97+
}
98+
)
99+
assert proxy_configuration is None
100+
101+
proxy_configuration = await Actor.create_proxy_configuration(
102+
actor_proxy_input={
103+
'proxyUrls': [],
104+
}
105+
)
106+
assert proxy_configuration is None
107+
108+
proxy_configuration = await Actor.create_proxy_configuration(
109+
actor_proxy_input={
110+
'useApifyProxy': False,
111+
'proxyUrls': [dummy_proxy_url],
112+
}
113+
)
114+
assert proxy_configuration is not None
115+
assert await proxy_configuration.new_url() == dummy_proxy_url
116+
117+
proxy_configuration = await Actor.create_proxy_configuration(
118+
actor_proxy_input={
119+
'useApifyProxy': True,
120+
}
121+
)
122+
assert proxy_configuration is not None
123+
assert await proxy_configuration.new_url() == f'http://auto:{DUMMY_PASSWORD}@proxy.apify.com:8000'
124+
125+
groups = ['GROUP1', 'GROUP2']
126+
country_code = 'US'
127+
proxy_configuration = await Actor.create_proxy_configuration(
128+
actor_proxy_input={
129+
'useApifyProxy': True,
130+
'apifyProxyGroups': groups,
131+
'apifyProxyCountry': country_code,
132+
}
133+
)
134+
assert proxy_configuration is not None
135+
assert (
136+
await proxy_configuration.new_url()
137+
== f'http://groups-{"+".join(groups)},country-{country_code}:{DUMMY_PASSWORD}@proxy.apify.com:8000'
138+
)
139+
140+
assert len(patched_apify_client.calls['user']['get']) == 2 # type: ignore
141+
assert len(route.calls) == 2
142+
143+
await Actor.exit()

tests/unit/actor/test_actor_dataset.py

Lines changed: 47 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -15,51 +15,50 @@
1515
# Actual tests for the implementations are in storages/.
1616

1717

18-
class TestActorOpenDataset:
19-
async def test_throws_without_init(self: TestActorOpenDataset) -> None:
20-
with pytest.raises(RuntimeError):
21-
await Actor.open_dataset()
22-
23-
async def test_same_references(self: TestActorOpenDataset) -> None:
24-
async with Actor:
25-
dataset1 = await Actor.open_dataset()
26-
dataset2 = await Actor.open_dataset()
27-
assert dataset1 is dataset2
28-
29-
dataset_name = 'non-default'
30-
dataset_by_name_1 = await Actor.open_dataset(name=dataset_name)
31-
dataset_by_name_2 = await Actor.open_dataset(name=dataset_name)
32-
assert dataset_by_name_1 is dataset_by_name_2
33-
34-
dataset_by_id_1 = await Actor.open_dataset(id=dataset_by_name_1._id)
35-
dataset_by_id_2 = await Actor.open_dataset(id=dataset_by_name_1._id)
36-
37-
assert dataset_by_id_1 is dataset_by_name_1
38-
assert dataset_by_id_2 is dataset_by_id_1
39-
40-
async def test_open_datatset_based_env_var(
41-
self: TestActorOpenDataset,
42-
monkeypatch: pytest.MonkeyPatch,
43-
memory_storage_client: MemoryStorageClient,
44-
) -> None:
45-
default_dataset_id = 'my-new-default-id'
46-
monkeypatch.setenv(ActorEnvVars.DEFAULT_DATASET_ID, default_dataset_id)
47-
48-
async with Actor:
49-
ddt = await Actor.open_dataset()
50-
assert ddt._id == default_dataset_id
51-
await memory_storage_client.dataset(ddt._id).delete()
52-
53-
54-
class TestActorPushData:
55-
async def test_push_data(self: TestActorPushData) -> None:
56-
async with Actor as my_actor:
57-
dataset = await my_actor.open_dataset()
58-
desired_item_count = 100
59-
await dataset.push_data([{'id': i} for i in range(desired_item_count)])
60-
61-
dataset_info = await dataset.get_info()
62-
assert dataset_info is not None
63-
64-
list_page = await dataset.get_data(limit=desired_item_count)
65-
assert {item['id'] for item in list_page.items} == set(range(desired_item_count))
18+
async def test_throws_error_without_actor_init() -> None:
19+
with pytest.raises(RuntimeError):
20+
await Actor.open_dataset()
21+
22+
23+
async def test_open_dataset_returns_same_references() -> None:
24+
async with Actor:
25+
dataset1 = await Actor.open_dataset()
26+
dataset2 = await Actor.open_dataset()
27+
assert dataset1 is dataset2
28+
29+
dataset_name = 'non-default'
30+
dataset_by_name_1 = await Actor.open_dataset(name=dataset_name)
31+
dataset_by_name_2 = await Actor.open_dataset(name=dataset_name)
32+
assert dataset_by_name_1 is dataset_by_name_2
33+
34+
dataset_by_id_1 = await Actor.open_dataset(id=dataset_by_name_1._id)
35+
dataset_by_id_2 = await Actor.open_dataset(id=dataset_by_name_1._id)
36+
37+
assert dataset_by_id_1 is dataset_by_name_1
38+
assert dataset_by_id_2 is dataset_by_id_1
39+
40+
41+
async def test_open_dataset_uses_env_var(
42+
monkeypatch: pytest.MonkeyPatch,
43+
memory_storage_client: MemoryStorageClient,
44+
) -> None:
45+
default_dataset_id = 'my-new-default-id'
46+
monkeypatch.setenv(ActorEnvVars.DEFAULT_DATASET_ID, default_dataset_id)
47+
48+
async with Actor:
49+
ddt = await Actor.open_dataset()
50+
assert ddt._id == default_dataset_id
51+
await memory_storage_client.dataset(ddt._id).delete()
52+
53+
54+
async def test_push_data_to_dataset() -> None:
55+
async with Actor as my_actor:
56+
dataset = await my_actor.open_dataset()
57+
desired_item_count = 100
58+
await dataset.push_data([{'id': i} for i in range(desired_item_count)])
59+
60+
dataset_info = await dataset.get_info()
61+
assert dataset_info is not None
62+
63+
list_page = await dataset.get_data(limit=desired_item_count)
64+
assert {item['id'] for item in list_page.items} == set(range(desired_item_count))

tests/unit/actor/test_actor_env_helpers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,21 @@
2323
import pytest
2424

2525

26-
async def test_is_at_home_local() -> None:
26+
async def test_actor_is_not_at_home_when_local() -> None:
2727
async with Actor as actor:
2828
is_at_home = actor.is_at_home()
2929
assert is_at_home is False
3030

3131

32-
async def test_is_at_home_on_apify(monkeypatch: pytest.MonkeyPatch) -> None:
32+
async def test_actor_is_at_home_on_apify(monkeypatch: pytest.MonkeyPatch) -> None:
3333
print('setenv')
3434
monkeypatch.setenv(ApifyEnvVars.IS_AT_HOME, 'true')
3535
async with Actor as actor:
3636
is_at_home = actor.is_at_home()
3737
assert is_at_home is True
3838

3939

40-
async def test_get_env_use_env_vars(monkeypatch: pytest.MonkeyPatch) -> None:
40+
async def test_get_env_with_randomized_env_vars(monkeypatch: pytest.MonkeyPatch) -> None:
4141
ignored_env_vars = {
4242
ApifyEnvVars.INPUT_KEY,
4343
ApifyEnvVars.MEMORY_MBYTES,

0 commit comments

Comments
 (0)