156: def test_materializes_all_recipients_with_generated_values(self, db_engine): 174: def test_invoice_numbers_unique_per_campaign(self, db_engine): 186: def test_invoice_numbers_unique_across_materialize_calls(self, db_engine): 198: invs2 = {r.generated_invoice_number for r in res2["rows"]} 199: assert len(invs1) == 8 and len(invs2) == 8 203: def test_preview_does_not_persist(self, db_engine): 217: def test_preview_size_defaults_to_campaign_setting(self, db_engine): 225: def test_no_accounts_marks_skipped(self, db_engine): 237: def test_template_stop_mode_marks_remaining_skipped(self, db_engine): 250: def test_subject_assignment_round_robin(self, db_engine): 260: def test_phone_assignment_round_robin(self, db_engine): 269: def test_account_rotation_sequential(self, db_engine): 278: def test_max_per_account_respected_in_plan(self, db_engine): 293: def test_account_in_cooldown_skipped(self, db_engine): 307: def test_amount_shipping_disabled_by_config(self, db_engine): 321: def test_dates_from_config(self, db_engine): 335: def test_persists_campaign_recipients(self, db_engine): 350: def test_only_valid_recipients_flow(self, db_engine): 363: is_valid__eq=True).filter( 368: def test_multiple_campaigns_independent_plans(self, db_engine): 379: invs2 = {p["campaign_id"] if "campaign_id" in p else p["invoice"] for p in res2["plan"]} 385: def test_persists_campaign_recipients(self, db_engine): # noqa: F811 386: pass 388: def test_plan_warnings_for_skipped_rows(self, db_engine): 404: def test_loads_all_entities(self, db_engine): 422: def test_drops_unauthorized_accounts_and_inactive_phones(self, db_engine): 452: def test_missing_ids_resolved_honestly(self, db_engine):