feat(models): add property parent_object to models that have a parent

!22
This commit is contained in:
2024-06-10 00:49:19 +09:30
parent 11ec62feb6
commit fe0696fee6
12 changed files with 417 additions and 38 deletions

View File

@ -106,6 +106,13 @@ class Team(Group, TenancyObject, SaveHistory):
modified = AutoLastModifiedField()
@property
def parent_object(self):
""" Fetch the parent object """
return self.organization
def permission_list(self) -> list:
permission_list = []
@ -190,3 +197,10 @@ class TeamUsers(SaveHistory):
user.groups.add(group)
@property
def parent_object(self):
""" Fetch the parent object """
return self.team

View File

@ -0,0 +1,47 @@
import pytest
import unittest
from django.test import TestCase, Client
from access.models import Organization, Team, TeamUsers, Permission
class TeamModel(TestCase):
model = Team
@classmethod
def setUpTestData(self):
""" Setup Test
"""
self.parent_item = Organization.objects.create(name='test_org')
different_organization = Organization.objects.create(name='test_different_organization')
self.item = self.model.objects.create(
organization=self.parent_item,
name = 'teamone'
)
def test_model_has_property_parent_object(self):
""" Check if model contains 'parent_object'
This is a required property for all models that have a parent
"""
assert hasattr(self.model, 'parent_object')
def test_model_property_parent_object_returns_object(self):
""" Check if model contains 'parent_object'
This is a required property for all models that have a parent
"""
assert self.item.parent_object is self.parent_item

View File

@ -0,0 +1,56 @@
import pytest
import unittest
from django.test import TestCase, Client
from django.contrib.auth.models import User
from access.models import Organization, Team, TeamUsers, Permission
class TeamUsersModel(TestCase):
model = TeamUsers
@classmethod
def setUpTestData(self):
""" Setup Test
"""
organization = Organization.objects.create(name='test_org')
different_organization = Organization.objects.create(name='test_different_organization')
self.parent_item = Team.objects.create(
team_name = 'test_team',
organization = organization,
)
team_user = User.objects.create_user(username="test_self.team_user", password="password")
self.item = self.model.objects.create(
team = self.parent_item,
user = team_user
)
def test_model_has_property_parent_object(self):
""" Check if model contains 'parent_object'
This is a required property for all models that have a parent
"""
assert hasattr(self.model, 'parent_object')
def test_model_property_parent_object_returns_object(self):
""" Check if model contains 'parent_object'
This is a required property for all models that have a parent
"""
assert self.item.parent_object == self.parent_item

View File

@ -219,6 +219,14 @@ class ConfigGroupHosts(GroupsCommonFields, SaveHistory):
)
@property
def parent_object(self):
""" Fetch the parent object """
return self.group
class ConfigGroupSoftware(GroupsCommonFields, SaveHistory):
@ -265,3 +273,10 @@ class ConfigGroupSoftware(GroupsCommonFields, SaveHistory):
)
@property
def parent_object(self):
""" Fetch the parent object """
return self.config_group

View File

@ -0,0 +1,63 @@
import pytest
import unittest
from django.test import TestCase
from access.models import Organization
from config_management.models.groups import ConfigGroups, ConfigGroupSoftware
from itam.models.device import DeviceSoftware
from itam.models.software import Software
class ConfigGroupSoftwareModel(TestCase):
model = ConfigGroupSoftware
@classmethod
def setUpTestData(self):
""" Setup Test
"""
organization = Organization.objects.create(name='test_org')
self.parent_item = ConfigGroups.objects.create(
organization=organization,
name = 'group_one'
)
self.software_item = Software.objects.create(
organization=organization,
name = 'softwareone',
)
self.item = self.model.objects.create(
organization = organization,
software = self.software_item,
config_group = self.parent_item,
action = DeviceSoftware.Actions.INSTALL
)
def test_model_has_property_parent_object(self):
""" Check if model contains 'parent_object'
This is a required property for all models that have a parent
"""
assert hasattr(self.model, 'parent_object')
def test_model_property_parent_object_returns_object(self):
""" Check if model contains 'parent_object'
This is a required property for all models that have a parent
"""
assert self.item.parent_object == self.parent_item

View File

@ -94,46 +94,11 @@ class SaveHistory(models.Model):
item_parent_pk = None
item_parent_class = None
if self._meta.model_name == 'deviceoperatingsystem':
item_parent_pk = self.device.pk
item_parent_class = self.device._meta.model_name
if hasattr(self, 'parent_object'):
if self._meta.model_name == 'devicesoftware':
item_parent_pk = self.device.pk
item_parent_class = self.device._meta.model_name
if self._meta.model_name == 'operatingsystemversion':
item_parent_pk = self.operating_system_id
item_parent_class = self.operating_system._meta.model_name
if self._meta.model_name == 'softwareversion':
item_parent_pk = self.software.pk
item_parent_class = self.software._meta.model_name
if self._meta.model_name == 'team':
item_parent_pk = self.organization.pk
item_parent_class = self.organization._meta.model_name
if self._meta.model_name == 'teamusers':
item_parent_pk = self.team.pk
item_parent_class = self.team._meta.model_name
if self._meta.model_name == 'configgrouphosts':
item_parent_pk = self.group.id
item_parent_class = self.group._meta.model_name
if self._meta.model_name == 'configgroupsoftware':
item_parent_pk = self.config_group.id
item_parent_class = self.config_group._meta.model_name
item_parent_pk = self.parent_object.pk
item_parent_class = self.parent_object._meta.model_name
if not before:

