Skip to content

Conversation

@mraible
Copy link
Contributor

@mraible mraible commented Oct 22, 2025

Implements end-to-end testing infrastructure for Foundry Scalable RTR app with automated install-test-uninstall cycle.

Key features:

  • Complete E2E test suite covering app installation, navigation, and UI verification
  • Structured Logger with CI-aware logging and singleton pattern
  • CI-optimized TestConfig with environment-aware timeouts
  • GitHub Actions workflow with security hardening (StepSecurity)
  • Automated app cleanup via teardown phase
  • 9 passing tests including setup and teardown

Test coverage:

  • App installation and navigation
  • All Jobs page rendering
  • Run History page rendering
  • Audit Log page rendering
  • Create Job button accessibility
  • App navigation flow between pages
  • Visual verification screenshots

Framework components:

  • BasePage with common page object functionality
  • SmartWaiter for intelligent waiting and retry logic
  • Singleton Logger implementation consistent with other Foundry samples
  • Page objects: ScalableRTRHomePage, AllJobsPage, RunHistoryPage, AuditLogPage
  • Authentication setup via TOTP
  • App uninstall teardown for clean test cycles

CI/CD:

  • Hardened GitHub Actions workflow with SHA-pinned actions
  • Foundry CLI integration for deployment and cleanup
  • Artifact upload for test results and screenshots
  • Proper app deletion after tests

@mraible mraible requested a review from a team October 27, 2025 18:08
- Update AppCatalogPage waitForInstallation() to wait for both 'installing' and 'installed' toast messages sequentially
- Throw clear error if 'installing' message never appears
- Wait up to 60s for final 'installed' or 'error' message
- Detect and report installation failures immediately
…k extraction

- Rename configureServiceNowIfNeeded() to configureApiIntegrationIfNeeded()
- Add comprehensive documentation explaining the method is designed for framework extraction
- Note that method is a no-op for apps without API integrations
- Mark with @future-framework-extraction tag for easy identification during extraction
The app requires clicking the app button to expand a submenu, then
clicking the link within that submenu to navigate. This matches the
blog post pattern and uses:
- RetryHandler.withPlaywrightRetry() for automatic retries
- smartClick() for reliable interaction
- page.waitForURL() to confirm navigation completed

All 10 tests now pass.
…AppCatalogPage

- Update harden-runner to v2.13.2
- Update Homebrew action comment to 2024-10-25
- Update setup-node to v4.1.0
- Update create-envfile to v2.0.3
- Update upload-artifact to v4.5.0
- Remove ServiceNow-specific references from configureApiIntegrationIfNeeded method
- Replace with generic API integration pattern that works for any app
- Update upload-artifact to v5.0.0 (latest)
- Update harden-runner to v2.13.2
- Update checkout to v4.2.2
- Update setup-go to v5.1.0
- Update setup-node to v4.1.0
- Update borales/actions-yarn to v5.3.0
- Update peter-evans/create-pull-request to v7.0.5
- Remove duplicate checkout/setup-node in rebuild.yml
This app has no API integration configuration, so the method should be empty.
The method is required by BasePage but never called for this page object
since navigation is done via Custom Apps menu. Return empty string instead
of throwing an error.
Changes getCurrentUrl() and waiter from protected to public in BasePage,
allowing direct access from tests instead of using bracket notation workaround.
This improves type safety and code clarity.
@mraible mraible merged commit 08b4296 into main Nov 13, 2025
@mraible mraible deleted the add-e2e-tests branch November 13, 2025 14:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants