Skip to content

test: opt-in live API suite, and a required live run per release - #31

Merged
franciscbalint merged 1 commit into
masterfrom
test/opt-in-live-suite
Oct 23, 2026
Merged

franciscbalint merged 1 commit into
masterfrom
test/opt-in-live-suite

Conversation

@franciscbalint

Copy link
Copy Markdown
Collaborator

Summary

  • tests/live_api_test.py: an opt-in suite that calls every method of ZeroBounce and ZeroBounceWarmup against the real API. It is not collected by pytest, never runs in CI, and skips without keys.
    • Default (free): sandbox addresses, reads, and calls expected to fail (unknown file IDs, S3/SFTP without an integration) that still prove the API accepts the payload. Fails if the credit balance changed.
    • ZEROBOUNCE_LIVE_SPEND=1: scoring, activity, email finder, and full bulk round trips (upload, wait, buffered and streamed download, delete) for validation, scoring, email finder, domain search, and list evaluator + send_evaluated_file. Every job is deleted.
    • ZEROBOUNCE_LIVE_CHANGES=1: a test allowlist filter and a self-managed Warmup sending account (rename, rules, custom-rule cooldown, statistics), removed in cleanup even when a test fails.
    • Never: creating an Inbox Placement test, setting its webhook, or ZB-managed Warmup onboarding, because the API cannot undo them.
  • README: how to run it, with keys and flags.
  • AGENTS.md: every release needs a manual live run. Agents must tell the maintainer as early as possible which keys and flags it needs, must not tag until it passes, record the result, and never write a key anywhere.

Live result

2026-10-24, validation and Warmup keys, ZEROBOUNCE_LIVE_SPEND=1 and ZEROBOUNCE_LIVE_CHANGES=1: 20/20 passed. One test was adjusted during the run: a job created by send_evaluated_file answers "File cannot be found" for a short while after it is accepted, so the test waits through that.

Test plan

  • ruff check, pytest (130 offline tests; the live file is not collected)
  • Without keys: 20 skipped
  • With both keys and both flags: 20 passed
  • gitleaks on the branch: no keys committed

🤖 Generated with Claude Code

… per release

tests/live_api_test.py calls every method of ZeroBounce and ZeroBounceWarmup
against the real API. It is not collected by pytest and never runs in CI; it
skips without ZEROBOUNCE_API_KEY / ZEROBOUNCE_WARMUP_API_KEY.

- Default: free calls only (sandbox addresses, reads, and calls expected to
  fail such as unknown file IDs and S3/SFTP without an integration, which
  still prove the payload is accepted); fails if the credit balance changed.
- ZEROBOUNCE_LIVE_SPEND=1: scoring, activity, email finder, and full bulk
  round trips (upload, wait, buffered and streamed download, delete) for
  validation, scoring, email finder, domain search and list evaluator +
  send_evaluated_file. Every job is deleted.
- ZEROBOUNCE_LIVE_CHANGES=1: a test allowlist filter and a self-managed Warmup
  sending account (rename, rules, custom-rule cooldown, statistics), removed
  in cleanup even when a test fails.
- Never: creating an Inbox Placement test, setting its webhook, ZB-managed
  Warmup onboarding; the API cannot undo them.

README documents how to run it. AGENTS.md makes a manual live run mandatory
for every release: tell the maintainer as early as possible which keys and
flags it needs, don't tag until it passes, record the result, and never write
a key anywhere.

Live result (2026-10-24, both keys, both flags): 20/20 passed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@franciscbalint
franciscbalint merged commit f7eaad2 into master Oct 23, 2026
6 checks passed
@franciscbalint
franciscbalint deleted the test/opt-in-live-suite branch October 23, 2026 22:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant