categorylanri import qilish qoshildi

This commit is contained in:
Husanjonazamov
2026-03-25 19:24:42 +05:00
commit 1c4155299d
206 changed files with 8106 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
from .category import * # noqa
from .products import * # noqa

View File

@@ -0,0 +1,2 @@
from .test_category import * # noqa
from .test_subcategory import * # noqa

View 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

View 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

View File

@@ -0,0 +1 @@
from .test_products import * # noqa

View 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

View 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