npx claudepluginhub martinellich/aiup-marketplace --plugin aiup-vaadin-jooqWant just this skill?
Then install: npx claudepluginhub u/[userId]/[slug]
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.
This skill uses the workspace's default tool permissions.
templates/ExampleViewTest.javaKaribu Test
Instructions
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.
Use the KaribuTesting MCP server for documentation and code generation.
DO NOT
- Use Mockito for mocking
- Use @Transactional annotation (transaction boundaries must stay intact)
- Use services, repositories, or DSLContext to create test data
- Delete all data in cleanup (only remove data created during the test)
- Use browser-based testing patterns (this is server-side testing)
Test Data Strategy
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 |
Key Helper Classes
| 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 |
Template
Use templates/ExampleViewTest.java as the test class structure.
Common Patterns
Navigate to View
UI.getCurrent().navigate(PersonView.class);
Find Components
// 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);
Grid Operations
// 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");
Form Interactions
// 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();
Notification Assertions
// Expect notification
expectNotifications("Record saved successfully");
// Assert no notifications
assertThat(NotificationsKt.getNotifications()).isEmpty();
ConfirmDialog
// Click confirm in dialog
ConfirmDialogKt._fireConfirm(_get(ConfirmDialog.class));
// Click cancel
ConfirmDialogKt._fireCancel(_get(ConfirmDialog.class));
Assertions Reference
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") |
Workflow
- Read the use case specification
- Use TodoWrite to create a task for each test scenario
- Create test class using the template
- For each test:
- Navigate to the view
- Find components using LocatorJ
- Perform interactions
- Assert expected outcomes
- Clean up test data if created during test
- Run tests to verify they pass
- If a test fails:
- Check component locators with
_dump()to inspect the component tree - Verify test data exists in the Flyway test migrations
- Ensure navigation to the correct view before finding components
- Check component locators with
- Mark todos complete
Resources
- Karibu Testing documentation: https://github.com/mvysny/karibu-testing/tree/master/karibu-testing-v10
- Use the KaribuTesting MCP server for additional patterns
Similar Skills
Expert guidance for Next.js Cache Components and Partial Prerendering (PPR). **PROACTIVE ACTIVATION**: Use this skill automatically when working in Next.js projects that have `cacheComponents: true` in their next.config.ts/next.config.js. When this config is detected, proactively apply Cache Components patterns and best practices to all React Server Component implementations. **DETECTION**: At the start of a session in a Next.js project, check for `cacheComponents: true` in next.config. If enabled, this skill's patterns should guide all component authoring, data fetching, and caching decisions. **USE CASES**: Implementing 'use cache' directive, configuring cache lifetimes with cacheLife(), tagging cached data with cacheTag(), invalidating caches with updateTag()/revalidateTag(), optimizing static vs dynamic content boundaries, debugging cache issues, and reviewing Cache Component implementations.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.