Skip to content

Commit

Permalink
Insert tests for categories
Browse files Browse the repository at this point in the history
  • Loading branch information
melika-akz authored and hmnfalahi committed Dec 19, 2023
1 parent 51c9e84 commit 9944aa7
Show file tree
Hide file tree
Showing 6 changed files with 238 additions and 1 deletion.
2 changes: 1 addition & 1 deletion api/controllers/categories.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def dispatch(self, request, *args, **kwargs):
def delete(self, request, *args, **kwargs):
main_category = self.get_object()
categories = Category.objects.filter(parent=main_category)
if categories.count == 0:
if categories.count() == 0:
return super().delete(request, *args, **kwargs)

error = {"category": ["Could Not Delete Parent Category"]}
Expand Down
6 changes: 6 additions & 0 deletions api/serializers/category.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,16 @@ class CategorySerializer(ModelSerializer):
queryset=Category.objects.all(),
source='parent',
write_only=True,
required=False
)

class Meta:
model = Category
fields = ['id', 'title', 'slug', 'parent', 'children', 'parent_pk']
depth = 10
extra_kwargs = dict(
parent_pk=dict(required=False),
children=dict(required=False),
parent=dict(required=False),
)

64 changes: 64 additions & 0 deletions tests/test_category_delete.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import pytest
from rest_framework.test import APITransactionTestCase

from api.models import Category
from authorize.helpers import generate_jwt_token
from authorize.models import User


class TestDeleteCategory(APITransactionTestCase):

@classmethod
@pytest.mark.django_db
def setUp(cls):
cls.admin_user = User.objects.create_superuser(
title='admin',
email='[email protected]',
password='password',
)
cls.admin_user.save()

cls.user = User.objects.create_user(
title='user1',
email='[email protected]',
password='password',
)

cls.category1 = Category.objects.create(
title='category1',
slug='category1',
parent=None,
)

cls.category2 = Category.objects.create(
title='category2',
slug='category2',
parent=None,
)

cls.mobile_category = Category.objects.create(
title='Mobile',
slug='mobile',
parent=cls.category1,
)

def test_delete_category(self):
self.jwt_token = generate_jwt_token(self.admin_user.id)
self.client.force_authenticate(
user=self.admin_user,
token=self.jwt_token
)

response = self.client.delete(
path=f'/api/categories/{self.category2.slug}/',
)
assert response.status_code == 204

with pytest.raises(Category.DoesNotExist):
Category.objects.get(slug=self.category2.slug)

response = self.client.delete(
path=f'/api/categories/{self.category1.slug}/',
)
assert response.status_code == 400

47 changes: 47 additions & 0 deletions tests/test_category_get.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import json

import pytest
from rest_framework.test import APITransactionTestCase

from api.models import Category
from authorize.helpers import generate_jwt_token
from authorize.models import User


class TestGetCategory(APITransactionTestCase):

@classmethod
@pytest.mark.django_db
def setUp(cls):
cls.user = User.objects.create_user(
title='parisa',
email='[email protected]',
password='Mypassword',
)

cls.category1 = Category.objects.create(
title='category1',
slug='category1',
parent=None,
)

cls.mobile_category = Category.objects.create(
title='Mobile',
slug='mobile',
parent=cls.category1,
)

def test_get_category(self):
self.jwt_token = generate_jwt_token(self.user.id)
self.client.force_authenticate(user=self.user, token=self.jwt_token)

response = self.client.get(
path=f'/api/categories/{self.category1.slug}/',
)
assert response.status_code == 200

assert response.data['id'] == self.category1.id
assert response.data['title'] == self.category1.title
assert response.data['slug'] == self.category1.slug
assert response.data['parent'] is None

57 changes: 57 additions & 0 deletions tests/test_category_list.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import json

import pytest
from rest_framework.test import APITransactionTestCase

from api.models import Category
from authorize.helpers import generate_jwt_token
from authorize.models import User


class TestListCategory(APITransactionTestCase):

@classmethod
@pytest.mark.django_db
def setUp(cls):
cls.user = User.objects.create_user(
title='admin',
email='[email protected]',
password='password',
)

cls.category1 = Category.objects.create(
title='category1',
slug='category1',
parent=None,
)
cls.category2 = Category.objects.create(
title='category2',
slug='category2',
parent=None,
)

cls.mobile_category = Category.objects.create(
title='Mobile',
slug='mobile',
parent=cls.category1,
)

def test_list_categories(self):
self.jwt_token = generate_jwt_token(self.user.id)
self.client.force_authenticate(user=self.user, token=self.jwt_token)

response = self.client.get(path='/api/categories/')
assert response.status_code == 200

assert len(response.data['results']) == 2
response = response.data['results']
assert response[0]['title'] == self.category1.title
assert response[1]['title'] == self.category2.title

assert len(response[0]['children']) == 1
assert response[0]['children'][0]['title'] == \
self.mobile_category.title
assert response[0]['children'][0]['parent']['id'] == response[0]['id']

assert len(response[1]['children']) == 0

63 changes: 63 additions & 0 deletions tests/test_category_update.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import pytest
from rest_framework.test import APITransactionTestCase

from api.models import Category
from authorize.helpers import generate_jwt_token
from authorize.models import User


class TestCategory(APITransactionTestCase):

@classmethod
@pytest.mark.django_db
def setUp(cls):
cls.admin_user = User.objects.create_superuser(
title='admin',
email='[email protected]',
password='password',
)
cls.admin_user.save()

cls.user1 = User.objects.create_user(
title='user1',
email='[email protected]',
password='password',
)

cls.category1 = Category.objects.create(
title='Mobile',
slug='mobile',
parent=None,
)
cls.category1.save()

cls.category2 = Category.objects.create(
title='LG',
slug='lg',
parent=cls.category1,
)
cls.category2.save()

def test_update(self):
self.jwt_token = generate_jwt_token(self.admin_user.id)
self.client.force_authenticate(
user=self.admin_user,
token=self.jwt_token,
)

response = self.client.put(
path=f'/api/categories/{self.category2.slug}/',
data={
"title": "Nokia",
"slug": "nokia",
},
format='json',
)
assert response.status_code == 200
assert response.data['id'] is not None
assert response.data['title'] == 'Nokia'

updated_category = Category.objects.get(id=response.data['id'])
assert updated_category.title == "Nokia"
assert updated_category.parent == self.category1

0 comments on commit 9944aa7

Please sign in to comment.