All checks were successful
odoo-restore-open_workshop-install / run-odoo-backup-in-docker (push) Successful in 4m40s
139 lines
5.6 KiB
Python
139 lines
5.6 KiB
Python
## 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)
|