diff --git a/greg/tests/models/__init__.py b/greg/tests/models/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/greg/tests/models/test_person.py b/greg/tests/models/test_person.py
new file mode 100644
index 0000000000000000000000000000000000000000..fb851f06594a6aa9e9e5996c52cb794f9ff3622d
--- /dev/null
+++ b/greg/tests/models/test_person.py
@@ -0,0 +1,76 @@
+from functools import partial
+
+import pytest
+
+from django.db.models import ProtectedError
+
+from greg.models import (
+    OrganizationalUnit,
+    Person,
+    PersonRole,
+    Role,
+    Sponsor,
+)
+
+
+person_role_with = partial(
+    PersonRole.objects.create,
+    start_date="2020-03-05",
+    end_date="2020-06-10",
+    contact_person_unit="Contact Person",
+    available_in_search=True,
+)
+
+
+@pytest.fixture
+def role_foo() -> Role:
+    return Role.objects.create(type="role_foo", name_en="Role Foo")
+
+
+@pytest.fixture
+def role_bar() -> Role:
+    return Role.objects.create(type="role_bar", name_en="Role Bar")
+
+
+@pytest.fixture
+def person(role_foo, role_bar) -> Person:
+    person = Person.objects.create(
+        first_name="Test",
+        last_name="Tester",
+        date_of_birth="2000-01-27",
+        email="test@example.org",
+        mobile_phone="123456789",
+    )
+
+    ou = OrganizationalUnit.objects.create(orgreg_id="12345", name_en="Test unit")
+    person_role_with(
+        person=person,
+        role=role_foo,
+        unit=ou,
+        registered_by=Sponsor.objects.create(feide_id="foosponsor@uio.no"),
+    )
+    person_role_with(
+        person=person,
+        role=role_bar,
+        unit=ou,
+        registered_by=Sponsor.objects.create(feide_id="barsponsor@uio.no"),
+    )
+
+    return person
+
+
+@pytest.mark.django_db
+def test_add_multiple_roles_to_person(person, role_foo, role_bar):
+    person_roles = person.roles.all()
+    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()
diff --git a/greg/tests/test_models.py b/greg/tests/test_models.py
index 0c5879241c3466d76d0f9fb1c46b329e233873bf..26fdbbe138654d612f57d3da6199b03a845bd20e 100644
--- a/greg/tests/test_models.py
+++ b/greg/tests/test_models.py
@@ -1,10 +1,7 @@
-from django.db.models import ProtectedError
 from django.test import TestCase
 
 from greg.models import (
     Person,
-    Role,
-    PersonRole,
     OrganizationalUnit,
     Sponsor,
     SponsorOrganizationalUnit,
@@ -12,77 +9,6 @@ from greg.models import (
 )
 
 
-class PersonModelTests(TestCase):
-    test_person = dict(
-        first_name="Test",
-        last_name="Tester",
-        date_of_birth="2000-01-27",
-        email="test@example.org",
-        mobile_phone="123456789",
-    )
-
-    def test_add_multiple_roles_to_person(self):
-        role1 = Role.objects.create(type="role1", name_en="Role 1")
-        role2 = Role.objects.create(type="role2", name_en="Role 2")
-
-        unit = OrganizationalUnit.objects.create(orgreg_id="12345", name_en="Test unit")
-        sponsor = Sponsor.objects.create(feide_id="test@uio.no")
-        sponsor2 = Sponsor.objects.create(feide_id="test2@uio.no")
-
-        person = Person.objects.create(**self.test_person)
-
-        # Add two roles to the person and check that they appear when listing the roles for the person
-        PersonRole.objects.create(
-            person=person,
-            role=role1,
-            unit=unit,
-            start_date="2020-03-05",
-            end_date="2020-06-10",
-            contact_person_unit="Contact Person",
-            available_in_search=True,
-            registered_by=sponsor,
-        )
-
-        PersonRole.objects.create(
-            person=person,
-            role=role2,
-            unit=unit,
-            start_date="2021-03-05",
-            end_date="2021-06-10",
-            contact_person_unit="Contact Person",
-            available_in_search=True,
-            registered_by=sponsor2,
-        )
-
-        person_roles = person.roles.all()
-
-        self.assertEqual(2, len(person_roles))
-        self.assertIn(role1, person_roles)
-        self.assertIn(role2, person_roles)
-
-    def test_person_not_allowed_deleted_when_roles_are_present(self):
-        person = Person.objects.create(**self.test_person)
-        role = Role.objects.create(type="role1", name_en="Role 1")
-        unit = OrganizationalUnit.objects.create(orgreg_id="12345", name_en="Test unit")
-        sponsor = Sponsor.objects.create(feide_id="test@uio.no")
-
-        PersonRole.objects.create(
-            person=person,
-            role=role,
-            unit=unit,
-            start_date="2020-03-05",
-            end_date="2020-06-10",
-            contact_person_unit="Contact Person",
-            available_in_search=True,
-            registered_by=sponsor,
-        )
-
-        # It is not clear what cleanup needs to be done when a person is going to be
-        # removed, so for now is prohibited to delete a person if there is data
-        # attached to him in other tables
-        self.assertRaises(ProtectedError, person.delete)
-
-
 class SponsorModelTests(TestCase):
     def test_add_sponsor_to_multiple_units(self):
         sponsor = Sponsor.objects.create(feide_id="test@uio.no")