"""Unit tests for output_s3_path logic.""" import pytest from src.logic.output_s3_path import build_output_s3_path def _metadata(**overrides: object) -> dict: base: dict = { "product_id": 100, "label": {"vendor_id": 1, "subaccount_id": 2}, } base.update(overrides) return base def test_builds_path_from_all_fields() -> None: """All fields present produces a slash-delimited path string.""" result = build_output_s3_path(_metadata(), review_queue_id=99) assert result == "1/2/100/99" def test_subaccount_id_zero() -> None: """subaccount_id of 0 is valid and included in the path.""" result = build_output_s3_path( _metadata(label={"vendor_id": 29366, "subaccount_id": 0}), review_queue_id=12345, ) assert result == "29366/0/100/12345" def test_raises_on_none_review_queue_id() -> None: """Raises ValueError when review_queue_id is None.""" with pytest.raises(ValueError, match="review_queue_id"): build_output_s3_path(_metadata(), review_queue_id=None) def test_raises_on_missing_label() -> None: """Raises ValueError when label is absent, reporting vendor_id and subaccount_id.""" with pytest.raises(ValueError, match="vendor_id"): build_output_s3_path({"product_id": 100}, review_queue_id=5) def test_raises_on_missing_release_id() -> None: """Raises ValueError when product_id is absent from metadata.""" with pytest.raises(ValueError, match="release_id"): build_output_s3_path( {"label": {"vendor_id": 1, "subaccount_id": 2}}, review_queue_id=5 ) def test_raises_lists_all_missing_fields() -> None: """Error message names every missing field when metadata is empty.""" with pytest.raises(ValueError, match="vendor_id") as exc_info: build_output_s3_path({}, review_queue_id=None) assert "review_queue_id" in str(exc_info.value) assert "release_id" in str(exc_info.value)