AI Unified Process plugin for the Vaadin/jOOQ stack
86
91%
Does it follow best practices?
Impact
86%
1.10xAverage score across 13 eval scenarios
Low
Low-risk findings worth noting
{
"context": "Tests whether the agent automates a documented patient-intake test case (TC-002) as a single Playwright end-to-end journey using Drama Finder, handling two documented traps: an ambiguous \"Name\" label (page filter vs dialog field) that requires scoped lookups, and a foreign-key-style constraint that cleanup must delete the appointment before the patient.",
"type": "weighted_checklist",
"checklist": [
{
"name": "Extends AbstractBasePlaywrightIT",
"description": "The test class extends AbstractBasePlaywrightIT from the Drama Finder library (org.vaadin.addons.dramafinder.AbstractBasePlaywrightIT) and is annotated with @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)",
"max_score": 8
},
{
"name": "Single test method for the whole journey",
"description": "The complete test case flow (register patient, verify listed, book appointment, verify confirmation) runs inside ONE @Test method — NOT split into multiple @Test methods that depend on each other's state or on execution order",
"max_score": 10
},
{
"name": "Flow order and step traceability",
"description": "The four Flow rows are implemented in the test case's order as private step methods or clearly delimited step blocks with comments naming each step",
"max_score": 8
},
{
"name": "Test case ID in @DisplayName",
"description": "The @Test or class-level @DisplayName references the test case ID TC-002 for traceability",
"max_score": 6
},
{
"name": "Dialog 'Name' field scoped, not the page filter",
"description": "The Name field inside the \"Register Patient\" dialog is located with a lookup scoped to dialog.getLocator() — a page-level TextFieldElement.getByLabel(page, \"Name\") would hit the filter field and is not used for the dialog input",
"max_score": 10
},
{
"name": "Test Data values used verbatim",
"description": "The steps use the literal test case values: patient \"Erika Muster\", email \"erika.muster@example.com\", birth date 12/04/1985, practitioner \"Dr. Smith\", reason \"Checkup\"",
"max_score": 6
},
{
"name": "DatePickerElement for Birth Date",
"description": "The Birth Date is set through DatePickerElement (setValue with a LocalDate or the view-format string) — not by typing into a generic text field or raw locator",
"max_score": 6
},
{
"name": "Navigates between the two views mid-flow",
"description": "getView() returns the first Flow step's route (\"patients\"), and the booking step moves to the Appointments view (route \"appointments\") during the flow; the final validation navigates back to the patients grid",
"max_score": 8
},
{
"name": "Validation section asserted",
"description": "Both Validation entries are asserted after the flow: the appointments grid contains the patient's appointment with \"Dr. Smith\", and the patient's status on the patients grid is \"Active\"",
"max_score": 10
},
{
"name": "Cleanup deletes appointment before patient",
"description": "An @AfterEach cleanup removes the created appointment FIRST and the created patient SECOND (per BR-041), tolerates a test that failed midway (existence checks), and removes only data this test case created",
"max_score": 8
},
{
"name": "No raw page.locator() calls",
"description": "The test file contains NO calls to page.locator(...) and no XPath — Drama Finder element wrappers are used exclusively",
"max_score": 8
},
{
"name": "No Thread.sleep / waitForTimeout",
"description": "The test file contains NO calls to Thread.sleep() or page.waitForTimeout(); assertions use auto-retrying Drama Finder / Playwright assertThat methods rather than isVisible()/getAttribute() booleans",
"max_score": 6
},
{
"name": "getTotalRowCount for grid counts",
"description": "Any grid count assertion uses getTotalRowCount() — NOT getRenderedRowCount() or a count of rendered row elements",
"max_score": 6
},
{
"name": "Test class naming convention",
"description": "The test class is named TC002PatientIntakeIT (matching the TC<id><PascalCaseTestCaseName>IT pattern for TC-002)",
"max_score": 5
}
]
}