Initialize clean CSR inventory repository

This commit is contained in:
DenisToxic
2026-09-29 08:43:05 +02:00
commit 059f386c60
107 changed files with 9639 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
import json
from pathlib import Path
import tempfile
from django.contrib.auth.models import User
from django.core.management import CommandError
from django.test import TestCase
from .management.commands.import_sqlite_export import Command
from .models import ChoiceValue, Device, NumberSequence, UserProfile
class MigrationImportTests(TestCase):
def setUp(self):
self.temporary = tempfile.TemporaryDirectory()
self.addCleanup(self.temporary.cleanup)
self.fixture = Path(self.temporary.name) / "export.json"
def write_fixture(self, objects):
self.fixture.write_text(json.dumps(objects), encoding="utf-8")
def test_import_accepts_migration_defaults_and_preserves_ids_and_roles(self):
# Fresh databases have these rows from migration 0003. Fixture IDs differ.
ChoiceValue.objects.all().delete()
for order, label in enumerate(("Bildschirm", "Drucker"), 3):
ChoiceValue.objects.create(kind="device_type", label=label, sort_order=order)
stamp = "2026-09-23T10:00:00Z"
self.write_fixture([
{"model": "auth.user", "pk": 50, "fields": {"username": "migrated", "password": "!", "is_active": True}},
{"model": "inventory.userprofile", "pk": 60, "fields": {"user": ["migrated"], "role": "EDITOR", "created_at": stamp, "updated_at": stamp}},
{"model": "inventory.choicevalue", "pk": 70, "fields": {"kind": "status", "label": "Imported", "created_at": stamp, "updated_at": stamp}},
{"model": "inventory.choicevalue", "pk": 80, "fields": {"kind": "device_type", "label": "Bildschirm", "created_at": stamp, "updated_at": stamp}},
{"model": "inventory.device", "pk": 90, "fields": {"number": 2000, "status": 70, "device_type": 80, "created_at": stamp, "updated_at": stamp, "revision": 1}},
])
self.assertEqual(Command().load_export(self.fixture, verbosity=0), 1)
self.assertEqual(User.objects.get(username="migrated").pk, 50)
self.assertEqual(UserProfile.objects.get(user_id=50).role, "EDITOR")
self.assertEqual(Device.objects.get(pk=90).number, 2000)
self.assertEqual(NumberSequence.objects.get(name="device").last_value, 2000)
def test_import_refuses_existing_business_data(self):
user = User.objects.create_user("existing")
self.write_fixture([])
with self.assertRaises(CommandError):
Command().load_export(self.fixture, verbosity=0)
self.assertTrue(User.objects.filter(pk=user.pk).exists())
def test_bad_fixture_rolls_back_default_removal_and_import(self):
before = list(ChoiceValue.objects.values_list("pk", "label"))
self.write_fixture([{"model": "inventory.unknown", "pk": 1, "fields": {}}])
with self.assertRaises(CommandError):
Command().load_export(self.fixture, verbosity=0)
self.assertEqual(list(ChoiceValue.objects.values_list("pk", "label")), before)