Best for
- Use when the user asks to "write Karibu tests", "unit test a Vaadin view", "test the UI server-side", "create view tests", or mentions Karibu testing, Vaadin unit tests, or server-side UI testing.
AI-Unified-Process/marketplace/aiup-vaadin-jooq/skills/karibu-test/SKILL.md
Creates Karibu server-side unit tests for Vaadin views covering navigation, component interactions, form validation, grid operations, and notifications. Use when the user asks to "write Karibu tests", "unit test a Vaadin view", "test the UI server-side", "create view tests", or mentions Karibu testing, Vaadin unit tests, or server-side UI testing.
Decision brief
Legacy skill — no longer recommended for new code. Since Vaadin 25.1 the official Vaadin Browserless Testing framework (com.vaadin:browserless-test-junit6) is free and open source under Apache 2.0. It supersedes the community Karibu Testing library. Prefer /browserless-test for…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/AI-Unified-Process/marketplace --skill "aiup-vaadin-jooq/skills/karibu-test"Inspect the Agent Skill "karibu-test" from https://github.com/AI-Unified-Process/marketplace/blob/f6d063ef36d4f42defbd41eebcd3b25896bdd8ef/aiup-vaadin-jooq/skills/karibu-test/SKILL.md at commit f6d063ef36d4f42defbd41eebcd3b25896bdd8ef. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Create Karibu unit tests for Vaadin views based on the use case $ARGUMENTS. Karibu Testing allows server-side testing of Vaadin components without a browser.
Annotate each test method with the use case ID and (when applicable) the scenario and business rules it covers. The values must match headings in the corresponding UC-XXX-.md spec:
1. Read the use case specification (docs/use-cases/UC-XXX-.md) to identify the main success scenario, alternative flows (A1, A2, …), and referenced business rules (BR-XXX) 2. Check whether a UseCase annotation type already exists in the project. If not, create UseCase.java with…
A diff of the specification change may follow the file path in the arguments. When it is there, it is the definitive list of what changed — work through it change by change. A removed line means the scenario it described was dropped: delete the tests that exist only for it inste…
Karibu tests are use case tests. Each test class verifies the behavior of exactly one use case from the use case specification (docs/use-cases/UC-XXX-.md).
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 94/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 118 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Legacy skill — no longer recommended for new code. Since Vaadin 25.1 the official Vaadin Browserless Testing framework (
com.vaadin:browserless-test-junit6) is free and open source under Apache 2.0. It supersedes the community Karibu Testing library. Prefer/browserless-testfor new test classes. Use this skill only when extending an existing Karibu-based test suite.
Create Karibu unit tests for Vaadin views based on the use case $ARGUMENTS. Karibu Testing allows server-side testing of Vaadin components without a browser.
If the KaribuTesting MCP server (https://karibu-testing-mcp.martinelli.ch/mcp) is configured, use it for documentation and code generation; otherwise rely on your own knowledge and the documentation links below. See the MCP setup rule to configure this optional server.
A diff of the specification change may follow the file path in the arguments. When it is there, it is the definitive list of what changed — work through it change by change. A removed line means the scenario it described was dropped: delete the tests that exist only for it instead of keeping them as passing extras.
Before writing new tests, look for an existing test class for this use case — search for
UC<id>*Test and for methods annotated @UseCase(id = "UC-XXX"). If one exists, update it to
match the current specification instead of creating a second test class:
@UseCase AnnotationKaribu tests are use case tests. Each test class verifies the behavior of exactly one use case
from the use case specification (docs/use-cases/UC-XXX-*.md).
Test classes must be named after the use case using the pattern
UC<id><PascalCaseUseCaseName>Test — for example UC001RegisterPersonTest for use case UC-001
"Register Person". This is the convention the AI Unified Process IntelliJ Navigator plugin relies on to link
specs and tests.
@UseCase annotationEvery test method must be annotated with @UseCase(id = "UC-XXX", ...) so the
AI Unified Process IntelliJ Navigator plugin can wire up
gutter icons and Find Usages between the Markdown spec and the Java tests.
Bootstrap step. Before writing any tests, check whether the project already contains an
annotation type named UseCase (search the project for @interface UseCase). If it does not,
create it. The package does not matter — the plugin resolves the annotation by short name — but a
conventional location is src/main/java/<group>/<artifact>/usecase/UseCase.java. The annotation
must have exactly this shape:
package com.example.app.usecase;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface UseCase {
String id();
String scenario() default "Main Success Scenario";
String[] businessRules() default {};
}
Annotate each test method with the use case ID and (when applicable) the scenario and business
rules it covers. The values must match headings in the corresponding UC-XXX-*.md spec:
| Attribute | Maps to spec heading | Default |
|---|---|---|
id | **Use Case ID:** UC-XXX | (required) |
scenario | ## Main Success Scenario or ### A1: … | "Main Success Scenario" |
businessRules | ### BR-XXX headings inside the same UC | {} |
@Test
@UseCase(id = "UC-001")
void register_person_with_valid_data() { ... }
@Test
@UseCase(id = "UC-001", scenario = "A1: Email Already Exists")
void registration_fails_when_email_already_exists() { ... }
@Test
@UseCase(id = "UC-001", scenario = "A2: Invalid Postal Code", businessRules = {"BR-003"})
void registration_fails_when_postal_code_invalid() { ... }
Create test data using Flyway migrations in src/test/resources/db/migration.
| Approach | Location | Purpose |
|---|---|---|
| Flyway migration | src/test/resources/db/migration/V*.sql | Populate test data |
| Manual cleanup | @AfterEach method | Remove test-created data |
| Class | Purpose |
|---|---|
| com.github.mvysny.kaributesting.v10.LocatorJ | Find components |
| com.github.mvysny.kaributesting.v10.GridKt | Grid assertions and interactions |
| com.github.mvysny.kaributesting.v10.NotificationsKt | Notification assertions |
| com.github.mvysny.kaributesting.v10.pro.ConfirmDialogKt | ConfirmDialog interactions |
Use references/UC001ManagePersonsTest.java as the test
class structure. It demonstrates the UC<id><Name>Test class naming, the @UseCase annotation on
every test method, and how to map alternative flows (scenario = "A1: …") and business rules
(businessRules = {"BR-…"}) onto the spec headings.
UI.getCurrent().navigate(PersonView.class);
// Find by type
var grid = _get(Grid.class);
var button = _get(Button.class, spec -> spec.withCaption("Save"));
var textField = _get(TextField.class, spec -> spec.withLabel("Name"));
// Find all matching
List<Button> buttons = _find(Button.class);
// Get grid size
assertThat(GridKt._size(grid)).isEqualTo(100);
// Get selected items
Set<PersonRecord> selected = grid.getSelectedItems();
// Select a row
GridKt._selectRow(grid, 0);
// Get cell component (for action buttons)
GridKt._getCellComponent(grid, 0, "actions")
.getChildren()
.filter(Button.class::isInstance)
.findFirst()
.map(Button.class::cast)
.ifPresent(Button::click);
// Get cell value
String name = GridKt._getFormattedRow(grid, 0).get("name");
// Set field values
_get(TextField.class, spec -> spec.withLabel("Name"))._setValue("John");
_get(ComboBox.class, spec -> spec.withLabel("Country"))._setValue(country);
_get(DatePicker.class, spec -> spec.withLabel("Birth Date"))._setValue(LocalDate.of(1990, 1, 1));
// Click button
_get(Button.class, spec -> spec.withCaption("Save"))._click();
// Expect notification
expectNotifications("Record saved successfully");
// Assert no notifications
assertThat(NotificationsKt.getNotifications()).isEmpty();
// Click confirm in dialog
ConfirmDialogKt._fireConfirm(_get(ConfirmDialog.class));
// Click cancel
ConfirmDialogKt._fireCancel(_get(ConfirmDialog.class));
Use AssertJ or Karibu Testing assertions:
| Assertion Type | Example |
|---|---|
| Grid size | assertThat(GridKt._size(grid)).isEqualTo(10) |
| Component visible | assertThat(button.isVisible()).isTrue() |
| Component enabled | assertThat(button.isEnabled()).isTrue() |
| Field value | assertThat(textField.getValue()).isEqualTo("x") |
| Collection size | assertThat(items).hasSize(5) |
| Notifications | expectNotifications("Success") |
docs/use-cases/UC-XXX-*.md) to identify the main success
scenario, alternative flows (A1, A2, …), and referenced business rules (BR-XXX)UseCase annotation type already exists in the project. If not, create
UseCase.java with the canonical shape shown aboveUC<id><PascalCaseUseCaseName>Test using the template (or open the
existing one)@UseCase(id = "UC-XXX", scenario = "…", businessRules = {"BR-…"})
mirroring the spec headings_dump() to inspect the component treeuc-coverage sub-agent and close every gap it reports — see
Coverage Check below@UseCase annotation contract): https://github.com/AI-Unified-Process/intellij-pluginhttps://karibu-testing-mcp.martinelli.ch/mcp)Before you report the use case as tested, hand it to the read-only uc-coverage sub-agent of this
plugin (it may appear as aiup-vaadin-jooq:uc-coverage). It re-reads the specification and reports
which main success scenario steps, alternative flows, business rules, preconditions, and
postconditions no test exercises — and which tests exercise behaviour the specification no longer
describes.
UC-001 tests. Add "work in
progress" when the test class is not finished yet, so it reports remaining work instead of
defects.**Status:** value. Pass that suggestion on to the
user; leave the document itself alone.agents/uc-coverage.md) yourself./coverage-check UC-XXX judges implementation and tests together in one
matrix — that is the audit behind a justified **Status:** Tested.Frequently asked questions
Legacy skill — no longer recommended for new code. Since Vaadin 25.1 the official Vaadin Browserless Testing framework (com.vaadin:browserless-test-junit6) is free and open source under Apache 2.0. It supersedes the community Karibu Testing library. Prefer /browserless-test for…
The source record exposes this install command: npx skills add https://github.com/AI-Unified-Process/marketplace --skill "aiup-vaadin-jooq/skills/karibu-test". Inspect the command and pinned source before running it.
Alternatives
vasilyu1983/AI-Agents-public
Guides iOS testing with XCTest, XCUITest, Swift Testing, simctl, and xcresult. Use when choosing destinations, controlling flakes, or parsing test artifacts for native apps.
dotnet/skills
Fix, modernize, review, or explain supplied MSTest code and MSTest-specific configuration while honoring installed versions and project style. ALWAYS USE for direct corrections: expected/actual order; generic/manual assertions; exception, hard-cast, or object[] patterns; TestContext/lifecycle; timeout/cancellation; condition/retry/cleanup; parallelization; MSTest.Sdk setup; or MSTESTxxxx. Use for "review" only when corrected code or edits are wanted. DO NOT USE for new test-case design (code-tes
yonatangross/orchestkit
Grade work that already exists and decide whether it can merge. Runs the project's current unit, integration, and E2E suites plus security scanning and type checking, scores every dimension 0-10, and returns a merge verdict with a VERIFIED-vs-CLAIMED evidence manifest. Writes no test files and edits no source. Use when verifying changes are ready to merge. Use /ork:cover instead when the tests still have to be written.
microsoft/Sico
Execute Android UI workflows on a sandbox device, review results, and produce a structured execution report.