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):
