from odoo.exceptions import ValidationError from odoo.tests.common import TransactionCase, tagged @tagged('post_install', '-at_install') class TestBenefits(TransactionCase): def setUp(self): super().setUp() self.tier = self.env['community.membership.tier'].create({ 'name': 'Individual', 'code': 'BEN-IND', 'price': 50.0, 'period': 'annual', }) self.other_tier = self.env['community.membership.tier'].create({ 'name': 'Student', 'code': 'BEN-STU', 'price': 20.0, 'period': 'annual', }) self.member = self.env['res.partner'].create({ 'name': 'Benefit Member', 'membership_tier_id': self.tier.id, }) self.member.action_activate_membership() vendor_partner = self.env['res.partner'].create({'name': 'Local Cafe'}) self.centre = self.env['community.benefit.partner'].create({ 'partner_id': vendor_partner.id, 'category': 'food', }) self.benefit = self.env['community.benefit'].create({ 'name': '10% off coffee', 'benefit_partner_id': self.centre.id, 'tier_ids': [(6, 0, [self.tier.id])], 'discount_type': 'percent', 'value': 10.0, }) def test_entitlement_resolves_by_tier(self): self.assertTrue(self.benefit.is_entitled(self.member)) other_member = self.env['res.partner'].create({ 'name': 'Other Member', 'membership_tier_id': self.other_tier.id, }) other_member.action_activate_membership() self.assertFalse(self.benefit.is_entitled(other_member), "Wrong tier should not be entitled") def test_redemption_logs_for_active_member(self): redemption = self.env['community.benefit.redemption'].create({ 'member_id': self.member.id, 'benefit_id': self.benefit.id, }) self.assertTrue(redemption) def test_redemption_blocked_for_inactive_member(self): inactive_member = self.env['res.partner'].create({ 'name': 'Inactive Member', 'membership_tier_id': self.tier.id, }) # Never activated - membership_state stays 'none'. with self.assertRaises(ValidationError): self.env['community.benefit.redemption'].create({ 'member_id': inactive_member.id, 'benefit_id': self.benefit.id, }) def test_redemption_blocked_for_wrong_tier(self): other_member = self.env['res.partner'].create({ 'name': 'Wrong Tier Member', 'membership_tier_id': self.other_tier.id, }) other_member.action_activate_membership() with self.assertRaises(ValidationError): self.env['community.benefit.redemption'].create({ 'member_id': other_member.id, 'benefit_id': self.benefit.id, })