tests/api

This commit is contained in:
Tobias Lindenberg 2021-01-10 14:32:41 +01:00
parent bc1f28eda6
commit 67581c7fa4
10 changed files with 308 additions and 99 deletions

View File

@ -1,9 +1,8 @@
import json
from django.urls import reverse
from cookbook.models import Food
from cookbook.tests.views.test_views import TestViews
from django.urls import reverse
class TestApiUnit(TestViews):
@ -19,8 +18,16 @@ class TestApiUnit(TestViews):
def test_keyword_list(self):
# verify view permissions are applied accordingly
self.batch_requests([(self.anonymous_client, 403), (self.guest_client_1, 403), (self.user_client_1, 200), (self.admin_client_1, 200), (self.superuser_client, 200)],
reverse('api:food-list'))
self.batch_requests(
[
(self.anonymous_client, 403),
(self.guest_client_1, 403),
(self.user_client_1, 200),
(self.admin_client_1, 200),
(self.superuser_client, 200)
],
reverse('api:food-list')
)
# verify storage is returned
r = self.user_client_1.get(reverse('api:food-list'))
@ -42,12 +49,21 @@ class TestApiUnit(TestViews):
self.assertEqual(len(response), 1)
def test_keyword_update(self):
r = self.user_client_1.patch(reverse('api:food-detail', args={self.food_1.id}), {'name': 'new'}, content_type='application/json')
r = self.user_client_1.patch(
reverse(
'api:food-detail',
args={self.food_1.id}
),
{'name': 'new'},
content_type='application/json'
)
response = json.loads(r.content)
self.assertEqual(r.status_code, 200)
self.assertEqual(response['name'], 'new')
def test_keyword_delete(self):
r = self.user_client_1.delete(reverse('api:food-detail', args={self.food_1.id}))
r = self.user_client_1.delete(
reverse('api:food-detail', args={self.food_1.id})
)
self.assertEqual(r.status_code, 204)
self.assertEqual(Food.objects.count(), 1)

View File

@ -1,11 +1,8 @@
import json
from django.contrib import auth
from django.db.models import ProtectedError
from django.urls import reverse
from cookbook.models import Storage, Sync, Keyword
from cookbook.models import Keyword
from cookbook.tests.views.test_views import TestViews
from django.urls import reverse
class TestApiKeyword(TestViews):
@ -21,8 +18,16 @@ class TestApiKeyword(TestViews):
def test_keyword_list(self):
# verify view permissions are applied accordingly
self.batch_requests([(self.anonymous_client, 403), (self.guest_client_1, 403), (self.user_client_1, 200), (self.admin_client_1, 200), (self.superuser_client, 200)],
reverse('api:keyword-list'))
self.batch_requests(
[
(self.anonymous_client, 403),
(self.guest_client_1, 403),
(self.user_client_1, 200),
(self.admin_client_1, 200),
(self.superuser_client, 200)
],
reverse('api:keyword-list')
)
# verify storage is returned
r = self.user_client_1.get(reverse('api:keyword-list'))
@ -35,7 +40,9 @@ class TestApiKeyword(TestViews):
response = json.loads(r.content)
self.assertEqual(len(response), 1)
r = self.user_client_1.get(f'{reverse("api:keyword-list")}?query=chicken')
r = self.user_client_1.get(
f'{reverse("api:keyword-list")}?query=chicken'
)
response = json.loads(r.content)
self.assertEqual(len(response), 0)
@ -44,12 +51,24 @@ class TestApiKeyword(TestViews):
self.assertEqual(len(response), 1)
def test_keyword_update(self):
r = self.user_client_1.patch(reverse('api:keyword-detail', args={self.keyword_1.id}), {'name': 'new'}, content_type='application/json')
r = self.user_client_1.patch(
reverse(
'api:keyword-detail',
args={self.keyword_1.id}
),
{'name': 'new'},
content_type='application/json'
)
response = json.loads(r.content)
self.assertEqual(r.status_code, 200)
self.assertEqual(response['name'], 'new')
def test_keyword_delete(self):
r = self.user_client_1.delete(reverse('api:keyword-detail', args={self.keyword_1.id}))
r = self.user_client_1.delete(
reverse(
'api:keyword-detail',
args={self.keyword_1.id}
)
)
self.assertEqual(r.status_code, 204)
self.assertEqual(Keyword.objects.count(), 1)

View File

