CtrlK
CommunityDocumentationLog inGet started
Tessl Logo

karibu-tester

tessl install github:martinellich/aiup-marketplace --skill karibu-tester
github.com/martinellich/aiup-marketplace

Creates Karibu unit tests for Vaadin views.

Review Score

72%

Validation Score

12/16

Implementation Score

88%

Activation Score

40%

Karibu Test Writer

Instructions

Create Karibu unit tests for Vaadin views. 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.

ApproachLocationPurpose
Flyway migrationsrc/test/resources/db/migration/V*.sqlPopulate test data
Manual cleanup@AfterEach methodRemove test-created data

Key Helper Classes

ClassPurpose
com.github.mvysny.kaributesting.v10.LocatorJFind components
com.github.mvysny.kaributesting.v10.GridKtGrid assertions and interactions
com.github.mvysny.kaributesting.v10.NotificationsKtNotification assertions
com.github.mvysny.kaributesting.v10.pro.ConfirmDialogKtConfirmDialog 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 TypeExample
Grid sizeassertThat(GridKt._size(grid)).isEqualTo(10)
Component visibleassertThat(button.isVisible()).isTrue()
Component enabledassertThat(button.isEnabled()).isTrue()
Field valueassertThat(textField.getValue()).isEqualTo("x")
Collection sizeassertThat(items).hasSize(5)
NotificationsexpectNotifications("Success")

Workflow

  1. Read the use case specification
  2. Use TodoWrite to create a task for each test scenario
  3. Create test class using the template
  4. For each test:
    • Navigate to the view
    • Find components using LocatorJ
    • Perform interactions
    • Assert expected outcomes
    • Clean up test data if created during test
  5. Run tests to verify
  6. Mark todos complete

Resources