From ad01167f766a97719c61f00091a871c8772459ae Mon Sep 17 00:00:00 2001 From: Boris Vasilev Date: Fri, 21 Feb 2020 09:25:02 +0000 Subject: [PATCH 1/2] Create Sample serializer and views --- .../apps/example_app/api/serializers/__init__.py | 1 + .../apps/example_app/api/serializers/serializers.py | 8 ++++++++ opint_framework/apps/example_app/api/views/views.py | 7 +++++++ opint_framework/apps/example_app/tests/__init__.py | 0 opint_framework/apps/example_app/urls.py | 13 ++++++++++--- 5 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 opint_framework/apps/example_app/api/serializers/__init__.py create mode 100644 opint_framework/apps/example_app/api/serializers/serializers.py create mode 100644 opint_framework/apps/example_app/tests/__init__.py diff --git a/opint_framework/apps/example_app/api/serializers/__init__.py b/opint_framework/apps/example_app/api/serializers/__init__.py new file mode 100644 index 0000000..09984a5 --- /dev/null +++ b/opint_framework/apps/example_app/api/serializers/__init__.py @@ -0,0 +1 @@ +from .serializers import SampleSerializer # noqa: F401 \ No newline at end of file diff --git a/opint_framework/apps/example_app/api/serializers/serializers.py b/opint_framework/apps/example_app/api/serializers/serializers.py new file mode 100644 index 0000000..dbdbec7 --- /dev/null +++ b/opint_framework/apps/example_app/api/serializers/serializers.py @@ -0,0 +1,8 @@ +from rest_framework import serializers +from opint_framework.apps.example_app.models import SampleModel + + +class SampleSerializer(serializers.ModelSerializer): + class Meta: + model = SampleModel + fields = ['id', 'sample_message'] \ No newline at end of file diff --git a/opint_framework/apps/example_app/api/views/views.py b/opint_framework/apps/example_app/api/views/views.py index 25a4fc0..90c916d 100644 --- a/opint_framework/apps/example_app/api/views/views.py +++ b/opint_framework/apps/example_app/api/views/views.py @@ -1,10 +1,17 @@ from rest_framework import viewsets from rest_framework.response import Response +from opint_framework.apps.example_app.models import SampleModel +from opint_framework.apps.example_app.api.serializers import SampleSerializer + + class SampleViewSet(viewsets.ModelViewSet): """ API endpoint that allows SampleModel to be viewed or edited. """ + queryset = SampleModel.objects.all() + serializer_class = SampleSerializer + def index(request): return Response({"Result":"OK"}) diff --git a/opint_framework/apps/example_app/tests/__init__.py b/opint_framework/apps/example_app/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/opint_framework/apps/example_app/urls.py b/opint_framework/apps/example_app/urls.py index 05968de..659c4ca 100644 --- a/opint_framework/apps/example_app/urls.py +++ b/opint_framework/apps/example_app/urls.py @@ -1,8 +1,15 @@ -from django.urls import path -from .api.views import SampleViewSet +from django.urls import path, include + +from rest_framework import routers + +from opint_framework.apps.example_app.api.views import SampleViewSet + +router = routers.DefaultRouter() +router.register(r'sample', SampleViewSet) urlpatterns = [ # Could be accessed as http://127.0.0.1:8000/example_app/api/ - path("", SampleViewSet.index, name='index'), + path("home", SampleViewSet.index, name='index'), + path('', include(router.urls)), ] From 91d1fb38e1b9bc967ed18389ff92d6db1934404a Mon Sep 17 00:00:00 2001 From: Boris Vasilev Date: Fri, 21 Feb 2020 10:06:23 +0000 Subject: [PATCH 2/2] Add Sample tests. Fix naming in core tests. --- .../api/serializers/serializers.py | 4 +- .../apps/example_app/api/views/views.py | 4 +- .../apps/example_app/models/__init__.py | 2 +- .../apps/example_app/models/models.py | 2 +- .../apps/example_app/tests/test_sample.py | 60 +++++++++++++++++++ opint_framework/apps/example_app/urls.py | 2 +- .../core/tests/test_issuecategory.py | 4 +- opint_framework/core/tests/test_solution.py | 4 +- 8 files changed, 71 insertions(+), 11 deletions(-) create mode 100644 opint_framework/apps/example_app/tests/test_sample.py diff --git a/opint_framework/apps/example_app/api/serializers/serializers.py b/opint_framework/apps/example_app/api/serializers/serializers.py index dbdbec7..01e9da2 100644 --- a/opint_framework/apps/example_app/api/serializers/serializers.py +++ b/opint_framework/apps/example_app/api/serializers/serializers.py @@ -1,8 +1,8 @@ from rest_framework import serializers -from opint_framework.apps.example_app.models import SampleModel +from opint_framework.apps.example_app.models import Sample class SampleSerializer(serializers.ModelSerializer): class Meta: - model = SampleModel + model = Sample fields = ['id', 'sample_message'] \ No newline at end of file diff --git a/opint_framework/apps/example_app/api/views/views.py b/opint_framework/apps/example_app/api/views/views.py index 90c916d..92d9ce9 100644 --- a/opint_framework/apps/example_app/api/views/views.py +++ b/opint_framework/apps/example_app/api/views/views.py @@ -1,7 +1,7 @@ from rest_framework import viewsets from rest_framework.response import Response -from opint_framework.apps.example_app.models import SampleModel +from opint_framework.apps.example_app.models import Sample from opint_framework.apps.example_app.api.serializers import SampleSerializer @@ -9,7 +9,7 @@ class SampleViewSet(viewsets.ModelViewSet): """ API endpoint that allows SampleModel to be viewed or edited. """ - queryset = SampleModel.objects.all() + queryset = Sample.objects.all() serializer_class = SampleSerializer def index(request): diff --git a/opint_framework/apps/example_app/models/__init__.py b/opint_framework/apps/example_app/models/__init__.py index c9f89fa..3c31f00 100644 --- a/opint_framework/apps/example_app/models/__init__.py +++ b/opint_framework/apps/example_app/models/__init__.py @@ -1 +1 @@ -from .models import SampleModel # noqa: F401 +from .models import Sample # noqa: F401 diff --git a/opint_framework/apps/example_app/models/models.py b/opint_framework/apps/example_app/models/models.py index 734df39..9f35d14 100644 --- a/opint_framework/apps/example_app/models/models.py +++ b/opint_framework/apps/example_app/models/models.py @@ -1,7 +1,7 @@ from django.db import models -class SampleModel(models.Model): +class Sample(models.Model): """ Sample Model. """ diff --git a/opint_framework/apps/example_app/tests/test_sample.py b/opint_framework/apps/example_app/tests/test_sample.py new file mode 100644 index 0000000..aa2542f --- /dev/null +++ b/opint_framework/apps/example_app/tests/test_sample.py @@ -0,0 +1,60 @@ +import json +from rest_framework import status +from rest_framework.reverse import reverse +from rest_framework.test import APITestCase + +from opint_framework.apps.example_app.models import Sample + + +class SampleViewSetTestCase(APITestCase): + list_url = reverse('sample-list') + + def test_home_page(self): + home_url = reverse('sample-home') + + res = self.client.get(home_url) + self.assertEquals(res.status_code, status.HTTP_200_OK) + self.assertEquals(json.loads(res.content)['Result'], 'OK') + + def test_list_samples(self): + res = self.client.get(self.list_url, format='json') + self.assertEquals(res.status_code, status.HTTP_200_OK) + + def test_create_samples(self): + data = {'sample_message': 'TEST'} + res = self.client.post(self.list_url, data, format='json') + + self.assertEquals(res.status_code, status.HTTP_201_CREATED) + self.assertEquals(Sample.objects.count(), 1) + self.assertEquals(Sample.objects.first().sample_message, 'TEST') + + def test_list_samples_populated(self): + Sample.objects.create(sample_message='TEST') + + res = self.client.get(self.list_url) + + self.assertEquals(res.status_code, status.HTTP_200_OK) + self.assertEquals(len(res.data['results']), 1) + + def test_sample_detail(self): + sample = Sample.objects.create(sample_message='TEST') + + detail_url = reverse('sample-detail', args=[sample.pk]) + res = self.client.get(detail_url) + + self.assertEquals(res.status_code, status.HTTP_200_OK) + + def test_sample_detail_invalid(self): + detail_url = reverse('sample-detail', args=[9999]) + res = self.client.get(detail_url) + + self.assertEquals(res.status_code, status.HTTP_404_NOT_FOUND) + + def test_delete_sample(self): + sample = Sample.objects.create(sample_message='TEST') + detail_url = reverse('sample-detail', args=[sample.pk]) + + res = self.client.delete(detail_url, format='json') + + self.assertEquals(res.status_code, status.HTTP_204_NO_CONTENT) + self.assertEquals(Sample.objects.count(), 0) diff --git a/opint_framework/apps/example_app/urls.py b/opint_framework/apps/example_app/urls.py index 659c4ca..fd1a592 100644 --- a/opint_framework/apps/example_app/urls.py +++ b/opint_framework/apps/example_app/urls.py @@ -10,6 +10,6 @@ urlpatterns = [ # Could be accessed as http://127.0.0.1:8000/example_app/api/ - path("home", SampleViewSet.index, name='index'), + path("home", SampleViewSet.index, name='sample-home'), path('', include(router.urls)), ] diff --git a/opint_framework/core/tests/test_issuecategory.py b/opint_framework/core/tests/test_issuecategory.py index b681c6c..624ac48 100644 --- a/opint_framework/core/tests/test_issuecategory.py +++ b/opint_framework/core/tests/test_issuecategory.py @@ -5,7 +5,7 @@ from opint_framework.core.models import IssueCategory -class ActionViewSetTestCase(APITestCase): +class IssueCategoryViewSetTestCase(APITestCase): list_url = reverse('issuecategory-list') def test_list_issuecategories(self): @@ -36,7 +36,7 @@ def test_issuecategory_detail(self): self.assertEquals(res.status_code, status.HTTP_200_OK) - def test_action_detail_invalid(self): + def test_issuecategory_detail_invalid(self): detail_url = reverse('issuecategory-detail', args=[9999]) res = self.client.get(detail_url) diff --git a/opint_framework/core/tests/test_solution.py b/opint_framework/core/tests/test_solution.py index 0553256..5d0875e 100644 --- a/opint_framework/core/tests/test_solution.py +++ b/opint_framework/core/tests/test_solution.py @@ -5,7 +5,7 @@ from opint_framework.core.models import Action, Solution -class ActionViewSetTestCase(APITestCase): +class SolutionViewSetTestCase(APITestCase): list_url = reverse('solution-list') def test_list_solutions(self): @@ -45,7 +45,7 @@ def test_solution_detail(self): self.assertEquals(res.status_code, status.HTTP_200_OK) - def test_action_detail_invalid(self): + def test_solution_detail_invalid(self): detail_url = reverse('solution-detail', args=[9999]) res = self.client.get(detail_url)