## Testausführung # odoo-bin -d deine_testdatenbank --test-enable --init open_workshop ## oder: # /opt/odoo/odoo/odoo-bin -d hobbyhimmel --test-enable --test-tags /test_res_partner.py --stop-after-init --http-port=8070 --log-level=debug # /opt/odoo/odoo/odoo-bin -d hobbyhimmel --test-enable --stop-after-init --test-tags open_workshop --log-level=debug --update open_workshop --http-port=8070 from odoo.tests.common import TransactionCase from odoo.tests import tagged import logging _logger = logging.getLogger(__name__) @tagged('post_install', 'open_workshop', 'vvow') class TestResPartnerVvowFields(TransactionCase): def setUp(self): super().setUp() self.partner_model = self.env['res.partner'] self.user_model = self.env['ows.user'] def test_create_with_vvow_fields_creates_user(self): partner = self.partner_model.create({ 'name': 'Max Test', 'vvow_birthday': '1990-01-01', 'vvow_rfid_card': 'ABC12345', 'vvow_security_briefing': True, 'vvow_security_id': 'HB-001', }) user = partner.ows_user_id self.assertEqual(len(user), 1) self.assertEqual(user.birthday.isoformat(), '1990-01-01') self.assertEqual(user.rfid_card, 'ABC12345') self.assertTrue(user.security_briefing) self.assertEqual(user.security_id, 'HB-001') # Check that Fassade korrekt ausgerechnet ist self.assertEqual(partner.birthday.isoformat(), '1990-01-01') self.assertEqual(partner.rfid_card, 'ABC12345') self.assertTrue(partner.security_briefing) self.assertEqual(partner.security_id, 'HB-001') def test_write_vvow_fields_updates_user_and_fassade(self): partner = self.partner_model.create({'name': 'Update Tester'}) user = partner.ows_user_id partner.write({ 'vvow_birthday': '1985-12-31', 'vvow_rfid_card': 'NEW123', 'vvow_security_briefing': False, 'vvow_security_id': 'NEU-SEC', }) self.assertEqual(user.birthday.isoformat(), '1985-12-31') self.assertEqual(user.rfid_card, 'NEW123') self.assertFalse(user.security_briefing) self.assertEqual(user.security_id, 'NEU-SEC') # Sicherstellen, dass die berechneten Felder auch aktualisiert wurden self.assertEqual(partner.birthday.isoformat(), '1985-12-31') self.assertEqual(partner.rfid_card, 'NEW123') self.assertFalse(partner.security_briefing) self.assertEqual(partner.security_id, 'NEU-SEC') def test_change_fassade_field_updates_user(self): partner = self.partner_model.create({ 'name': 'Change Fassade', 'vvow_security_briefing': True, }) user = partner.ows_user_id # Ändere security_briefing (die Fassade) partner.write({'security_briefing': False}) # Muss sich im ows.user widerspiegeln self.assertFalse(user.security_briefing) # vvow-Sync: vvow bleibt wie gehabt (wird nicht überschrieben) self.assertTrue(partner.vvow_security_briefing) def test_change_and_read_consistency(self): partner = self.partner_model.create({ 'name': 'Read-Change-Test', 'vvow_security_briefing': True, }) user = partner.ows_user_id # Ändere security_briefing über Fassade partner.write({'security_briefing': False}) self.assertFalse(user.security_briefing) self.assertFalse(partner.security_briefing) # Lies vvow_* separat aus – sollte weiterhin den ursprünglichen vvow-Wert zeigen self.assertTrue(partner.vvow_security_briefing) # Ändere vvow_* erneut – jetzt sollte alles wieder gesetzt werden partner.write({'vvow_security_briefing': True}) self.assertTrue(partner.security_briefing) self.assertTrue(user.security_briefing) def test_inverse_does_not_clear_unrelated_fields(self): _logger.info("🔍 Starte Test für Feldsynchronisation") # Schritt 1: Partner mit vvow_* Feldern erzeugen → soll automatisch ows.user erzeugen partner = self.partner_model.create({ 'name': 'Unabhängigkeits-Test', 'vvow_birthday': '1995-05-05', 'vvow_rfid_card': 'ABC999', 'vvow_security_briefing': True, 'vvow_security_id': 'SEC-XYZ', }) _logger.debug("✅ Partner angelegt: %s", partner.name) # Validierung: es wurde ein ows.user erzeugt self.assertEqual(len(partner.ows_user_id), 1, "Kein ows.user erzeugt") user = partner.ows_user_id _logger.debug("👤 ows.user: %s", user.read(['birthday', 'security_id'])) # Sicherstellen, dass alle Felder korrekt gesetzt wurden self.assertEqual(user.birthday.isoformat(), '1995-05-05') self.assertEqual(user.rfid_card, 'ABC999') self.assertTrue(user.security_briefing) self.assertEqual(user.security_id, 'SEC-XYZ') # Schritt 2: Nur ein Feld über die Fassade ändern (inverse wird getriggert) partner.write({'security_briefing': False}) _logger.info("✏️ security_briefing auf False gesetzt") # Schritt 3: DB-Cache leeren user.flush() user.invalidate_cache() _logger.debug("📦 user nach write: %s", user.read(['birthday', 'security_id'])) # Schritt 4: Sicherstellen, dass die anderen Felder NICHT gelöscht wurden self.assertEqual(user.birthday.isoformat(), '1995-05-05') self.assertEqual(user.rfid_card, 'ABC999') self.assertEqual(user.security_id, 'SEC-XYZ') self.assertFalse(user.security_briefing)