@ -1,11 +1,7 @@
import json
from django.contrib import auth
from django.db.models import ProtectedError
from django.urls import reverse
from cookbook.models import Storage, Sync, Keyword, ShoppingList, Recipe
from cookbook.models import Recipe
from cookbook.tests.views.test_views import TestViews
from django.contrib import auth
from django.urls import reverse
class TestApiShopping(TestViews):
@ -19,8 +15,17 @@ class TestApiShopping(TestViews):
)
def test_shopping_view_permissions(self):
self.batch_requests([(self.anonymous_client, 403), (self.guest_client_1, 200), (self.user_client_1, 200),
(self.user_client_2, 200), (self.admin_client_1, 200), (self.superuser_client, 200)],
reverse('api:recipe-detail', args={self.internal_recipe.id}))
self.batch_requests(
[
(self.anonymous_client, 403),
(self.guest_client_1, 200),
(self.user_client_1, 200),
(self.user_client_2, 200),
(self.admin_client_1, 200),
(self.superuser_client, 200)
],
reverse(
'api:recipe-detail', args={self.internal_recipe.id})
)
# TODO add tests for editing

View File

@ -1,27 +1,48 @@
import json
from django.contrib import auth
from django.db.models import ProtectedError
from django.urls import reverse
from cookbook.models import Storage, Sync, Keyword, ShoppingList
from cookbook.models import ShoppingList
from cookbook.tests.views.test_views import TestViews
from django.contrib import auth
from django.urls import reverse
class TestApiShopping(TestViews):
def setUp(self):
super(TestApiShopping, self).setUp()
self.list_1 = ShoppingList.objects.create(created_by=auth.get_user(self.user_client_1))
self.list_2 = ShoppingList.objects.create(created_by=auth.get_user(self.user_client_2))
self.list_1 = ShoppingList.objects.create(
created_by=auth.get_user(self.user_client_1)
)
self.list_2 = ShoppingList.objects.create(
created_by=auth.get_user(self.user_client_2)
)
def test_shopping_view_permissions(self):
self.batch_requests([(self.anonymous_client, 403), (self.guest_client_1, 404), (self.user_client_1, 200), (self.user_client_2, 404), (self.admin_client_1, 404), (self.superuser_client, 200)],
reverse('api:shoppinglist-detail', args={self.list_1.id}))
self.batch_requests(
[
(self.anonymous_client, 403),
(self.guest_client_1, 404),
(self.user_client_1, 200),
(self.user_client_2, 404),
(self.admin_client_1, 404),
(self.superuser_client, 200)
],
reverse(
'api:shoppinglist-detail', args={self.list_1.id}
)
)
self.list_1.shared.add(auth.get_user(self.user_client_2))
self.batch_requests([(self.anonymous_client, 403), (self.guest_client_1, 404), (self.user_client_1, 200), (self.user_client_2, 200), (self.admin_client_1, 404), (self.superuser_client, 200)],
reverse('api:shoppinglist-detail', args={self.list_1.id}))
self.batch_requests(
[
(self.anonymous_client, 403),
(self.guest_client_1, 404),
(self.user_client_1, 200),
(self.user_client_2, 200),
(self.admin_client_1, 404),
(self.superuser_client, 200)
],
reverse(
'api:shoppinglist-detail', args={self.list_1.id})
)
# TODO add tests for editing

View File

@ -1,11 +1,10 @@
import json
from django.contrib import auth
from django.db.models import ProtectedError
from django.urls import reverse
from cookbook.models import Storage, Sync
from cookbook.tests.views.test_views import TestViews
from django.contrib import auth
from django.db.models import ProtectedError
from django.urls import reverse
class TestApiStorage(TestViews):
@ -23,8 +22,16 @@ class TestApiStorage(TestViews):
def test_storage_list(self):
# verify view permissions are applied accordingly
self.batch_requests([(self.anonymous_client, 403), (self.guest_client_1, 403), (self.user_client_1, 403), (self.admin_client_1, 200), (self.superuser_client, 200)],
reverse('api:storage-list'))
self.batch_requests(
[
(self.anonymous_client, 403),
(self.guest_client_1, 403),
(self.user_client_1, 403),
(self.admin_client_1, 200),
(self.superuser_client, 200)
],
reverse('api:storage-list')
)
# verify storage is returned
r = self.admin_client_1.get(reverse('api:storage-list'))
@ -38,7 +45,14 @@ class TestApiStorage(TestViews):
def test_storage_update(self):
# can update storage as admin
r = self.admin_client_1.patch(reverse('api:storage-detail', args={self.storage.id}), {'name': 'new', 'password': 'new_password'}, content_type='application/json')
r = self.admin_client_1.patch(
reverse(
'api:storage-detail',
args={self.storage.id}
),
{'name': 'new', 'password': 'new_password'},
content_type='application/json'
)
response = json.loads(r.content)
self.assertEqual(r.status_code, 200)
self.assertEqual(response['name'], 'new')
@ -49,13 +63,20 @@ class TestApiStorage(TestViews):
def test_storage_delete(self):
# can delete storage as admin
r = self.admin_client_1.delete(reverse('api:storage-detail', args={self.storage.id}))
r = self.admin_client_1.delete(
reverse('api:storage-detail', args={self.storage.id})
)
self.assertEqual(r.status_code, 204)
self.assertEqual(Storage.objects.count(), 0)
self.storage = Storage.objects.create(created_by=auth.get_user(self.admin_client_1), name='test protect')
self.storage = Storage.objects.create(
created_by=auth.get_user(self.admin_client_1), name='test protect'
)
Sync.objects.create(storage=self.storage, )
# test if deleting a storage with existing sync fails (as sync protects storage)
# test if deleting a storage with existing
# sync fails (as sync protects storage)
with self.assertRaises(ProtectedError):
self.admin_client_1.delete(reverse('api:storage-detail', args={self.storage.id}))
self.admin_client_1.delete(
reverse('api:storage-detail', args={self.storage.id})
)

