revert(access): revert model inheriteance work

ref: #804 #792
This commit is contained in:
2025-06-07 19:55:52 +09:30
parent 496c5d57ac
commit 7753c98f43
11 changed files with 274 additions and 26 deletions

View File

@ -4,28 +4,24 @@ from django.conf import settings
from django.db import models from django.db import models
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from rest_framework.reverse import reverse
from access.fields import ( from access.fields import (
AutoCreatedField,
AutoLastModifiedField AutoLastModifiedField
) )
from access.models.tenant import Tenant from access.models.tenant import Tenant
from access.models.team import Team from access.models.team import Team
from core.models.centurion import CenturionModel from core.lib.feature_not_used import FeatureNotUsed
from core.mixin.history_save import SaveHistory
User = django.contrib.auth.get_user_model() User = django.contrib.auth.get_user_model()
class TeamUsers( class TeamUsers(SaveHistory):
CenturionModel
):
_audit_enabled = False
_notes_enabled = False
organization = None # Dont add organization field
class Meta: class Meta:
@ -35,6 +31,15 @@ class TeamUsers(
verbose_name_plural = "Team Users" verbose_name_plural = "Team Users"
id = models.AutoField(
blank=False,
help_text = 'ID of this Team User',
primary_key=True,
unique=True,
verbose_name = 'ID'
)
team = models.ForeignKey( team = models.ForeignKey(
Team, Team,
blank = False, blank = False,
@ -61,6 +66,8 @@ class TeamUsers(
verbose_name='manager', verbose_name='manager',
) )
created = AutoCreatedField()
modified = AutoLastModifiedField() modified = AutoLastModifiedField()
page_layout: list = [] page_layout: list = []
@ -70,6 +77,11 @@ class TeamUsers(
'manager' 'manager'
] ]
history_app_label: str = None
history_model_name: str = None
kb_model_name: str = None
note_basename: str = None
def delete(self, using=None, keep_parents=False): def delete(self, using=None, keep_parents=False):
""" Delete Team """ Delete Team
@ -91,16 +103,27 @@ class TeamUsers(
return self.team.organization return self.team.organization
def get_url_kwargs(self, many = False) -> dict: def get_url( self, request = None ) -> str:
kwargs = super().get_url_kwargs() url_kwargs: dict = {
kwargs.update({
'organization_id': self.team.organization.id, 'organization_id': self.team.organization.id,
'team_id': self.team.id 'team_id': self.team.id,
}) 'pk': self.id
}
return kwargs print(f'url kwargs are: {url_kwargs}')
if request:
return reverse(f"v2:_api_v2_organization_team_user-detail", request=request, kwargs = url_kwargs )
return reverse(f"v2:_api_v2_organization_team_user-detail", kwargs = url_kwargs )
def get_url_kwargs_notes(self):
return FeatureNotUsed
def save(self, *args, **kwargs): def save(self, *args, **kwargs):

View File

@ -65,7 +65,7 @@ class TeamModelSerializer(
get_url.update({ get_url.update({
'users': reverse( 'users': reverse(
'v2:_api_teamuser-list', 'v2:_api_v2_organization_team_user-list',
request=self.context['view'].request, request=self.context['view'].request,
kwargs={ kwargs={
'organization_id': item.organization.id, 'organization_id': item.organization.id,

View File

@ -27,7 +27,7 @@ class TeamUserAPI(
app_namespace = 'v2' app_namespace = 'v2'
url_name = '_api_teamuser' url_name = '_api_v2_organization_team_user'
@classmethod @classmethod
def setUpTestData(self): def setUpTestData(self):

View File

@ -0,0 +1,219 @@
import django
import pytest
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from django.shortcuts import reverse
from django.test import Client, TestCase
from rest_framework.relations import Hyperlink
from access.models.tenant import Tenant as Organization
from access.models.team import Team
from access.models.team_user import TeamUsers
from api.tests.abstract.api_fields import APICommonFields
User = django.contrib.auth.get_user_model()
class TeamUserAPI(
TestCase,
APICommonFields
):
model = TeamUsers
app_namespace = 'v2'
url_name = '_api_v2_organization_team_user'
@classmethod
def setUpTestData(self):
"""Setup Test
1. Create the object
2. create view user
3. add user as org manager
4. make api request
"""
organization = Organization.objects.create(name='test_org')
self.organization = organization
different_organization = Organization.objects.create(name='test_different_organization')
view_permissions = Permission.objects.get(
codename = 'view_' + self.model._meta.model_name,
content_type = ContentType.objects.get(
app_label = self.model._meta.app_label,
model = self.model._meta.model_name,
)
)
view_team = Team.objects.create(
team_name = 'view_team',
organization = organization,
)
view_team.permissions.set([view_permissions])
self.view_user = User.objects.create_user(username="test_user_view", password="password")
self.item = TeamUsers.objects.create(
team = view_team,
user = self.view_user
)
self.url_view_kwargs = {'organization_id': self.organization.id, 'team_id': view_team.id, 'pk': self.item.id}
self.url_kwargs = {'organization_id': self.organization.id, 'team_id': view_team.id}
client = Client()
url = reverse(self.app_namespace + ':' + self.url_name + '-detail', kwargs=self.url_view_kwargs)
client.force_login(self.view_user)
response = client.get(url)
self.api_data = response.data
def test_api_field_exists_manager(self):
""" Test for existance of API Field
manager field must exist
"""
assert 'manager' in self.api_data
def test_api_field_type_manager(self):
""" Test for type for API Field
manager field must be bool
"""
assert type(self.api_data['manager']) is bool
def test_api_field_exists_created(self):
""" Test for existance of API Field
created field must exist
"""
assert 'created' in self.api_data
def test_api_field_type_created(self):
""" Test for type for API Field
created field must be str
"""
assert type(self.api_data['created']) is str
def test_api_field_exists_modified(self):
""" Test for existance of API Field
modified field must exist
"""
assert 'modified' in self.api_data
def test_api_field_type_modified(self):
""" Test for type for API Field
modified field must be str
"""
assert type(self.api_data['modified']) is str
# def test_api_field_exists_permissions(self):
# """ Test for existance of API Field
# permissions field must exist
# """
# assert 'permissions' in self.api_data
# def test_api_field_type_permissions(self):
# """ Test for type for API Field
# url field must be list
# """
# assert type(self.api_data['permissions']) is list
# def test_api_field_exists_permissions_id(self):
# """ Test for existance of API Field
# permissions.id field must exist
# """
# assert 'id' in self.api_data['permissions'][0]
# def test_api_field_type_permissions_id(self):
# """ Test for type for API Field
# permissions.id field must be int
# """
# assert type(self.api_data['permissions'][0]['id']) is int
# def test_api_field_exists_permissions_display_name(self):
# """ Test for existance of API Field
# permissions.display_name field must exist
# """
# assert 'display_name' in self.api_data['permissions'][0]
# def test_api_field_type_permissions_display_name(self):
# """ Test for type for API Field
# permissions.display_name field must be str
# """
# assert type(self.api_data['permissions'][0]['display_name']) is str
# def test_api_field_exists_permissions_url(self):
# """ Test for existance of API Field
# permissions.url field must exist
# """
# assert 'url' in self.api_data['permissions'][0]
# def test_api_field_type_permissions_url(self):
# """ Test for type for API Field
# permissions.url field must be str
# """
# assert type(self.api_data['permissions'][0]['url']) is Hyperlink

View File

@ -16,7 +16,7 @@ class TeamUserViewsetList(
viewset = ViewSet viewset = ViewSet
route_name = 'API:_api_teamuser' route_name = 'API:_api_v2_organization_team_user'
@classmethod @classmethod

View File

@ -8,7 +8,7 @@ from access.viewsets import (
organization as organization_v2, organization as organization_v2,
role, role,
team, team,
team_user, team_user as team_user_v2
) )
entity_type_names = '' entity_type_names = ''
@ -76,8 +76,8 @@ router.register(
router.register( router.register(
prefix = 'access/tenant/(?P<organization_id>[0-9]+)/team/(?P<team_id>[0-9]+)/user', prefix = 'access/tenant/(?P<organization_id>[0-9]+)/team/(?P<team_id>[0-9]+)/user',
viewset = team_user.ViewSet, viewset = team_user_v2.ViewSet,
basename = '_api_teamuser' basename = '_api_v2_organization_team_user'
) )
router.register( router.register(

View File

@ -47,7 +47,7 @@ router.register(
basename = '_api_v2_device_operating_system') basename = '_api_v2_device_operating_system')
router.register( router.register(
prefix = 'device/(?P<device_id>[0-9]+)/software', viewset = device_software_v2.ViewSet, prefix = 'device/(?P<device_id>[0-9]+)/software', viewset = device_software_v2.ViewSet,
basename = '_api_v2_device_software' basename = '_api_devicesoftware'
) )
router.register( router.register(
prefix = 'device/(?P<device_id>[0-9]+)/service', viewset = service_device_v2.ViewSet, prefix = 'device/(?P<device_id>[0-9]+)/service', viewset = service_device_v2.ViewSet,

View File

@ -122,7 +122,7 @@ from .model_team import (
) )
from .model_teamuser import ( from .model_teamuser import (
model_teamuser, model_teamusers,
) )
from .model_tenancyabstract import ( from .model_tenancyabstract import (

View File

@ -4,6 +4,12 @@ from access.models.team_user import TeamUsers
@pytest.fixture( scope = 'class') @pytest.fixture( scope = 'class')
def model_teamuser(request): def model_teamusers(request):
yield TeamUsers
@pytest.fixture( scope = 'class')
def kwargs_teamusers(request):
yield TeamUsers yield TeamUsers