From f04130d769b63050ba4bbddb4bb9a5384fd032ca Mon Sep 17 00:00:00 2001 From: muhammadvadud Date: Wed, 26 Nov 2025 12:35:22 +0500 Subject: [PATCH] Testlar qo'shildi --- core/apps/api/models/ad/ad.py | 5 ++ core/apps/api/models/ad/category.py | 5 ++ core/apps/api/tests/__init__.py | 2 + core/apps/api/tests/ad/__init__.py | 1 + core/apps/api/tests/ad/test_home_api.py | 58 ++++++++++++ core/apps/api/tests/category/__init__.py | 1 + core/apps/api/tests/category/test_category.py | 88 +++++++++++++++++++ core/apps/api/urls.py | 4 +- 8 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 core/apps/api/tests/ad/__init__.py create mode 100644 core/apps/api/tests/ad/test_home_api.py create mode 100644 core/apps/api/tests/category/__init__.py create mode 100644 core/apps/api/tests/category/test_category.py diff --git a/core/apps/api/models/ad/ad.py b/core/apps/api/models/ad/ad.py index 968ca19..a682b4f 100644 --- a/core/apps/api/models/ad/ad.py +++ b/core/apps/api/models/ad/ad.py @@ -3,6 +3,7 @@ from django_core.models.base import AbstractBaseModel from django.utils.translation import gettext_lazy as _ from django.contrib.auth import get_user_model from core.apps.api.choices.ad_type import AdType, AdCategoryType +from model_bakery import baker class AdModel(AbstractBaseModel): @@ -18,6 +19,10 @@ class AdModel(AbstractBaseModel): tags = models.ManyToManyField("api.Tags", verbose_name=_("Tags")) image = models.ImageField(verbose_name=_("Image")) + @classmethod + def _baker(cls): + return baker.make(cls) + def __str__(self): return str(self.pk) diff --git a/core/apps/api/models/ad/category.py b/core/apps/api/models/ad/category.py index cde18bb..605349c 100644 --- a/core/apps/api/models/ad/category.py +++ b/core/apps/api/models/ad/category.py @@ -2,6 +2,7 @@ from django.db import models from django_core.models.base import AbstractBaseModel from django.utils.translation import gettext_lazy as _ from core.apps.api.choices import AdCategoryType +from model_bakery import baker class Category(AbstractBaseModel): @@ -13,6 +14,10 @@ class Category(AbstractBaseModel): category_type = models.CharField(max_length=255, verbose_name=_('Category Type'), choices=AdCategoryType, default=AdCategoryType.PRODUCT) + @classmethod + def _baker(cls): + return baker.make(cls) + def __str__(self): return str(self.pk) diff --git a/core/apps/api/tests/__init__.py b/core/apps/api/tests/__init__.py index e69de29..121b071 100644 --- a/core/apps/api/tests/__init__.py +++ b/core/apps/api/tests/__init__.py @@ -0,0 +1,2 @@ +from .category import * # noqa +from .ad import * # noqa diff --git a/core/apps/api/tests/ad/__init__.py b/core/apps/api/tests/ad/__init__.py new file mode 100644 index 0000000..2bcb0e0 --- /dev/null +++ b/core/apps/api/tests/ad/__init__.py @@ -0,0 +1 @@ +from .test_home_api import * # noqa diff --git a/core/apps/api/tests/ad/test_home_api.py b/core/apps/api/tests/ad/test_home_api.py new file mode 100644 index 0000000..82f0a63 --- /dev/null +++ b/core/apps/api/tests/ad/test_home_api.py @@ -0,0 +1,58 @@ +import pytest +from django.urls import reverse +from rest_framework.test import APIClient + +from core.apps.api.models import AdModel + + +@pytest.fixture +def instance(db): + return AdModel._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("home-ad-list"), + "retrieve": reverse("home-ad-detail", kwargs={"pk": instance.pk}), + "retrieve-not-found": reverse("home-ad-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 diff --git a/core/apps/api/tests/category/__init__.py b/core/apps/api/tests/category/__init__.py new file mode 100644 index 0000000..c7082d4 --- /dev/null +++ b/core/apps/api/tests/category/__init__.py @@ -0,0 +1 @@ +from .test_category import * # noqa diff --git a/core/apps/api/tests/category/test_category.py b/core/apps/api/tests/category/test_category.py new file mode 100644 index 0000000..be4ad33 --- /dev/null +++ b/core/apps/api/tests/category/test_category.py @@ -0,0 +1,88 @@ +import pytest +from django.urls import reverse +from rest_framework.test import APIClient + +from core.apps.api.models import Category + + +@pytest.fixture +def instance(db): + return Category._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}), + "list-home-ad": reverse("category-home-list"), + "retrieve-home-ad": reverse("category-home-detail", kwargs={"pk": instance.pk}), + "retrieve-home-ad-not-found": reverse("category-home-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_category_home_list(data): + urls, client, _ = data + response = client.get(urls["list-home-ad"]) + data_resp = response.json() + assert response.status_code == 200 + assert data_resp["status"] is True + + +@pytest.mark.django_db +def test_category_home_retrieve(data): + urls, client, _ = data + response = client.get(urls["retrieve-home-ad"]) + data_resp = response.json() + assert response.status_code == 200 + assert data_resp["status"] is True + + +@pytest.mark.django_db +def test_category_home_retrieve_not_found(data): + urls, client, _ = data + response = client.get(urls["retrieve-home-ad-not-found"]) + data_resp = response.json() + assert response.status_code == 404 + assert data_resp["status"] is False diff --git a/core/apps/api/urls.py b/core/apps/api/urls.py index 4c0a9fa..c5ea584 100644 --- a/core/apps/api/urls.py +++ b/core/apps/api/urls.py @@ -1,11 +1,11 @@ from django.urls import include, path from rest_framework.routers import DefaultRouter -from core.apps.api.views import CategoryViewSet, SearchHistoryViewSet, HomeAdApiView, CategoryHomeApiViewSet +from core.apps.api.views import CategoryHomeApiViewSet, CategoryViewSet, HomeAdApiView, SearchHistoryViewSet router = DefaultRouter() router.register("category", CategoryViewSet, basename="category") -router.register("category-home-api", CategoryHomeApiViewSet, basename="category-home-api") +router.register("category-home", CategoryHomeApiViewSet, basename="category-home") router.register("search-history", SearchHistoryViewSet, basename="search-history") router.register("home-ad", HomeAdApiView, basename="home-ad") urlpatterns = [path("", include(router.urls))]