"""广告收益报表的环境与业务代码位口径。""" from __future__ import annotations from datetime import UTC, datetime from sqlalchemy import delete from app.admin.repositories import ad_revenue from app.db.session import SessionLocal from app.models.ad_ecpm import AdEcpmRecord from app.models.ad_pangle_revenue import AdPangleDailyRevenue from app.models.user import User REPORT_DATE = "2040-02-03" def test_business_scope_filters_client_and_pangle_by_env_and_code(monkeypatch) -> None: db = SessionLocal() try: user = User( phone="18800009991", username="29999999991", register_channel="sms", ) db.add(user) db.flush() db.add_all([ AdEcpmRecord( user_id=user.id, ad_type="reward_video", ad_session_id="scope-prod-business", app_env="prod", our_code_id="prod-reward", ecpm_raw="10000", report_date=REPORT_DATE, created_at=datetime(2040, 2, 3, tzinfo=UTC), ), AdEcpmRecord( user_id=user.id, ad_type="draw", ad_session_id="scope-prod-demo", app_env="prod", our_code_id="prod-demo", ecpm_raw="20000", report_date=REPORT_DATE, created_at=datetime(2040, 2, 3, tzinfo=UTC), ), AdEcpmRecord( user_id=user.id, ad_type="draw", ad_session_id="scope-prod-known-business", app_env="prod", our_code_id="104098712", ecpm_raw="40000", report_date=REPORT_DATE, created_at=datetime(2040, 2, 3, tzinfo=UTC), ), AdEcpmRecord( user_id=user.id, ad_type="reward_video", ad_session_id="scope-test-business", app_env="test", our_code_id="104127529", ecpm_raw="30000", report_date=REPORT_DATE, created_at=datetime(2040, 2, 3, tzinfo=UTC), ), AdPangleDailyRevenue( report_date=REPORT_DATE, app_env="prod", our_code_id="prod-reward", adn="", revenue_yuan=1.5, api_revenue_yuan=1.2, impressions=10, ), AdPangleDailyRevenue( report_date=REPORT_DATE, app_env="prod", our_code_id="prod-demo", adn="", revenue_yuan=8.0, api_revenue_yuan=7.0, impressions=40, ), AdPangleDailyRevenue( report_date=REPORT_DATE, app_env="prod", our_code_id="104098712", adn="", revenue_yuan=2.5, api_revenue_yuan=2.0, impressions=20, ), AdPangleDailyRevenue( report_date=REPORT_DATE, app_env="test", our_code_id="104127529", adn="", revenue_yuan=9.0, api_revenue_yuan=8.0, impressions=50, ), ]) db.commit() monkeypatch.setattr( ad_revenue.app_config, "get_ad_config", lambda _db: { "reward_code_id": "prod-reward", "compare_draw_code_id": "prod-draw", "coupon_draw_code_id": "prod-draw", }, ) business = ad_revenue.ad_revenue_report( db, date_from=REPORT_DATE, date_to=REPORT_DATE, app_env="prod", revenue_scope="business", ) assert business["total_impressions"] == 2 assert business["total_revenue_yuan"] == 0.5 assert business["total_pangle_revenue_yuan"] == 4.0 assert business["total_pangle_api_revenue_yuan"] == 3.2 all_codes = ad_revenue.ad_revenue_report( db, date_from=REPORT_DATE, date_to=REPORT_DATE, app_env="prod", revenue_scope="all", ) assert all_codes["total_impressions"] == 3 assert all_codes["total_revenue_yuan"] == 0.7 assert all_codes["total_pangle_revenue_yuan"] == 12.0 assert all_codes["total_pangle_api_revenue_yuan"] == 10.2 test_business = ad_revenue.ad_revenue_report( db, date_from=REPORT_DATE, date_to=REPORT_DATE, app_env="test", revenue_scope="business", ) assert test_business["total_impressions"] == 1 assert test_business["total_revenue_yuan"] == 0.3 assert test_business["total_pangle_revenue_yuan"] == 9.0 assert test_business["total_pangle_api_revenue_yuan"] == 8.0 all_env_business = ad_revenue.ad_revenue_report( db, date_from=REPORT_DATE, date_to=REPORT_DATE, app_env=None, revenue_scope="business", ) assert all_env_business["total_impressions"] == 3 assert all_env_business["total_revenue_yuan"] == 0.8 assert all_env_business["total_pangle_revenue_yuan"] == 13.0 assert all_env_business["total_pangle_api_revenue_yuan"] == 11.2 finally: db.rollback() db.execute(delete(AdPangleDailyRevenue).where(AdPangleDailyRevenue.report_date == REPORT_DATE)) db.execute(delete(AdEcpmRecord).where(AdEcpmRecord.report_date == REPORT_DATE)) db.execute(delete(User).where(User.phone == "18800009991")) db.commit() db.close()