Merge pull request #870 from nofusscomputing/refactor-ticket-inheritence

This commit is contained in:
Jon
2025-07-15 02:50:19 +09:30
committed by GitHub
31 changed files with 659 additions and 556 deletions

View File

@ -0,0 +1,41 @@
# Generated by Django 5.1.10 on 2025-07-13 13:22
import access.models.tenancy_abstract
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("access", "0021_roleaudithistory_rolecenturionmodelnote"),
("core", "0033_alter_ticketcommentcategory_parent_and_more"),
]
operations = [
migrations.AlterField(
model_name="ticketbase",
name="id",
field=models.AutoField(
help_text="ID of the item",
primary_key=True,
serialize=False,
unique=True,
verbose_name="ID",
),
),
migrations.AlterField(
model_name="ticketbase",
name="organization",
field=models.ForeignKey(
help_text="Tenant this belongs to",
on_delete=django.db.models.deletion.CASCADE,
related_name="+",
to="access.tenant",
validators=[
access.models.tenancy_abstract.TenancyAbstractModel.validatate_organization_exists
],
verbose_name="Tenant",
),
),
]

View File

@ -0,0 +1,41 @@
# Generated by Django 5.1.10 on 2025-07-13 13:28
import access.models.tenancy_abstract
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("access", "0021_roleaudithistory_rolecenturionmodelnote"),
("core", "0034_alter_ticketbase_id_alter_ticketbase_organization"),
]
operations = [
migrations.AlterField(
model_name="ticketcommentbase",
name="id",
field=models.AutoField(
help_text="ID of the item",
primary_key=True,
serialize=False,
unique=True,
verbose_name="ID",
),
),
migrations.AlterField(
model_name="ticketcommentbase",
name="organization",
field=models.ForeignKey(
help_text="Tenant this belongs to",
on_delete=django.db.models.deletion.CASCADE,
related_name="+",
to="access.tenant",
validators=[
access.models.tenancy_abstract.TenancyAbstractModel.validatate_organization_exists
],
verbose_name="Tenant",
),
),
]

View File

@ -0,0 +1,46 @@
# Generated by Django 5.1.10 on 2025-07-14 16:20
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("core", "0035_alter_ticketcommentbase_id_and_more"),
]
operations = [
migrations.AlterField(
model_name="ticketbase",
name="external_ref",
field=models.IntegerField(
blank=True,
help_text="External System reference",
null=True,
verbose_name="Reference Number",
),
),
migrations.AlterField(
model_name="ticketbase",
name="external_system",
field=models.IntegerField(
blank=True,
choices=[
(1, "Github"),
(2, "Gitlab"),
(9999, "Custom #1 (Imported)"),
(9998, "Custom #2 (Imported)"),
(9997, "Custom #3 (Imported)"),
(9996, "Custom #4 (Imported)"),
(9995, "Custom #5 (Imported)"),
(9994, "Custom #6 (Imported)"),
(9993, "Custom #7 (Imported)"),
(9992, "Custom #8 (Imported)"),
(9991, "Custom #9 (Imported)"),
],
help_text="External system this item derives",
null=True,
verbose_name="External System",
),
),
]

View File

