Skip to content

Commit 96d8f0b

Browse files
[IMP] test_generic: prevent hard coded dates
- Added test to check if date methods are being called and prevent hard coded dates. - set some lists to const. closes #978 X-original-commit: a53b261 Signed-off-by: Vallaeys Valentin (vava) <[email protected]> Signed-off-by: Abdelrahman Rashed (aras) <[email protected]>
1 parent ae2bd5e commit 96d8f0b

File tree

6 files changed

+51
-22
lines changed

6 files changed

+51
-22
lines changed

bike_leasing/demo/sale_order.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,37 @@
33
<record id="sale_order_44" model="sale.order">
44
<field name="partner_id" ref="res_partner_19"/>
55
<field name="user_id" ref="base.user_admin"/>
6-
<field name="x_auto_post_until">2025-12-31</field>
6+
<field name="x_auto_post_until" eval="DateTime.today() + relativedelta(months=6)"/>
77
<field name="pricelist_id" ref="product_pricelist_2"/>
88
</record>
99
<record id="sale_order_45" model="sale.order">
1010
<field name="partner_id" ref="res_partner_16"/>
1111
<field name="user_id" ref="base.user_admin"/>
12-
<field name="x_auto_post_until">2026-04-01</field>
12+
<field name="x_auto_post_until" eval="DateTime.today() + relativedelta(years=1)"/>
1313
<field name="pricelist_id" ref="product_pricelist_3"/>
1414
</record>
1515
<record id="sale_order_46" model="sale.order">
1616
<field name="partner_id" ref="res_partner_15"/>
1717
<field name="user_id" ref="base.user_admin"/>
18-
<field name="x_auto_post_until">2028-12-31</field>
18+
<field name="x_auto_post_until" eval="DateTime.today() + relativedelta(years=3)"/>
1919
<field name="pricelist_id" ref="product_pricelist_2"/>
2020
</record>
2121
<record id="sale_order_47" model="sale.order">
2222
<field name="partner_id" ref="res_partner_18"/>
2323
<field name="user_id" ref="base.user_admin"/>
24-
<field name="x_auto_post_until">2024-12-31</field>
24+
<field name="x_auto_post_until" eval="DateTime.today() + relativedelta(months=6)"/>
2525
<field name="pricelist_id" ref="product_pricelist_2"/>
2626
</record>
2727
<record id="sale_order_48" model="sale.order">
2828
<field name="partner_id" ref="res_partner_17"/>
2929
<field name="user_id" ref="base.user_admin"/>
30-
<field name="x_auto_post_until">2025-07-31</field>
30+
<field name="x_auto_post_until" eval="DateTime.today() + relativedelta(months=1)"/>
3131
<field name="pricelist_id" ref="product_pricelist_2"/>
3232
</record>
3333
<record id="sale_order_51" model="sale.order">
3434
<field name="partner_id" ref="res_partner_20"/>
3535
<field name="user_id" ref="base.user_admin"/>
36-
<field name="x_auto_post_until">2025-12-31</field>
36+
<field name="x_auto_post_until" eval="DateTime.today() + relativedelta(months=6)"/>
3737
<field name="pricelist_id" ref="product_pricelist_4"/>
3838
</record>
3939
</odoo>

certification_organism/demo/res_partner.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
<field name="zip">90001</field>
4343
<field name="partner_latitude">37.3373483</field>
4444
<field name="partner_longitude">-121.8855729</field>
45-
<field name="date_localization">2023-08-25</field>
45+
<field name="date_localization" eval="DateTime.today()"/>
4646
</record>
4747
<record id="res_partner_18" model="res.partner">
4848
<field name="name">Emily Davis</field>

electronic_store/demo/pos_order.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<field name="name">Electronic Store/0003</field>
2828
<field name="session_id" ref="pos_session_1"/>
2929
<field name="config_id" ref="pos_config_electronic_store"/>
30-
<field name="shipping_date">2024-06-06</field>
30+
<field name="shipping_date" eval="DateTime.today() + relativedelta(days=2)"/>
3131
<field name="partner_id" ref="res_partner_7"/>
3232
<field name="user_id" ref="base.user_admin"/>
3333
<field name="amount_total">12.42</field>