View File

@ -1,11 +1,9 @@
import json
from django.contrib import auth
from django.db.models import ProtectedError
from django.urls import reverse
from cookbook.models import Storage, Sync, SyncLog
from cookbook.tests.views.test_views import TestViews
from django.contrib import auth
from django.urls import reverse
class TestApiSyncLog(TestViews):
@ -26,12 +24,22 @@ class TestApiSyncLog(TestViews):
path='path'
)
self.sync_log = SyncLog.objects.create(sync=self.sync, status='success')
self.sync_log = SyncLog.objects.create(
sync=self.sync, status='success'
)
def test_sync_log_list(self):
# verify view permissions are applied accordingly
self.batch_requests([(self.anonymous_client, 403), (self.guest_client_1, 403), (self.user_client_1, 403), (self.admin_client_1, 200), (self.superuser_client, 200)],
reverse('api:synclog-list'))
self.batch_requests(
[
(self.anonymous_client, 403),
(self.guest_client_1, 403),
(self.user_client_1, 403),
(self.admin_client_1, 200),
(self.superuser_client, 200)
],
reverse('api:synclog-list')
)
# verify log entry is returned
r = self.admin_client_1.get(reverse('api:synclog-list'))
@ -42,10 +50,21 @@ class TestApiSyncLog(TestViews):
def test_sync_log_update(self):
# read only view
r = self.admin_client_1.patch(reverse('api:synclog-detail', args={self.sync.id}), {'path': 'new'}, content_type='application/json')
r = self.admin_client_1.patch(
reverse(
'api:synclog-detail',
args={self.sync.id}
),
{'path': 'new'},
content_type='application/json'
)
self.assertEqual(r.status_code, 405)
def test_sync_log_delete(self):
# read only view
r = self.admin_client_1.delete(reverse('api:synclog-detail', args={self.sync.id}))
r = self.admin_client_1.delete(
reverse(
'api:synclog-detail',
args={self.sync.id})
)
self.assertEqual(r.status_code, 405)

View File

@ -1,11 +1,9 @@
import json
from django.contrib import auth
from django.db.models import ProtectedError
from django.urls import reverse
from cookbook.models import Storage, Sync
from cookbook.tests.views.test_views import TestViews
from django.contrib import auth
from django.urls import reverse
class TestApiSync(TestViews):
@ -28,8 +26,16 @@ class TestApiSync(TestViews):
def test_sync_list(self):
# verify view permissions are applied accordingly
self.batch_requests([(self.anonymous_client, 403), (self.guest_client_1, 403), (self.user_client_1, 403), (self.admin_client_1, 200), (self.superuser_client, 200)],
reverse('api:sync-list'))
self.batch_requests(
[
(self.anonymous_client, 403),
(self.guest_client_1, 403),
(self.user_client_1, 403),
(self.admin_client_1, 200),
(self.superuser_client, 200)
],
reverse('api:sync-list')
)
# verify sync is returned
r = self.admin_client_1.get(reverse('api:sync-list'))
@ -41,13 +47,22 @@ class TestApiSync(TestViews):
def test_sync_update(self):
# can update sync as admin
r = self.admin_client_1.patch(reverse('api:sync-detail', args={self.sync.id}), {'path': 'new'}, content_type='application/json')
r = self.admin_client_1.patch(
reverse(
'api:sync-detail',
args={self.sync.id}
),
{'path': 'new'},
content_type='application/json'
)
response = json.loads(r.content)
self.assertEqual(r.status_code, 200)
self.assertEqual(response['path'], 'new')
def test_sync_delete(self):
# can delete sync as admin
r = self.admin_client_1.delete(reverse('api:sync-detail', args={self.sync.id}))
r = self.admin_client_1.delete(
reverse('api:sync-detail', args={self.sync.id})
)
self.assertEqual(r.status_code, 204)
self.assertEqual(Sync.objects.count(), 0)

