Skip to content

Commit 80cdea1

Browse files
committed
[IMP] Add tests for OLS5000s diagnostics
1 parent bce462f commit 80cdea1

File tree

6 files changed

+155
-159
lines changed

6 files changed

+155
-159
lines changed

server/tests/data/addons/module_for_diagnostics/__manifest__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
'license': 'LGPL-3',
1717
"data": [
1818
"data/bikes.xml",
19-
"data/bike_parts.wheel.csv"
19+
"data/bike_parts.wheel.csv",
20+
"data/file.does.not.exist", # OLS05049
21+
"data/file.invalid", # OLS05050
2022
],
2123
}

server/tests/data/addons/module_for_diagnostics/data/bikes.xml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,48 @@
4848
<menuitem id="whoopla_child" action="actie" web_icon="not_allowed">
4949
<menuitem id="whoopla_child^2" parent="whoopla"/> <!-- OLS05012 -->
5050
</menuitem>
51+
<record model="bikes.bike" wrong_attr="bof"/> <!-- OLS05013 -->
52+
<record id="bikes.bike"/> <!-- OLS05014 -->
53+
<record model="bikes.bike"> <!-- OLS05014 -->
54+
<not_field name="name">Nope</not_field> <!-- OLS05015 -->
55+
<field nam="watchouttypo!">Nope</field> <!-- OLS05016 -->
56+
<field name="fine" ref="ref" eval="andeval?">Nope</field> <!-- OLS05017 -->
57+
<field name="fine" type="int">3.14</field> <!-- OLS05018 -->
58+
<field name="fine" type="float">am_i_a_float?</field> <!-- OLS05019 -->
59+
<field name="fine" type="list"><not_value/></field> <!-- OLS05020 -->
60+
<field name="fine" type="base64" file="path/to/file">f</field> <!-- OLS05021 -->
61+
<field name="fine" ref="bike_4">f</field> <!-- OLS05022 -->
62+
<field name="fine" model="bike_4"/> <!-- OLS05023 -->
63+
<field name="fine" use="use"/> <!-- OLS05024 -->
64+
<field name="fine" invalid_attr="invalid_attr"/> <!-- OLS05025 -->
65+
<field name="fine"><not_field/></field> <!-- OLS05026 -->
66+
<field name="fine" type="list"><value type="type" search="s">text</value></field> <!-- OLS05027 -->
67+
<field name="fine" type="list"><value type="type" eval="s">text</value></field> <!-- OLS05028 -->
68+
<field name="fine" type="list"><value eval="eval" type="s"/></field> <!-- OLS05029 -->
69+
<field name="fine" type="list"><value file="s">text</value></field> <!-- OLS05030 -->
70+
<field name="fine" type="list"><value eval="eval" file="s"/></field> <!-- OLS05031 -->
71+
<field name="fine" type="list"><value bla="bla">text</value></field> <!-- OLS05032 -->
72+
<field name="fine" type="list"><value type="type"/></field> <!-- OLS05058 -->
73+
<field name="fine" type="list"><value/></field> <!-- OLS05059 -->
74+
</record>
75+
<delete id="id" /> <!-- OLS05033 -->
76+
<delete model="bikes.bike" id="id" search="search"/> <!-- OLS05034 -->
77+
<delete model="bikes.bike"/> <!-- OLS05035 -->
78+
<function model="model" eval="some_data"/> <!-- OLS05044 -->
79+
<function name="name" eval="some_data"/> <!-- OLS05044 -->
80+
<function name="name" model="model" eval="eval"><value>children values not allowed</value></function> <!-- OLS05045 -->
81+
<function name="name" model="model" invalid_attr="error" eval="some_data"/> <!-- OLS05046 -->
82+
<function name="name" model="model" eval="eval"><function name="name" model="model" eval="some_data"/></function> <!-- OLS05047 -->
83+
<function name="name" model="model"/> <!-- OLS05038 -->
84+
<function name="name" model="model" eval="eval"><invalid_node /></function> <!-- OLS05048 -->
85+
<record id="bike_5" model="bikes.bike"><field name="wheel_id" ref=""/></record> <!-- OLS05039 -->
86+
<record id="bike_6" model="bikes.bike"><field name="wheel_id" ref="module_for_diagnostics.bike_wheel_6.too.many.dots"/></record> <!-- OLS05051 -->
87+
<menuitem id="whoopla" parent="missing_parent"/> <!-- OLS05052 -->
88+
<menuitem id="whoopla" action="missing_action"/> <!-- OLS05053 -->
89+
<menuitem id="whoopla" groups="missing_group1,missing_group2"/> <!-- OLS05054 -->
90+
<record id="bikes.bike" model="module_2.empty_model"/> <!-- OLS05055 -->
91+
<record id="bikes.bike" model="wrong.model"/> <!-- OLS05056 -->
92+
<record id="bikes.bike" model="bikes.bike"><field name="fine"/></record> <!-- OLS05057 -->
93+
<record id="bikes.bike" model="ir.ui.view"><field name="model">module_2.empty_model</field></record> <!-- OLS05055 -->
94+
<record id="bikes.bike" model="ir.ui.view"><field name="model">wrong.model</field></record> <!-- OLS05056 -->
5195
</odoo>

