Skip to content

Commit 5de7b50

Browse files
committed
Update tests
1 parent 1f18022 commit 5de7b50

File tree

3 files changed

+68
-8
lines changed

3 files changed

+68
-8
lines changed

local_e2e_setup.sh

100644100755
File mode changed.

run_e2e_tests.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ uv pip install -e .
134134

135135
# 5. Run odoo-data-flow export
136136
# (Call your tool's CLI)
137-
./.venv/bin/python3 -m odoo_data_flow export --config conf/connection.conf --output testdata/res_partner.csv --model res.partner --fields id,name,email
137+
./.venv/bin/python3 -m odoo_data_flow export --connection-file conf/connection.conf --output testdata/res_partner.csv --model res.partner --fields id,name,email
138138

139139
# Update connection.conf for import
140140
cat << EOF > conf/connection.conf
@@ -149,7 +149,7 @@ protocol = jsonrpc
149149
EOF
150150

151151
# 6. Run odoo-data-flow import
152-
./.venv/bin/python3 -m odoo_data_flow import --config conf/connection.conf --file testdata/res_partner.csv
152+
./.venv/bin/python3 -m odoo_data_flow import --connection-file conf/connection.conf --file testdata/res_partner.csv
153153

154154
# 7. Verify the data
155155
echo "--- Verifying the data... ---"

tests/test_importer.py

Lines changed: 66 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@ class TestRunImport:
4444
@patch("odoo_data_flow.importer.import_threaded.import_data")
4545
@patch("odoo_data_flow.importer._run_preflight_checks")
4646
def test_run_import_success_path(
47-
self, mock_preflight: MagicMock, mock_import_data: MagicMock, tmp_path: Path
47+
self,
48+
mock_preflight: MagicMock,
49+
mock_import_data: MagicMock,
50+
tmp_path: Path,
4851
) -> None:
4952
"""Test the successful execution path of run_import."""
5053
# Arrange
@@ -81,7 +84,9 @@ def test_run_import_success_path(
8184
@patch("odoo_data_flow.importer._infer_model_from_filename")
8285
@patch("odoo_data_flow.importer._show_error_panel")
8386
def test_run_import_fails_if_model_not_found(
84-
self, mock_show_error: MagicMock, mock_infer_model: MagicMock
87+
self,
88+
mock_show_error: MagicMock,
89+
mock_infer_model: MagicMock,
8590
) -> None:
8691
"""Test that the import aborts if no model can be determined."""
8792
# Arrange
@@ -114,7 +119,9 @@ def test_run_import_fails_if_model_not_found(
114119

115120
@patch("odoo_data_flow.importer.import_threaded.import_data")
116121
def test_import_data_simple_success(
117-
self, mock_import_data: MagicMock, tmp_path: Path
122+
self,
123+
mock_import_data: MagicMock,
124+
tmp_path: Path,
118125
) -> None:
119126
"""Tests a simple, successful import with no failures."""
120127
source_file = tmp_path / "source.csv"
@@ -144,7 +151,9 @@ def test_import_data_simple_success(
144151

145152
@patch("odoo_data_flow.importer.import_threaded.import_data")
146153
def test_import_data_two_pass_success(
147-
self, mock_import_data: MagicMock, tmp_path: Path
154+
self,
155+
mock_import_data: MagicMock,
156+
tmp_path: Path,
148157
) -> None:
149158
"""Tests a successful two-pass import with deferred fields."""
150159
source_file = tmp_path / "source.csv"
@@ -176,7 +185,9 @@ def test_import_data_two_pass_success(
176185
@patch("odoo_data_flow.importer.import_threaded.import_data")
177186
@patch("odoo_data_flow.importer._run_preflight_checks", return_value=False)
178187
def test_run_import_preflight_fails(
179-
mock_preflight: MagicMock, mock_import_data: MagicMock, tmp_path: Path
188+
mock_preflight: MagicMock,
189+
mock_import_data: MagicMock,
190+
tmp_path: Path,
180191
) -> None:
181192
"""Test that the import aborts if preflight checks fail."""
182193
source_file = tmp_path / "source.csv"
@@ -206,7 +217,9 @@ def test_run_import_preflight_fails(
206217
@patch("odoo_data_flow.importer.import_threaded.import_data")
207218
@patch("odoo_data_flow.importer._run_preflight_checks", return_value=True)
208219
def test_run_import_fail_mode(
209-
mock_preflight: MagicMock, mock_import_data: MagicMock, tmp_path: Path
220+
mock_preflight: MagicMock,
221+
mock_import_data: MagicMock,
222+
tmp_path: Path,
210223
) -> None:
211224
"""Test the fail mode logic."""
212225
source_file = tmp_path / "source.csv"
@@ -320,3 +333,50 @@ def test_run_import_invalid_context(mock_show_error: MagicMock) -> None:
320333
groupby=None,
321334
)
322335
mock_show_error.assert_called_once()
336+
337+
338+
@patch("odoo_data_flow.importer.relational_import.run_direct_relational_import")
339+
@patch("odoo_data_flow.importer.import_threaded.import_data")
340+
@patch("odoo_data_flow.importer._run_preflight_checks")
341+
def test_run_import_fail_mode_with_strategies(
342+
mock_preflight: MagicMock,
343+
mock_import_data: MagicMock,
344+
mock_relational_import: MagicMock,
345+
tmp_path: Path,
346+
) -> None:
347+
"""Test that relational strategies are skipped in fail mode."""
348+
source_file = tmp_path / "source.csv"
349+
source_file.touch()
350+
fail_file = tmp_path / "res_partner_fail.csv"
351+
fail_file.write_text("id,name\n1,test")
352+
353+
def preflight_side_effect(*_args: Any, **kwargs: Any) -> bool:
354+
kwargs["import_plan"]["strategies"] = {
355+
"field": {"strategy": "direct_relational_import"}
356+
}
357+
return True
358+
359+
mock_preflight.side_effect = preflight_side_effect
360+
mock_import_data.return_value = (True, {"total_records": 1, "id_map": {"1": 1}})
361+
362+
run_import(
363+
config="dummy.conf",
364+
filename=str(source_file),
365+
model="res.partner",
366+
fail=True,
367+
deferred_fields=None,
368+
unique_id_field=None,
369+
no_preflight_checks=False,
370+
headless=True,
371+
worker=1,
372+
batch_size=100,
373+
skip=0,
374+
separator=";",
375+
ignore=None,
376+
context={},
377+
encoding="utf-8",
378+
o2m=False,
379+
groupby=None,
380+
)
381+
mock_import_data.assert_called_once()
382+
mock_relational_import.assert_not_called()

0 commit comments

Comments
 (0)