diff --git a/cookbook/tests/api/__init__.py b/cookbook/tests/api/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/cookbook/tests/api/test_api_recipe.py b/cookbook/tests/api/test_api_recipe.py deleted file mode 100644 index 9bd679011..000000000 --- a/cookbook/tests/api/test_api_recipe.py +++ /dev/null @@ -1,31 +0,0 @@ -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): - - def setUp(self): - super(TestApiShopping, self).setUp() - self.internal_recipe = Recipe.objects.create( - name='Test', - internal=True, - created_by=auth.get_user(self.user_client_1) - ) - - 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}) - ) - - # TODO add tests for editing diff --git a/cookbook/tests/pytest/api/test_api_recipe.py b/cookbook/tests/pytest/api/test_api_recipe.py new file mode 100644 index 000000000..c1b103ca6 --- /dev/null +++ b/cookbook/tests/pytest/api/test_api_recipe.py @@ -0,0 +1,104 @@ +import json + +import pytest +from django.urls import reverse +from django_scopes import scopes_disabled + +from cookbook.models import Food, Ingredient, Step, Recipe + +LIST_URL = 'api:recipe-list' +DETAIL_URL = 'api:recipe-detail' + + +@pytest.mark.parametrize("arg", [ + ['a_u', 403], + ['g1_s1', 200], + ['u1_s1', 200], + ['a1_s1', 200], +]) +def test_list_permission(arg, request): + c = request.getfixturevalue(arg[0]) + assert c.get(reverse(LIST_URL)).status_code == arg[1] + + +def test_list_space(recipe_1_s1, u1_s1, u1_s2, space_2): + assert len(json.loads(u1_s1.get(reverse(LIST_URL)).content)) == 1 + assert len(json.loads(u1_s2.get(reverse(LIST_URL)).content)) == 0 + + with scopes_disabled(): + recipe_1_s1.space = space_2 + recipe_1_s1.save() + + assert len(json.loads(u1_s1.get(reverse(LIST_URL)).content)) == 0 + assert len(json.loads(u1_s2.get(reverse(LIST_URL)).content)) == 1 + + +@pytest.mark.parametrize("arg", [ + ['a_u', 403], + ['g1_s1', 200], + ['u1_s1', 200], + ['a1_s1', 200], + ['g1_s2', 404], + ['u1_s2', 404], + ['a1_s2', 404], +]) +def test_update(arg, request, recipe_1_s1): + with scopes_disabled(): + c = request.getfixturevalue(arg[0]) + r = c.patch( + reverse( + DETAIL_URL, + args={recipe_1_s1.id} + ), + {'name': 'new'}, + content_type='application/json' + ) + response = json.loads(r.content) + assert r.status_code == arg[1] + if r.status_code == 200: + assert response['name'] == 'new' + + +@pytest.mark.parametrize("arg", [ + ['a_u', 403], + ['g1_s1', 201], + ['u1_s1', 201], + ['a1_s1', 201], +]) +def test_add(arg, request, u1_s2): + c = request.getfixturevalue(arg[0]) + r = c.post( + reverse(LIST_URL), + {'name': 'test', 'waiting_time': 0, 'working_time': 0, 'keywords': [], 'steps': []}, + content_type='application/json' + ) + response = json.loads(r.content) + print(r.content) + assert r.status_code == arg[1] + if r.status_code == 201: + assert response['id'] == 1 + r = c.get(reverse(DETAIL_URL, args={response['id']})) + assert r.status_code == 200 + r = u1_s2.get(reverse(DETAIL_URL, args={response['id']})) + assert r.status_code == 404 + + +def test_delete(u1_s1, u1_s2, recipe_1_s1): + with scopes_disabled(): + r = u1_s2.delete( + reverse( + DETAIL_URL, + args={recipe_1_s1.id} + ) + ) + assert r.status_code == 404 + + r = u1_s1.delete( + reverse( + DETAIL_URL, + args={recipe_1_s1.id} + ) + ) + + assert r.status_code == 204 + assert not Recipe.objects.filter(pk=recipe_1_s1.id).exists()