@ -196,6 +196,12 @@ class Centurion(
def get_organization(self):
"""Return the objects organization"""
return self.organization
def get_url(
self, relative: bool = False, api_version: int = 2, many = False, request: any = None
) -> str:

View File

@ -8,15 +8,15 @@ from django.db import models
from rest_framework.reverse import reverse
from access.fields import AutoCreatedField, AutoLastModifiedField
from access.fields import AutoLastModifiedField
from access.models.entity import Entity
from access.models.tenancy import TenancyObject
from core import exceptions as centurion_exceptions
from core.classes.badge import Badge
from core.lib.feature_not_used import FeatureNotUsed
from core.lib.slash_commands import SlashCommands
from core.middleware.get_request import get_request
from core.models.centurion import CenturionModel
from core.models.ticket.ticket_category import TicketCategory
from core.models.ticket.ticket_enum_values import TicketValues
@ -28,7 +28,7 @@ User = django.contrib.auth.get_user_model()
class TicketBase(
SlashCommands,
TenancyObject,
CenturionModel,
):
_after: dict
@ -36,11 +36,19 @@ class TicketBase(
Data after save was called
"""
_audit_enabled = False
_before: dict
"""History Before
Data before save was called
"""
_notes_enabled = False
model_notes = None
model_tag = 'ticket'
save_model_history: bool = False
class Ticket_ExternalSystem(models.IntegerChoices): # <null|github|gitlab>
@ -141,19 +149,9 @@ class TicketBase(
return True
id = models.AutoField(
blank = False,
help_text = 'Ticket ID Number',
primary_key = True,
unique = True,
verbose_name = 'Number',
)
external_system = models.IntegerField(
blank = True,
choices = Ticket_ExternalSystem,
default = None,
help_text = 'External system this item derives',
null = True,
verbose_name = 'External System',
@ -161,7 +159,6 @@ class TicketBase(
external_ref = models.IntegerField(
blank = True,
default = None,
help_text = 'External System reference',
null = True,
verbose_name = 'Reference Number',
@ -176,10 +173,6 @@ class TicketBase(
verbose_name = 'Parent Ticket'
)
model_notes = None
is_global = None
@property
def get_ticket_type(self):
"""Fetch the Ticket Type
@ -542,10 +535,6 @@ class TicketBase(
verbose_name = 'Closed Date',
)
created = AutoCreatedField(
editable = True,
)
modified = AutoLastModifiedField()
@ -670,11 +659,36 @@ class TicketBase(
self.date_closed = datetime.datetime.now(tz=datetime.timezone.utc).replace(microsecond=0).isoformat()
if self.date_closed is not None and not self.is_closed:
self.date_closed = None
self._before = {}
try:
self._before = self.__class__.objects.get(pk=self.pk).__dict__.copy()
except Exception:
pass
def clean_fields(self, exclude = None):
if(
self.description != ''
and self.description is not None
):
description = self.slash_command(self.description)
if description != self.description:
self.description = description
return super().clean_fields(exclude = exclude)
@ -761,7 +775,6 @@ class TicketBase(
def get_related_field_name(self) -> str:
meta = getattr(self, '_meta')
@ -836,9 +849,9 @@ class TicketBase(
if request:
return reverse(f"v2:_api_v2_ticket_sub-detail", request=request, kwargs = kwargs )
return reverse(f"v2:_api_ticket_sub-detail", request=request, kwargs = kwargs )
return reverse(f"v2:_api_v2_ticket_sub-detail", kwargs = kwargs )
return reverse(f"v2:_api_ticket_sub-detail", kwargs = kwargs )
def get_url_kwargs(self) -> dict:
@ -890,12 +903,14 @@ class TicketBase(
]
changed_fields: list = []
fields = [ value.name for value in self._meta.fields ]
for field, value in self._before.items():
if (
self._before[field] != self._after[field]
and field not in excluded_fields
and field in self.fields
and field in fields
):
changed_fields = changed_fields + [ field ]
@ -1089,13 +1104,13 @@ class TicketBase(
comment_user = None
comment = TicketCommentAction.objects.create(
organization = self.organization,
ticket = self,
comment_type = TicketCommentAction._meta.sub_model_type,
body = comment_text,
# user = user
)
# comment = TicketCommentAction.objects.create(
# organization = self.organization,
# ticket = self,
# comment_type = TicketCommentAction._meta.sub_model_type,
# body = comment_text,
# # user = user
# )
# comment.save()
a = 'b'
@ -1122,26 +1137,6 @@ class TicketBase(
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if(
self.description != ''
and self.description is not None
):
description = self.slash_command(self.description)
if description != self.description:
self.description = description
self._before = {}
try:
self._before = self.__class__.objects.get(pk=self.pk).__dict__.copy()
except Exception:
pass
super().save(force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields)
self._after = self.__dict__.copy()
@ -1149,4 +1144,3 @@ class TicketBase(
if self._before:
self.create_action_comment()

View File

@ -7,11 +7,11 @@ from rest_framework.reverse import reverse
from access.fields import AutoCreatedField, AutoLastModifiedField
from access.models.entity import Entity
from access.models.tenancy import TenancyObject
from core import exceptions as centurion_exception
from core.lib.feature_not_used import FeatureNotUsed
from core.lib.slash_commands import SlashCommands
from core.models.centurion import CenturionModel
from core.models.ticket_base import TicketBase
from core.models.ticket.ticket_comment_category import TicketCommentCategory
@ -19,10 +19,16 @@ from core.models.ticket.ticket_comment_category import TicketCommentCategory
class TicketCommentBase(
SlashCommands,
TenancyObject
CenturionModel,
):
_audit_enabled = False
_notes_enabled = False
model_notes = None
save_model_history: bool = False
@ -63,16 +69,6 @@ class TicketCommentBase(
model_notes = None
is_global = None
id = models.AutoField(
blank = False,
help_text = 'Comment ID Number',
primary_key = True,
unique = True,
verbose_name = 'Number',
)
parent = models.ForeignKey(
'self',
@ -257,13 +253,6 @@ class TicketCommentBase(
def clean(self):
try:
self.organization
except:
self.organization = self.ticket.organization
if not self.is_template:
if self.is_closed and self.date_closed is None:
@ -282,6 +271,19 @@ class TicketCommentBase(
def clean_fields(self, exclude=None):
try:
self.organization
except:
self.organization = self.ticket.organization
return super().clean_fields(exclude)
def get_related_model(self):
"""Recursive model Fetch
@ -347,11 +349,11 @@ class TicketCommentBase(
if self.parent:
url_name = '_api_v2_ticket_comment_base_sub_thread'
url_name = '_api_ticket_comment_base_sub_thread'
else:
url_name = '_api_v2_ticket_comment_base_sub'
url_name = '_api_ticket_comment_base_sub'
if request:

View File

@ -73,7 +73,7 @@ class ModelSerializer(
url_dict: dict = {
'_self': item.get_url( request = self._context['view'].request ),
'comments': reverse('v2:_api_v2_ticket_comment_base-list', request=self._context['view'].request, kwargs={'ticket_id': item.pk}),
'comments': reverse('v2:_api_ticket_comment_base-list', request=self._context['view'].request, kwargs={'ticket_id': item.pk}),
'linked_items': reverse("v2:_api_v2_ticket_linked_item-list", request=self._context['view'].request, kwargs={'ticket_id': item.pk}),
}

View File

@ -92,7 +92,7 @@ class ModelSerializer(
urls.update({
'threads': reverse(
'API:_api_v2_ticket_comment_base_sub_thread-list',
'API:_api_ticket_comment_base_sub_thread-list',
request = self._context['view'].request,
kwargs={
'ticket_id': ticket_id,

View File

@ -1,3 +1,4 @@
import pytest
import django
from django.contrib.auth.models import Permission
@ -16,6 +17,7 @@ User = django.contrib.auth.get_user_model()
@pytest.mark.model_ticketbase
class MetadataTestCases(
MetadataAttributesFunctional,
):
@ -241,7 +243,7 @@ class TicketBaseMetadataInheritedCases(
kwargs_create_item_diff_org: dict = {}
url_name = '_api_v2_ticket_sub'
url_name = '_api_ticket_sub'
@classmethod
@ -268,7 +270,7 @@ class TicketBaseMetadataInheritedCases(
super().setUpTestData()
@pytest.mark.module_core
class TicketBaseMetadataTest(
MetadataTestCases,
TestCase,

View File

@ -4,6 +4,7 @@ from core.tests.functional.slash_commands.test_slash_command_related import Slas
@pytest.mark.model_ticketbase
class TicketBaseModelTestCases(
SlashCommandsTicketInheritedTestCases
):
@ -45,7 +46,7 @@ class TicketBaseModelInheritedTestCases(
pass
@pytest.mark.module_core
class TicketBaseModelPyTest(
TicketBaseModelTestCases
):

View File

@ -6,6 +6,7 @@ from api.tests.functional.test_functional_api_permissions import (
@pytest.mark.model_ticketbase
class PermissionsAPITestCases(
APIPermissionsInheritedCases,
):
@ -124,7 +125,7 @@ class TicketBasePermissionsAPIInheritedCases(
pass
@pytest.mark.module_core
class TicketBasePermissionsAPIPyTest(
PermissionsAPITestCases,
):

View File

@ -19,6 +19,7 @@ User = django.contrib.auth.get_user_model()
@pytest.mark.model_ticketbase
class TicketBaseSerializerTestCases:
@ -1087,7 +1088,7 @@ class TicketBaseSerializerInheritedCases(
"""Valid data used by serializer to create object"""
@pytest.mark.module_core
class TicketBaseSerializerPyTest(
TicketBaseSerializerTestCases,
):

View File

@ -1,3 +1,4 @@
import pytest
import django
from django.contrib.auth.models import Permission
@ -16,6 +17,7 @@ User = django.contrib.auth.get_user_model()
@pytest.mark.model_ticketbase
class ViewSetBase:
add_data: dict = {
@ -248,7 +250,7 @@ class TicketBaseViewSetInheritedCases(
# kwargs_create_item_diff_org: dict = {}
url_name = '_api_v2_ticket_sub'
url_name = '_api_ticket_sub'
@classmethod
@ -275,7 +277,7 @@ class TicketBaseViewSetInheritedCases(
super().setUpTestData()
@pytest.mark.module_core
class TicketBaseViewSetTest(
ViewSetTestCases,
TestCase,

View File

@ -1,14 +1,23 @@
import pytest
from core.models.ticket_base import TicketBase
@pytest.fixture( scope = 'class')
def model(request):
def model(request, model_ticketbase):
request.cls.model = TicketBase
request.cls.model = model_ticketbase
yield request.cls.model
del request.cls.model
@pytest.fixture( scope = 'class', autouse = True)
def model_kwargs(request, kwargs_ticketbase):
request.cls.kwargs_create_item = kwargs_ticketbase.copy()
yield kwargs_ticketbase.copy()
if hasattr(request.cls, 'kwargs_create_item'):
del request.cls.kwargs_create_item

View File

@ -15,6 +15,7 @@ from project_management.models.project_milestone import Project, ProjectMileston
@pytest.mark.model_ticketbase
class APITestCases(
APIFieldsInheritedCases,
):
@ -410,10 +411,10 @@ class TicketBaseAPIInheritedCases(
model = None
url_ns_name = '_api_v2_ticket_sub'
url_ns_name = '_api_ticket_sub'
@pytest.mark.module_core
class TicketBaseAPIPyTest(
APITestCases,
):

View File

@ -1,3 +1,4 @@
import pytest
from django.test import Client, TestCase
from rest_framework.reverse import reverse
@ -13,6 +14,7 @@ from api.tests.unit.test_unit_common_viewset import SubModelViewSetInheritedCase
@pytest.mark.model_ticketbase
class ViewsetTestCases(
SubModelViewSetInheritedCases,
):
@ -86,10 +88,10 @@ class TicketBaseViewsetInheritedCases(
model: str = None
"""name of the model to test"""
route_name = 'v2:_api_v2_ticket_sub'
route_name = 'v2:_api_ticket_sub'
@pytest.mark.module_core
class TicketBaseViewsetTest(
ViewsetTestCases,
TestCase,

View File

@ -168,7 +168,7 @@ class TicketCommentBaseAPITestCases(
**valid_data
)
url_ns_name = '_api_v2_ticket_comment_base_sub_thread'
url_ns_name = '_api_ticket_comment_base_sub_thread'
request.cls.url_two = reverse(
'v2:' + url_ns_name + '-detail',
@ -353,7 +353,7 @@ class TicketCommentBaseAPITestCases(
url_ns_name = '_api_v2_ticket_comment_base'
url_ns_name = '_api_ticket_comment_base'
"""Url namespace (optional, if not required) and url name"""
@ -366,7 +366,7 @@ class TicketCommentBaseAPIInheritedCases(
model = None
url_ns_name = '_api_v2_ticket_comment_base_sub'
url_ns_name = '_api_ticket_comment_base_sub'

View File

@ -109,7 +109,7 @@ class TicketCommentBaseViewsetInheritedCases(
model: str = None
"""name of the model to test"""
route_name = 'v2:_api_v2_ticket_comment_base_sub'
route_name = 'v2:_api_ticket_comment_base_sub'
@ -120,6 +120,6 @@ class TicketCommentBaseViewsetTest(
kwargs = {}
route_name = 'v2:_api_v2_ticket_comment_base'
route_name = 'v2:_api_ticket_comment_base'
viewset = NoDocsViewSet

View File

@ -49,7 +49,7 @@ router.register(
router.register(
prefix=f'ticket/(?P<ticket_model>[{ticket_type_names}]+)', viewset = ticket.ViewSet,
feature_flag = '2025-00006', basename = '_api_v2_ticket_sub'
feature_flag = '2025-00006', basename = '_api_ticket_sub'
)
router.register(
prefix = 'ticket', viewset = ticket.NoDocsViewSet,
@ -57,12 +57,12 @@ router.register(
)
router.register(
prefix = 'ticket/(?P<ticket_id>[0-9]+)/comment', viewset = ticket_comment.NoDocsViewSet,
feature_flag = '2025-00006', basename = '_api_v2_ticket_comment_base'
feature_flag = '2025-00006', basename = '_api_ticket_comment_base'
)
router.register(
prefix = 'ticket/(?P<ticket_id>[0-9]+)/comment/(?P<parent_id>[0-9]+)/threads',
viewset = ticket_comment.ViewSet,
feature_flag = '2025-00006', basename = '_api_v2_ticket_comment_base_thread'
feature_flag = '2025-00006', basename = '_api_ticket_comment_base_thread'
)
router.register(
prefix = 'ticket/(?P<ticket_id>[0-9]+)/comments', viewset = ticket_comment_depreciated.ViewSet,
@ -84,13 +84,13 @@ router.register(
router.register(
prefix=f'ticket/(?P<ticket_id>[0-9]+)/(?P<ticket_comment_model>[{ticket_comment_names}]+)',
viewset = ticket_comment.ViewSet,
feature_flag = '2025-00006', basename = '_api_v2_ticket_comment_base_sub'
feature_flag = '2025-00006', basename = '_api_ticket_comment_base_sub'
)
router.register(
prefix=f'ticket/(?P<ticket_id>[0-9]+)/(?P<ticket_comment_model>[{ticket_comment_names} \
]+)/(?P<parent_id>[0-9]+)/threads',
viewset = ticket_comment.ViewSet,
feature_flag = '2025-00006', basename = '_api_v2_ticket_comment_base_sub_thread'
feature_flag = '2025-00006', basename = '_api_ticket_comment_base_sub_thread'
)
router.register(
prefix = '(?P<item_class>[a-z_]+)/(?P<item_id>[0-9]+)/item_ticket',

View File

@ -257,7 +257,7 @@ class ViewSet( SubModelViewSet ):
):
self.back_url = reverse(
viewname = '_api_v2_ticket_sub-list',
viewname = '_api_ticket_sub-list',
request = self.request,
kwargs = {
'ticket_model': self.kwargs[self.model_kwarg],

View File

@ -95,8 +95,8 @@ CREATE TABLE IF NOT EXISTS "devops_git_group_history" ("modelhistory_ptr_id" int
CREATE TABLE IF NOT EXISTS "devops_github_repository_notes" ("modelnotes_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "core_model_notes" ("id") DEFERRABLE INITIALLY DEFERRED, "model_id" integer NOT NULL REFERENCES "devops_githubrepository" ("gitrepository_ptr_id") DEFERRABLE INITIALLY DEFERRED);
CREATE TABLE IF NOT EXISTS "devops_gitlab_repository_notes" ("modelnotes_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "core_model_notes" ("id") DEFERRABLE INITIALLY DEFERRED, "model_id" integer NOT NULL REFERENCES "devops_gitlabrepository" ("gitrepository_ptr_id") DEFERRABLE INITIALLY DEFERRED);
CREATE TABLE IF NOT EXISTS "devops_git_group_notes" ("modelnotes_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "core_model_notes" ("id") DEFERRABLE INITIALLY DEFERRED, "model_id" integer NOT NULL REFERENCES "devops_gitgroup" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE TABLE IF NOT EXISTS "access_organization_notes" ("modelnotes_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "core_model_notes" ("id") DEFERRABLE INITIALLY DEFERRED, "model_id" integer NOT NULL REFERENCES "access_tenant" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE TABLE IF NOT EXISTS "access_organization_history" ("modelhistory_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "core_model_history" ("id") DEFERRABLE INITIALLY DEFERRED, "model_id" integer NOT NULL REFERENCES "access_tenant" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE TABLE IF NOT EXISTS "access_organization_notes" ("modelnotes_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "core_model_notes" ("id") DEFERRABLE INITIALLY DEFERRED, "model_id" integer NOT NULL REFERENCES "access_tenant" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE TABLE IF NOT EXISTS "access_company" ("entity_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "access_entity" ("id") DEFERRABLE INITIALLY DEFERRED, "name" varchar(80) NOT NULL);
CREATE TABLE IF NOT EXISTS "access_person" ("entity_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "access_entity" ("id") DEFERRABLE INITIALLY DEFERRED, "f_name" varchar(64) NOT NULL, "l_name" varchar(64) NOT NULL, "dob" date NULL, "m_name" varchar(100) NULL);
CREATE TABLE IF NOT EXISTS "core_ticketcommentaction" ("ticketcommentbase_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "core_ticketcommentbase" ("id") DEFERRABLE INITIALLY DEFERRED);
@ -239,7 +239,7 @@ CREATE TABLE IF NOT EXISTS "social_auth_nonce" ("id" integer NOT NULL PRIMARY KE
CREATE TABLE IF NOT EXISTS "social_auth_usersocialauth" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "provider" varchar(32) NOT NULL, "uid" varchar(255) NOT NULL, "user_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED, "created" datetime NOT NULL, "modified" datetime NOT NULL, "extra_data" text NOT NULL CHECK ((JSON_VALID("extra_data") OR "extra_data" IS NULL)));
CREATE TABLE IF NOT EXISTS "social_auth_partial" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "token" varchar(32) NOT NULL, "next_step" smallint unsigned NOT NULL CHECK ("next_step" >= 0), "backend" varchar(32) NOT NULL, "timestamp" datetime NOT NULL, "data" text NOT NULL CHECK ((JSON_VALID("data") OR "data" IS NULL)));
DELETE FROM sqlite_sequence;
INSERT INTO sqlite_sequence VALUES('django_migrations',227);
INSERT INTO sqlite_sequence VALUES('django_migrations',229);
INSERT INTO sqlite_sequence VALUES('django_content_type',218);
INSERT INTO sqlite_sequence VALUES('auth_permission',917);
INSERT INTO sqlite_sequence VALUES('auth_group',0);

View File

@ -136,11 +136,6 @@ class OperatingSystem(
return self.name
def get_organization(self):
return self.organization
class OperatingSystemVersion(
CenturionModel

View File

@ -274,9 +274,6 @@ class Software(
self.organization = app_settings.global_organization
def get_organization(self):
return self.organization
class SoftwareVersion(
CenturionModel

View File

@ -276,10 +276,6 @@ class Cluster(
]
def get_organization(self):
return self.organization
@property
def rendered_config(self):

View File

@ -368,7 +368,3 @@ class Service(
config.update(self.config)
return config
def get_organization(self):
return self.organization

View File

@ -12,6 +12,8 @@ class SLMTicket(
Base Ticket Type for tickets that require Servie Level Management.
"""
_is_submodel = True
class Meta:

View File

@ -263,6 +263,16 @@ from .model_softwareversion import (
model_softwareversion,
)
from .model_ticketbase import (
kwargs_ticketbase,
model_ticketbase,
)
from .model_ticketcommentbase import (
kwargs_ticketcommentbase,
model_ticketcommentbase,
)
from .model_team import (
kwargs_team,
model_team,

43
app/tests/fixtures/model_ticketbase.py vendored Normal file
View File

@ -0,0 +1,43 @@
import datetime
import pytest
from core.models.ticket_base import TicketBase
@pytest.fixture( scope = 'class')
def model_ticketbase(request):
yield TicketBase
@pytest.fixture( scope = 'class')
def kwargs_ticketbase(django_db_blocker, kwargs_centurionmodel,
model_user, kwargs_user, model_ticketbase
):
random_str = str(datetime.datetime.now(tz=datetime.timezone.utc))
random_str = str(random_str).replace(
' ', '').replace(':', '').replace('+', '').replace('.', '')
with django_db_blocker.unblock():
user = model_user.objects.create( **kwargs_user )
kwargs = kwargs_centurionmodel.copy()
del kwargs['model_notes']
kwargs = {
**kwargs,
'external_system': model_ticketbase.Ticket_ExternalSystem.GITHUB,
'external_ref': int(random_str[len(random_str)-9:]),
'title': 'tb_' + random_str,
'description': 'the body',
'opened_by': user,
}
yield kwargs.copy()
with django_db_blocker.unblock():
user.delete()

View File

@ -0,0 +1,41 @@
import datetime
import pytest
from core.models.ticket_comment_base import TicketCommentBase
@pytest.fixture( scope = 'class')
def model_ticketcommentbase(request):
yield TicketCommentBase
@pytest.fixture( scope = 'class')
def kwargs_ticketcommentbase(django_db_blocker, kwargs_centurionmodel,
model_person, kwargs_person, model_ticketcommentbase
):
random_str = str(datetime.datetime.now(tz=datetime.timezone.utc))
random_str = str(random_str).replace(
' ', '').replace(':', '').replace('+', '').replace('.', '')
with django_db_blocker.unblock():
person = model_person.objects.create( **kwargs_person )
kwargs = kwargs_centurionmodel.copy()
del kwargs['model_notes']
kwargs = {
**kwargs,
'body': 'a comment body',
'comment_type': model_ticketcommentbase._meta.sub_model_type,
'user': person,
}
yield kwargs.copy()
with django_db_blocker.unblock():
person.delete()

View File

@ -1143,6 +1143,7 @@ markers = [
"model_softwarecategory: Selects tests for model Software Category.",
"model_softwareenablefeatureflag: Selects tests for model Software Enabled Feature Flag.",
"model_softwareversion: Selects tests for model Software Version.",
"model_ticketbase: Selects tests for model Ticket Base.",
"model_ticketcategory: Select all ticket category tests.",
"model_ticketcommentcategory: Select all ticket comment category tests.",
"models: Selects all models tests.",