From caa5ef53c85c7e1b2427680abb287047f26cbcf8 Mon Sep 17 00:00:00 2001 From: Emmanuel Cazenave Date: Thu, 5 Apr 2018 14:24:41 +0200 Subject: [PATCH 2/3] add natural_key_json to Service (#16514) --- src/authentic2/a2_rbac/models.py | 4 +++- src/authentic2/models.py | 3 +++ tests/test_natural_key.py | 10 +++++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/authentic2/a2_rbac/models.py b/src/authentic2/a2_rbac/models.py index adc48a46..75e47df8 100644 --- a/src/authentic2/a2_rbac/models.py +++ b/src/authentic2/a2_rbac/models.py @@ -214,7 +214,9 @@ class Role(RoleAbstractBase): } -Role._meta.natural_key = [['uuid'], ['slug', 'ou'], ['name', 'ou']] +Role._meta.natural_key = [ + ['uuid'], ['slug', 'ou'], ['name', 'ou'], ['slug', 'service'], ['name', 'service'] +] class RoleParenting(RoleParentingAbstractBase): diff --git a/src/authentic2/models.py b/src/authentic2/models.py index 363d1fdc..505fe704 100644 --- a/src/authentic2/models.py +++ b/src/authentic2/models.py @@ -409,6 +409,9 @@ class Service(models.Model): } +Service._meta.natural_key = [['slug', 'ou']] + + class AuthorizedRole(models.Model): service = models.ForeignKey(Service, on_delete=models.CASCADE) role = models.ForeignKey(get_role_model_name(), on_delete=models.CASCADE) diff --git a/tests/test_natural_key.py b/tests/test_natural_key.py index cda6b613..a4930c65 100644 --- a/tests/test_natural_key.py +++ b/tests/test_natural_key.py @@ -22,11 +22,19 @@ def test_natural_key_json(db, ou1): for role in Role.objects.all(): nk = role.natural_key_json() ou_nk = role.ou and role.ou.natural_key_json() - assert nk == {'uuid': role.uuid, 'slug': role.slug, 'name': role.name, 'ou': ou_nk} + service_nk = role.service and role.service.natural_key_json() + assert nk == { + 'uuid': role.uuid, 'slug': role.slug, 'name': role.name, 'ou': ou_nk, + 'service': service_nk + } assert role == Role.objects.get_by_natural_key_json(nk) assert role == Role.objects.get_by_natural_key_json({'uuid': role.uuid}) assert role == Role.objects.get_by_natural_key_json({'slug': role.slug, 'ou': ou_nk}) assert role == Role.objects.get_by_natural_key_json({'name': role.name, 'ou': ou_nk}) + assert role == Role.objects.get_by_natural_key_json( + {'slug': role.slug, 'service': service_nk}) + assert role == Role.objects.get_by_natural_key_json( + {'name': role.name, 'service': service_nk}) for permission in Permission.objects.all(): ou_nk = permission.ou and permission.ou.natural_key_json() -- 2.16.3