--- a +++ b/tests/functional/test_debug.py @@ -0,0 +1,91 @@ +import textwrap + +import pytest + +from tests.lib.inspect_utils import function_body_as_string + + +def test_debug(call_cli, tmp_path): + # Verify that the debug subcommand can be invoked. + @function_body_as_string + def definition(): + from ehrql import create_dataset + from ehrql.tables.core import patients + + dataset = create_dataset() + dataset.define_population(patients.date_of_birth.year > 1900) + + definition_path = tmp_path / "show.py" + definition_path.write_text(definition) + + dummy_data_path = tmp_path / "dummy-data" + dummy_data_path.mkdir() + patients_table = dummy_data_path / "patients.csv" + patients_table.write_text("patient_id,date_of_birth\n1,2020-10-01") + captured = call_cli( + "debug", + definition_path, + "--dummy-tables", + dummy_data_path, + ) + assert captured.out == "" + + +def test_debug_rejects_unknown_display_format(call_cli, tmp_path): + dummy_data_path = tmp_path / "dummy-data" + dummy_data_path.mkdir() + definition_path = tmp_path / "show.py" + definition_path.touch() + with pytest.raises(SystemExit): + call_cli( + "debug", + definition_path, + "--dummy-tables", + dummy_data_path, + "--display-format", + "badformat", + ) + captured = call_cli.readouterr() + assert "badformat' is not a supported display format" in captured.err + + +def test_debug_show(tmp_path, call_cli): + @function_body_as_string + def definition(): + from ehrql import create_dataset, show + from ehrql.tables.core import patients + + dataset = create_dataset() + year = patients.date_of_birth.year + show(dataset, label="Number") + dataset.define_population(year > 1980) + + definition_path = tmp_path / "show.py" + definition_path.write_text(definition) + + DUMMY_DATA = textwrap.dedent( + """\ + patient_id,date_of_birth + 1,1980-06-01 + 2,1985-06-01 + """ + ) + dummy_tables_path = tmp_path / "dummy_tables" + dummy_tables_path.mkdir() + dummy_tables_path.joinpath("patients.csv").write_text(DUMMY_DATA) + + captured = call_cli( + "debug", + definition_path, + "--dummy-tables", + dummy_tables_path, + ) + + expected = textwrap.dedent( + """\ + Show line 6: Number + patient_id + ----------------- + """ + ).strip() + assert captured.err.strip() == expected