Merge pull request #870 from nofusscomputing/refactor-ticket-inheritence
This commit is contained in:
@ -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",
|
||||
),
|
||||
),
|
||||
]
|
@ -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",
|
||||
),
|
||||
),
|
||||
]
|
@ -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",
|
||||
),
|
||||
),
|
||||
]
|
@ -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:
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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}),
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
):
|
||||
|
@ -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,
|
||||
):
|
||||
|
@ -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,
|
||||
):
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
):
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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,
|
||||
|
@ -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'
|
||||
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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',
|
||||
|
@ -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],
|
||||
|
@ -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);
|
||||
|
@ -136,11 +136,6 @@ class OperatingSystem(
|
||||
return self.name
|
||||
|
||||
|
||||
def get_organization(self):
|
||||
|
||||
return self.organization
|
||||
|
||||
|
||||
|
||||
class OperatingSystemVersion(
|
||||
CenturionModel
|
||||
|
@ -274,9 +274,6 @@ class Software(
|
||||
self.organization = app_settings.global_organization
|
||||
|
||||
|
||||
def get_organization(self):
|
||||
return self.organization
|
||||
|
||||
|
||||
class SoftwareVersion(
|
||||
CenturionModel
|
||||
|
@ -276,10 +276,6 @@ class Cluster(
|
||||
]
|
||||
|
||||
|
||||
def get_organization(self):
|
||||
return self.organization
|
||||
|
||||
|
||||
@property
|
||||
def rendered_config(self):
|
||||
|
||||
|
@ -368,7 +368,3 @@ class Service(
|
||||
config.update(self.config)
|
||||
|
||||
return config
|
||||
|
||||
|
||||
def get_organization(self):
|
||||
return self.organization
|
||||
|
@ -12,6 +12,8 @@ class SLMTicket(
|
||||
Base Ticket Type for tickets that require Servie Level Management.
|
||||
"""
|
||||
|
||||
_is_submodel = True
|
||||
|
||||
|
||||
class Meta:
|
||||
|
||||
|
10
app/tests/fixtures/__init__.py
vendored
10
app/tests/fixtures/__init__.py
vendored
@ -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
43
app/tests/fixtures/model_ticketbase.py
vendored
Normal 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()
|
41
app/tests/fixtures/model_ticketcommentbase.py
vendored
Normal file
41
app/tests/fixtures/model_ticketcommentbase.py
vendored
Normal 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()
|
@ -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.",
|
||||
|
Reference in New Issue
Block a user