Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 4259c268 authored by Artur CIESZKOWSKI's avatar Artur CIESZKOWSKI
Browse files

Merge branch '23-trigger-save-on-mapping-when-saving-a-sub-resource' into 'main'

Resolve "Trigger save on mapping when saving a sub-resource."

Closes #23

See merge request !70
parents 274b926e 57a9cc74
No related branches found
No related tags found
1 merge request!70Resolve "Trigger save on mapping when saving a sub-resource."
Pipeline #217977 passed
...@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" ...@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
[tool.poetry] [tool.poetry]
name = "netbox-rps-plugin" name = "netbox-rps-plugin"
version = "0.23.0" version = "0.24.0"
# Family name last year contributors # Family name last year contributors
authors = [ authors = [
"David Jose DELASSUS", "David Jose DELASSUS",
......
"""Netbox Plugin Configuration""" """Netbox Plugin Configuration"""
from netbox_nms_common.plugin_config import AutoPluginConfig from netbox_nms_common.plugin_config import AutoPluginConfig
...@@ -8,11 +9,19 @@ class NetBoxRpsConfig(AutoPluginConfig): ...@@ -8,11 +9,19 @@ class NetBoxRpsConfig(AutoPluginConfig):
name = __package__ name = __package__
verbose_name = "NetBox RPS" verbose_name = "NetBox RPS"
base_url = "rps" base_url = "rps"
default_settings = { default_settings = {"default_sorry_page": "https://sorry.ec.europa.eu/"}
"default_sorry_page": "https://sorry.ec.europa.eu/"
}
django_apps = ["django_extensions"] django_apps = ["django_extensions"]
def ready(self):
"Funtion that runs after initial setup of Netbox"
# pylint: disable=C0415, W0611:
from netbox_rps_plugin.signals import (
mappings,
)
super().ready()
# pylint: disable=C0103 # pylint: disable=C0103
config = NetBoxRpsConfig config = NetBoxRpsConfig
from typing import Union
from django.db.models.signals import post_save
from netbox_rps_plugin.models import (
HttpHeader,
SamlConfig,
AclDeniedSource,
CacheConfig,
HstsProtocol,
)
mapping_sub_resources = [
HttpHeader,
SamlConfig,
AclDeniedSource,
CacheConfig,
HstsProtocol,
]
def callback(
sender,
instance: Union[
HttpHeader,
SamlConfig,
AclDeniedSource,
CacheConfig,
HstsProtocol,
],
**kwargs
):
instance.mapping.save()
for sub_resource in mapping_sub_resources:
post_save.connect(callback, sender=sub_resource)
"Signals test suit"
from unittest.mock import patch
from django.test import TestCase
from netbox_rps_plugin.models import (
HttpHeader,
SamlConfig,
AclDeniedSource,
CacheConfig,
HstsProtocol,
Mapping,
)
class SignalTestCase(TestCase):
"Signals test suit"
@classmethod
def setUpTestData(cls) -> None: # pylint: disable=invalid-name
acs_url_tmp = "https://truc11.com/api"
logout_url_tmp = "http://10.10.10.21:1800/api"
test_mapping = Mapping.objects.create(
source="https://truc00.com/api", target="http://10.10.10.10:1800/api"
)
cls.test_data = [
HttpHeader(name="Test http header name", mapping=test_mapping),
SamlConfig(
acs_url=acs_url_tmp,
logout_url=logout_url_tmp,
force_nauth=False,
mapping=test_mapping,
),
AclDeniedSource(
mapping=test_mapping,
acl_source="1.2.3.4/12",
),
CacheConfig(
mapping=test_mapping,
list_extensions=["JPG"],
),
HstsProtocol(
max_age=0,
subdomains=True,
preload_flag=True,
mapping=test_mapping,
),
]
def test_signal_callback_triggered_on_create(self):
"""
Test that the signal callback is triggered and instance.mapping.save()
is calledwhen one of the sub_resources is created
(and the post_save signal is automatically triggered).
"""
for instance in self.test_data:
with patch.object(instance.mapping, "save") as mock_save:
instance.save()
mock_save.assert_called_once()
def test_signal_callback_triggered_on_update(self):
"""
Test that the signal callback is triggered and instance.mapping.save()
is called when one of the sub_resources is updated
(and the post_save signal is automatically triggered).
"""
for instance in self.test_data:
if isinstance(instance, HttpHeader):
instance.name = "updated name"
elif isinstance(instance, SamlConfig):
instance.logout_url = "http://10.10.10.21:1800/api/logout"
elif isinstance(instance, AclDeniedSource):
instance.acl_source = "1.2.3.4/14"
elif isinstance(instance, CacheConfig):
instance.list_extensions = (["PNG"],)
elif isinstance(instance, HstsProtocol):
instance.max_age = 10
else:
raise ValueError("Unsupported sub_resource type")
with patch.object(instance.mapping, "save") as mock_save:
instance.save()
mock_save.assert_called_once()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment