diff --git a/app/network/views.py b/app/network/views.py index 192998d3d9521eb04204d2a5091522b5220ade05..2835a055854b954947d35f43248fcc1929c688bc 100644 --- a/app/network/views.py +++ b/app/network/views.py @@ -265,7 +265,7 @@ def create_interface(hostname): ) if form.validate_on_submit(): # User shall have access to the new interface domain - network = (models.Network.query.get(form.network_id.data),) + network = models.Network.query.get(form.network_id.data) if not current_user.has_access_to_network(network): abort(403) # The total number of tags will always be quite small diff --git a/tests/functional/test_web.py b/tests/functional/test_web.py index 81434667a8a04754c8eda955770a8668b2eb7f92..9b32ac63183298a5e8e11f993a99278b652a4d08 100644 --- a/tests/functional/test_web.py +++ b/tests/functional/test_web.py @@ -305,3 +305,50 @@ def test_create_host(client, domain_factory, network_factory, device_type): assert host.interfaces[0].ip == ip assert host.interfaces[0].mac == mac assert host.interfaces[0].name == name + + +def test_create_interface( + client, host_factory, domain_factory, network_factory, interface_factory +): + host = host_factory(name="myhost") + domain = domain_factory(name="prod.example.org") + network1 = network_factory(domain=domain) + interface_factory(network=network1, host=host) + network2 = network_factory( + address="192.168.2.0/24", + first_ip="192.168.2.10", + last_ip="192.168.2.250", + domain=domain, + ) + name = host.name + "-2" + ip = "192.168.2.11" + mac = "02:42:42:46:3c:75" + form = { + "host_id": host.id, + "interface_name": name, + "network_id": network2.id, + "random_mac": False, + "ip": ip, + "mac": mac, + "cnames_string": "", + "tags": [], + } + # Permission denied + # user_lab doesn't have permissions for the host domain: prod.example.org + login(client, "user_lab", "userlab") + response = client.post(f"/network/interfaces/create/{host.name}", data=form) + assert response.status_code == 403 + # The host wasn't created + assert models.Interface.query.filter_by(name=name).first() is None + logout(client) + # Success with user_prod user + login(client, "user_prod", "userprod") + response = client.post(f"/network/interfaces/create/{host.name}", data=form) + assert response.status_code == 302 + # The interface was created + interface = models.Interface.query.filter_by(name=name).first() + assert interface is not None + assert interface.ip == ip + assert interface.mac == mac + assert interface.name == name + assert interface.host == host