import pytest from aarecommon.models.models import DataCollectionParameters from pydantic import ValidationError def test_directory_defaults_when_missing(): params = DataCollectionParameters() assert params.directory is None def test_directory_blank_defaults_to_macro_path(): params = DataCollectionParameters(directory="") assert params.directory == "{date}/{prefix}" def test_directory_spaces_are_replaced(): params = DataCollectionParameters(directory="my folder/run 1") assert params.directory == "my_folder/run_1" def test_directory_rejects_invalid_characters(): with pytest.raises(ValidationError): DataCollectionParameters(directory="bad|path") def test_exposure_accepts_values_above_1_after_refactor(): params = DataCollectionParameters(exposure=1.5) assert params.exposure == 1.5 def test_cloud_blank_defaults_to_true(): params = DataCollectionParameters(cloud="") assert params.cloud is True def test_directory_accepts_valid_macros(): params = DataCollectionParameters(directory="{date}/{prefix}/run") assert params.directory == "{date}/{prefix}/run" def test_aperture_accepts_float_string(): params = DataCollectionParameters(aperture="2.0") assert params.aperture == 2 def test_processingpipeline_accepts_unknown_value_after_refactor(): params = DataCollectionParameters(processingpipeline="xia2") assert params.processingpipeline == "xia2" def test_datacollectionparameters_accepts_legacy_aliases(): params = DataCollectionParameters( totalrange=180, cellparameters="10 20 30 90 90 120", userresolution=1.4 ) assert params.totalangle == 180 assert params.unitcell == "10 20 30 90 90 120" assert params.processingresolution == 1.4 def test_datacollectionparameters_accepts_new_fields(): params = DataCollectionParameters( totalangle=90, unitcell="11,22,33,90,90,120", processingresolution=1.2, pdbmodel="model.pdb", cloud=False, ) assert params.totalangle == 90 assert params.unitcell == "11,22,33,90,90,120" assert params.processingresolution == 1.2 assert params.pdbmodel == "model.pdb" assert params.cloud is False