Skip to content

feat: add UI test suite with Ultron framework (33 tests)#5

Merged
AndVl1 merged 9 commits intomasterfrom
feat/ui-tests
Feb 1, 2026
Merged

feat: add UI test suite with Ultron framework (33 tests)#5
AndVl1 merged 9 commits intomasterfrom
feat/ui-tests

Conversation

@AndVl1
Copy link
Owner

@AndVl1 AndVl1 commented Feb 1, 2026

Summary

  • Add complete UI test suite using Ultron framework with PageObject pattern
  • 33 tests covering all screens: Home, Settings, Bout, GroupSetup, GroupDashboard, BoutConfirm + 2 E2E flows
  • All 33/33 tests pass on API 30 emulator
  • Fix FieBoutOrder.removeLast() crash on API <35
  • Fix SoundManager.release() crash order
  • Upgrade dependencies for Ultron compatibility: Kotlin 2.1.21, Compose BOM 2025.05.00, Room 2.7.1

Test plan

  • All 33 instrumented tests pass on connected emulator (API 30)
  • CI workflow runs on GitHub Actions (uses reactivecircus/android-emulator-runner)
  • Verify no regressions on production app behavior

🤖 Generated with Claude Code

AndVl1 and others added 9 commits February 1, 2026 12:42
- Added GitHub Actions workflow for running instrumented UI tests on PRs
- Configured Android emulator (API 30, x86_64, Pixel 6 profile)
- Upload test results and Allure reports as artifacts
- JUnit report publishing with PR comments
- Added dummy google-services.json for CI (Firebase config not needed for tests)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Added testTag modifiers to all key UI elements across 8 screens:
- HomeScreen: settings button, title, navigation buttons
- BoutScreen: timer, scores, cards, buttons, dialogs (with dynamic tags for LEFT/RIGHT)
- SettingsScreen: back button, weapon/mode chips, switches
- GroupSetupScreen: fencer count/mode/weapon chips, input fields, create button
- GroupDashboardScreen: nav buttons, progress text, action buttons, section titles
- BoutConfirmScreen: bout number, fencer names, swap/start/cancel buttons
- BoutResultScreen: title, fencer names, scores, continue button
- BoutsListScreen: back button, list, bout items, pending status

All tags follow the convention: screenName_elementType_identifier
Example: bout_button_leftScore, home_button_singleBout

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add 8 Page Objects (HomePage, BoutPage, GroupSetupPage, GroupDashboardPage, etc.)
- Add 6 screen test classes and 2 E2E test classes covering full app flow
- Configure Ultron compose/android/allure dependencies
- Upgrade Kotlin 2.1.21, Compose BOM 2025.05.00, Room 2.7.1 for compatibility
- Fix FieBoutOrder.removeLast() crash on API <35 (use removeAt instead)
- Fix SoundManager release order to prevent crash after toneGenerator.release()

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Allure listener is not configured in tests, so this step always
finds no files. Remove to avoid confusing CI output.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ration

- Switch test runner to UltronAllureTestRunner
- Enable UltronAllureConfig with results to /sdcard/Download/
- Add @Epic/@feature annotations to all test classes
- Wrap test actions in Allure step() blocks for structured reports
- Update CI to pull allure-results and generate HTML report artifact
- 33/33 tests pass with full Allure metadata (steps, epics, features)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move adb pull inside emulator-runner script (emulator alive)
- Fix allure_results path for nested dir from adb pull
- Fix JUnit glob: connected/**/*.xml to match debug/ subdir
- Add || true to gradle so allure pull runs even on test failure

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The multi-file Allure report shows "loading" spinner when opened
from filesystem (file://) due to CORS blocking XHR data requests.
Switch to --single-file mode which inlines all data into index.html.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@AndVl1 AndVl1 merged commit b8935e9 into master Feb 1, 2026
2 checks passed
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.

1 participant