Skip to content

Commit e97d47f

Browse files
test(Automator): Tests get_all_droplets
Also added api mock
1 parent c1a4b75 commit e97d47f

File tree

2 files changed

+215
-0
lines changed

2 files changed

+215
-0
lines changed

tests/unit_tdd/api_mocks.py

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,3 +267,174 @@ def existing_droplet_response():
267267
}
268268
},
269269
status=200)
270+
271+
272+
def list_droplets_response():
273+
response_data = {
274+
"droplets": [
275+
{
276+
"id": 201147650,
277+
"name": "chris.testingenv.org",
278+
"memory": 4096,
279+
"vcpus": 2,
280+
"disk": 80,
281+
"locked": False,
282+
"status": "active",
283+
"kernel": None,
284+
"created_at": "2020-07-23T12:57:22Z",
285+
"features": [],
286+
"backup_ids": [],
287+
"next_backup_window": None,
288+
"snapshot_ids": [
289+
69227970
290+
],
291+
"image": {
292+
"id": 67204635,
293+
"name": "chris-testingenv-164.90.252.21",
294+
"distribution": "Ubuntu",
295+
"slug": None,
296+
"public": False,
297+
"regions": [
298+
"nyc1"
299+
],
300+
"created_at": "2020-07-22T21:53:58Z",
301+
"min_disk_size": 60,
302+
"type": "snapshot",
303+
"size_gigabytes": 16.4,
304+
"tags": [],
305+
"status": "available"
306+
},
307+
"volume_ids": [],
308+
"size": {
309+
"slug": "s-2vcpu-4gb",
310+
"memory": 4096,
311+
"vcpus": 2,
312+
"disk": 80,
313+
"transfer": 4.0,
314+
"price_monthly": 20.0,
315+
"price_hourly": 0.02976,
316+
"regions": [
317+
"ams2",
318+
"ams3",
319+
"blr1",
320+
"fra1",
321+
"lon1",
322+
"nyc1",
323+
"nyc2",
324+
"nyc3",
325+
"sfo1",
326+
"sfo2",
327+
"sfo3",
328+
"sgp1",
329+
"tor1"
330+
],
331+
"available": True
332+
},
333+
"size_slug": "s-2vcpu-4gb",
334+
"networks": {
335+
"v4": [
336+
{
337+
"ip_address": "161.35.111.46",
338+
"netmask": "255.255.240.0",
339+
"gateway": "161.35.96.1",
340+
"type": "public"
341+
},
342+
{
343+
"ip_address": "164.90.252.21",
344+
"netmask": "255.255.252.0",
345+
"gateway": "164.90.252.1",
346+
"type": "public"
347+
}
348+
],
349+
"v6": []
350+
},
351+
"region": {
352+
"name": "New York 1",
353+
"slug": "nyc1",
354+
"features": [
355+
"private_networking",
356+
"backups",
357+
"ipv6",
358+
"metadata",
359+
"install_agent",
360+
"storage",
361+
"image_transfer"
362+
],
363+
"available": True,
364+
"sizes": [
365+
"s-1vcpu-1gb",
366+
"512mb",
367+
"s-1vcpu-2gb",
368+
"1gb",
369+
"s-3vcpu-1gb",
370+
"s-2vcpu-2gb",
371+
"s-1vcpu-3gb",
372+
"s-2vcpu-4gb",
373+
"2gb",
374+
"s-4vcpu-8gb",
375+
"m-1vcpu-8gb",
376+
"c-2",
377+
"4gb",
378+
"c2-2vcpu-4gb",
379+
"g-2vcpu-8gb",
380+
"gd-2vcpu-8gb",
381+
"m-16gb",
382+
"s-8vcpu-16gb",
383+
"s-6vcpu-16gb",
384+
"c-4",
385+
"8gb",
386+
"c2-4vpcu-8gb",
387+
"m-2vcpu-16gb",
388+
"m3-2vcpu-16gb",
389+
"g-4vcpu-16gb",
390+
"gd-4vcpu-16gb",
391+
"m6-2vcpu-16gb",
392+
"m-32gb",
393+
"s-8vcpu-32gb",
394+
"c-8",
395+
"c2-8vpcu-16gb",
396+
"m-4vcpu-32gb",
397+
"m3-4vcpu-32gb",
398+
"g-8vcpu-32gb",
399+
"s-12vcpu-48gb",
400+
"gd-8vcpu-32gb",
401+
"m6-4vcpu-32gb",
402+
"m-64gb",
403+
"s-16vcpu-64gb",
404+
"c-16",
405+
"32gb",
406+
"c2-16vcpu-32gb",
407+
"m-8vcpu-64gb",
408+
"m3-8vcpu-64gb",
409+
"g-16vcpu-64gb",
410+
"s-20vcpu-96gb",
411+
"48gb",
412+
"gd-16vcpu-64gb",
413+
"m6-8vcpu-64gb",
414+
"m-128gb",
415+
"s-24vcpu-128gb",
416+
"c-32",
417+
"64gb",
418+
"c2-32vpcu-64gb",
419+
"m-16vcpu-128gb",
420+
"m3-16vcpu-128gb",
421+
"s-32vcpu-192gb",
422+
"m6-16vcpu-128gb"
423+
]
424+
},
425+
"tags": [
426+
"dev"
427+
]
428+
}
429+
],
430+
"links": {},
431+
"meta": {
432+
"total": 1
433+
}
434+
}
435+
responses.add(
436+
responses.GET,
437+
url='https://api.digitalocean.com/v2/droplets',
438+
json=response_data,
439+
status=200
440+
)
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
from pydoautomator import Automator
2+
import inspect
3+
from unittest.mock import MagicMock
4+
from .api_mocks import list_droplets_response
5+
import requests
6+
import responses
7+
8+
9+
class TestGetAllDroplets():
10+
def test_get_all_droplets_exists(self):
11+
assert hasattr(Automator, 'get_all_droplets')
12+
13+
def test_get_all_droplets_should_be_function(self):
14+
assert inspect.isfunction(Automator.get_all_droplets)
15+
16+
def test_get_all_droplets_call_requests_get_once(self):
17+
aut = Automator('whatever-test-token')
18+
aut.requests.get = MagicMock()
19+
aut.get_all_droplets()
20+
aut.requests.get.assert_called_once()
21+
22+
def test_get_all_droplets_call_requests_w_args(self):
23+
aut = Automator('whatever-test-token')
24+
aut.requests.get = MagicMock()
25+
aut.get_all_droplets()
26+
aut.requests.get.assert_called_once_with(
27+
'https://api.digitalocean.com/v2/droplets')
28+
29+
@responses.activate
30+
def test_get_all_droplets_should_return_list(self):
31+
aut = Automator('whatever-test-token')
32+
list_droplets_response()
33+
response = requests.get('https://api.digitalocean.com/v2/droplets')
34+
aut.requests.get = MagicMock(return_value=response)
35+
assert type(aut.get_all_droplets()) == list
36+
37+
@responses.activate
38+
def test_get_all_droplets_item_should_contain_keys(self):
39+
some_expected_keys = ['id', 'name', 'region']
40+
aut = Automator('whatever-test-token')
41+
list_droplets_response()
42+
response = requests.get('https://api.digitalocean.com/v2/droplets')
43+
aut.requests.get = MagicMock(return_value=response)
44+
assert set(some_expected_keys) <= set(aut.get_all_droplets()[0])

0 commit comments

Comments
 (0)