pharmacy_retail/data/res_partner.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<record id="res_partner_11" model="res.partner">
44
<field name="name">Ranbaxy M Lab Labaxy</field>
55
<field name="image_1920" type="base64" file="pharmacy_retail/static/src/binary/res_partner/11-image_1920"/>
6-
<field name="x_drug_license_date">2026-12-31</field>
6+
<field name="x_drug_license_date" eval="DateTime.today() + relativedelta(years=1)"/>
77
<field name="x_drug_license_number">DL21309329098</field>
88
<field name="x_is_a_manufacturer" eval="True"/>
99
<field name="website">http://ranbaxylabs.com</field>
@@ -13,7 +13,7 @@
1313
<field name="name">Glaxo Smith Kline</field>
1414
<field name="image_1920" type="base64" file="pharmacy_retail/static/src/binary/res_partner/12-image_1920"/>
1515
<field name="phone">+1 919-483-2565</field>
16-
<field name="x_drug_license_date">2029-07-31</field>
16+
<field name="x_drug_license_date" eval="DateTime.today() + relativedelta(years=4)"/>
1717
<field name="x_drug_license_number">DL23908902398</field>
1818
<field name="x_is_a_manufacturer" eval="True"/>
1919
<field name="street">Moore Drive 5</field>
@@ -28,7 +28,7 @@
2828
<field name="name">Biocon</field>
2929
<field name="image_1920" type="base64" file="pharmacy_retail/static/src/binary/res_partner/13-image_1920"/>
3030
<field name="phone">+60 7-560 0000</field>
31-
<field name="x_drug_license_date">2039-09-14</field>
31+
<field name="x_drug_license_date" eval="DateTime.today() + relativedelta(years=14)"/>
3232
<field name="x_drug_license_number">DL-1232321098</field>
3333
<field name="x_is_a_manufacturer" eval="True"/>
3434
<field name="city">Bengaluru</field>
@@ -41,7 +41,7 @@
4141
<record id="res_partner_14" model="res.partner">
4242
<field name="name">Intas Pharmaceuticals</field>
4343
<field name="image_1920" type="base64" file="pharmacy_retail/static/src/binary/res_partner/14-image_1920"/>
44-
<field name="x_drug_license_date">2029-08-31</field>
44+
<field name="x_drug_license_date" eval="DateTime.today() + relativedelta(years=4)"/>
4545
<field name="x_drug_license_number">DL093209230990</field>
4646
<field name="x_is_a_manufacturer" eval="True"/>
4747
<field name="city">Ahmedabad</field>
@@ -53,7 +53,7 @@
5353
<record id="res_partner_15" model="res.partner">
5454
<field name="name">MedDay Pharma</field>
5555
<field name="image_1920" type="base64" file="pharmacy_retail/static/src/binary/res_partner/15-image_1920"/>
56-
<field name="x_drug_license_date">2033-12-30</field>
56+
<field name="x_drug_license_date" eval="DateTime.today() + relativedelta(years=8)"/>
5757
<field name="x_drug_license_number">DL232112321</field>
5858
<field name="x_is_a_manufacturer" eval="True"/>
5959
<field name="city">Paris</field>
@@ -65,7 +65,7 @@
6565
<field name="name">Himalaya Herbal Healthcare</field>
6666
<field name="image_1920" type="base64" file="pharmacy_retail/static/src/binary/res_partner/16-image_1920"/>
6767
<field name="phone">+1 713-863-1622</field>
68-
<field name="x_drug_license_date">2035-10-31</field>
68+
<field name="x_drug_license_date" eval="DateTime.today() + relativedelta(years=10)"/>
6969
<field name="x_drug_license_number">DL239080923098</field>
7070
<field name="x_is_a_manufacturer" eval="True"/>
7171
<field name="street">Gillingham Lane 1101</field>

real_estate/demo/res_partner.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@
128128
<field name="city">Ramillies</field>
129129
<field name="email">[email protected]</field>
130130
<field name="company_id" ref="base.main_company"/>
131-
<field name="x_last_notification">2025-04-24 09:18:31</field>
131+
<field name="x_last_notification" eval="DateTime.today()"/>
132132
<field name="x_region_ids" eval="[(6, 0, [ref('product_attribute_value_7')])]"/>
133133
<field name="x_max_price">1000000</field>
134134
</record>

