test(assistance): API Fields Render Functional Test Suite re-written to pytest for model KnowledgeBase

ref: #904 #900
This commit is contained in:
2025-07-29 13:47:57 +09:30
parent 83ebf12978
commit 03d320f6a0
4 changed files with 246 additions and 1 deletions

View File

@ -0,0 +1,29 @@
# Generated by Django 5.1.10 on 2025-07-29 04:13
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("assistance", "0013_alter_modelknowledgebasearticle_model"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AlterField(
model_name="knowledgebase",
name="responsible_user",
field=models.ForeignKey(
blank=True,
help_text="User(s) whom is considered the articles owner.",
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="responsible_user",
to=settings.AUTH_USER_MODEL,
verbose_name="Responsible User",
),
),
]

View File

@ -103,7 +103,7 @@ class KnowledgeBase(
responsible_user = models.ForeignKey(
User,
blank = False,
blank = True,
help_text = 'User(s) whom is considered the articles owner.',
null = True,
on_delete = models.PROTECT,

View File

@ -0,0 +1,25 @@
import pytest
@pytest.fixture( scope = 'class')
def model(model_knowledgebase):
yield model_knowledgebase
@pytest.fixture( scope = 'class', autouse = True)
def model_kwargs(request, kwargs_knowledgebase):
request.cls.kwargs_create_item = kwargs_knowledgebase.copy()
yield kwargs_knowledgebase.copy()
if hasattr(request.cls, 'kwargs_create_item'):
del request.cls.kwargs_create_item
@pytest.fixture( scope = 'class')
def model_serializer(serializer_knowledgebase):
yield serializer_knowledgebase

View File

@ -0,0 +1,191 @@
import pytest
from django.db import models
from rest_framework.relations import Hyperlink
from api.tests.functional.test_functional_api_fields import (
APIFieldsInheritedCases,
)
@pytest.mark.model_knowledgebase
class knowledgeBaseAPITestCases(
APIFieldsInheritedCases,
):
@pytest.fixture( scope = 'class')
def second_model(self, request, django_db_blocker,
model, model_kwargs
):
item = None
with django_db_blocker.unblock():
kwargs_many_to_many = {}
kwargs = {}
for key, value in model_kwargs.items():
field = model._meta.get_field(key)
if isinstance(field, models.ManyToManyField):
kwargs_many_to_many.update({
key: value
})
else:
kwargs.update({
key: value
})
# Switch model fields so all fields can be checked
kwargs_many_to_many.update({ 'responsible_teams': kwargs_many_to_many['target_team']})
del kwargs_many_to_many['target_team']
kwargs.update({ 'target_user': kwargs['responsible_user']})
del kwargs['responsible_user']
item_two = model.objects.create(
**kwargs
)
for key, value in kwargs_many_to_many.items():
field = getattr(item_two, key)
for entry in value:
field.add(entry)
request.cls.item_two = item_two
yield item_two
with django_db_blocker.unblock():
item_two.delete()
del request.cls.item_two
@pytest.fixture( scope = 'class', autouse = True)
def class_setup(self,
create_model,
second_model,
make_request,
):
pass
@property
def parameterized_api_fields(self):
return {
'title': {
'expected': str
},
'summary': {
'expected': str
},
'content': {
'expected': str
},
'category': {
'expected': dict
},
'category.id': {
'expected': int
},
'category.display_name': {
'expected': str
},
'category.url': {
'expected': str
},
'release_date': {
'expected': str
},
'expiry_date': {
'expected': str
},
'target_team': {
'expected': list
},
'target_team.0.id': {
'expected': int
},
'target_team.0.display_name': {
'expected': str
},
'target_team.0.url': {
'expected': str
},
'target_user': {
'expected': dict
},
'target_user.id': {
'expected': int
},
'target_user.display_name': {
'expected': str
},
'target_user.url': {
'expected': Hyperlink
},
'responsible_user': {
'expected': dict
},
'responsible_user.id': {
'expected': int
},
'responsible_user.display_name': {
'expected': str
},
'responsible_user.url': {
'expected': Hyperlink
},
'responsible_teams': {
'expected': list
},
'responsible_teams.0.id': {
'expected': int
},
'responsible_teams.0.display_name': {
'expected': str
},
'responsible_teams.0.url': {
'expected': str
},
'public': {
'expected': bool
},
'modified': {
'expected': str
}
}
class knowledgeBaseAPIInheritedCases(
knowledgeBaseAPITestCases,
):
pass
@pytest.mark.module_assistance
class knowledgeBaseAPIPyTest(
knowledgeBaseAPITestCases,
):
pass