diff --git a/greg/api/serializers/sponsor.py b/greg/api/serializers/sponsor.py index 57326558e9999d307412bed70d79665ae63c8821..71f3655c9115346a9cf7be5d280f5496a0543d6b 100644 --- a/greg/api/serializers/sponsor.py +++ b/greg/api/serializers/sponsor.py @@ -6,4 +6,4 @@ from greg.models import Sponsor class SponsorSerializer(serializers.ModelSerializer): class Meta: model = Sponsor - fields = ["id", "feide_id"] + fields = ["id", "feide_id", "first_name", "last_name"] diff --git a/greg/api/views/sponsor.py b/greg/api/views/sponsor.py index d53c81aeb88cec160d6f1b73345bb2dd91f75a65..d88772b523da93de2e60eb1a6cf15c644a298111 100644 --- a/greg/api/views/sponsor.py +++ b/greg/api/views/sponsor.py @@ -1,6 +1,6 @@ from drf_spectacular.utils import extend_schema, OpenApiParameter from rest_framework import mixins -from rest_framework.viewsets import ReadOnlyModelViewSet, GenericViewSet +from rest_framework.viewsets import GenericViewSet, ModelViewSet from greg.api.pagination import PrimaryKeyCursorPagination from greg.api.serializers import PersonSerializer @@ -8,7 +8,7 @@ from greg.api.serializers.sponsor import SponsorSerializer from greg.models import Sponsor, Person -class SponsorViewSet(ReadOnlyModelViewSet): +class SponsorViewSet(ModelViewSet): """Sponsor API""" queryset = Sponsor.objects.all().order_by("id") diff --git a/greg/migrations/0001_initial.py b/greg/migrations/0001_initial.py index 0c62c6abb79b3214a3373b311571e47aeaa57b5f..9da8a0b0f133cd26dec1bf1ed106d55357d54ad0 100644 --- a/greg/migrations/0001_initial.py +++ b/greg/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.5 on 2021-08-19 11:04 +# Generated by Django 3.2.5 on 2021-08-20 08:20 import datetime import dirtyfields.dirtyfields @@ -119,6 +119,8 @@ class Migration(migrations.Migration): ('created', models.DateTimeField(auto_now_add=True)), ('updated', models.DateTimeField(auto_now=True)), ('feide_id', models.CharField(max_length=256)), + ('first_name', models.CharField(max_length=256)), + ('last_name', models.CharField(max_length=256)), ], bases=(dirtyfields.dirtyfields.DirtyFieldsMixin, models.Model), ), @@ -163,7 +165,7 @@ class Migration(migrations.Migration): ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created', models.DateTimeField(auto_now_add=True)), ('updated', models.DateTimeField(auto_now=True)), - ('type', models.CharField(choices=[('ID_PORTEN', 'Id Porten'), ('FEIDE_ID', 'Feide Id'), ('PASSPORT', 'Passport'), ('DRIVERS_LICENSE', 'Drivers License'), ('NATIONAL_ID_CARD', 'National Id Card'), ('FOEDSELSNUMMER', 'Foedselsnummer'), ('OTHER', 'Other')], max_length=16)), + ('type', models.CharField(choices=[('ID_PORTEN', 'Id Porten'), ('FEIDE_ID', 'Feide Id'), ('PASSPORT', 'Passport'), ('DRIVERS_LICENSE', 'Drivers License'), ('NATIONAL_ID_CARD', 'National Id Card'), ('NATIONAL_ID_NUMBER', 'National Id Number'), ('OTHER', 'Other')], max_length=18)), ('source', models.CharField(max_length=256)), ('value', models.CharField(max_length=256)), ('verified', models.CharField(blank=True, choices=[('AUTOMATIC', 'Automatic'), ('MANUAL', 'Manual')], max_length=9)), diff --git a/greg/models.py b/greg/models.py index 61463e5a1b2d10d2053a08cb80eb01a4faa70894..f3ea02a00daaf67ea465e20d532059025eb9d9f2 100644 --- a/greg/models.py +++ b/greg/models.py @@ -263,6 +263,9 @@ class Sponsor(BaseModel): """ feide_id = models.CharField(max_length=256) + first_name = models.CharField(max_length=256) + last_name = models.CharField(max_length=256) + units = models.ManyToManyField( "OrganizationalUnit", through="SponsorOrganizationalUnit", @@ -270,8 +273,12 @@ class Sponsor(BaseModel): ) def __repr__(self): - return "{}(id={!r}, feide_id={!r})".format( - self.__class__.__name__, self.pk, self.feide_id + return "{}(id={!r}, feide_id={!r}, first_name={!r}, last_name={!r})".format( + self.__class__.__name__, + self.pk, + self.feide_id, + self.first_name, + self.last_name, ) class Meta: @@ -318,3 +325,8 @@ class ScheduleTask(models.Model): name = models.CharField(max_length=32) last_completed = models.DateTimeField(null=True) + + def __repr__(self): + return "{}(id={!r}, name={!r}, last_completed={!r})".format( + self.__class__.__name__, self.pk, self.name, self.last_completed + ) diff --git a/greg/tests/api/test_sponsor.py b/greg/tests/api/test_sponsor.py index 12c8518b031d5c4e8405927a5854808a484cefa6..06e5eb0c74045772401d143b3e2f7eb1171e88d4 100644 --- a/greg/tests/api/test_sponsor.py +++ b/greg/tests/api/test_sponsor.py @@ -1,8 +1,32 @@ import pytest +from rest_framework import status from rest_framework.reverse import reverse +@pytest.mark.django_db +def test_add_sponsor(client): + data = { + "feide_id": "sponsor@example.org", + "first_name": "Test", + "last_name": "Sponsor", + } + + post_response = client.post(reverse("sponsor-list"), data=data) + + assert post_response.status_code == status.HTTP_201_CREATED + + response_data = post_response.json() + list_response = client.get( + reverse("sponsor-detail", kwargs={"id": response_data["id"]}) + ) + list_response_data = list_response.json() + + assert list_response_data["feide_id"] == data["feide_id"] + assert list_response_data["first_name"] == data["first_name"] + assert list_response_data["last_name"] == data["last_name"] + + @pytest.mark.django_db def test_sponsor_guest_list(client, sponsor_guy, person_foo_role): url = reverse("sponsor_guests-list", kwargs={"sponsor_id": sponsor_guy.id}) diff --git a/greg/tests/conftest.py b/greg/tests/conftest.py index fb56fb7d9dec8a8d5d0eec634b0516181d401159..63646efdd9947cd04f5ec31079c855447e8b73b2 100644 --- a/greg/tests/conftest.py +++ b/greg/tests/conftest.py @@ -53,7 +53,9 @@ def person_bar() -> Person: @pytest.fixture def sponsor_guy() -> Sponsor: - return Sponsor.objects.create(feide_id="guy@example.org") + return Sponsor.objects.create( + feide_id="guy@example.org", first_name="Sponsor", last_name="Guy" + ) @pytest.fixture