View File

@ -1,9 +1,8 @@
import json
from django.urls import reverse
from cookbook.models import Unit
from cookbook.tests.views.test_views import TestViews
from django.urls import reverse
class TestApiUnit(TestViews):
@ -19,8 +18,16 @@ class TestApiUnit(TestViews):
def test_keyword_list(self):
# verify view permissions are applied accordingly
self.batch_requests([(self.anonymous_client, 403), (self.guest_client_1, 403), (self.user_client_1, 200), (self.admin_client_1, 200), (self.superuser_client, 200)],
reverse('api:unit-list'))
self.batch_requests(
[
(self.anonymous_client, 403),
(self.guest_client_1, 403),
(self.user_client_1, 200),
(self.admin_client_1, 200),
(self.superuser_client, 200)
],
reverse('api:unit-list')
)
# verify storage is returned
r = self.user_client_1.get(reverse('api:unit-list'))
@ -42,12 +49,21 @@ class TestApiUnit(TestViews):
self.assertEqual(len(response), 1)
def test_keyword_update(self):
r = self.user_client_1.patch(reverse('api:unit-detail', args={self.unit_1.id}), {'name': 'new'}, content_type='application/json')
r = self.user_client_1.patch(
reverse(
'api:unit-detail',
args={self.unit_1.id}
),
{'name': 'new'},
content_type='application/json'
)
response = json.loads(r.content)
self.assertEqual(r.status_code, 200)
self.assertEqual(response['name'], 'new')
def test_keyword_delete(self):
r = self.user_client_1.delete(reverse('api:unit-detail', args={self.unit_1.id}))
r = self.user_client_1.delete(
reverse('api:unit-detail', args={self.unit_1.id})
)
self.assertEqual(r.status_code, 204)
self.assertEqual(Unit.objects.count(), 1)

View File

@ -1,11 +1,7 @@
import json
from cookbook.tests.views.test_views import TestViews
from django.contrib import auth
from django.urls import reverse
from cookbook.models import UserPreference
from cookbook.tests.views.test_views import TestViews
class TestApiUsername(TestViews):
@ -13,15 +9,33 @@ class TestApiUsername(TestViews):
super(TestApiUsername, self).setUp()
def test_forbidden_methods(self):
r = self.user_client_1.post(reverse('api:username-list'))
r = self.user_client_1.post(
reverse('api:username-list'))
self.assertEqual(r.status_code, 405)
r = self.user_client_1.put(reverse('api:username-detail', args=[auth.get_user(self.user_client_1).pk]))
r = self.user_client_1.put(
reverse(
'api:username-detail',
args=[auth.get_user(self.user_client_1).pk])
)
self.assertEqual(r.status_code, 405)
r = self.user_client_1.delete(reverse('api:username-detail', args=[auth.get_user(self.user_client_1).pk]))
r = self.user_client_1.delete(
reverse(
'api:username-detail',
args=[auth.get_user(self.user_client_1).pk]
)
)
self.assertEqual(r.status_code, 405)
def test_username_list(self):
self.batch_requests([(self.anonymous_client, 403), (self.guest_client_1, 200), (self.user_client_1, 200), (self.admin_client_1, 200), (self.superuser_client, 200)],
reverse('api:username-list'))
self.batch_requests(
[
(self.anonymous_client, 403),
(self.guest_client_1, 200),
(self.user_client_1, 200),
(self.admin_client_1, 200),
(self.superuser_client, 200)
],
reverse('api:username-list')
)

View File

