Spaces:
Runtime error
Runtime error
File size: 5,796 Bytes
ebb46dc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | """Campaign Name θ§£ζε¨εε
ζ΅θ―γ"""
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
import pandas as pd
import pytest
from src.campaign_parser import (
parse_campaign_name,
enrich_dataframe,
AUDIENCE_REMARKETING,
AUDIENCE_ASC,
AUDIENCE_COLD,
)
class TestParseCampaignName:
"""parse_campaign_name εε½ζ°ζ΅θ―γ"""
def test_standard_12_fields(self):
name = "US_Conversion_Meta_All_Purchase_Bone-Conduction_Others_AO_ASC_Mix_20260123_coreNumber"
r = parse_campaign_name(name)
assert r["market"] == "US"
assert r["funnel"] == "Conversion"
assert r["parsed_platform"] == "Meta"
assert r["channel"] == "All"
assert r["ad_objective"] == "Purchase"
assert r["product_line"] == "Bone-Conduction"
assert r["product_model"] == "Others"
assert r["project_type"] == "AO"
assert r["audience_raw"] == "ASC"
assert r["creative_type"] == "Mix"
assert r["campaign_date"] == "20260123"
assert r["note"] == "coreNumber"
assert r["parse_ok"] is True
def test_audience_rmkt(self):
name = "US_Conversion_Meta_All_Purchase_Bone-Conduction_Others_AO_RMKT_Mix_20260123_note"
r = parse_campaign_name(name)
assert r["audience_type"] == AUDIENCE_REMARKETING
assert r["objective_group"] == "Purchase_RMKT"
def test_audience_asc(self):
name = "US_Conversion_Meta_All_Purchase_Bone-Conduction_Others_AO_ASC_Mix_20260123_note"
r = parse_campaign_name(name)
assert r["audience_type"] == AUDIENCE_ASC
assert r["objective_group"] == "Purchase_ASC"
def test_audience_cold(self):
name = "US_Conversion_Meta_All_Purchase_Bone-Conduction_Others_AO_INT_Mix_20260123_note"
r = parse_campaign_name(name)
assert r["audience_type"] == AUDIENCE_COLD
assert r["objective_group"] == "Purchase_Cold"
def test_broad_audience(self):
name = "CA_Conversion_Google_All_Purchase_Bone-Conduction_X_AO_Broad_Video_20260101_test"
r = parse_campaign_name(name)
assert r["audience_type"] == AUDIENCE_COLD
assert r["objective_group"] == "Purchase_Cold"
def test_lal_audience(self):
name = "US_Consideration_Meta_IG_Linkclick_Bone-Conduction_X_AO_LAL_Image_20260101_test"
r = parse_campaign_name(name)
assert r["audience_type"] == AUDIENCE_COLD
assert r["objective_group"] == "Linkclick"
def test_less_than_5_fields(self):
name = "US_Conversion_Meta"
r = parse_campaign_name(name)
assert r["parse_ok"] is False
assert r["market"] == "US"
assert r["ad_objective"] is None
def test_exactly_5_fields(self):
name = "US_Conversion_Meta_All_Purchase"
r = parse_campaign_name(name)
assert r["parse_ok"] is True
assert r["ad_objective"] == "Purchase"
assert r["product_line"] is None
def test_more_than_12_fields(self):
name = "US_Conversion_Meta_All_Purchase_BC_O_AO_ASC_Mix_20260101_note1_extra1_extra2"
r = parse_campaign_name(name)
assert r["note"] == "note1_extra1_extra2"
assert r["parse_ok"] is True
def test_invalid_market(self):
name = "UK_Conversion_Meta_All_Purchase_BC_O_AO_ASC_Mix_20260101_note"
r = parse_campaign_name(name)
assert r["parse_ok"] is False
def test_non_purchase_objective_group(self):
name = "US_Consideration_Meta_All_Linkclick_BC_O_AO_INT_Mix_20260101_note"
r = parse_campaign_name(name)
assert r["objective_group"] == "Linkclick"
def test_unknown_objective(self):
name = "US_Conversion_Meta_All_SomethingNew_BC_O_AO_INT_Mix_20260101_note"
r = parse_campaign_name(name)
assert r["objective_group"] == "Other"
class TestEnrichDataframe:
"""enrich_dataframe ζΉιθ§£ζζ΅θ―γ"""
def test_basic_enrichment(self):
df = pd.DataFrame({
"campaign_name": [
"US_Conversion_Meta_All_Purchase_Bone-Conduction_Others_AO_ASC_Mix_20260123_core",
"CA_Awareness_Google_All_Pageview_Bone-Conduction_X_AO_Broad_Video_20260101_test",
],
"Cost": [100.0, 50.0],
})
result = enrich_dataframe(df)
assert "market" in result.columns
assert "funnel" in result.columns
assert "ad_objective" in result.columns
assert "audience_type" in result.columns
assert "objective_group" in result.columns
assert result.iloc[0]["market"] == "US"
assert result.iloc[1]["market"] == "CA"
assert result.iloc[0]["objective_group"] == "Purchase_ASC"
assert result.iloc[1]["objective_group"] == "Pageview"
def test_missing_campaign_name_column(self):
df = pd.DataFrame({"Cost": [100.0]})
result = enrich_dataframe(df)
assert "market" not in result.columns
def test_does_not_modify_original(self):
df = pd.DataFrame({"campaign_name": ["US_Conversion_Meta_All_Purchase"], "Cost": [1.0]})
original_cols = list(df.columns)
enrich_dataframe(df)
assert list(df.columns) == original_cols
def test_parse_ok_rate_logging(self, caplog):
df = pd.DataFrame({
"campaign_name": [
"US_Conversion_Meta_All_Purchase",
"INVALID",
"US_Awareness_Meta_All_Pageview",
],
"Cost": [1.0, 2.0, 3.0],
})
import logging
with caplog.at_level(logging.INFO, logger="ad-agent"):
result = enrich_dataframe(df)
assert result["parse_ok"].sum() == 2
if __name__ == "__main__":
pytest.main([__file__, "-v"])
|