"""Tests for update-dim-tables handler.""" import pytest from pytest_mock import MockerFixture from src.index import handler _MOCK_JOB = { "destination_vendor_id": 7, "destination_subaccount_id": None, "revenue_cutoff_date": "2025-03-31", } def test_handler_fetches_job_and_products(mocker: MockerFixture) -> None: mock_get_job = mocker.patch("src.index.get_transfer_job", return_value=_MOCK_JOB) mock_get_products = mocker.patch( "src.index.get_transfer_job_products", return_value=[{"release_id": 100}, {"release_id": 200}], ) mock_update = mocker.patch("src.index.update_dim_release_history") result = handler({"job_id": 42}, object()) mock_get_job.assert_called_once_with(42) mock_get_products.assert_called_once_with(42, 7) mock_update.assert_called_once_with( release_ids=[100, 200], destination_vendor_id=7, destination_subaccount_id=None, revenue_cutoff_date="2025-03-31", ) assert result["update_dim_tables_result"] == {"job_id": 42, "release_ids": [100, 200]} assert result["job_id"] == 42 def test_handler_spreads_input_event(mocker: MockerFixture) -> None: mocker.patch("src.index.get_transfer_job", return_value=_MOCK_JOB) mocker.patch("src.index.get_transfer_job_products", return_value=[]) mocker.patch("src.index.update_dim_release_history") result = handler({"job_id": 42, "extra_field": "value"}, object()) assert result["extra_field"] == "value" def test_handler_raises_on_missing_job_id() -> None: with pytest.raises(KeyError): handler({}, object()) def test_handler_raises_on_invalid_job_id() -> None: with pytest.raises(ValueError, match="must be an integer"): handler({"job_id": "not-an-int"}, object())