tests/test_generic/tests/test_xml.py

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
"web_editor.assets",
7373
]
7474

75-
models_with_user_id = [
75+
MODELS_WITH_USER_ID = [
7676
'crm.lead',
7777
'event.event',
7878
'knowledge.article.favorite',
@@ -142,6 +142,7 @@ def _check_files_in_path(self, module):
142142
self._check_static_files_usage_in_xml(tree, in_use_files)
143143
self._check_fields(tree, file_name)
144144
self._check_change_theme_method(tree, file_name)
145+
self._check_dates_are_relative(tree, file_name)
145146
if root.split('/')[-1] == 'data':
146147
self._check_view_active(tree, file_name)
147148
self._check_is_published_false(tree, file_name)
@@ -207,14 +208,14 @@ def _check_manifest(self, s, need_studio, escape_studio_test):
207208
_logger.warning("'web_studio' should not be in the dependencies.")
208209

209210
def _check_studio(self, root, file_name):
210-
models_for_studio = [
211+
MODELS_FOR_STUDIO = [
211212
"ir.actions.act_window",
212213
"ir.actions.server",
213214
"ir.model",
214215
"ir.model.fields",
215216
"ir.ui.menu",
216217
]
217-
for model in models_for_studio:
218+
for model in MODELS_FOR_STUDIO:
218219
if root.xpath(f"//record[@model='{model}']"):
219220
_logger.info("%s found in %s, needs studio", model, file_name)
220221
return True
@@ -227,18 +228,18 @@ def _check_studio(self, root, file_name):
227228
return False
228229

229230
def _check_xml_style(self, s, root, module, file_name):
230-
starts_with = [
231+
STARTS_WITH = [
231232
"<?xml version='1.0' encoding='UTF-8'?>",
232233
"<?xml version='1.0' encoding=\"UTF-8\"?>",
233234
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
234235
"<?xml version=\"1.0\" encoding='UTF-8'?>",
235236
"<?xml version=\"1.0\" encoding=\"utf-8\"?>",
236237
]
237238
first_line = s.split('\n')[0]
238-
if not any(first_line == start_line for start_line in starts_with):
239+
if not any(first_line == start_line for start_line in STARTS_WITH):
239240
_logger.warning(
240241
"XML files should begin with the following line: %s, but %s starts with %s",
241-
starts_with[0],
242+
STARTS_WITH[0],
242243
file_name,
243244
first_line,
244245
)
@@ -442,7 +443,7 @@ def _check_view_active(self, root, file_name):
442443

443444
def _check_user_is_set(self, root, previous_records):
444445
records = previous_records
445-
for model in models_with_user_id:
446+
for model in MODELS_WITH_USER_ID:
446447
for record in root.xpath(f"//record[@model='{model}']"):
447448
record_id = record.get('id')
448449
user_field = record.xpath(".//field[@name='user_id']")
@@ -466,3 +467,31 @@ def _check_change_theme_method(self, root, file_name):
466467
"You should use button_choose_theme instead of _theme_load in %s.",
467468
file_name,
468469
)
470+
471+
def _check_dates_are_relative(self, root, file_name):
472+
RELATIVE_DATES = [
473+
'Time.',
474+
'time.',
475+
]
476+
for record in root.xpath("//record"):
477+
model_name = record.get('model')
478+
if not model_name:
479+
continue
480+
model = self.env.get(model_name)
481+
fields_set_in_record = {
482+
field for field in record.xpath('.//field')
483+
if field.getparent().get('id', False) == record.get('id') # nested record definitions
484+
}
485+
for field in fields_set_in_record:
486+
field_name = field.get('name')
487+
field_type = model._fields.get(field_name).type
488+
if field_type not in ('date', 'datetime'):
489+
continue
490+
field_eval = field.get('eval')
491+
if not field_eval or not any(date in field_eval for date in RELATIVE_DATES):
492+
_logger.warning(
493+
"Date field '%s' in model '%s' is hard coded (file: %s). ",
494+
field_name,
495+
model_name,
496+
file_name,
497+
)

0 commit comments

Comments
 (0)