from psycopg2 import IntegrityError from odoo.tests.common import TransactionCase from odoo.tools import mute_logger class TestPeople(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() cls.student_partner = cls.env["res.partner"].create({"name": "Test Student"}) cls.student = cls.env["mc.student"].create({ "partner_id": cls.student_partner.id, "name": "Test Student", }) cls.guardian_a_partner = cls.env["res.partner"].create({"name": "Guardian A"}) cls.guardian_a = cls.env["mc.guardian"].create({ "partner_id": cls.guardian_a_partner.id, "name": "Guardian A", }) cls.guardian_b_partner = cls.env["res.partner"].create({"name": "Guardian B"}) cls.guardian_b = cls.env["mc.guardian"].create({ "partner_id": cls.guardian_b_partner.id, "name": "Guardian B", }) def test_setting_primary_on_create_unsets_previous(self): Link = self.env["mc.student.guardian"] link_a = Link.create({ "student_id": self.student.id, "guardian_id": self.guardian_a.id, "relationship": "mother", "is_primary": True, }) link_b = Link.create({ "student_id": self.student.id, "guardian_id": self.guardian_b.id, "relationship": "father", "is_primary": True, }) self.assertFalse(link_a.is_primary, "A second primary guardian must unset the first.") self.assertTrue(link_b.is_primary) def test_setting_primary_on_write_unsets_previous(self): Link = self.env["mc.student.guardian"] link_a = Link.create({ "student_id": self.student.id, "guardian_id": self.guardian_a.id, "relationship": "mother", "is_primary": True, }) link_b = Link.create({ "student_id": self.student.id, "guardian_id": self.guardian_b.id, "relationship": "father", "is_primary": False, }) link_b.write({"is_primary": True}) self.assertFalse(link_a.is_primary) self.assertTrue(link_b.is_primary) @mute_logger("odoo.sql_db") def test_duplicate_student_guardian_link_rejected(self): Link = self.env["mc.student.guardian"] Link.create({ "student_id": self.student.id, "guardian_id": self.guardian_a.id, "relationship": "mother", }) with self.assertRaises(IntegrityError): with self.cr.savepoint(): Link.create({ "student_id": self.student.id, "guardian_id": self.guardian_a.id, "relationship": "father", }) @mute_logger("odoo.sql_db") def test_partner_cannot_back_two_student_records(self): with self.assertRaises(IntegrityError): with self.cr.savepoint(): self.env["mc.student"].create({ "partner_id": self.student_partner.id, "name": "Duplicate", })