Skip to content

Commit e41ed7f

Browse files
authored
Merge pull request #805 from OpenSPP/ken/refactor_unlink_function
[chore] refactor function for clarity
2 parents 1684502 + 095d03e commit e41ed7f

File tree

3 files changed

+93
-7
lines changed

3 files changed

+93
-7
lines changed

spp_farmer_registry_base/models/group_membership.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,22 @@ class G2PGroupMembership(models.Model):
88
individual_gender = fields.Many2one("gender.type", related="individual.gender", readonly=True)
99

1010
def unlink(self):
11-
for rec in self:
12-
group_id = rec.group
13-
res = super(G2PGroupMembership, rec).unlink()
14-
if self.env.context.get("skip_head_check"):
15-
return res
11+
# Skip head check if specified in context
12+
if self.env.context.get("skip_head_check"):
13+
return super().unlink()
14+
15+
# Group records by their group to check head members
16+
groups_to_check = self.mapped("group")
17+
18+
# Perform the unlink operation
19+
result = super().unlink()
20+
21+
# Check if any group lost its head member
22+
for group in groups_to_check:
1623
if (
1724
self.env.ref("g2p_registry_membership.group_membership_kind_head").id
18-
not in group_id.group_membership_ids.mapped("kind").ids
25+
not in group.group_membership_ids.mapped("kind").ids
1926
):
2027
raise UserError(_("Farm must have a head member."))
21-
return res
28+
29+
return result
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
from . import test_farm
22
from . import test_farm_season
3+
from . import test_group_membership
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
from odoo.exceptions import UserError
2+
from odoo.tests import tagged
3+
from odoo.tests.common import TransactionCase
4+
5+
6+
@tagged("post_install", "-at_install")
7+
class TestG2PGroupMembership(TransactionCase):
8+
@classmethod
9+
def setUpClass(cls):
10+
super().setUpClass()
11+
# Set context to avoid job queue delay
12+
cls.env = cls.env(
13+
context=dict(
14+
cls.env.context,
15+
test_queue_job_no_delay=True,
16+
)
17+
)
18+
19+
# Create test data
20+
cls.individual_1 = cls.env["res.partner"].create(
21+
{
22+
"name": "Test Individual 1",
23+
"is_group": False,
24+
"is_registrant": True,
25+
}
26+
)
27+
cls.individual_2 = cls.env["res.partner"].create(
28+
{
29+
"name": "Test Individual 2",
30+
"is_group": False,
31+
"is_registrant": True,
32+
}
33+
)
34+
cls.group = cls.env["res.partner"].create(
35+
{
36+
"name": "Test Group",
37+
"is_group": True,
38+
"is_registrant": True,
39+
}
40+
)
41+
42+
# Get the head membership kind
43+
cls.head_kind = cls.env.ref("g2p_registry_membership.group_membership_kind_head")
44+
45+
# Create memberships
46+
cls.membership_1 = cls.env["g2p.group.membership"].create(
47+
{
48+
"group": cls.group.id,
49+
"individual": cls.individual_1.id,
50+
"kind": [(4, cls.head_kind.id)],
51+
}
52+
)
53+
cls.membership_2 = cls.env["g2p.group.membership"].create(
54+
{
55+
"group": cls.group.id,
56+
"individual": cls.individual_2.id,
57+
}
58+
)
59+
60+
def test_01_unlink_non_head_member(self):
61+
"""Test unlink of a non-head member"""
62+
# Should be able to unlink non-head member
63+
self.membership_2.unlink()
64+
self.assertFalse(self.membership_2.exists())
65+
66+
def test_02_unlink_head_member_with_skip_context(self):
67+
"""Test unlink of head member with skip_head_check context"""
68+
# Should be able to unlink head member with skip context
69+
self.membership_1.with_context(skip_head_check=True).unlink()
70+
self.assertFalse(self.membership_1.exists())
71+
72+
def test_03_unlink_head_member_without_skip_context(self):
73+
"""Test unlink of head member without skip_head_check context"""
74+
# Should raise error when trying to unlink head member
75+
with self.assertRaises(UserError):
76+
self.membership_1.unlink()
77+
self.assertTrue(self.membership_1.exists())

0 commit comments

Comments
 (0)