test(core): Add fixtures for api permission tests

ref: #780 #730
This commit is contained in:
2025-06-01 04:33:47 +09:30
parent c042725dc7
commit 616f37fca2
10 changed files with 197 additions and 31 deletions

View File

@ -1,4 +1,5 @@
import datetime
from typing import Any
import django
import pytest
import os
@ -7,6 +8,7 @@ import sys
from django.core.management import call_command
from django.conf import settings
from django.db import models
from django.test import (
TestCase
)
@ -769,7 +771,3 @@ def user(django_db_blocker, model_user, kwargs_user):
with django_db_blocker.unblock():
user.delete()

View File

@ -5,6 +5,10 @@ from .api_request_permissions import (
api_request_permissions,
)
from .kwargs_api_create import (
kwargs_api_create
)
from .model_centurionaudit import (
kwargs_centurionaudit,
model_centurionaudit,
@ -47,12 +51,25 @@ from .model_featureflag import (
from .model_gitgroup import (
kwargs_gitgroup,
model_gitgroup,
serializer_gitgroup,
)
from .model_instance import (
model_instance
)
from .model_permission import (
model_permission,
)
from .model_team import (
model_team,
)
from .model_teamuser import (
model_teamuser,
)
from .model_tenancyabstract import (
kwargs_tenancyabstract,
model_tenancyabstract,

View File

@ -1,17 +1,17 @@
import django
import datetime
import pytest
from settings.models.app_settings import AppSettings
User = django.contrib.auth.get_user_model()
@pytest.fixture( scope = 'class')
def api_request_permissions( django_db_blocker,
model_contenttype,
model_permission,
model_team,
model_teamuser,
model_user,
model,
organization_one,
organization_two,
@ -41,18 +41,18 @@ def api_request_permissions( django_db_blocker,
)
)
add_team = Team.objects.create(
add_team = model_team.objects.create(
team_name = 'add_team' + str(random_str),
organization = organization_one,
)
add_team.permissions.set([add_permissions])
add_user = User.objects.create_user(
add_user = model_user.objects.create_user(
username="test_user_add" + str(random_str), password="password"
)
TeamUsers.objects.create(
model_teamuser.objects.create(
team = add_team,
user = add_user
)
@ -67,18 +67,18 @@ def api_request_permissions( django_db_blocker,
)
)
change_team = Team.objects.create(
change_team = model_team.objects.create(
team_name = 'change_team' + str(random_str),
organization = organization_one,
)
change_team.permissions.set([change_permissions])
change_user = User.objects.create_user(
change_user = model_user.objects.create_user(
username="test_user_change" + str(random_str), password="password"
)
TeamUsers.objects.create(
model_teamuser.objects.create(
team = change_team,
user = change_user
)
@ -93,17 +93,17 @@ def api_request_permissions( django_db_blocker,
)
)
delete_team = Team.objects.create(
delete_team = model_team.objects.create(
team_name = 'delete_team' + str(random_str),
organization = organization_one,
)
delete_team.permissions.set([delete_permissions])
delete_user = User.objects.create_user(
delete_user = model_user.objects.create_user(
username="test_user_delete" + str(random_str), password="password"
)
TeamUsers.objects.create(
model_teamuser.objects.create(
team = delete_team,
user = delete_user
)
@ -118,30 +118,30 @@ def api_request_permissions( django_db_blocker,
)
)
view_team = Team.objects.create(
view_team = model_team.objects.create(
team_name = 'view_team' + str(random_str),
organization = organization_one,
)
view_team.permissions.set([view_permissions])
view_user = User.objects.create_user(
view_user = model_user.objects.create_user(
username="test_user_view" + str(random_str), password="password"
)
TeamUsers.objects.create(
model_teamuser.objects.create(
team = view_team,
user = view_user
)
different_organization_user = User.objects.create_user(
different_organization_user = model_user.objects.create_user(
username="test_diff_org_user" + str(random_str), password="password"
)
different_organization_team = Team.objects.create(
different_organization_team = model_team.objects.create(
team_name = 'diff_org_team' + str(random_str),
organization = organization_two,
)
@ -153,11 +153,17 @@ def api_request_permissions( django_db_blocker,
delete_permissions,
])
TeamUsers.objects.create(
model_teamuser.objects.create(
team = different_organization_team,
user = different_organization_user
)
no_permission_user = model_user.objects.create_user(
username="nil_permissions" + str(random_str), password="password"
)
yield {
'app_settings': app_settings,
'tenancy': {
@ -167,10 +173,11 @@ def api_request_permissions( django_db_blocker,
},
'user': {
'add': add_user,
'anon': None,
'change': change_user,
'delete': delete_user,
'different_tenancy': different_organization_user,
'no_permissions': '',
'no_permissions': no_permission_user,
'view': view_user,
}

26
app/tests/fixtures/kwargs_api_create.py vendored Normal file
View File

@ -0,0 +1,26 @@
import pytest
@pytest.fixture(scope = 'class')
def kwargs_api_create(django_db_blocker, model_kwargs):
kwargs: dict = {}
with django_db_blocker.unblock():
for field, value in model_kwargs.items():
if value is None:
continue
if isinstance(value, models.Model):
value = value.id
kwargs.update({
field: value
})
yield kwargs
del kwargs

View File

@ -1,7 +1,10 @@
import pytest
from devops.models.git_group import GitGroup
from devops.serializers.git_group import (
ModelSerializer,
ViewSerializer
)
@pytest.fixture( scope = 'class')
@ -11,10 +14,16 @@ def model_gitgroup(request):
@pytest.fixture( scope = 'class')
def kwargs_gitgroup(kwargs_centurionmodel):
def serializer_gitgroup():
# kwargs = kwargs_centurionmodel.copy()
# del kwargs['model_notes']
yield {
'model': ModelSerializer,
'view': ViewSerializer,
}
@pytest.fixture( scope = 'class')
def kwargs_gitgroup(kwargs_centurionmodel):
kwargs = {
**kwargs_centurionmodel.copy(),

87
app/tests/fixtures/model_instance.py vendored Normal file
View File

@ -0,0 +1,87 @@
import datetime
import pytest
from django.apps import apps
model_objs: list = []
@pytest.fixture( scope = 'class')
def model_instance(django_db_blocker, model_user, model, model_kwargs):
with django_db_blocker.unblock():
def instance( user = None, random_field:str = '', kwargs_create: dict = {} ):
"""Create a model instance
Args:
user (User, optional): The User to create and add to model.context['user'].
Defaults to None.
random_field (str, optional): The unique field that needs to be randomized.
Defaults to ''.
kwargs_create (dict, optional): object create kwargs. overwrites default.
Defaults to {}.
Returns:
Model Object (Model): Model that was created.
"""
global model_objs
obj = None
if user:
model.context['user'] = user
if model._meta.abstract:
class MockModel(model):
class Meta:
app_label = 'core'
verbose_name = 'mock instance'
managed = False
obj = MockModel()
else:
kwargs = model_kwargs.copy()
kwargs.update( kwargs_create )
if random_field:
random_str = str(datetime.datetime.now(tz=datetime.timezone.utc))
kwargs.update({
random_field: str( random_field ) + '_' + random_str
})
obj = model.objects.create(
**kwargs
)
model_objs += [ obj ]
return obj
yield instance
for model_obj in model_objs:
if model_obj._meta.abstract:
del model_obj
else:
model_obj.delete()
if 'mockmodel' in apps.all_models['core']:
del apps.all_models['core']['mockmodel']

9
app/tests/fixtures/model_team.py vendored Normal file
View File

@ -0,0 +1,9 @@
import pytest
from access.models.team import Team
@pytest.fixture( scope = 'class')
def model_team(request):
yield Team

9
app/tests/fixtures/model_teamuser.py vendored Normal file
View File

@ -0,0 +1,9 @@
import pytest
from access.models.team_user import TeamUsers
@pytest.fixture( scope = 'class')
def model_teamuser(request):
yield TeamUsers

View File

@ -11,8 +11,10 @@ def model_tenancyabstract(request):
@pytest.fixture( scope = 'class')
def kwargs_tenancyabstract():
def kwargs_tenancyabstract(organization_one):
kwargs = {}
kwargs = {
'organization': organization_one
}
yield kwargs.copy()

View File

@ -1066,13 +1066,15 @@ log_cli_format = '%(asctime)s %(levelname)s %(message)s'
log_cli_date_format = '%Y-%m-%d %H:%M:%S'
markers = [
"audit_models: Selects Audit models...",
"api: Selects all API related tests.",
"audit_models: Selects Audit models.",
"centurion_models: Selects Centurion models",
"functional: Selects all Functional tests.",
"meta_models: Selects Meta models",
"model_gitgroup: Selects tests for model `git group`",
"models: Selects all models tests.",
"note_models: Selects all centurion model note models",
"permissions: selects all permission related tests.",
"tenancy_models: Selects Tenancy models.",
"unit: Selects all Unit Tests.",
]