From f04130d769b63050ba4bbddb4bb9a5384fd032ca Mon Sep 17 00:00:00 2001 From: muhammadvadud Date: Wed, 26 Nov 2025 12:35:22 +0500 Subject: [PATCH 1/2] 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))] -- 2.49.1 From a08c6ad80033c02356e7d213737552dc8584419d Mon Sep 17 00:00:00 2001 From: muhammadvadud Date: Wed, 26 Nov 2025 14:01:54 +0500 Subject: [PATCH 2/2] Fix typo --- core/apps/accounts/models/search_history.py | 6 +- core/apps/api/tests/__init__.py | 1 + core/apps/api/tests/category/test_category.py | 12 ++-- core/apps/api/tests/search/__init__.py | 1 + .../api/tests/search/test_search_history.py | 56 +++++++++++++++++++ 5 files changed, 69 insertions(+), 7 deletions(-) create mode 100644 core/apps/api/tests/search/__init__.py create mode 100644 core/apps/api/tests/search/test_search_history.py diff --git a/core/apps/accounts/models/search_history.py b/core/apps/accounts/models/search_history.py index af218fa..659ec8c 100644 --- a/core/apps/accounts/models/search_history.py +++ b/core/apps/accounts/models/search_history.py @@ -2,12 +2,16 @@ from django.db import models from django_core.models.base import AbstractBaseModel from django.utils.translation import gettext_lazy as _ from django.contrib.auth import get_user_model - +from model_bakery import baker class SearchHistory(AbstractBaseModel): value = models.CharField(verbose_name=_('Search History'), max_length=255) user = models.ForeignKey(get_user_model(), verbose_name=_('User'), on_delete=models.CASCADE) + @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 121b071..9f951c8 100644 --- a/core/apps/api/tests/__init__.py +++ b/core/apps/api/tests/__init__.py @@ -1,2 +1,3 @@ from .category import * # noqa from .ad import * # noqa +from .search import * # noqa diff --git a/core/apps/api/tests/category/test_category.py b/core/apps/api/tests/category/test_category.py index be4ad33..e2c6abf 100644 --- a/core/apps/api/tests/category/test_category.py +++ b/core/apps/api/tests/category/test_category.py @@ -25,9 +25,9 @@ def data(api_client): "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}), + "list-category-home": reverse("category-home-list"), + "retrieve-category-home": reverse("category-home-detail", kwargs={"pk": instance.pk}), + "retrieve-category-home-not-found": reverse("category-home-detail", kwargs={"pk": 1000}), }, client, instance, @@ -64,7 +64,7 @@ def test_retrieve_not_found(data): @pytest.mark.django_db def test_category_home_list(data): urls, client, _ = data - response = client.get(urls["list-home-ad"]) + response = client.get(urls["list-category-home"]) data_resp = response.json() assert response.status_code == 200 assert data_resp["status"] is True @@ -73,7 +73,7 @@ def test_category_home_list(data): @pytest.mark.django_db def test_category_home_retrieve(data): urls, client, _ = data - response = client.get(urls["retrieve-home-ad"]) + response = client.get(urls["retrieve-category-home"]) data_resp = response.json() assert response.status_code == 200 assert data_resp["status"] is True @@ -82,7 +82,7 @@ def test_category_home_retrieve(data): @pytest.mark.django_db def test_category_home_retrieve_not_found(data): urls, client, _ = data - response = client.get(urls["retrieve-home-ad-not-found"]) + response = client.get(urls["retrieve-category-home-not-found"]) data_resp = response.json() assert response.status_code == 404 assert data_resp["status"] is False diff --git a/core/apps/api/tests/search/__init__.py b/core/apps/api/tests/search/__init__.py new file mode 100644 index 0000000..9b1bf91 --- /dev/null +++ b/core/apps/api/tests/search/__init__.py @@ -0,0 +1 @@ +from .test_search_history import * # noqa diff --git a/core/apps/api/tests/search/test_search_history.py b/core/apps/api/tests/search/test_search_history.py new file mode 100644 index 0000000..ad11d85 --- /dev/null +++ b/core/apps/api/tests/search/test_search_history.py @@ -0,0 +1,56 @@ +import pytest +from django.urls import reverse +from rest_framework.test import APIClient + +from core.apps.accounts.models import SearchHistory + + +@pytest.fixture +def instance(db): + return SearchHistory._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("search-history-list"), + "retrieve": reverse("search-history-detail", kwargs={"pk": instance.pk}), + "retrieve-not-found": reverse("search-history-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_create(data): + urls, client, _ = data + response = client.post(urls["list"], data={"value": "test-text"}) + data_resp = response.json() + assert response.status_code == 201 + assert data_resp["status"] is True + + +@pytest.mark.django_db +def test_destroy(data): + urls, client, _ = data + response = client.delete(urls["retrieve"]) + assert response.status_code == 204 -- 2.49.1