Skip to content

Commit f123844

Browse files
committed
Add unit tests for all create network cases
1 parent c922bce commit f123844

2 files changed

Lines changed: 113 additions & 14 deletions

File tree

hcloud/networks/client.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,11 @@ def get_by_id(self, id):
123123
return BoundNetwork(self, response["network"])
124124

125125
def get_list(
126-
self,
127-
name=None, # type: Optional[str]
128-
label_selector=None, # type: Optional[str]
129-
page=None, # type: Optional[int]
130-
per_page=None, # type: Optional[int]
126+
self,
127+
name=None, # type: Optional[str]
128+
label_selector=None, # type: Optional[str]
129+
page=None, # type: Optional[int]
130+
per_page=None, # type: Optional[int]
131131
):
132132
# type: (...) -> PageResults[List[BoundNetwork], Meta]
133133
"""Get a list of networks from this account
@@ -184,12 +184,12 @@ def get_by_name(self, name):
184184
return super(NetworksClient, self).get_by_name(name)
185185

186186
def create(
187-
self,
188-
name, # type: str
189-
ip_range, # type: str
190-
subnets=None, # type: Optional[List[NetworkSubnet]]
191-
routes=None, # type: Optional[List[NetworkRoute]]
192-
labels=None, # type: Optional[Dict[str, str]]
187+
self,
188+
name, # type: str
189+
ip_range, # type: str
190+
subnets=None, # type: Optional[List[NetworkSubnet]]
191+
routes=None, # type: Optional[List[NetworkRoute]]
192+
labels=None, # type: Optional[Dict[str, str]]
193193
):
194194
"""Creates a network with range ip_range.
195195
@@ -207,9 +207,9 @@ def create(
207207
"""
208208
data = {"name": name, "ip_range": ip_range}
209209
if subnets is not None:
210-
data["subnets"] = subnets
210+
data["subnets"] = [{'type': subnet.type, 'ip_range': subnet.ip_range, 'network_zone': subnet.network_zone} for subnet in subnets]
211211
if routes is not None:
212-
data["routes"] = routes
212+
data["routes"] = [{'destination': route.destination, 'gateway': route.gateway} for route in routes]
213213
if labels is not None:
214214
data["labels"] = labels
215215

@@ -253,7 +253,7 @@ def delete(self, network):
253253
return True
254254

255255
def get_actions_list(
256-
self, network, status=None, sort=None, page=None, per_page=None
256+
self, network, status=None, sort=None, page=None, per_page=None
257257
):
258258
# type: (Network, Optional[List[str]], Optional[List[str]], Optional[int], Optional[int]) -> PageResults[List[BoundAction], Meta]
259259
"""Returns all action objects for a network.

tests/unit/networks/test_client.py

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,14 @@ class TestNetworksClient(object):
126126
def networks_client(self):
127127
return NetworksClient(client=mock.MagicMock())
128128

129+
@pytest.fixture()
130+
def network_subnet(self):
131+
return NetworkSubnet(type="server", ip_range="10.0.1.0/24", network_zone="eu-central")
132+
133+
@pytest.fixture()
134+
def network_route(self):
135+
return NetworkRoute(destination="10.100.1.0/24", gateway="10.0.1.1")
136+
129137
def test_get_by_id(self, networks_client, network_response):
130138
networks_client._client.request.return_value = network_response
131139
bound_network = networks_client.get_by_id(1)
@@ -195,3 +203,94 @@ def test_get_by_name(self, networks_client, one_network_response):
195203
assert bound_network._client is networks_client
196204
assert bound_network.id == 1
197205
assert bound_network.name == "mynet"
206+
207+
def test_create(self, networks_client, network_create_response):
208+
networks_client._client.request.return_value = network_create_response
209+
networks_client.create(
210+
name="mynet",
211+
ip_range="10.0.0.0/8"
212+
)
213+
networks_client._client.request.assert_called_with(
214+
url="/networks",
215+
method="POST",
216+
json={
217+
'name': "mynet",
218+
'ip_range': "10.0.0.0/8",
219+
}
220+
)
221+
222+
def test_create_with_subnet(self, networks_client, network_subnet, network_create_response):
223+
networks_client._client.request.return_value = network_create_response
224+
networks_client.create(
225+
name="mynet",
226+
ip_range="10.0.0.0/8",
227+
subnets=[network_subnet]
228+
)
229+
networks_client._client.request.assert_called_with(
230+
url="/networks",
231+
method="POST",
232+
json={
233+
'name': "mynet",
234+
'ip_range': "10.0.0.0/8",
235+
'subnets': [
236+
{
237+
'type': "server",
238+
'ip_range': "10.0.1.0/24",
239+
'network_zone': "eu-central"
240+
}
241+
]
242+
}
243+
)
244+
245+
def test_create_with_route(self, networks_client, network_route, network_create_response):
246+
networks_client._client.request.return_value = network_create_response
247+
networks_client.create(
248+
name="mynet",
249+
ip_range="10.0.0.0/8",
250+
routes=[network_route]
251+
)
252+
networks_client._client.request.assert_called_with(
253+
url="/networks",
254+
method="POST",
255+
json={
256+
'name': "mynet",
257+
'ip_range': "10.0.0.0/8",
258+
'routes': [
259+
{
260+
'destination': "10.100.1.0/24",
261+
'gateway': "10.0.1.1",
262+
}
263+
]
264+
}
265+
)
266+
267+
def test_create_with_route_and_subnet(self, networks_client, network_subnet, network_route,
268+
network_create_response):
269+
networks_client._client.request.return_value = network_create_response
270+
networks_client.create(
271+
name="mynet",
272+
ip_range="10.0.0.0/8",
273+
subnets=[network_subnet],
274+
routes=[network_route]
275+
)
276+
networks_client._client.request.assert_called_with(
277+
url="/networks",
278+
method="POST",
279+
json={
280+
'name': "mynet",
281+
'ip_range': "10.0.0.0/8",
282+
'subnets': [
283+
{
284+
'type': "server",
285+
'ip_range': "10.0.1.0/24",
286+
'network_zone': "eu-central"
287+
}
288+
],
289+
'routes': [
290+
{
291+
'destination': "10.100.1.0/24",
292+
'gateway': "10.0.1.1",
293+
}
294+
]
295+
}
296+
)

0 commit comments

Comments
 (0)