mitgliederverwaltung/test/mv/vereinfacht/vereinfacht_test_README.md
Moritz e4e6cfdd47
test(vereinfacht): add tests and scope README
- Config, Client, SyncContact, Vereinfacht module tests (no real API)
- vereinfacht_test_README: document test scope
2026-02-23 19:53:20 +01:00

29 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 its 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.