Skip to content

Commit 6054f0d

Browse files
committed
[IMP] estate: add unit tests for property business logic
- Introduced new unit tests in the estate module covering key business processes: - Prevent offer creation on sold properties. - Disallow marking properties as sold without an accepted offer. - Ensure garden area and orientation fields reset appropriately when garden is unchecked. -Fix linter issues and apply code review suggestions. - These tests improve the reliability and maintainability of the estate workflow.
1 parent 5fb5928 commit 6054f0d

18 files changed

+154
-101
lines changed

estate/__manifest__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"security/ir.model.access.csv",
1313
"views/estate_property_offer_views.xml",
1414
"views/estate_property_views.xml",
15-
"views/estate_settings_views.xml",
15+
"views/estate_property_types_views.xml",
1616
"views/estate_property_tags_views.xml",
1717
"views/res_users_views.xml",
1818
"views/estate_menus.xml",

estate/demo/estate_offer_demo.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
<field name="price">1500000</field>
66
<field name="validity">14</field>
77
<field name="date_deadline" eval="datetime.now().date() + timedelta(days=14)"/>
8-
98
</record>
109

1110
<record id="estate_offer_azure_2" model="estate.property.offer">
@@ -14,7 +13,6 @@
1413
<field name="price">1500001</field>
1514
<field name="validity">14</field>
1615
<field name="date_deadline" eval="datetime.now().date() + timedelta(days=14)"/>
17-
1816
</record>
1917

2018
<record id="estate_offer_deco" model="estate.property.offer">
@@ -23,7 +21,6 @@
2321
<field name="price">1500002</field>
2422
<field name="validity">14</field>
2523
<field name="date_deadline" eval="datetime.now().date() + timedelta(days=14)"/>
26-
2724
</record>
2825

2926
<function model="estate.property.offer" name="action_accept">
@@ -38,6 +35,3 @@
3835
<value eval="[ref('estate.estate_offer_deco')]"/>
3936
</function>
4037
</odoo>
41-
42-
43-

estate/demo/estate_property_demo.xml

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<odoo>
2-
32
<record id="estate_property_big_villa" model="estate.property">
43
<field name="name">Big Villa</field>
54
<field name="state">new</field>
@@ -51,7 +50,6 @@
5150
<field name="garden_area">50</field>
5251
<field name="garden_orientation">east</field>
5352
<field name="property_type_id" ref="estate.property_type_residential"/>
54-
5553
<field name="offer_id">
5654
<record model="estate.property.offer">
5755
<field name="partner_id" ref="base.res_partner_10"/>
@@ -68,7 +66,7 @@
6866
</field>
6967
</record>
7068

71-
<record id="estate_property_very_samll_house" model="estate.property">
69+
<record id="estate_property_very_samll_house" model="estate.property">
7270
<field name="name">Very Small House</field>
7371
<field name="state">new</field>
7472
<field name="description">A nice and small villa</field>
@@ -84,7 +82,6 @@
8482
<field name="garden_area">100000</field>
8583
<field name="garden_orientation">south</field>
8684
<field name="property_type_id" ref="estate.property_type_residential"/>
87-
8885
<field name="offer_id" eval="[
8986
Command.create({
9087
'partner_id': ref('base.res_partner_12'),
@@ -106,9 +103,4 @@
106103
})
107104
]"/>
108105
</record>
109-
110-
111-
112-
113-
114106
</odoo>

estate/models/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
from . import estate_property_type
55
from . import estate_property_tag
66
from . import estate_property_offer
7-
from . import inherited_model
7+
from . import inherited_res_users

estate/models/estate_property.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ def _onchange_garden(self):
9797

9898
def action_property_sold(self):
9999
for prop in self:
100+
accepted_offer = prop.offer_id.filtered(lambda i : i.status == 'accepted')
101+
if not accepted_offer:
102+
raise ValidationError(_("Cannot mark as sold. No accepted offer found for this property."))
103+
100104
if prop.state == "cancelled":
101105
raise UserError(_("Cancelled properties cannot be sold."))
102106
prop.state = "sold"

estate/models/estate_property_offer.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ def create(self, vals_list):
8585
property_id = vals.get("property_id")
8686

8787
property_rec = self.env["estate.property"].browse(property_id)
88+
89+
if property_rec.state == "sold":
90+
raise exceptions.ValidationError(_("You cannot create an offer for a property that is already sold."))
91+
92+
8893
if property_rec.state == "new":
8994
property_rec.state = "offer_received"
9095

estate/models/inherited_model.py renamed to estate/models/inherited_res_users.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from odoo import models, fields
22

33

4-
class ResUsers(models.Model):
4+
class InheritedResUsers(models.Model):
55
_inherit = "res.users"
66

77
property_ids = fields.One2many(

estate/report/estate_property_report_templates.xml

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
<strong>Status: </strong>
2020
<span t-field="property.state"/>
2121
</div>
22+
<div class="invoice_info"/>
2223
<t t-set="object" t-value="property"/>
2324
<t t-call="estate.report_property_offers_table"/>
2425
</div>
@@ -104,18 +105,12 @@
104105
</template>
105106

106107
<template id="report_property_offers_inherit_invoice" inherit_id="estate.report_property_offers" priority="20">
107-
<xpath expr="//div[hasclass('page')]" position="inside">
108+
<xpath expr="//div[hasclass('invoice_info')]" position="inside">
108109
<t t-if="property.state == 'sold'">
109110
<div class="mt-4">
110-
<h4>Invoice Information</h4>
111-
<p>The invoice has already been creted!!!</p>
111+
<p><strong>The invoice has already been creted!!!</strong></p>
112112
</div>
113113
</t>
114114
</xpath>
115115
</template>
116-
117-
118-
119-
120-
121-
</odoo>
116+
</odoo>

estate/report/estate_property_reports.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,4 @@
2020
<field name="binding_type">report</field>
2121
<field name="print_report_name">'User Properties - %s' % (object.name)</field>
2222
</record>
23-
24-
</odoo>
23+
</odoo>

estate/security/estate_security.xml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
<?xml version="1.0" encoding="utf-8"?>
21
<odoo>
32
<record id="estate_group_user" model="res.groups">
43
<field name="name">Agent</field>
@@ -9,7 +8,6 @@
98
<field name="name">Manager</field>
109
<field name="category_id" ref="base.module_category_real_estate_brokerage"/>
1110
<field name="implied_ids" eval="[(4, ref('estate.estate_group_user'))]"/>
12-
<!-- This group implies (automatically includes) another group’s rights that is Agent.”-->
1311
</record>
1412

1513
<record id = "estate_property_agent_rule" model = "ir.rule">
@@ -18,7 +16,7 @@
1816
<field name="domain_force">['|', ('user_id', '=', False), ('user_id', '=', user.id)]</field>
1917
<field name="groups" eval="[(4, ref('estate.estate_group_user'))]"/>
2018
</record>
21-
19+
2220
<record id="estate_property_manager_rule" model="ir.rule">
2321
<field name="name">Estate: Manager see all properties</field>
2422
<field name="model_id" ref="estate.model_estate_property"/>
@@ -34,5 +32,4 @@
3432
<field name="perm_create" eval="True"/>
3533
<field name="perm_unlink" eval="True"/>
3634
</record>
37-
3835
</odoo>

0 commit comments

Comments
 (0)