server/tests/data/addons/module_for_diagnostics/data/file.invalid

Whitespace-only changes.

server/tests/diagnostics/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ pub mod ols02002;
1515
pub mod ols03000_1_to_23;
1616
pub mod ols03301;
1717
pub mod ols03302;
18-
pub mod ols0500_00_12;
18+
pub mod ols05000s;
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
use std::path::PathBuf;
2+
3+
use lsp_types::{DiagnosticSeverity, NumberOrString};
4+
use odoo_ls_server::{S, utils::PathSanitizer};
5+
6+
use crate::{setup::setup::*, test_utils::{diag_on_line, verify_diagnostics_against_doc}};
7+
8+
#[test]
9+
fn test_ols05000_2_3_py_file() {
10+
let (mut odoo, config) = setup_server(true);
11+
let mut session = create_init_session(&mut odoo, config);
12+
let test_addons_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests").join("data").join("addons");
13+
let bikes_py_path = test_addons_path.join("module_for_diagnostics").join("models").join("bike_parts_wheel.py");
14+
assert!(PathBuf::from(&bikes_py_path).exists(), "Test file does not exist: {}", bikes_py_path.display());
15+
let bikes_py_diagnostics = get_diagnostics_for_path(&mut session, &bikes_py_path.sanitize());
16+
let doc_diags = get_diagnostics_test_comments(&mut session, &bikes_py_path.sanitize());
17+
verify_diagnostics_against_doc(bikes_py_diagnostics, doc_diags); // OLS05002 & OLS05003 & OLS05051
18+
}
19+
20+
#[test]
21+
fn test_ols05000s_xml_file() {
22+
let (mut odoo, config) = setup_server(true);
23+
let mut session = create_init_session(&mut odoo, config);
24+
let test_addons_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests").join("data").join("addons");
25+
let bikes_xml_path = test_addons_path.join("module_for_diagnostics").join("data").join("bikes.xml");
26+
assert!(PathBuf::from(&bikes_xml_path).exists(), "Test file does not exist: {}", bikes_xml_path.display());
27+
let bikes_xml_diagnostics = get_diagnostics_for_path(&mut session, &bikes_xml_path.sanitize());
28+
let check_xml_diag = |ols_code: &str, line: u32|{
29+
let line_diagnostics = diag_on_line(&bikes_xml_diagnostics, line);
30+
assert_eq!(line_diagnostics.len(), 1);
31+
let diag = &line_diagnostics[0];
32+
assert!(diag.code.is_some());
33+
let code = match &diag.code {
34+
Some(NumberOrString::String(code)) => code,
35+
Some(NumberOrString::Number(num)) => panic!("Unexpected numeric code: {}", num),
36+
None => panic!("Diagnostic code is None"),
37+
};
38+
assert!(code == &S!(ols_code));
39+
assert!(diag.severity.is_some_and(|s| s == DiagnosticSeverity::ERROR));
40+
};
41+
// OLS05001 - Disabled TODO: Re-enable when OLS05001 is implemented
42+
check_xml_diag("OLS05003", 25);
43+
check_xml_diag("OLS05004", 36);
44+
check_xml_diag("OLS05005", 38);
45+
check_xml_diag("OLS05006", 39);
46+
check_xml_diag("OLS05007", 40);
47+
check_xml_diag("OLS05008", 41);
48+
check_xml_diag("OLS05009", 43);
49+
check_xml_diag("OLS05010", 42);
50+
check_xml_diag("OLS05011", 45);
51+
check_xml_diag("OLS05012", 48);
52+
check_xml_diag("OLS05013", 50);
53+
check_xml_diag("OLS05014", 51);
54+
check_xml_diag("OLS05015", 53);
55+
check_xml_diag("OLS05016", 54);
56+
check_xml_diag("OLS05017", 55);
57+
check_xml_diag("OLS05018", 56);
58+
check_xml_diag("OLS05019", 57);
59+
check_xml_diag("OLS05020", 58);
60+
check_xml_diag("OLS05021", 59);
61+
check_xml_diag("OLS05022", 60);
62+
check_xml_diag("OLS05023", 61);
63+
check_xml_diag("OLS05024", 62);
64+
check_xml_diag("OLS05025", 63);
65+
check_xml_diag("OLS05026", 64);
66+
check_xml_diag("OLS05027", 65);
67+
check_xml_diag("OLS05028", 66);
68+
check_xml_diag("OLS05029", 67);
69+
check_xml_diag("OLS05030", 68);
70+
check_xml_diag("OLS05031", 69);
71+
check_xml_diag("OLS05032", 70);
72+
check_xml_diag("OLS05036", 71);
73+
check_xml_diag("OLS05037", 72);
74+
check_xml_diag("OLS05033", 74);
75+
check_xml_diag("OLS05034", 75);
76+
check_xml_diag("OLS05035", 76);
77+
// OLS05040 - OLS05043 are never used (removed/replaced)
78+
check_xml_diag("OLS05044", 77);
79+
check_xml_diag("OLS05044", 78);
80+
check_xml_diag("OLS05045", 79);
81+
check_xml_diag("OLS05046", 80);
82+
check_xml_diag("OLS05047", 81);
83+
check_xml_diag("OLS05038", 82);
84+
check_xml_diag("OLS05048", 83);
85+
check_xml_diag("OLS05039", 84);
86+
check_xml_diag("OLS05051", 85);
87+
check_xml_diag("OLS05052", 86);
88+
check_xml_diag("OLS05053", 87);
89+
check_xml_diag("OLS05054", 88);
90+
check_xml_diag("OLS05055", 89);
91+
check_xml_diag("OLS05056", 90);
92+
check_xml_diag("OLS05057", 91);
93+
check_xml_diag("OLS05055", 92);
94+
check_xml_diag("OLS05056", 93);
95+
}
96+
97+
#[test]
98+
fn test_ols05000s_manifest() {
99+
let (mut odoo, config) = setup_server(true);
100+
let mut session = create_init_session(&mut odoo, config);
101+
let test_addons_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests").join("data").join("addons");
102+
let bikes_py_path = test_addons_path.join("module_for_diagnostics").join("__manifest__.py");
103+
assert!(PathBuf::from(&bikes_py_path).exists(), "Test file does not exist: {}", bikes_py_path.display());
104+
let bikes_py_diagnostics = get_diagnostics_for_path(&mut session, &bikes_py_path.sanitize());
105+
let doc_diags = get_diagnostics_test_comments(&mut session, &bikes_py_path.sanitize());
106+
verify_diagnostics_against_doc(bikes_py_diagnostics, doc_diags); // OLS05049 & OLS05050
107+
}

server/tests/diagnostics/ols0500_00_12.rs

Lines changed: 0 additions & 157 deletions
This file was deleted.

0 commit comments

Comments
 (0)