kopia lustrzana https://github.com/jedie/PyInventory
140 wiersze
5.2 KiB
Python
140 wiersze
5.2 KiB
Python
from bx_django_utils.test_utils.assert_queries import AssertQueries
|
|
from django.db.models import QuerySet
|
|
from django.test import TestCase
|
|
|
|
from inventory.admin import ItemModelAdmin, LocationModelAdmin
|
|
from inventory.models import ItemModel, LocationModel
|
|
from inventory_project.tests.fixtures import get_normal_user
|
|
|
|
|
|
class TreeModelTests(TestCase):
|
|
@classmethod
|
|
def setUpTestData(cls):
|
|
cls.normaluser = get_normal_user()
|
|
|
|
def test_parent_tree_model(self):
|
|
for main_item_no in range(1, 3):
|
|
main_item = ItemModel.objects.create(
|
|
user=self.normaluser,
|
|
name=f'{main_item_no}.',
|
|
)
|
|
main_item.full_clean()
|
|
|
|
for sub_item_no in range(1, 3):
|
|
sub_item = ItemModel.objects.create(
|
|
parent=main_item,
|
|
user=self.normaluser,
|
|
name=f'{main_item_no}.{sub_item_no}.',
|
|
)
|
|
sub_item.full_clean()
|
|
|
|
for sub_sub_item_no in range(1, 3):
|
|
sub_sub_item = ItemModel.objects.create(
|
|
parent=sub_item,
|
|
user=self.normaluser,
|
|
name=f'{main_item_no}.{sub_item_no}.{sub_sub_item_no}.',
|
|
)
|
|
sub_sub_item.full_clean()
|
|
|
|
data = list(ItemModel.objects.values_list('level', 'path_str', 'name'))
|
|
assert data == [
|
|
(1, '1', '1.'),
|
|
(2, '1 0 11', '1.1.'),
|
|
(3, '1 0 11 0 111', '1.1.1.'),
|
|
(3, '1 0 11 0 112', '1.1.2.'),
|
|
(2, '1 0 12', '1.2.'),
|
|
(3, '1 0 12 0 121', '1.2.1.'),
|
|
(3, '1 0 12 0 122', '1.2.2.'),
|
|
(1, '2', '2.'),
|
|
(2, '2 0 21', '2.1.'),
|
|
(3, '2 0 21 0 211', '2.1.1.'),
|
|
(3, '2 0 21 0 212', '2.1.2.'),
|
|
(2, '2 0 22', '2.2.'),
|
|
(3, '2 0 22 0 221', '2.2.1.'),
|
|
(3, '2 0 22 0 222', '2.2.2.'),
|
|
]
|
|
|
|
item_2_1 = ItemModel.objects.get(name='2.1.')
|
|
|
|
related_qs = ItemModel.tree_objects.related_objects(instance=item_2_1)
|
|
data = list(related_qs.values_list('name', flat=True))
|
|
assert data == ['2.', '2.1.', '2.1.1.', '2.1.2.', '2.2.', '2.2.1.', '2.2.2.']
|
|
|
|
item_2_1.name = 'NEW 2.1. Name'
|
|
with AssertQueries() as queries:
|
|
item_2_1.save()
|
|
|
|
data = list(ItemModel.objects.values_list('level', 'path_str', 'name'))
|
|
assert data == [
|
|
(1, '1', '1.'),
|
|
(2, '1 0 11', '1.1.'),
|
|
(3, '1 0 11 0 111', '1.1.1.'),
|
|
(3, '1 0 11 0 112', '1.1.2.'),
|
|
(2, '1 0 12', '1.2.'),
|
|
(3, '1 0 12 0 121', '1.2.1.'),
|
|
(3, '1 0 12 0 122', '1.2.2.'),
|
|
(1, '2', '2.'),
|
|
(2, '2 0 22', '2.2.'),
|
|
(3, '2 0 22 0 221', '2.2.1.'),
|
|
(3, '2 0 22 0 222', '2.2.2.'),
|
|
(2, '2 0 new21name', 'NEW 2.1. Name'),
|
|
(3, '2 0 new21name 0 211', '2.1.1.'),
|
|
(3, '2 0 new21name 0 212', '2.1.2.'),
|
|
]
|
|
|
|
itemmodel_count = 1 # full_clean(): Check if parent exists
|
|
itemmodel_count += 1 # VersionProtectBaseModel: Check version
|
|
itemmodel_count += 1 # VersionProtectBaseModel: Save new version
|
|
itemmodel_count += 1 # Get info for tree update
|
|
itemmodel_count += 1 # Fetch the items to update
|
|
itemmodel_count += 1 # Bulk update save
|
|
|
|
queries.assert_queries(
|
|
table_counts={
|
|
'inventory_itemmodel': itemmodel_count,
|
|
'auth_user': 1, # full_clean(): Check if user exists
|
|
},
|
|
double_tables=False,
|
|
duplicated=True,
|
|
similar=True,
|
|
)
|
|
|
|
def test_related_objects(self):
|
|
item = ItemModel()
|
|
qs = ItemModel.tree_objects.related_objects(instance=item)
|
|
assert isinstance(qs, QuerySet)
|
|
assert qs.query.is_empty() is True
|
|
|
|
def test_parent_tree_model_ordering(self):
|
|
assert LocationModel._meta.ordering == ('path_str',)
|
|
assert LocationModelAdmin.ordering == ('path_str',)
|
|
|
|
assert ItemModel._meta.ordering == ('path_str',)
|
|
assert ItemModelAdmin.ordering == ('path_str',)
|
|
|
|
def create(name, parent=None):
|
|
instance = ItemModel.objects.create(user=self.normaluser, name=name, parent=parent)
|
|
instance.full_clean()
|
|
return instance
|
|
|
|
# Create a "Special" case for the correct ordering:
|
|
# 1. all "PC-1" entries
|
|
# 2. all "PC1640" entries
|
|
#
|
|
# The correct order depends on the seperator, here: " 0 "
|
|
|
|
pc1 = create(name='PC-1')
|
|
pc1640 = create(name='PC1640 SD')
|
|
create(name='FZ-502 Rev A 5.25″ Floppy', parent=pc1)
|
|
create(name='1,44MB / 3.5" Floppy FD-235HF- 3800-U', parent=pc1)
|
|
create(name='PC 1640ECD', parent=pc1640)
|
|
|
|
data = list(ItemModel.objects.values_list('level', 'path_str', 'name'))
|
|
assert data == [
|
|
(1, 'pc1', 'PC-1'),
|
|
(2, 'pc1 0 144mb35floppyfd235hf3800u', '1,44MB / 3.5" Floppy FD-235HF- 3800-U'),
|
|
(2, 'pc1 0 fz502reva525floppy', 'FZ-502 Rev A 5.25″ Floppy'),
|
|
(1, 'pc1640sd', 'PC1640 SD'),
|
|
(2, 'pc1640sd 0 pc1640ecd', 'PC 1640ECD'),
|
|
]
|