View File

@ -212,6 +212,13 @@ class DeviceSoftware(DeviceCommonFields, SaveHistory):
)
@property
def parent_object(self):
""" Fetch the parent object """
return self.device
class DeviceOperatingSystem(DeviceCommonFields, SaveHistory):
@ -247,3 +254,10 @@ class DeviceOperatingSystem(DeviceCommonFields, SaveHistory):
blank = True,
default = None,
)
@property
def parent_object(self):
""" Fetch the parent object """
return self.device

View File

@ -69,6 +69,14 @@ class OperatingSystemVersion(OperatingSystemCommonFields, SaveHistory):
unique = False,
)
@property
def parent_object(self):
""" Fetch the parent object """
return self.operating_system
def __str__(self):
return self.operating_system.name + ' ' + self.name

View File

@ -102,6 +102,14 @@ class SoftwareVersion(SoftwareCommonFields, SaveHistory):
unique = False,
)
@property
def parent_object(self):
""" Fetch the parent object """
return self.software
def __str__(self):
return self.name

View File

@ -0,0 +1,70 @@
import pytest
import unittest
from django.test import TestCase
from access.models import Organization
from config_management.models.groups import ConfigGroups, ConfigGroupSoftware
from itam.models.device import Device, DeviceOperatingSystem
from itam.models.operating_system import OperatingSystem, OperatingSystemVersion
class DeviceOperatingSystemModel(TestCase):
model = DeviceOperatingSystem
@classmethod
def setUpTestData(self):
""" Setup Test
"""
organization = Organization.objects.create(name='test_org')
self.parent_item = Device.objects.create(
organization=organization,
name = 'device_name'
)
os = OperatingSystem.objects.create(
organization=organization,
name = 'os_name'
)
os_version = OperatingSystemVersion.objects.create(
name = "12",
operating_system = os,
)
self.item = self.model.objects.create(
organization = organization,
operating_system_version = os_version,
device = self.parent_item
)
def test_model_has_property_parent_object(self):
""" Check if model contains 'parent_object'
This is a required property for all models that have a parent
"""
assert hasattr(self.model, 'parent_object')
def test_model_property_parent_object_returns_object(self):
""" Check if model contains 'parent_object'
This is a required property for all models that have a parent
"""
assert self.item.parent_object == self.parent_item

View File

@ -0,0 +1,62 @@
import pytest
import unittest
from django.test import TestCase
from access.models import Organization
from config_management.models.groups import ConfigGroups, ConfigGroupSoftware
from itam.models.device import Device, DeviceSoftware
from itam.models.software import Software
class DeviceSoftwareModel(TestCase):
model = DeviceSoftware
@classmethod
def setUpTestData(self):
""" Setup Test
"""
organization = Organization.objects.create(name='test_org')
self.parent_item = Device.objects.create(
organization=organization,
name = 'device_name'
)
self.software_item = Software.objects.create(
organization=organization,
name = 'software_name',
)
self.item = self.model.objects.create(
software = self.software_item,
device = self.parent_item
)
def test_model_has_property_parent_object(self):
""" Check if model contains 'parent_object'
This is a required property for all models that have a parent
"""
assert hasattr(self.model, 'parent_object')
def test_model_property_parent_object_returns_object(self):
""" Check if model contains 'parent_object'
This is a required property for all models that have a parent
"""
assert self.item.parent_object == self.parent_item

View File

@ -0,0 +1,57 @@
import pytest
import unittest
from django.test import TestCase
from access.models import Organization
from config_management.models.groups import ConfigGroups, ConfigGroupSoftware
from itam.models.operating_system import OperatingSystem, OperatingSystemVersion
class OperatingSystemVersionModel(TestCase):
model = OperatingSystemVersion
@classmethod
def setUpTestData(self):
""" Setup Test
"""
organization = Organization.objects.create(name='test_org')
self.parent_item = OperatingSystem.objects.create(
organization=organization,
name = 'os_name'
)
self.item = self.model.objects.create(
name = "12",
operating_system = self.parent_item,
)
def test_model_has_property_parent_object(self):
""" Check if model contains 'parent_object'
This is a required property for all models that have a parent
"""
assert hasattr(self.model, 'parent_object')
def test_model_property_parent_object_returns_object(self):
""" Check if model contains 'parent_object'
This is a required property for all models that have a parent
"""
assert self.item.parent_object == self.parent_item