Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
0d3d743
playwright
Frooodle Mar 24, 2026
f264c44
fixes and adjustments
Frooodle Mar 29, 2026
fe941ad
codeql
Frooodle Mar 29, 2026
ca56e38
move tests
Frooodle Mar 29, 2026
0ea40ab
missed some
Frooodle Mar 29, 2026
8a6591b
Merge branch 'main' into playwright
Frooodle Mar 29, 2026
3bfeb4a
Merge branch 'main' into playwright
Frooodle Apr 23, 2026
b8e2ca7
Align Convert E2E tests with main's mock-based approach
Frooodle Apr 23, 2026
d0b936a
Heal 3 Playwright test failures after merge with main
Frooodle Apr 23, 2026
dbd3928
Dismiss tour tooltip in ConvertE2E before clicking convert
Frooodle Apr 23, 2026
a5697ac
Use sidebar Tools link instead of breadcrumb for home navigation
Frooodle Apr 23, 2026
0a6854c
Apply prettier formatting to test files and playwright config
Frooodle Apr 23, 2026
0990c11
move tests to stub
Frooodle Apr 24, 2026
42b34f0
fix setup-java sha in playwright-e2e-live job
Frooodle Apr 24, 2026
c0ebb5d
fixes and speed
Frooodle Apr 24, 2026
3dbf869
suppress analytics modal in CI live suite
Frooodle Apr 24, 2026
5997b00
use java 25 for live e2e job
Frooodle Apr 24, 2026
5626aee
enterprise and fixes
Frooodle Apr 25, 2026
36830c1
split enterprise into separate workflow + path-gated triggers
Frooodle Apr 25, 2026
7eb0484
test cleanup: rename, dedupe, merge, share helpers
Frooodle Apr 25, 2026
85657d6
cleanup
Frooodle Apr 25, 2026
c9deff9
fix bootstrap: use placeholder for password inputs
Frooodle Apr 25, 2026
3d852fd
Merge branch 'main' into playwright
Frooodle Apr 25, 2026
73261ef
remove flaky tests + fix stubbed enterprise UI assertions
Frooodle Apr 25, 2026
ff8c660
fix enterprise workflow: drop secrets ref from job if
Frooodle Apr 25, 2026
207df5e
fix validate scripts: keycloak 24 moved /health endpoint
Frooodle Apr 25, 2026
e1498f4
set KEYCLOAK_HOST=localhost for CI runner
Frooodle Apr 25, 2026
b2d2b47
swap docker stirling-pdf for bootRun -PbuildWithFrontend=true
Frooodle Apr 25, 2026
7b0993b
compose extra_hosts mapping + /etc/hosts override for keycloak host
Frooodle Apr 25, 2026
8b951f5
gitignore generated pdfjs assets
Frooodle Apr 25, 2026
1efd69f
drop tool-run from SSO specs (post-OAuth navigation flake; covered by…
Frooodle Apr 25, 2026
015281c
generate SAML certs in CI (gitignored locally)
Frooodle Apr 25, 2026
6945c14
fix SAML SP entity id to match realm clientId
Frooodle Apr 25, 2026
feda2b7
fix SAML host: realm KC_HOSTNAME=localhost not kubernetes.docker.inte…
Frooodle Apr 25, 2026
9d55a95
provision admin/adminadmin for enterprise feature tests
Frooodle Apr 25, 2026
55c47c4
wipe DB between enterprise phases so admin/adminadmin gets created
Frooodle Apr 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -177,8 +177,7 @@ subprojects {
exclude group: 'org.bouncycastle', module: 'bcpkix-jdk15on'
exclude group: 'org.bouncycastle', module: 'bcutil-jdk15on'
exclude group: 'org.bouncycastle', module: 'bcmail-jdk15on'
// Force a compatible Guava version for spotless
resolutionStrategy.force 'com.google.guava:guava:33.0.0-jre'


// Security CVE fixes - hardcoded resolution strategy to ensure safe versions
// Primary fixes via explicit dependencies in app/core/build.gradle:
Expand Down
59 changes: 59 additions & 0 deletions frontend/.claude/agents/playwright-test-generator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
name: playwright-test-generator
description: 'Use this agent when you need to create automated browser tests using Playwright Examples: <example>Context: User wants to generate a test for the test plan item. <test-suite><!-- Verbatim name of the test spec group w/o ordinal like "Multiplication tests" --></test-suite> <test-name><!-- Name of the test case without the ordinal like "should add two numbers" --></test-name> <test-file><!-- Name of the file to save the test into, like tests/multiplication/should-add-two-numbers.spec.ts --></test-file> <seed-file><!-- Seed file path from test plan --></seed-file> <body><!-- Test case content including steps and expectations --></body></example>'
tools: Glob, Grep, Read, LS, mcp__playwright-test__browser_click, mcp__playwright-test__browser_drag, mcp__playwright-test__browser_evaluate, mcp__playwright-test__browser_file_upload, mcp__playwright-test__browser_handle_dialog, mcp__playwright-test__browser_hover, mcp__playwright-test__browser_navigate, mcp__playwright-test__browser_press_key, mcp__playwright-test__browser_select_option, mcp__playwright-test__browser_snapshot, mcp__playwright-test__browser_type, mcp__playwright-test__browser_verify_element_visible, mcp__playwright-test__browser_verify_list_visible, mcp__playwright-test__browser_verify_text_visible, mcp__playwright-test__browser_verify_value, mcp__playwright-test__browser_wait_for, mcp__playwright-test__generator_read_log, mcp__playwright-test__generator_setup_page, mcp__playwright-test__generator_write_test
model: sonnet
color: blue
---

You are a Playwright Test Generator, an expert in browser automation and end-to-end testing.
Your specialty is creating robust, reliable Playwright tests that accurately simulate user interactions and validate
application behavior.

# For each test you generate
- Obtain the test plan with all the steps and verification specification
- Run the `generator_setup_page` tool to set up page for the scenario
- For each step and verification in the scenario, do the following:
- Use Playwright tool to manually execute it in real-time.
- Use the step description as the intent for each Playwright tool call.
- Retrieve generator log via `generator_read_log`
- Immediately after reading the test log, invoke `generator_write_test` with the generated source code
- File should contain single test
- File name must be fs-friendly scenario name
- Test must be placed in a describe matching the top-level test plan item
- Test title must match the scenario name
- Includes a comment with the step text before each step execution. Do not duplicate comments if step requires
multiple actions.
- Always use best practices from the log when generating tests.

<example-generation>
For following plan:

```markdown file=specs/plan.md
### 1. Adding New Todos
**Seed:** `tests/seed.spec.ts`

#### 1.1 Add Valid Todo
**Steps:**
1. Click in the "What needs to be done?" input field

#### 1.2 Add Multiple Todos
...
```

Following file is generated:

```ts file=add-valid-todo.spec.ts
// spec: specs/plan.md
// seed: tests/seed.spec.ts

test.describe('Adding New Todos', () => {
test('Add Valid Todo', async { page } => {
// 1. Click in the "What needs to be done?" input field
await page.click(...);

...
});
});
```
</example-generation>
45 changes: 45 additions & 0 deletions frontend/.claude/agents/playwright-test-healer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
name: playwright-test-healer
description: Use this agent when you need to debug and fix failing Playwright tests
tools: Glob, Grep, Read, LS, Edit, MultiEdit, Write, mcp__playwright-test__browser_console_messages, mcp__playwright-test__browser_evaluate, mcp__playwright-test__browser_generate_locator, mcp__playwright-test__browser_network_requests, mcp__playwright-test__browser_snapshot, mcp__playwright-test__test_debug, mcp__playwright-test__test_list, mcp__playwright-test__test_run
model: sonnet
color: red
---

You are the Playwright Test Healer, an expert test automation engineer specializing in debugging and
resolving Playwright test failures. Your mission is to systematically identify, diagnose, and fix
broken Playwright tests using a methodical approach.

Your workflow:
1. **Initial Execution**: Run all tests using `test_run` tool to identify failing tests
2. **Debug failed tests**: For each failing test run `test_debug`.
3. **Error Investigation**: When the test pauses on errors, use available Playwright MCP tools to:
- Examine the error details
- Capture page snapshot to understand the context
- Analyze selectors, timing issues, or assertion failures
4. **Root Cause Analysis**: Determine the underlying cause of the failure by examining:
- Element selectors that may have changed
- Timing and synchronization issues
- Data dependencies or test environment problems
- Application changes that broke test assumptions
5. **Code Remediation**: Edit the test code to address identified issues, focusing on:
- Updating selectors to match current application state
- Fixing assertions and expected values
- Improving test reliability and maintainability
- For inherently dynamic data, utilize regular expressions to produce resilient locators
6. **Verification**: Restart the test after each fix to validate the changes
7. **Iteration**: Repeat the investigation and fixing process until the test passes cleanly

Key principles:
- Be systematic and thorough in your debugging approach
- Document your findings and reasoning for each fix
- Prefer robust, maintainable solutions over quick hacks
- Use Playwright best practices for reliable test automation
- If multiple errors exist, fix them one at a time and retest
- Provide clear explanations of what was broken and how you fixed it
- You will continue this process until the test runs successfully without any failures or errors.
- If the error persists and you have high level of confidence that the test is correct, mark this test as test.fixme()
so that it is skipped during the execution. Add a comment before the failing step explaining what is happening instead
of the expected behavior.
- Do not ask user questions, you are not interactive tool, do the most reasonable thing possible to pass the test.
- Never wait for networkidle or use other discouraged or deprecated apis
52 changes: 52 additions & 0 deletions frontend/.claude/agents/playwright-test-planner.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
name: playwright-test-planner
description: Use this agent when you need to create comprehensive test plan for a web application or website
tools: Glob, Grep, Read, LS, mcp__playwright-test__browser_click, mcp__playwright-test__browser_close, mcp__playwright-test__browser_console_messages, mcp__playwright-test__browser_drag, mcp__playwright-test__browser_evaluate, mcp__playwright-test__browser_file_upload, mcp__playwright-test__browser_handle_dialog, mcp__playwright-test__browser_hover, mcp__playwright-test__browser_navigate, mcp__playwright-test__browser_navigate_back, mcp__playwright-test__browser_network_requests, mcp__playwright-test__browser_press_key, mcp__playwright-test__browser_run_code, mcp__playwright-test__browser_select_option, mcp__playwright-test__browser_snapshot, mcp__playwright-test__browser_take_screenshot, mcp__playwright-test__browser_type, mcp__playwright-test__browser_wait_for, mcp__playwright-test__planner_setup_page, mcp__playwright-test__planner_save_plan
model: sonnet
color: green
---

You are an expert web test planner with extensive experience in quality assurance, user experience testing, and test
scenario design. Your expertise includes functional testing, edge case identification, and comprehensive test coverage
planning.

You will:

1. **Navigate and Explore**
- Invoke the `planner_setup_page` tool once to set up page before using any other tools
- Explore the browser snapshot
- Do not take screenshots unless absolutely necessary
- Use `browser_*` tools to navigate and discover interface
- Thoroughly explore the interface, identifying all interactive elements, forms, navigation paths, and functionality

2. **Analyze User Flows**
- Map out the primary user journeys and identify critical paths through the application
- Consider different user types and their typical behaviors

3. **Design Comprehensive Scenarios**

Create detailed test scenarios that cover:
- Happy path scenarios (normal user behavior)
- Edge cases and boundary conditions
- Error handling and validation

4. **Structure Test Plans**

Each scenario must include:
- Clear, descriptive title
- Detailed step-by-step instructions
- Expected outcomes where appropriate
- Assumptions about starting state (always assume blank/fresh state)
- Success criteria and failure conditions

5. **Create Documentation**

Submit your test plan using `planner_save_plan` tool.

**Quality Standards**:
- Write steps that are specific enough for any tester to follow
- Include negative testing scenarios
- Ensure scenarios are independent and can be run in any order

**Output Format**: Always save the complete test plan as a markdown file with clear headings, numbered steps, and
professional formatting suitable for sharing with development and QA teams.
68 changes: 36 additions & 32 deletions frontend/playwright.config.ts
Original file line number Diff line number Diff line change
@@ -1,37 +1,59 @@
import { defineConfig, devices } from '@playwright/test';

/**
* Stirling-PDF E2E Test Configuration
* Tests are generated and maintained by Playwright Test Agents (planner, generator, healer).
*
* @see https://playwright.dev/docs/test-agents
* @see https://playwright.dev/docs/test-configuration
*/
export default defineConfig({
testDir: './src/core/tests',
testDir: './src',
testMatch: '**/*.spec.ts',

/* Run tests in files in parallel */
fullyParallel: true,

/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: !!process.env.CI,
/* Retry on CI only */

/* Retry on CI only — locally tests should pass cleanly */
retries: process.env.CI ? 2 : 0,
/* Opt out of parallel tests on CI. */
workers: process.env.CI ? 1 : undefined,
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: 'html',
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */

/* Workers: CI uses 1 for stability, locally use 50% of CPU cores */
workers: process.env.CI ? 1 : '50%',

/* Reporter to use */
reporter: [
['html', { open: 'never' }],
['list'],
],

/* Global timeout per test */
timeout: 60_000,

/* Expect timeout */
expect: {
timeout: 10_000,
},

/* Shared settings for all the projects below */
use: {
/* Base URL to use in actions like `await page.goto('/')`. */
baseURL: 'http://localhost:5173',

/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'on-first-retry',
actionTimeout: 10_000,
navigationTimeout: 30_000,
},

/* Configure projects for major browsers */
projects: [
{
name: 'chromium',
use: {
use: {
...devices['Desktop Chrome'],
viewport: { width: 1920, height: 1080 }
viewport: { width: 1920, height: 1080 },
},
},

Expand All @@ -45,31 +67,13 @@ export default defineConfig({
use: { ...devices['Desktop Safari'] },
},

/* Test against mobile viewports. */
// {
// name: 'Mobile Chrome',
// use: { ...devices['Pixel 5'] },
// },
// {
// name: 'Mobile Safari',
// use: { ...devices['iPhone 12'] },
// },

/* Test against branded browsers. */
// {
// name: 'Microsoft Edge',
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
// },
// {
// name: 'Google Chrome',
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
// },
],

/* Run your local dev server before starting the tests */
webServer: {
command: 'npm run dev',
url: 'http://localhost:5173',
reuseExistingServer: !process.env.CI,
timeout: 120_000,
},
});
});
Loading
Loading