"""Tests for DIM_RELEASE_HISTORY update logic.""" import pytest from pytest_mock import MockerFixture from src.dim_release_history import ( _close_open_rows, _get_statement_period_id, _insert_new_rows, update_dim_release_history, ) def test_commits_on_success(mocker: MockerFixture) -> None: mock_conn = mocker.MagicMock() mocker.patch("src.dim_release_history.get_snowflake_connection", return_value=mock_conn) mock_cursor = mocker.MagicMock() mock_cursor.fetchone.return_value = {"STATEMENT_PERIOD_ID": 10} mocker.patch("src.dim_release_history.execute", return_value=mock_cursor) update_dim_release_history([1, 2], 100, None, "2025-03-31") mock_conn.commit.assert_called_once() mock_conn.rollback.assert_not_called() mock_conn.close.assert_called_once() def test_rolls_back_on_error(mocker: MockerFixture) -> None: mock_conn = mocker.MagicMock() mocker.patch("src.dim_release_history.get_snowflake_connection", return_value=mock_conn) mock_cursor = mocker.MagicMock() mock_cursor.fetchone.return_value = None mocker.patch("src.dim_release_history.execute", return_value=mock_cursor) with pytest.raises(RuntimeError): update_dim_release_history([1], 100, None, "2025-03-31") mock_conn.rollback.assert_called_once() mock_conn.commit.assert_not_called() mock_conn.close.assert_called_once() def test_get_statement_period_id_raises_when_no_row(mocker: MockerFixture) -> None: mock_conn = mocker.MagicMock() mock_cursor = mocker.MagicMock() mock_cursor.fetchone.return_value = None mocker.patch("src.dim_release_history.execute", return_value=mock_cursor) with pytest.raises(RuntimeError, match="No statement period"): _get_statement_period_id(mock_conn, "QA", "2025-03-31") def test_close_open_rows_correct_params(mocker: MockerFixture) -> None: mock_conn = mocker.MagicMock() mock_execute = mocker.patch("src.dim_release_history.execute") _close_open_rows(mock_conn, "QA", [10, 20], "2025-03-31", 5) mock_execute.assert_called_once() _, call_sql, call_params = mock_execute.call_args[0] assert "DIM_RELEASE_HISTORY" in call_sql assert call_params == ("2025-03-31", 5, 10, 20) def test_insert_new_rows_once_per_release_id(mocker: MockerFixture) -> None: mock_conn = mocker.MagicMock() mock_execute = mocker.patch("src.dim_release_history.execute") _insert_new_rows(mock_conn, "QA", [1, 2, 3], 100, None, "2025-03-31", 10) assert mock_execute.call_count == 3