Merge pull request 'ya tojiki medone' (#7) from feat/test into main

Reviewed-on: #7
This commit is contained in:
2025-11-26 09:15:42 +00:00
11 changed files with 225 additions and 3 deletions

View File

@@ -2,12 +2,16 @@ from django.db import models
from django_core.models.base import AbstractBaseModel from django_core.models.base import AbstractBaseModel
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from model_bakery import baker
class SearchHistory(AbstractBaseModel): class SearchHistory(AbstractBaseModel):
value = models.CharField(verbose_name=_('Search History'), max_length=255) value = models.CharField(verbose_name=_('Search History'), max_length=255)
user = models.ForeignKey(get_user_model(), verbose_name=_('User'), on_delete=models.CASCADE) user = models.ForeignKey(get_user_model(), verbose_name=_('User'), on_delete=models.CASCADE)
@classmethod
def _baker(cls):
return baker.make(cls)
def __str__(self): def __str__(self):
return str(self.pk) return str(self.pk)

View File

@@ -3,6 +3,7 @@ from django_core.models.base import AbstractBaseModel
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from core.apps.api.choices.ad_type import AdType, AdCategoryType from core.apps.api.choices.ad_type import AdType, AdCategoryType
from model_bakery import baker
class AdModel(AbstractBaseModel): class AdModel(AbstractBaseModel):
@@ -18,6 +19,10 @@ class AdModel(AbstractBaseModel):
tags = models.ManyToManyField("api.Tags", verbose_name=_("Tags")) tags = models.ManyToManyField("api.Tags", verbose_name=_("Tags"))
image = models.ImageField(verbose_name=_("Image")) image = models.ImageField(verbose_name=_("Image"))
@classmethod
def _baker(cls):
return baker.make(cls)
def __str__(self): def __str__(self):
return str(self.pk) return str(self.pk)

View File

@@ -2,6 +2,7 @@ from django.db import models
from django_core.models.base import AbstractBaseModel from django_core.models.base import AbstractBaseModel
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from core.apps.api.choices import AdCategoryType from core.apps.api.choices import AdCategoryType
from model_bakery import baker
class Category(AbstractBaseModel): class Category(AbstractBaseModel):
@@ -13,6 +14,10 @@ class Category(AbstractBaseModel):
category_type = models.CharField(max_length=255, verbose_name=_('Category Type'), choices=AdCategoryType, category_type = models.CharField(max_length=255, verbose_name=_('Category Type'), choices=AdCategoryType,
default=AdCategoryType.PRODUCT) default=AdCategoryType.PRODUCT)
@classmethod
def _baker(cls):
return baker.make(cls)
def __str__(self): def __str__(self):
return str(self.pk) return str(self.pk)

View File

@@ -0,0 +1,3 @@
from .category import * # noqa
from .ad import * # noqa
from .search import * # noqa

View File

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

View File

@@ -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

View File

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

View File

@@ -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-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,
)
@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-category-home"])
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-category-home"])
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-category-home-not-found"])
data_resp = response.json()
assert response.status_code == 404
assert data_resp["status"] is False

View File

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

View File

@@ -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

View File

@@ -1,11 +1,11 @@
from django.urls import include, path from django.urls import include, path
from rest_framework.routers import DefaultRouter 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 = DefaultRouter()
router.register("category", CategoryViewSet, basename="category") 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("search-history", SearchHistoryViewSet, basename="search-history")
router.register("home-ad", HomeAdApiView, basename="home-ad") router.register("home-ad", HomeAdApiView, basename="home-ad")
urlpatterns = [path("", include(router.urls))] urlpatterns = [path("", include(router.urls))]