From cc0bdc0472343ccc1a5c83567946fa6e24d3e53a Mon Sep 17 00:00:00 2001 From: jedi Date: Mon, 23 Oct 2023 13:06:22 +0200 Subject: [PATCH] add /api/version --- backend/toolshed/admin.py | 27 +++++++++++++++++++++ backend/toolshed/api/info.py | 11 ++++++++- backend/toolshed/tests/test_api.py | 31 +++++++++++++++---------- backend/toolshed/tests/test_category.py | 1 - 4 files changed, 56 insertions(+), 14 deletions(-) create mode 100644 backend/toolshed/admin.py diff --git a/backend/toolshed/admin.py b/backend/toolshed/admin.py new file mode 100644 index 0000000..4b3174e --- /dev/null +++ b/backend/toolshed/admin.py @@ -0,0 +1,27 @@ +from django.contrib import admin + +from toolshed.models import InventoryItem, Property, Tag, ItemProperty, ItemTag + + +class InventoryItemAdmin(admin.ModelAdmin): + list_display = ('name', 'description', 'category', 'availability_policy', 'owned_quantity', 'owner') + search_fields = ('name', 'description', 'category', 'availability_policy', 'owned_quantity', 'owner') + + +admin.site.register(InventoryItem, InventoryItemAdmin) + + +class PropertyAdmin(admin.ModelAdmin): + list_display = ('name',) + search_fields = ('name',) + + +admin.site.register(Property, PropertyAdmin) + + +class TagAdmin(admin.ModelAdmin): + list_display = ('name',) + search_fields = ('name',) + + +admin.site.register(Tag, TagAdmin) diff --git a/backend/toolshed/api/info.py b/backend/toolshed/api/info.py index 1d6f045..097cf9a 100644 --- a/backend/toolshed/api/info.py +++ b/backend/toolshed/api/info.py @@ -7,6 +7,14 @@ from hostadmin.models import Domain from authentication.signature_auth import SignatureAuthentication from toolshed.models import Tag, Property, Category from toolshed.serializers import CategorySerializer, PropertySerializer +from backend.settings import TOOLSHED_VERSION + + +@api_view(['GET']) +@permission_classes([]) +@authentication_classes([]) +def get_version(request, format=None): # /version/ + return Response({'version': TOOLSHED_VERSION}) @api_view(['GET']) @@ -53,12 +61,13 @@ def list_availability_policies(request, format=None): # /availability_policies/ def combined_info(request, format=None): # /info/ tags = [tag.name for tag in Tag.objects.all()] properties = [property.name for property in Property.objects.all()] - categories = [category.name for category in Category.objects.all()] + categories = [str(category) for category in Category.objects.all()] policies = ['private', 'friends', 'internal', 'public'] return Response({'tags': tags, 'properties': properties, 'policies': policies, 'categories': categories}) urlpatterns = [ + path('version/', get_version, name='version'), path('availability_policies/', list_availability_policies, name='availability_policies'), path('properties/', list_properties, name='propertylist'), path('categories/', list_categories, name='categorylist'), diff --git a/backend/toolshed/tests/test_api.py b/backend/toolshed/tests/test_api.py index bc23fb8..091f0a8 100644 --- a/backend/toolshed/tests/test_api.py +++ b/backend/toolshed/tests/test_api.py @@ -1,25 +1,30 @@ from django.test import Client from authentication.tests import UserTestMixin, SignatureAuthClient, ToolshedTestCase -from toolshed.models import Category, Tag, Property +from backend import settings +from toolshed.tests import CategoryTestMixin, TagTestMixin, PropertyTestMixin anonymous_client = Client() client = SignatureAuthClient() -class CombinedApiTestCase(UserTestMixin, ToolshedTestCase): +class CombinedApiTestCase(UserTestMixin, CategoryTestMixin, TagTestMixin, PropertyTestMixin, ToolshedTestCase): def setUp(self): super().setUp() self.prepare_users() - self.f['cat1'] = Category.objects.create(name='cat1') - self.f['cat2'] = Category.objects.create(name='cat2') - self.f['cat3'] = Category.objects.create(name='cat3') - self.f['tag1'] = Tag.objects.create(name='tag1') - self.f['tag2'] = Tag.objects.create(name='tag2') - self.f['tag3'] = Tag.objects.create(name='tag3') - self.f['prop1'] = Property.objects.create(name='prop1') - self.f['prop2'] = Property.objects.create(name='prop2') - self.f['prop3'] = Property.objects.create(name='prop3') + self.prepare_categories() + self.prepare_tags() + self.prepare_properties() + + def test_version_anonymous(self): + response = anonymous_client.get('/api/version/') + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), {'version': settings.TOOLSHED_VERSION}) + + def test_version_authenticated(self): + response = client.get('/api/version/', self.f['local_user1']) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), {'version': settings.TOOLSHED_VERSION}) def test_domains_anonymous(self): response = anonymous_client.get('/api/domains/') @@ -39,7 +44,8 @@ class CombinedApiTestCase(UserTestMixin, ToolshedTestCase): response = client.get('/api/info/', self.f['local_user1']) self.assertEqual(response.status_code, 200) self.assertEqual(response.json()['policies'], ['private', 'friends', 'internal', 'public']) - self.assertEqual(response.json()['categories'], ['cat1', 'cat2', 'cat3']) + self.assertEqual(response.json()['categories'], + ['cat1', 'cat2', 'cat3', 'cat1/subcat1', 'cat1/subcat2', 'cat1/subcat1/subcat3']) self.assertEqual(response.json()['tags'], ['tag1', 'tag2', 'tag3']) self.assertEqual(response.json()['properties'], ['prop1', 'prop2', 'prop3']) @@ -51,3 +57,4 @@ class CombinedApiTestCase(UserTestMixin, ToolshedTestCase): response = client.get('/api/availability_policies/', self.f['local_user1']) self.assertEqual(response.status_code, 200) self.assertEqual(response.json(), ['private', 'friends', 'internal', 'public']) + diff --git a/backend/toolshed/tests/test_category.py b/backend/toolshed/tests/test_category.py index 254c525..114e7ad 100644 --- a/backend/toolshed/tests/test_category.py +++ b/backend/toolshed/tests/test_category.py @@ -1,5 +1,4 @@ from authentication.tests import SignatureAuthClient, UserTestMixin, ToolshedTestCase -from toolshed.models import Category from toolshed.tests import CategoryTestMixin client = SignatureAuthClient()