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/4d073197a39f3b79b7aae9ee5407c00a8f6e1975/aiup-vaadin-jooq/skills/karibu-test/SKILL.md at commit 4d073197a39f3b79b7aae9ee5407c00a8f6e1975. 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 | 106 | 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 AIUP IntelliJ Navigator plugin relies on to link
specs and tests.
@UseCase annotationEvery test method must be annotated with @UseCase(id = "UC-XXX", ...) so the
AIUP 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 tree@UseCase annotation contract): https://github.com/AI-Unified-Process/intellij-pluginhttps://karibu-testing-mcp.martinelli.ch/mcp)Alternatives
AI-Unified-Process/marketplace
Creates Vaadin Browserless server-side unit tests for Vaadin views covering navigation, component interactions, form validation, grid operations, and notifications. Use when the user asks to "write Browserless tests", "write Vaadin UI unit tests", "unit test a Vaadin view without a browser", "create view tests with the official Vaadin testing framework", or mentions Browserless testing, SpringBrowserlessTest, browserless-test-junit6, UI Unit Testing, or server-side Vaadin testing.
mgiovani/cc-arsenal
Multi-agent review team: architecture, security, performance, testing, style, docs/UX, plus an adversary that cross-examines the other 6, for security-sensitive, architectural, or large PRs (15+ files) where a single-agent pass risks missing cross-cutting issues. Use for auth/payments/PII changes, schema/pattern changes, compliance sign-off, or when asked to 'get the review team on this' / 'multi-agent review' / 'thorough review before merge'. For a standard PR or a quick pre-merge check, use /r
event4u-app/agent-config
Use when writing Playwright E2E tests — browser automation, visual regression testing, Page Objects, fixtures, and reliable test patterns.
JasonColapietro/suede-creator-skills
Design AI evals that catch regressions before users do: rubrics, test cases, failure modes, acceptance gates, and AI-SPEC artifacts.