diff --git a/tests/test_load_data.py b/tests/test_load_data.py index ba5ff06..b85adc3 100644 --- a/tests/test_load_data.py +++ b/tests/test_load_data.py @@ -12,6 +12,32 @@ sys.path.insert(0, str(Path(__file__).parent.parent / "scripts")) +def test_is_valid_column(): + pytest.importorskip("pandas") + from load_data import is_valid_column + + assert is_valid_column("350.0") + assert is_valid_column("Name") + assert not is_valid_column("Prefix") + + +def test_load_spectral_data_filters_metadata(tmp_path): + pytest.importorskip("pandas") + from load_data import load_spectral_data + + csv_file = tmp_path / "spectral.csv" + csv_file.write_text( + "FileNum,Prefix,350.0,360.0,Calculated_FilePath\n" + "0,HR,0.15,0.16,HR.090923.0000.sig\n", + encoding="utf-8", + ) + + data = load_spectral_data(csv_file) + + assert list(data.columns) == ["350.0", "360.0"] + assert data.loc[0, "350.0"] == 0.15 + + class TestCSVHandling: """Test CSV file handling and metadata parsing.""" diff --git a/tests/test_pipeline.py b/tests/test_pipeline.py index 31136b7..b3ddc3b 100644 --- a/tests/test_pipeline.py +++ b/tests/test_pipeline.py @@ -6,15 +6,16 @@ import pytest from pathlib import Path -from unittest.mock import Mock, patch, MagicMock import sys +import csv +import json # Import pipeline functions sys.path.insert(0, str(Path(__file__).parent.parent / "scripts")) from pipeline import ( get_date_stamp, get_log_timestamp, - parse_output_target, + main, build_output_names, format_filenum, normalise_subfolder, @@ -121,45 +122,27 @@ def test_parse_sig_file_empty(self, temp_dir): assert reflectance == [] -class TestParseOutputTarget: - """Test output target parsing.""" - - def test_parse_output_target_none(self, temp_dir): - """Test with None output value (use default).""" - result = parse_output_target(None, temp_dir) - - assert result["custom_prefix"] is None - assert result["output_directory"] == temp_dir - assert result["is_path_output"] is False - - def test_parse_output_target_basename(self, temp_dir): - """Test with just a base name.""" - result = parse_output_target("myprefix", temp_dir) - - assert result["custom_prefix"] == "myprefix" - assert result["output_directory"] == temp_dir - assert result["is_path_output"] is False - - def test_parse_output_target_basename_with_csv(self, temp_dir): - """Test basename with .csv extension.""" - result = parse_output_target("myprefix.csv", temp_dir) - - assert result["custom_prefix"] == "myprefix" - assert result["output_directory"] == temp_dir - - def test_parse_output_target_full_path(self, temp_dir): - """Test with full path.""" - subdir = temp_dir / "output" - result = parse_output_target(str(subdir / "myprefix"), temp_dir) - - assert result["custom_prefix"] == "myprefix" - assert result["output_directory"] == subdir - assert result["is_path_output"] is True - - def test_parse_output_target_empty_raises(self, temp_dir): - """Test that empty output value raises ValueError.""" - with pytest.raises(ValueError): - parse_output_target("", temp_dir) +@pytest.mark.integration +def test_main_writes_outputs_to_requested_directory(tmp_path, sample_sig_file): + """The CLI options control the output directory and filename prefix.""" + sig_file = tmp_path / "HR.090923.0000.sig" + sig_file.write_bytes(sample_sig_file.read_bytes()) + metadata = tmp_path / "metadata.csv" + metadata.write_text("FileNum,Date,Prefix,Subfolder\n0,090923,HR,\n", encoding="utf-8") + output_dir = tmp_path / "output" + + result = main([str(metadata), "-r", str(tmp_path), "-o", str(output_dir), "-n", "sydney"]) + + assert result["output_directory"] == output_dir + assert result["matched_files"] == 1 + assert result["output_csv"].parent == output_dir + assert result["output_csv"].name.startswith("sydney_merged_spectral_data_") + with result["output_csv"].open(newline="", encoding="utf-8") as file: + rows = list(csv.DictReader(file)) + assert rows[0]["350.0"] == "0.15" + summary = json.loads(result["summary_path"].read_text(encoding="utf-8")) + assert summary["custom_output_name"] == "sydney" + assert summary["matched_files"] == 1 class TestBuildOutputNames: