65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
"""Tests for data_platform.helpers.automation — apply_automation."""
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
from dagster import AssetSpec
|
|
|
|
from data_platform.helpers.automation import (
|
|
AUTOMATION_CONDITION,
|
|
_is_manual,
|
|
apply_automation,
|
|
)
|
|
|
|
|
|
def _make_asset_def(tags: dict | None = None):
|
|
"""Create a minimal mock AssetsDefinition with the given tags."""
|
|
spec = MagicMock(spec=AssetSpec)
|
|
spec.tags = tags or {}
|
|
|
|
asset_def = MagicMock()
|
|
asset_def.specs = [spec]
|
|
|
|
updated = MagicMock()
|
|
asset_def.with_attributes.return_value = updated
|
|
|
|
return asset_def, updated
|
|
|
|
|
|
class TestIsManual:
|
|
def test_manual_when_tagged(self):
|
|
asset_def, _ = _make_asset_def(tags={"manual": "true"})
|
|
assert _is_manual(asset_def) is True
|
|
|
|
def test_not_manual_when_no_tags(self):
|
|
asset_def, _ = _make_asset_def(tags={})
|
|
assert _is_manual(asset_def) is False
|
|
|
|
def test_not_manual_when_other_tags(self):
|
|
asset_def, _ = _make_asset_def(tags={"owner": "team-data"})
|
|
assert _is_manual(asset_def) is False
|
|
|
|
|
|
class TestApplyAutomation:
|
|
def test_manual_asset_unchanged(self):
|
|
asset_def, _ = _make_asset_def(tags={"manual": "true"})
|
|
result = apply_automation([asset_def])
|
|
assert result == [asset_def]
|
|
asset_def.with_attributes.assert_not_called()
|
|
|
|
def test_non_manual_asset_gets_condition(self):
|
|
asset_def, updated = _make_asset_def(tags={})
|
|
result = apply_automation([asset_def])
|
|
assert result == [updated]
|
|
asset_def.with_attributes.assert_called_once_with(
|
|
automation_condition=AUTOMATION_CONDITION
|
|
)
|
|
|
|
def test_empty_list(self):
|
|
assert apply_automation([]) == []
|
|
|
|
def test_mixed_assets(self):
|
|
manual, _ = _make_asset_def(tags={"manual": "true"})
|
|
auto, auto_updated = _make_asset_def(tags={})
|
|
result = apply_automation([manual, auto])
|
|
assert result == [manual, auto_updated]
|