# Vereinfacht tests – scope and rationale

## Constraint: no real API in CI

Tests do **not** call the real Vereinfacht API or a shared test endpoint. All tests use dummy data and either:

- Assert behaviour when **Vereinfacht is not configured** (ENV + Settings unset), or  
- Run the **full Member/User flow** with a **unreachable URL** (e.g. `http://127.0.0.1:1`) so the HTTP client fails fast (e.g. `:econnrefused`) and we only assert that the application path does not crash.

## What the tests cover

| Test file | What it tests | Why it’s enough without an API |
|-----------|----------------|---------------------------------|
| **ConfigVereinfachtTest** | `vereinfacht_env_configured?`, `vereinfacht_configured?`, `vereinfacht_contact_view_url` with ENV set/cleared | Pure config logic; no HTTP. |
| **ClientTest** | `create_contact/1` and `update_contact/2` return `{:error, :not_configured}` when nothing is configured | Ensures the client does not call Req when config is missing. |
| **VereinfachtTest** | `sync_members_without_contact/0` returns `{:error, :not_configured}` when not configured | Ensures bulk sync is a no-op when config is missing. |
| **SyncContactTest** | Member create/update with SyncContact change: not configured → no sync; configured with bad URL → action still succeeds, sync may fail | Ensures the Ash change and after_transaction arity are correct and the action result is not broken by sync failures. |

## What is *not* tested (and would need a stub or real endpoint)

- Actual HTTP request shape (body, headers) and response handling (201/200, error codes).  
- Persistence of `vereinfacht_contact_id` after a successful create.  
- Translation of specific API error payloads into user messages.

Those would require either a **Bypass** (or similar) stub in front of Req or a dedicated test endpoint; both are out of scope for the current “no real API” setup.

## Conclusion

Given the constraint that the API is not called in CI, the tests are **meaningful**: they cover config, “not configured” paths, and integration of SyncContact with Member create/update without crashing. They are **sufficient** for regression safety and refactoring; extending them with a Bypass stub would be an optional next step if we want to assert on request/response shape without hitting the real API.
