CtrlK
BlogDocsLog inGet started
Tessl Logo

ai-unified-process/aiup-vaadin-jooq

AI Unified Process plugin for the Vaadin/jOOQ stack

86

1.10x
Quality

91%

Does it follow best practices?

Impact

86%

1.10x

Average score across 13 eval scenarios

SecuritybySnyk

Low

Low-risk findings worth noting

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-12/

{
  "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
    }
  ]
}

.mcp.json

README.md

tile.json