diff --git a/greg/management/commands/import_sponsors_from_cerebrum.py b/greg/management/commands/import_sponsors_from_cerebrum.py index 6b720771460f64a1da9d67c495013909f714de48..40b5ef741521088a76398363433c73ebf832a364 100644 --- a/greg/management/commands/import_sponsors_from_cerebrum.py +++ b/greg/management/commands/import_sponsors_from_cerebrum.py @@ -40,6 +40,7 @@ class Command(BaseCommand): organizational_unit=unit, source=self.CEREBRUM_SOURCE, automatic=True, + hierarchical_access=False, ) if created: logger.info("sponsor_ou_link_create", sponsor=sponsor.id, sunit=sunit.id) @@ -119,7 +120,7 @@ class Command(BaseCommand): active_units = OrganizationalUnit.objects.filter( active=True, deleted=False, - ) + ).exclude(identifiers__value__in=[]) logger.info("import_start", nr_of_units=len(active_units)) for unit in active_units: diff --git a/greg/tests/conftest.py b/greg/tests/conftest.py index db81a828d3662732d54c287cbb81d8cdda0c0079..d9e288dff7c90d5cd172b21e34a16943f0b86191 100644 --- a/greg/tests/conftest.py +++ b/greg/tests/conftest.py @@ -163,12 +163,20 @@ def unit_foo() -> OrganizationalUnit: @pytest.fixture def ouidentifier_foo(unit_foo) -> OuIdentifier: - ouid = OuIdentifier.objcets.create( + ouid = OuIdentifier.objects.create( source="orgreg", name="orgreg", value="12345", orgunit=unit_foo ) return OuIdentifier.objects.get(id=ouid.id) +@pytest.fixture +def ouidentifier_foo2(unit_foo) -> OuIdentifier: + ouid = OuIdentifier.objects.create( + source="orgreg", name="legacy_stedkode", value="12345", orgunit=unit_foo + ) + return OuIdentifier.objects.get(id=ouid.id) + + @pytest.fixture def role_person_foo( person_foo: Person, diff --git a/greg/tests/management/test_import_sponsors_from_cerebrum.py b/greg/tests/management/test_import_sponsors_from_cerebrum.py new file mode 100644 index 0000000000000000000000000000000000000000..a8ea12e01eef0127ccf310a6680da0fd1dc3bdd7 --- /dev/null +++ b/greg/tests/management/test_import_sponsors_from_cerebrum.py @@ -0,0 +1,92 @@ +import datetime +from cerebrum_client.models import Group +import pytest +from django.conf import settings +from django.core.management import call_command + +from greg.models import Sponsor + + +class MockResponse: + def __init__(self, response): + self.response = response + + def json(self): + return self.response + + +@pytest.fixture +def cerebrum_response(): + created_at = (datetime.datetime.now() - datetime.timedelta(days=1)).isoformat() + return MockResponse( + f"""{{"href": "", "id": 1, "name": "", "description": "", + "created_at": "{created_at}", + "contexts": ["das"], + "visibility": "", + "moderators": ""}}""" + ) + + +@pytest.fixture +def group_members_response(): + return MockResponse("""{"members":[{"href": "asd", "type": "person", "id": 1}]}""") + + +@pytest.fixture +def person_response(): + return MockResponse( + """{ + "contexts": [""], + "href": "", + "names": [ + {"source_system":"DFO_SAP", "variant": "FIRST", "name": "Ola"}, + {"source_system":"DFO_SAP", "variant": "LAST", "name": "Nordmann"} + ], + "id": 1}""" + ) + + +@pytest.fixture +def account_response(): + return MockResponse( + """{"accounts": [{ + "href": "", + "primary": true, + "id": 1, + "name": "olanord"}]}""" + ) + + +@pytest.mark.django_db +def test_import_sponsors_from_cerebrum( + requests_mock, + cerebrum_response, + group_members_response, + person_response, + account_response, + sponsor_org_unit, + ouidentifier_foo2, +): + settings.CEREBRUM_CLIENT = { + "url": "http://example.com/cerebrum/", + "headers": {"X-Gravitee-Api-Key": "fake-key"}, + } + requests_mock.get( + "http://example.com/cerebrum/v1/groups/adm-leder-12345", + text=cerebrum_response.json(), + ) + requests_mock.get( + "http://example.com/cerebrum/v1/groups/adm-leder-12345/members/", + text=group_members_response.json(), + ) + requests_mock.get( + "http://example.com/cerebrum/v1/persons/1", + text=person_response.json(), + ) + requests_mock.get( + "http://example.com/cerebrum/v1/persons/1/accounts", + text=account_response.json(), + ) + assert Sponsor.objects.all().count() == 1 + call_command("import_sponsors_from_cerebrum") + assert Sponsor.objects.all().count() == 2