Skip to content
This repository was archived by the owner on Jan 4, 2021. It is now read-only.
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .isort.cfg
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[settings]
line_length=88
multi_line_output=3
include_trailing_comma=True
3 changes: 3 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
Django==2.2.10
django-crispy-forms==1.8.0
django-filter==2.2.0
django-tables2==2.2.1
djangorestframework==3.11.0
Markdown==3.1.1
python-decouple==3.1
pytz==2019.3
sqlparse==0.3.0
5 changes: 5 additions & 0 deletions src/squirrel/api/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class ApiConfig(AppConfig):
name = "squirrel.api"
8 changes: 8 additions & 0 deletions src/squirrel/api/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from rest_framework import serializers
from squirrel.orders.models import Product


class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ["id", "name", "unit"]
Empty file.
39 changes: 39 additions & 0 deletions src/squirrel/api/tests/testApi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import json

from django.contrib.auth.models import User
from rest_framework import status
from rest_framework.test import APITestCase
from squirrel.orders.models import Product


class ProductTests(APITestCase):
def setUp(self) -> None:
User.objects.create_user(username="any_user", password="test123")

Product.objects.create(name="Apfel")
Product.objects.create(name="Birne")
Product.objects.create(name="Zurrgurt")

def test_logged_out_forbidden(self):
response = self.client.get("/api/products/")
self.assertEqual(response.status_code, 403)

def test_logged_in_ok(self):
self.client.login(username="any_user", password="test123")
self.client.get("/api/products", format="json")

response = self.client.get("/api/products/", format="json")
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEquals(
json.loads(response.content),
{
"count": 3,
"next": None,
"previous": None,
"results": [
{"id": 1, "name": "Apfel", "unit": "Stück"},
{"id": 2, "name": "Birne", "unit": "Stück"},
{"id": 3, "name": "Zurrgurt", "unit": "Stück"},
],
},
)
8 changes: 8 additions & 0 deletions src/squirrel/api/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from django.urls import include, path
from rest_framework import routers
from squirrel.api import views

router = routers.DefaultRouter()
router.register(r"products", views.ProductViewSet)

urlpatterns = [path("", include(router.urls))]
13 changes: 13 additions & 0 deletions src/squirrel/api/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from rest_framework import permissions, viewsets
from squirrel.api.serializers import ProductSerializer
from squirrel.orders.models import Product


class ProductViewSet(viewsets.ModelViewSet):
"""
Read-Only API endpoint for products
"""

queryset = Product.objects.all().order_by("name")
serializer_class = ProductSerializer
permission_classes = [permissions.IsAuthenticated]
6 changes: 6 additions & 0 deletions src/squirrel/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
"squirrel.orders",
"crispy_forms",
"django_tables2",
"rest_framework",
]

# Which templates to use for crispy_forms
Expand Down Expand Up @@ -163,3 +164,8 @@
"--with-coverage",
"--cover-package=orders,squirrel",
]

REST_FRAMEWORK = {
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination",
"PAGE_SIZE": 100,
}
6 changes: 3 additions & 3 deletions src/squirrel/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
"""
from django.contrib import admin
from django.contrib.auth import views as auth_views
from django.urls import path

from .orders import views
from django.urls import include, path
from squirrel.orders import views

urlpatterns = [
path("api/", include("squirrel.api.urls")),
path("", views.overview, name="overview"),
path("logout", auth_views.LogoutView.as_view(), name="logout"),
path(
Expand Down