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

View File

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

View File

@ -1,17 +1,17 @@
import django import datetime
import pytest import pytest
from settings.models.app_settings import AppSettings from settings.models.app_settings import AppSettings
User = django.contrib.auth.get_user_model()
@pytest.fixture( scope = 'class') @pytest.fixture( scope = 'class')
def api_request_permissions( django_db_blocker, def api_request_permissions( django_db_blocker,
model_contenttype, model_contenttype,
model_permission, model_permission,
model_team,
model_teamuser,
model_user,
model, model,
organization_one, organization_one,
organization_two, 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), team_name = 'add_team' + str(random_str),
organization = organization_one, organization = organization_one,
) )
add_team.permissions.set([add_permissions]) 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" username="test_user_add" + str(random_str), password="password"
) )
TeamUsers.objects.create( model_teamuser.objects.create(
team = add_team, team = add_team,
user = add_user 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), team_name = 'change_team' + str(random_str),
organization = organization_one, organization = organization_one,
) )
change_team.permissions.set([change_permissions]) 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" username="test_user_change" + str(random_str), password="password"
) )
TeamUsers.objects.create( model_teamuser.objects.create(
team = change_team, team = change_team,
user = change_user 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), team_name = 'delete_team' + str(random_str),
organization = organization_one, organization = organization_one,
) )
delete_team.permissions.set([delete_permissions]) 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" username="test_user_delete" + str(random_str), password="password"
) )
TeamUsers.objects.create( model_teamuser.objects.create(
team = delete_team, team = delete_team,
user = delete_user 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), team_name = 'view_team' + str(random_str),
organization = organization_one, organization = organization_one,
) )
view_team.permissions.set([view_permissions]) 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" username="test_user_view" + str(random_str), password="password"
) )
TeamUsers.objects.create( model_teamuser.objects.create(
team = view_team, team = view_team,
user = view_user 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" 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), team_name = 'diff_org_team' + str(random_str),
organization = organization_two, organization = organization_two,
) )
@ -153,11 +153,17 @@ def api_request_permissions( django_db_blocker,
delete_permissions, delete_permissions,
]) ])
TeamUsers.objects.create( model_teamuser.objects.create(
team = different_organization_team, team = different_organization_team,
user = different_organization_user user = different_organization_user
) )
no_permission_user = model_user.objects.create_user(
username="nil_permissions" + str(random_str), password="password"
)
yield { yield {
'app_settings': app_settings, 'app_settings': app_settings,
'tenancy': { 'tenancy': {
@ -167,10 +173,11 @@ def api_request_permissions( django_db_blocker,
}, },
'user': { 'user': {
'add': add_user, 'add': add_user,
'anon': None,
'change': change_user, 'change': change_user,
'delete': delete_user, 'delete': delete_user,
'different_tenancy': different_organization_user, 'different_tenancy': different_organization_user,
'no_permissions': '', 'no_permissions': no_permission_user,
'view': view_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 import pytest
from devops.models.git_group import GitGroup from devops.models.git_group import GitGroup
from devops.serializers.git_group import (
ModelSerializer,
ViewSerializer
)
@pytest.fixture( scope = 'class') @pytest.fixture( scope = 'class')
@ -11,10 +14,16 @@ def model_gitgroup(request):
@pytest.fixture( scope = 'class') @pytest.fixture( scope = 'class')
def kwargs_gitgroup(kwargs_centurionmodel): def serializer_gitgroup():
# kwargs = kwargs_centurionmodel.copy() yield {
# del kwargs['model_notes'] 'model': ModelSerializer,
'view': ViewSerializer,
}
@pytest.fixture( scope = 'class')
def kwargs_gitgroup(kwargs_centurionmodel):
kwargs = { kwargs = {
**kwargs_centurionmodel.copy(), **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') @pytest.fixture( scope = 'class')
def kwargs_tenancyabstract(): def kwargs_tenancyabstract(organization_one):
kwargs = {} kwargs = {
'organization': organization_one
}
yield kwargs.copy() 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' log_cli_date_format = '%Y-%m-%d %H:%M:%S'
markers = [ markers = [
"audit_models: Selects Audit models...", "api: Selects all API related tests.",
"audit_models: Selects Audit models.",
"centurion_models: Selects Centurion models", "centurion_models: Selects Centurion models",
"functional: Selects all Functional tests.", "functional: Selects all Functional tests.",
"meta_models: Selects Meta models", "meta_models: Selects Meta models",
"model_gitgroup: Selects tests for model `git group`", "model_gitgroup: Selects tests for model `git group`",
"models: Selects all models tests.", "models: Selects all models tests.",
"note_models: Selects all centurion model note models", "note_models: Selects all centurion model note models",
"permissions: selects all permission related tests.",
"tenancy_models: Selects Tenancy models.", "tenancy_models: Selects Tenancy models.",
"unit: Selects all Unit Tests.", "unit: Selects all Unit Tests.",
] ]