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 d8b1585be9caec4c236b9319a7e0ad9afa10013e..c709049503f01d9a909bfc347ac25993ff21a27c 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 09:10 +# Generated by Django 3.2.5 on 2021-08-19 12:57 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), ), diff --git a/greg/models.py b/greg/models.py index 9d5c7d75f572bcb6601b280805cabe5077886d3c..1f04cecfb982ba6878472daa7ab946f8e1bcadc2 100644 --- a/greg/models.py +++ b/greg/models.py @@ -262,6 +262,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", @@ -269,8 +272,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: @@ -317,3 +324,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