categorylanri import qilish qoshildi
This commit is contained in:
2
core/apps/api/tests/__init__.py
Normal file
2
core/apps/api/tests/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from .category import * # noqa
|
||||
from .products import * # noqa
|
||||
2
core/apps/api/tests/category/__init__.py
Normal file
2
core/apps/api/tests/category/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from .test_category import * # noqa
|
||||
from .test_subcategory import * # noqa
|
||||
101
core/apps/api/tests/category/test_category.py
Normal file
101
core/apps/api/tests/category/test_category.py
Normal file
@@ -0,0 +1,101 @@
|
||||
import pytest
|
||||
from django.urls import reverse
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from core.apps.api.models import CategoryModel
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def instance(db):
|
||||
return CategoryModel._baker()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def api_client(instance):
|
||||
client = APIClient()
|
||||
##client.force_authenticate(user=instance.user)
|
||||
return client, instance
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def data(api_client):
|
||||
client, instance = api_client
|
||||
return (
|
||||
{
|
||||
"list": reverse("category-list"),
|
||||
"retrieve": reverse("category-detail", kwargs={"pk": instance.pk}),
|
||||
"retrieve-not-found": reverse("category-detail", kwargs={"pk": 1000}),
|
||||
},
|
||||
client,
|
||||
instance,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_list(data):
|
||||
urls, client, _ = data
|
||||
response = client.get(urls["list"])
|
||||
data_resp = response.json()
|
||||
assert response.status_code == 200
|
||||
assert data_resp["status"] is True
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_retrieve(data):
|
||||
urls, client, _ = data
|
||||
response = client.get(urls["retrieve"])
|
||||
data_resp = response.json()
|
||||
assert response.status_code == 200
|
||||
assert data_resp["status"] is True
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_retrieve_not_found(data):
|
||||
urls, client, _ = data
|
||||
response = client.get(urls["retrieve-not-found"])
|
||||
data_resp = response.json()
|
||||
assert response.status_code == 404
|
||||
assert data_resp["status"] is False
|
||||
|
||||
|
||||
# @pytest.mark.django_db
|
||||
# def test_create(data):
|
||||
# urls, client, _ = data
|
||||
# response = client.post(urls["list"], data={"name": "test"})
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 201
|
||||
|
||||
|
||||
# @pytest.mark.django_db
|
||||
# def test_update(data):
|
||||
# urls, client, _ = data
|
||||
# response = client.patch(urls["retrieve"], data={"name": "updated"})
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 200
|
||||
#
|
||||
# # verify updated value
|
||||
# response = client.get(urls["retrieve"])
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 200
|
||||
# assert response.json()["data"]["name"] == "updated"
|
||||
|
||||
|
||||
# @pytest.mark.django_db
|
||||
# def test_partial_update():
|
||||
# urls, client, _ = data
|
||||
# response = client.patch(urls["retrieve"], data={"name": "updated"})
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 200
|
||||
#
|
||||
# # verify updated value
|
||||
# response = client.get(urls["retrieve"])
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 200
|
||||
# assert response.json()["data"]["name"] == "updated"
|
||||
|
||||
|
||||
# @pytest.mark.django_db
|
||||
# def test_destroy(data):
|
||||
# urls, client, _ = data
|
||||
# response = client.delete(urls["retrieve"])
|
||||
# assert response.status_code == 204
|
||||
101
core/apps/api/tests/category/test_subcategory.py
Normal file
101
core/apps/api/tests/category/test_subcategory.py
Normal file
@@ -0,0 +1,101 @@
|
||||
import pytest
|
||||
from django.urls import reverse
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from core.apps.api.models import SubcategoryModel
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def instance(db):
|
||||
return SubcategoryModel._baker()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def api_client(instance):
|
||||
client = APIClient()
|
||||
##client.force_authenticate(user=instance.user)
|
||||
return client, instance
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def data(api_client):
|
||||
client, instance = api_client
|
||||
return (
|
||||
{
|
||||
"list": reverse("subcategory-list"),
|
||||
"retrieve": reverse("subcategory-detail", kwargs={"pk": instance.pk}),
|
||||
"retrieve-not-found": reverse("subcategory-detail", kwargs={"pk": 1000}),
|
||||
},
|
||||
client,
|
||||
instance,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_list(data):
|
||||
urls, client, _ = data
|
||||
response = client.get(urls["list"])
|
||||
data_resp = response.json()
|
||||
assert response.status_code == 200
|
||||
assert data_resp["status"] is True
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_retrieve(data):
|
||||
urls, client, _ = data
|
||||
response = client.get(urls["retrieve"])
|
||||
data_resp = response.json()
|
||||
assert response.status_code == 200
|
||||
assert data_resp["status"] is True
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_retrieve_not_found(data):
|
||||
urls, client, _ = data
|
||||
response = client.get(urls["retrieve-not-found"])
|
||||
data_resp = response.json()
|
||||
assert response.status_code == 404
|
||||
assert data_resp["status"] is False
|
||||
|
||||
|
||||
# @pytest.mark.django_db
|
||||
# def test_create(data):
|
||||
# urls, client, _ = data
|
||||
# response = client.post(urls["list"], data={"name": "test"})
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 201
|
||||
|
||||
|
||||
# @pytest.mark.django_db
|
||||
# def test_update(data):
|
||||
# urls, client, _ = data
|
||||
# response = client.patch(urls["retrieve"], data={"name": "updated"})
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 200
|
||||
#
|
||||
# # verify updated value
|
||||
# response = client.get(urls["retrieve"])
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 200
|
||||
# assert response.json()["data"]["name"] == "updated"
|
||||
|
||||
|
||||
# @pytest.mark.django_db
|
||||
# def test_partial_update():
|
||||
# urls, client, _ = data
|
||||
# response = client.patch(urls["retrieve"], data={"name": "updated"})
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 200
|
||||
#
|
||||
# # verify updated value
|
||||
# response = client.get(urls["retrieve"])
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 200
|
||||
# assert response.json()["data"]["name"] == "updated"
|
||||
|
||||
|
||||
# @pytest.mark.django_db
|
||||
# def test_destroy(data):
|
||||
# urls, client, _ = data
|
||||
# response = client.delete(urls["retrieve"])
|
||||
# assert response.status_code == 204
|
||||
1
core/apps/api/tests/products/__init__.py
Normal file
1
core/apps/api/tests/products/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from .test_products import * # noqa
|
||||
101
core/apps/api/tests/products/test_products.py
Normal file
101
core/apps/api/tests/products/test_products.py
Normal file
@@ -0,0 +1,101 @@
|
||||
import pytest
|
||||
from django.urls import reverse
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from core.apps.api.models import ProductsModel
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def instance(db):
|
||||
return ProductsModel._baker()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def api_client(instance):
|
||||
client = APIClient()
|
||||
##client.force_authenticate(user=instance.user)
|
||||
return client, instance
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def data(api_client):
|
||||
client, instance = api_client
|
||||
return (
|
||||
{
|
||||
"list": reverse("products-list"),
|
||||
"retrieve": reverse("products-detail", kwargs={"pk": instance.pk}),
|
||||
"retrieve-not-found": reverse("products-detail", kwargs={"pk": 1000}),
|
||||
},
|
||||
client,
|
||||
instance,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_list(data):
|
||||
urls, client, _ = data
|
||||
response = client.get(urls["list"])
|
||||
data_resp = response.json()
|
||||
assert response.status_code == 200
|
||||
assert data_resp["status"] is True
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_retrieve(data):
|
||||
urls, client, _ = data
|
||||
response = client.get(urls["retrieve"])
|
||||
data_resp = response.json()
|
||||
assert response.status_code == 200
|
||||
assert data_resp["status"] is True
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_retrieve_not_found(data):
|
||||
urls, client, _ = data
|
||||
response = client.get(urls["retrieve-not-found"])
|
||||
data_resp = response.json()
|
||||
assert response.status_code == 404
|
||||
assert data_resp["status"] is False
|
||||
|
||||
|
||||
# @pytest.mark.django_db
|
||||
# def test_create(data):
|
||||
# urls, client, _ = data
|
||||
# response = client.post(urls["list"], data={"name": "test"})
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 201
|
||||
|
||||
|
||||
# @pytest.mark.django_db
|
||||
# def test_update(data):
|
||||
# urls, client, _ = data
|
||||
# response = client.patch(urls["retrieve"], data={"name": "updated"})
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 200
|
||||
#
|
||||
# # verify updated value
|
||||
# response = client.get(urls["retrieve"])
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 200
|
||||
# assert response.json()["data"]["name"] == "updated"
|
||||
|
||||
|
||||
# @pytest.mark.django_db
|
||||
# def test_partial_update():
|
||||
# urls, client, _ = data
|
||||
# response = client.patch(urls["retrieve"], data={"name": "updated"})
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 200
|
||||
#
|
||||
# # verify updated value
|
||||
# response = client.get(urls["retrieve"])
|
||||
# assert response.json()["status"] is True
|
||||
# assert response.status_code == 200
|
||||
# assert response.json()["data"]["name"] == "updated"
|
||||
|
||||
|
||||
# @pytest.mark.django_db
|
||||
# def test_destroy(data):
|
||||
# urls, client, _ = data
|
||||
# response = client.delete(urls["retrieve"])
|
||||
# assert response.status_code == 204
|
||||
101
core/apps/api/tests/test_hierarchical_api.py
Normal file
101
core/apps/api/tests/test_hierarchical_api.py
Normal file
@@ -0,0 +1,101 @@
|
||||
import pytest
|
||||
from django.urls import reverse
|
||||
from rest_framework.test import APIClient
|
||||
from core.apps.api.models import CategoryModel, FilialModel, ProductsModel, SubProductModel, SubcategoryModel
|
||||
|
||||
@pytest.fixture
|
||||
def api_client():
|
||||
return APIClient()
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_hierarchical_filtering(api_client):
|
||||
# 1. Create Filials
|
||||
f_bar = FilialModel.objects.create(name="Bar")
|
||||
f_rest = FilialModel.objects.create(name="Restaurant")
|
||||
|
||||
# 2. Create Data linked to Filials
|
||||
cat1 = CategoryModel.objects.create(name="Electronics", filial=f_bar)
|
||||
cat2 = CategoryModel.objects.create(name="Clothing", filial=f_rest)
|
||||
|
||||
sub1 = SubcategoryModel.objects.create(name="Phones", category=cat1)
|
||||
sub2 = SubcategoryModel.objects.create(name="Laptops", category=cat1)
|
||||
sub3 = SubcategoryModel.objects.create(name="T-Shirts", category=cat2)
|
||||
|
||||
p1 = ProductsModel.objects.create(name="iPhone", subcategory=sub1, price=1000)
|
||||
p2 = ProductsModel.objects.create(name="MacBook", subcategory=sub2, price=2000)
|
||||
p3 = ProductsModel.objects.create(name="Nike Tee", subcategory=sub3, price=50)
|
||||
|
||||
sp1 = SubProductModel.objects.create(product=p1, name="128GB", price=1000)
|
||||
sp2 = SubProductModel.objects.create(product=p1, name="256GB", price=1200)
|
||||
|
||||
# 3. Test Filial Filtering on Products
|
||||
url_prod = reverse("products-list")
|
||||
|
||||
# Filter by Filial Bar (f_bar)
|
||||
response = api_client.get(url_prod, {"filial": f_bar.id})
|
||||
assert response.status_code == 200
|
||||
data = response.json()["data"]["results"]
|
||||
assert len(data) == 2
|
||||
names = [item["name"] for item in data]
|
||||
assert "iPhone" in names
|
||||
assert "MacBook" in names
|
||||
|
||||
# Filter by Filial Restaurant (f_rest)
|
||||
response = api_client.get(url_prod, {"filial": f_rest.id})
|
||||
assert response.status_code == 200
|
||||
data = response.json()["data"]["results"]
|
||||
assert len(data) == 1
|
||||
assert data[0]["name"] == "Nike Tee"
|
||||
|
||||
# 4. Test Filial Filtering on Categories
|
||||
url_cat_list = reverse("category-list")
|
||||
response = api_client.get(url_cat_list, {"filial": f_bar.id})
|
||||
assert response.status_code == 200
|
||||
data = response.json()["data"]["results"]
|
||||
assert len(data) == 1
|
||||
assert data[0]["name"] == "Electronics"
|
||||
|
||||
# 2. Test Product Listing with Category Filter
|
||||
url = reverse("products-list")
|
||||
|
||||
# Filter by Category Electronics (cat1)
|
||||
response = api_client.get(url, {"category": cat1.id})
|
||||
assert response.status_code == 200
|
||||
data = response.json()["data"]
|
||||
# Should have iPhone and MacBook in results
|
||||
assert len(data["results"]) == 2
|
||||
names = [item["name"] for item in data["results"]]
|
||||
assert "iPhone" in names
|
||||
assert "MacBook" in names
|
||||
|
||||
# Filter by Subcategory Phones (sub1)
|
||||
response = api_client.get(url, {"subcategory": sub1.id})
|
||||
assert response.status_code == 200
|
||||
data = response.json()["data"]
|
||||
assert len(data["results"]) == 1
|
||||
assert data["results"][0]["name"] == "iPhone"
|
||||
|
||||
# 3. Test Category Detail for Nested Data
|
||||
url_cat = reverse("category-detail", kwargs={"pk": cat1.id})
|
||||
response = api_client.get(url_cat)
|
||||
assert response.status_code == 200
|
||||
data = response.json()["data"]
|
||||
assert data["name"] == "Electronics"
|
||||
assert len(data["subcategories"]) == 2
|
||||
|
||||
# Check if subcategories have products (if RetrieveSubcategorySerializer includes them)
|
||||
# Wait, in SubcategorySerializer I added 'products' to BaseSubcategorySerializer
|
||||
# and RetrieveCategory uses BaseSubcategorySerializer.
|
||||
phones_sub = next(s for s in data["subcategories"] if s["name"] == "Phones")
|
||||
assert len(phones_sub["products"]) == 1
|
||||
assert phones_sub["products"][0]["name"] == "iPhone"
|
||||
|
||||
# 4. Test Product Detail for Subproducts (variants)
|
||||
url_prod = reverse("products-detail", kwargs={"pk": p1.id})
|
||||
response = api_client.get(url_prod)
|
||||
assert response.status_code == 200
|
||||
data = response.json()["data"]
|
||||
assert len(data["subproducts"]) == 2
|
||||
variant_names = [v["name"] for v in data["subproducts"]]
|
||||
assert "128GB" in variant_names
|
||||
assert "256GB" in variant_names
|
||||
Reference in New Issue
Block a user