"""Tests for marketing_intelligence.storage.campaigns.""" from typing import Any from unittest.mock import patch from marketing_intelligence.storage import campaigns as camp def _patch_file(data: list) -> Any: return patch.object(camp, "_fetch_local", return_value=data) # ─────────────────────────── list_active_campaigns ───────────────────────── class TestListActiveCampaigns: def _row(self, campaign_key: str = "camp_a", status: str = "active") -> dict: return { "campaign_key": campaign_key, "campaign_nm": "Campaign A", "status": status, "artist_key": "artist_a", } def test_returns_active_campaigns(self) -> None: with _patch_file([self._row()]): result = camp.list_active_campaigns() assert len(result) == 1 assert result[0].campaign_key == "camp_a" def test_filters_out_inactive(self) -> None: rows = [self._row("camp_a", "active"), self._row("camp_b", "inactive")] with _patch_file(rows): result = camp.list_active_campaigns() assert len(result) == 1 def test_returns_empty_on_empty_file(self) -> None: with _patch_file([]): result = camp.list_active_campaigns() assert result == [] # ─────────────────────────── get_campaign ────────────────────────────────── class TestGetCampaign: def _row(self) -> dict: return { "campaign_key": "camp_a", "campaign_id": "camp-id-1", "campaign_nm": "Campaign A", "status": "active", "artist_key": "artist_a", } def test_finds_by_campaign_key(self) -> None: with _patch_file([self._row()]): result = camp.get_campaign("camp_a") assert result is not None assert result.campaign_key == "camp_a" def test_finds_by_campaign_id(self) -> None: with _patch_file([self._row()]): result = camp.get_campaign("camp-id-1") assert result is not None def test_returns_none_when_not_found(self) -> None: with _patch_file([self._row()]): result = camp.get_campaign("no_such_campaign") assert result is None