@ -1,10 +1,9 @@
import json
from django.contrib import auth
from django.urls import reverse
from cookbook.models import UserPreference
from cookbook.tests.views.test_views import TestViews
from django.contrib import auth
from django.urls import reverse
class TestApiUserPreference(TestViews):
@ -16,8 +15,13 @@ class TestApiUserPreference(TestViews):
r = self.user_client_1.post(reverse('api:userpreference-list'))
self.assertEqual(r.status_code, 201)
response = json.loads(r.content)
self.assertEqual(response['user'], auth.get_user(self.user_client_1).id)
self.assertEqual(response['theme'], UserPreference._meta.get_field('theme').get_default())
self.assertEqual(
response['user'], auth.get_user(self.user_client_1).id
)
self.assertEqual(
response['theme'],
UserPreference._meta.get_field('theme').get_default()
)
def test_preference_list(self):
UserPreference.objects.create(user=auth.get_user(self.user_client_1))
@ -28,7 +32,9 @@ class TestApiUserPreference(TestViews):
self.assertEqual(r.status_code, 200)
response = json.loads(r.content)
self.assertEqual(len(response), 1)
self.assertEqual(response[0]['user'], auth.get_user(self.user_client_1).id)
self.assertEqual(
response[0]['user'], auth.get_user(self.user_client_1).id
)
# superusers can see all user prefs in list
r = self.superuser_client.get(reverse('api:userpreference-list'))
@ -40,47 +46,104 @@ class TestApiUserPreference(TestViews):
UserPreference.objects.create(user=auth.get_user(self.user_client_1))
UserPreference.objects.create(user=auth.get_user(self.guest_client_1))
self.batch_requests([(self.guest_client_1, 404), (self.user_client_1, 200), (self.user_client_2, 404), (self.anonymous_client, 403), (self.admin_client_1, 404), (self.superuser_client, 200)],
reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}))
self.batch_requests(
[
(self.guest_client_1, 404),
(self.user_client_1, 200),
(self.user_client_2, 404),
(self.anonymous_client, 403),
(self.admin_client_1, 404),
(self.superuser_client, 200)
],
reverse(
'api:userpreference-detail',
args={auth.get_user(self.user_client_1).id}
)
)
def test_preference_update(self):
UserPreference.objects.create(user=auth.get_user(self.user_client_1))
UserPreference.objects.create(user=auth.get_user(self.guest_client_1))
# can update users preference
r = self.user_client_1.put(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}), {'theme': UserPreference.DARKLY}, content_type='application/json')
r = self.user_client_1.put(
reverse(
'api:userpreference-detail',
args={auth.get_user(self.user_client_1).id}
),
{'theme': UserPreference.DARKLY},
content_type='application/json'
)
response = json.loads(r.content)
self.assertEqual(r.status_code, 200)
self.assertEqual(response['theme'], UserPreference.DARKLY)
# cant set another users non existent pref
r = self.user_client_1.put(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_2).id}), {'theme': UserPreference.DARKLY}, content_type='application/json')
r = self.user_client_1.put(
reverse(
'api:userpreference-detail',
args={auth.get_user(self.user_client_2).id}
),
{'theme': UserPreference.DARKLY},
content_type='application/json'
)
self.assertEqual(r.status_code, 404)
# cant set another users existent pref
r = self.user_client_2.put(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}), {'theme': UserPreference.FLATLY}, content_type='application/json')
r = self.user_client_2.put(
reverse(
'api:userpreference-detail',
args={auth.get_user(self.user_client_1).id}
),
{'theme': UserPreference.FLATLY},
content_type='application/json'
)
self.assertEqual(r.status_code, 404)
# can set pref as superuser
r = self.superuser_client.put(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}), {'theme': UserPreference.FLATLY}, content_type='application/json')
r = self.superuser_client.put(
reverse(
'api:userpreference-detail',
args={auth.get_user(self.user_client_1).id}
),
{'theme': UserPreference.FLATLY},
content_type='application/json'
)
self.assertEqual(r.status_code, 200)
def test_preference_delete(self):
UserPreference.objects.create(user=auth.get_user(self.user_client_1))
# can delete own preference
r = self.user_client_1.delete(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}))
r = self.user_client_1.delete(
reverse(
'api:userpreference-detail',
args={auth.get_user(self.user_client_1).id}
)
)
self.assertEqual(r.status_code, 204)
self.assertEqual(UserPreference.objects.count(), 0)
UserPreference.objects.create(user=auth.get_user(self.user_client_1))
UserPreference.objects.create(user=auth.get_user(self.user_client_1
)
)
# cant delete other preference
r = self.user_client_2.delete(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}))
r = self.user_client_2.delete(
reverse(
'api:userpreference-detail',
args={auth.get_user(self.user_client_1).id}
)
)
self.assertEqual(r.status_code, 404)
self.assertEqual(UserPreference.objects.count(), 1)
# superuser can delete everything
r = self.superuser_client.delete(reverse('api:userpreference-detail', args={auth.get_user(self.user_client_1).id}))
r = self.superuser_client.delete(
reverse(
'api:userpreference-detail',
args={auth.get_user(self.user_client_1).id}
)
)
self.assertEqual(r.status_code, 204)
self.assertEqual(UserPreference.objects.count(), 0)