Skip to content
Snippets Groups Projects
Commit a33be00e authored by Tore.Brede's avatar Tore.Brede
Browse files

Merge branch 'GREG-10_adding_cascading_deletes_for_person' into 'master'

GREG-10: Adding cascading deletes for persons

See merge request !19
parents f5954138 9f92d6a6
No related branches found
No related tags found
1 merge request!19GREG-10: Adding cascading deletes for persons
Pipeline #89351 passed
# Generated by Django 3.2.5 on 2021-08-06 10:47
# Generated by Django 3.2.5 on 2021-08-06 13:28
import datetime
import dirtyfields.dirtyfields
......@@ -150,7 +150,7 @@ class Migration(migrations.Migration):
('contact_person_unit', models.TextField()),
('comments', models.TextField(blank=True)),
('available_in_search', models.BooleanField(default=False)),
('person', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='person_roles', to='greg.person')),
('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='person_roles', to='greg.person')),
('registered_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='sponsor_role', to='greg.sponsor')),
('role', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='person_roles', to='greg.role')),
('unit', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='unit_person_role', to='greg.organizationalunit')),
......@@ -171,7 +171,7 @@ class Migration(migrations.Migration):
('value', models.CharField(max_length=256)),
('verified', models.CharField(blank=True, choices=[('AUTOMATIC', 'Automatic'), ('MANUAL', 'Manual')], max_length=9)),
('verified_when', models.DateField(null=True)),
('person', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='person', to='greg.person')),
('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='person', to='greg.person')),
('verified_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='sponsor', to='greg.sponsor')),
],
options={
......@@ -187,7 +187,7 @@ class Migration(migrations.Migration):
('updated', models.DateTimeField(auto_now=True)),
('consent_given_at', models.DateField(null=True)),
('consent', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='link_person_consent', to='greg.consent')),
('person', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='link_person_consent', to='greg.person')),
('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='link_person_consent', to='greg.person')),
],
bases=(dirtyfields.dirtyfields.DirtyFieldsMixin, models.Model),
),
......
......@@ -85,7 +85,7 @@ class PersonRole(BaseModel):
"""The relationship between a person and a role."""
person = models.ForeignKey(
"Person", on_delete=models.PROTECT, related_name="person_roles"
"Person", on_delete=models.CASCADE, related_name="person_roles"
)
role = models.ForeignKey(
"Role", on_delete=models.PROTECT, related_name="person_roles"
......@@ -145,7 +145,7 @@ class PersonIdentity(BaseModel):
MANUAL = "MANUAL"
person = models.ForeignKey(
"Person", on_delete=models.PROTECT, related_name="person"
"Person", on_delete=models.CASCADE, related_name="person"
)
type = models.CharField(max_length=16, choices=IdentityType.choices)
source = models.CharField(max_length=256)
......@@ -201,7 +201,7 @@ class PersonConsent(BaseModel):
"""
person = models.ForeignKey(
"Person", on_delete=models.PROTECT, related_name="link_person_consent"
"Person", on_delete=models.CASCADE, related_name="link_person_consent"
)
consent = models.ForeignKey(
"Consent", on_delete=models.PROTECT, related_name="link_person_consent"
......
......@@ -5,7 +5,14 @@ from rest_framework import status
from rest_framework.reverse import reverse
from rest_framework.status import HTTP_200_OK
from greg.models import Person, PersonIdentity, Sponsor, Role, OrganizationalUnit
from greg.models import (
Person,
PersonIdentity,
Sponsor,
Role,
OrganizationalUnit,
Consent,
)
@pytest.fixture
......@@ -105,6 +112,21 @@ def role_data_guest(
}
@pytest.fixture
def consent_foo() -> Consent:
return Consent.objects.create(
type="test_consent",
consent_name_en="Test1",
consent_name_nb="Test2",
consent_description_en="Test description",
consent_description_nb="Test beskrivelse",
consent_link_en="https://example.org",
consent_link_nb="https://example.org",
valid_from="2018-01-20",
user_allowed_to_change=True,
)
@pytest.mark.django_db
def test_get_person(client, person_foo):
resp = client.get(reverse("person-detail", kwargs={"id": person_foo.id}))
......@@ -362,3 +384,30 @@ def test_identity_update(client, person_foo):
assert results[0]["type"] == data_updated["type"]
assert results[0]["source"] == data_updated["source"]
assert results[0]["value"] == data_updated["value"]
@pytest.mark.django_db
def test_remove_person(
client, person_foo, role_data_guest, person_foo_verified, person_foo_not_verified
):
url = reverse("person_role-list", kwargs={"person_id": person_foo.id})
client.post(url, role_data_guest)
roles_for_person = client.get(url).json()["results"]
assert len(roles_for_person) == 1
response = client.get(
reverse("person_identity-list", kwargs={"person_id": person_foo.id})
)
assert len(response.json()["results"]) == 2
# Delete the person and check that the data has been removed
client.delete(reverse("person-detail", kwargs={"id": person_foo.id}))
updated_role_data = client.get(url)
assert len(updated_role_data.json()["results"]) == 0
response = client.get(
reverse("person_identity-list", kwargs={"person_id": person_foo.id})
)
assert len(response.json()["results"]) == 0
......@@ -2,8 +2,6 @@ from functools import partial
import pytest
from django.db.models import ProtectedError
from greg.models import (
OrganizationalUnit,
Person,
......@@ -12,7 +10,6 @@ from greg.models import (
Sponsor,
)
person_role_with = partial(
PersonRole.objects.create,
start_date="2020-03-05",
......@@ -65,12 +62,3 @@ def test_add_multiple_roles_to_person(person, role_foo, role_bar):
assert len(person_roles) == 2
assert role_foo in person_roles
assert role_bar in person_roles
@pytest.mark.django_db
def test_delete_person_with_roles(person):
# it is not clear what cleanup needs to be done when removing a person,
# so for now it is prohibited to delete a person with role relationships
# attached in other tables
with pytest.raises(ProtectedError):
person.delete()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment