Create Integration Test
SkillWeb & browsingTurn a [class]-integration-test-plan.md into headless integration tests, one per plan item, each driving the scenario, asserting the outcome, and capturing a labeled snapshot. Use for TDD before implementation or as verification after it, whenever a test plan exists under Docs/migration/working/.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Create Integration Test skill
What this skill tells your AI
The instructions your AI receives, as published by sillsdev/fieldworks in .claude/skills/create-integration-test/SKILL.md and read by ahel’s review.
Consumes the test plan a convert-* skill produced with the developer and turns it into real tests, one plan item at a time. Plans exist for dialogs, slices, AND owned controls (a control converted through the custom-control sub-cycle gets its own plan under its own class name).
Input: the class name (or find the single plan when only one exists).
Plan location: Docs/migration/working/<Class>/<Class>-integration-test-plan.md.
If no plan exists, stop and say so -- the plan is authored with the
developer in the convert-* flow, never invented here.
What each plan item becomes
One headless [AvaloniaTest] that:
- Drives the scenario with the headless input pipeline (typing, focus, commands) from a constructed dialog/control in the state the item names.
- Asserts the behavioral outcome in code -- this is the pass/fail gate (enabled state, staged value, validation message, payload content).
- Captures a labeled snapshot as reviewable evidence
(
DialogSnapshot.Capture, name<Class>-NN-<kebab-label>numbered in plan order). Snapshots document; assertions gate.
Known headless limit: pointer hit-testing does not run headless. A plan item that genuinely requires mouse interaction is implemented as far as the model/keyboard path allows and flagged in the report as needing the manual checkpoint.
Where tests land
Derive the location from the SUT by the repository's test-mirroring rule (tests mirror their SUT's project and subfolder):
- Dialog View/ViewModel (
Src/Common/FwAvaloniaDialogs/, flat) ->FwAvaloniaDialogsTests/<Class>IntegrationTests.cs - Owned control in
Src/Common/FwAvaloniaDialogs/Controls/(dialog composite) ->FwAvaloniaDialogsTests/Controls/; owned control inSrc/Common/FwAvalonia/(shared) -> theFwAvaloniaTests/mirror of its subfolder - Launcher edge (
Src/LexText/LexTextControls/Avalonia/) ->LexTextControlsTests/Avalonia/ - Slice control (
Src/Common/FwAvalonia/Detail/) ->FwAvaloniaTests/Detail/(create the folder on first use) - Composer wiring (
Src/xWorks/Avalonia/Composer/) ->xWorksTests/Avalonia/Composer/
Process
Work the plan top to bottom, one item at a time: write the test, run it, and record the result against the plan item (passing, failing-as-expected for TDD, or blocked-needs-manual). Keep generated code to the repository comment standard. When the plan is exhausted, run the owning suite in full and report: items implemented, items flagged manual-only, suite counts, and any plan item whose wording did not survive contact with the code (report it back for the developer to re-decide -- do not silently reinterpret).
Signals
- GitHub stars
- 111
- Forks
- 42
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
create-integration-test- Source
- github.com/sillsdev/fieldworks