Skip to content

User Acceptance Testing UAT Script

Russ Leikis edited this page Sep 4, 2026 · 2 revisions

User Acceptance Testing (UAT) Script: Ultra-Tracker

This script outlines the step-by-step verification procedures to ensure that the time tracking logic, database persistence, layout scaling, and hardware integration features meet the system requirements.


Tester Prerequisites & Environment Setup

Before beginning execution, ensure the testing machine fulfills the following criteria:

  • Operating System: Windows, Linux, or MacOS.
  • Input Device: Standard keyboard with a dedicated 10-key Numpad (or a USB 10-key peripheral).
  • Test Files Directory: Ensure sample files are placed in the localized system directory:
    • Windows: %userprofile%\Documents\ultra-tracker\.event-config\
    • Linux: $HOME/Documents/ultra-tracker/.event-config/
    • MacOS: /Users/username/Documents/ultra-tracker/.event-config/

Test Suite 1: Initial Application Configuration & Recovery

Test Case 1.1: Cold Start Ingestion

  • Objective: Verify that baseline race schemas load securely without UI distortion.
  • Steps:
    1. Open the application. Navigate to the Settings Page.
    2. Click Load Stations File and select your stations.json configuration.
    3. Click Load Athletes File and select your master athlete registry CSV.
    4. Click Load Drops File to apply known Did Not Start and Drop records.
  • Expected Result:
    • All files import successfully with no console errors.
    • The Stations Page accurately populates locations, mileage, and cutoff times.
    • The background service automatically initiates a database backup within 5 minutes.

Test Case 1.2: Hard Database Reconstruction & Recovery

  • Objective: Validate recovery steps from a catastrophic database failure using continuous log scripts.
  • Steps:
    1. While on the Settings Page, locate the Developer Tools highlighted in RED.
    2. Click Recreate Database and confirm the destructive prompt.
    3. Navigate to the Stats Page and confirm all grids are completely wiped.
    4. Return to Settings, execute the precise recovery sequence: Load Stations -> Load Athletes -> Load Drops.
    5. Click Recover Data From CSV File (marked in ORANGE) and select your continuous history ledger.
  • Expected Result:
    • The local database is cleanly purged and structurally rebuilt.
    • Importing the continuous ledger restores the exact prior session history automatically with zero data gaps.

Test Suite 2: Timing Records, Shortcuts, & Sanity Checks

Test Case 2.1: High-Speed Fast-Key Log Entries

  • Objective: Verify immediate data insertion using 10-key numpad shortcuts from the focused BIB# block.
  • Steps:
    1. Navigate to the Stats Page and click inside the BIB# box.
    2. Type a valid athlete number (e.g., 104) and press the Numpad Minus key (-).
    3. Type another valid athlete number (e.g., 215) and press the Numpad Add key (+).
    4. Type a third valid athlete number (e.g., 318) and press the Numpad Enter key.
  • Expected Result:
    • Athlete 104 instantly logs a timestamp in the In column.
    • Athlete 215 instantly logs a timestamp in the Out column.
    • Athlete 318 instantly logs identical timestamps simultaneously in both the In and Out columns.

Test Case 2.2: Structural Validation Restrictions (Hard Breaks)

  • Objective: Verify that chronological faults and incomplete rows block database execution.
  • Steps:
    1. Locate any record row on the Stats Page and click the Edit Icon on the far-right side.
    2. Clear out the In time field entirely and click Apply.
    3. Re-enter a valid In time, but deliberately alter the Out time so that it occurs before the arrival time. Click Apply.
  • Expected Result:
    • Clearing the In-Time displays a red warning banner: "Validation Error: Record must have a valid In time." Storage is blocked.
    • The chronological reversal displays: "Validation Error: Time Out cannot be recorded prior to Time In." Changes fail to commit.

Test Case 2.3: Data Sanitization & Soft Warnings

  • Objective: Ensure the data engine cleans text characters and handles unrecognized participants without throwing critical fatal loops.
  • Steps:
    1. Open an athlete's Edit Pane. In the Notes box, type exactly: Leg cramp, checked by medical staff, clearing station. Click Apply.
    2. Type an unlisted number (e.g., 9999) directly into the main BIB# input box and hit enter.
  • Expected Result:
    • The text input automatically substitutes commas, saving to disk as: Leg cramp; checked by medical staff; clearing station.
    • The unlisted bib saves cleanly but highlights the line in orange. The name cell outputs a soft status flag: "WARNING: Unknown Athlete".

Test Suite 3: Data Integrity, Filtering, & Field Communications

Test Case 3.1: Resolution Scaling & Grid Controls

  • Objective: Confirm column filtering menus remain perfectly accessible without UI overlapping.
  • Steps:
    1. Click on individual column headers on the Stats Page (e.g., Status, Bib#, TimeIn).
    2. Click the three vertical dots (Filter Icon) on a header to bring up options.
    3. Drag your desktop window smaller to simulate lower display spaces or high system resolution scaling.
  • Expected Result:
    • Columns sort flawlessly between Ascending and Descending states on click.
    • Filter menus render cleanly over grids. Column filter controls do not collide or lock up features under reduced widths.

Test Case 3.2: Incremental File Splitting

  • Objective: Validate automated filename step-indexing for physical radio transfers.
  • Steps:
    1. Navigate to the Export Page.
    2. Click Export Incremental CSV File.
    3. Return to the Stats Page, log two additional athlete time stamps, and return to the Export screen.
    4. Click Export Incremental CSV File a second time.
    5. Open your local file explorer directory to review the generated output logs.
  • Expected Result:
    • The system creates sequentially incremented sheets (e.g., Aid05Times_01i.csv followed by Aid05Times_02i.csv).
    • The second sheet contains only the new records created after the first export, drastically shrinking packet payload sizes.

Test Case 3.3: CSV Export Status Indicators

  • Objective: Verify that CSV exports update the timing-record indicator when OpenSplitTime is not signed in.
  • Steps:
    1. Confirm OpenSplitTime is signed out, then create a timing record on the Stats Page.
    2. Confirm the record shows a gray hollow indicator.
    3. Run Export Incremental CSV File and return to the Stats Page.
    4. Create another timing record, then run Export Full CSV File.
  • Expected Result:
    • The first record changes to a green hollow indicator after the successful incremental export.
    • The second record changes to a green hollow indicator after the successful full export.

Test Suite 4: Hardware Peripheral Integrations

Test Case 4.1: RFID Boundary Restrictions

  • Objective: Verify safety constraints managing active hardware capture loops.
  • Steps:
    1. Navigate to the Settings Page and locate the RFID Configuration section.
    2. Adjust your configuration profile to a mid-race checkpoint (e.g., Aid Station 3) and attempt to click Initialize RFID.
    3. Reconfigure your application station profile to a designated Start Line or Finish Line and click Initialize RFID.
  • Expected Result:
    • Mid-race aid station positions keep the Zebra FXR90 control buttons completely locked out or disabled.
    • Start/Finish station assignments unlock access instantly, enabling a seamless connection to the background hardware tracking service.

Test Suite 5: OpenSplitTime Integration

Test Case 5.1: OpenSplitTime Status And Sign-Out

  • Objective: Verify the optional OpenSplitTime workflow and its status precedence over CSV export indicators.
  • Steps:
    1. Load a stations file configured with an OpenSplitTime staging event group, then sign in with a steward account.
    2. Create a timing record and wait for the upload result.
    3. Use Pause Pushes, create another record, and confirm it remains pending. Use Resume Pushes and wait for its upload result.
    4. Sign out and inspect a record that was uploaded to OpenSplitTime but was not included in a CSV export.
  • Expected Result:
    • While signed in, timing records show yellow while pending, solid green after upload, and solid red if an upload fails.
    • Pausing prevents automatic uploads; resuming allows pending records to upload.
    • After sign-out, the uploaded-but-not-exported record shows a gray hollow indicator. CSV-exported records show a green hollow indicator.

UAT Execution Checklist: Ultra-Tracker

Test ID Test Case Name Feature / Component Verification Criteria (Pass Condition) Status (P / F) Tester Initials Date Checked Notes / Defects
TS 1.1 Cold Start Ingestion File Management Configuration files (stations.json, athletes, Drops) load with no console errors; values populate perfectly.
TS 1.2 Hard DB Recovery Developer Tools Recreate Database completely purges active tables; CSV Recovery option fully restores the exact session history.
TS 2.1a Fast-Key Log In Keyboard Shortcuts Pressing Numpad Minus (-) logs an instant timestamp strictly within the In column.
TS 2.1b Fast-Key Log Out Keyboard Shortcuts Pressing Numpad Add (+) logs an instant timestamp strictly within the Out column.
TS 2.1c Fast-Key Log In/Out Keyboard Shortcuts Pressing Numpad Enter logs identical timestamps simultaneously across both In and Out columns.
TS 2.2a Missing Anchor Time Hard Validation System rejects records saved without an In time; pops up visual warning text: "Validation Error: Record must have a valid In time."
TS 2.2b Chronological Fault Hard Validation System rejects records where TimeIn > TimeOut; outputs: "Validation Error: Time Out cannot be recorded prior to Time In."
TS 2.3a Comma Injection Data Sanitization App replaces commas (,) inside Note fields with semicolons (;) automatically upon losing focus.
TS 2.3b Unknown Bib Registry Soft Validation Unrecognized Bib saves without crashing; highlights row orange and flags the name space as "WARNING: Unknown Athlete".
TS 3.1a Resolution Scaling UI Accessibility Decreasing window width does not cause header filters to freeze up or visually collide with sort options.
TS 3.1b Grid Controls Stats Page Grid Clicking headers cleanly switches sorting between Ascending/Descending; three-dot icon triggers filtering menus.
TS 3.2 Incremental Splitting Export Utilities File names auto-increment (e.g., _04i.csv to _05i.csv); subsequent exports write only newly added/modified row indices.
TS 3.3 CSV Export Indicators Export Utilities Incremental and full exports change included records from gray hollow to green hollow indicators.
TS 4.1a RFID Mid-Race Block Hardware Boundary Stations designated as mid-course checkpoints keep Zebra FXR90 peripheral initialization tools strictly disabled.
TS 4.1b RFID Boundary Unlock Hardware Integration Configuring station as Start Line or Finish Line unlocks RFID initialization buttons instantly.
TS 5.1 OpenSplitTime Status OpenSplitTime Integration Signed-in records show pending/uploaded/failed statuses; pause/resume works; sign-out restores CSV export status.

Mock Testing Data

Here is copyable mock testing data formatted to execute the scenarios mapped out in the User Testing Script and Checklist. Save each code block below into a raw flat text file using the exact file names provided. These files contain specific edge-case inputs (such as matching IDs for standard flows and unlisted IDs for warning states) to properly trigger the system's data validation logic.

1. eventname-2026-stations.json

  • Purpose: Validates TS 1.1 (Cold Start Ingestion) and structural schema mapping.
  • Testing Coverage: Configures the aid station metadata, mileage splits, and strict 24-hour cutoff times.
[
  {
    "stationId": "Aid01",
    "stationName": "Start Line",
    "mileage": 0.0,
    "cutoffTime": "06:00",
    "operatorCallsign": "KE7VFI"
  },
  {
    "stationId": "Aid05",
    "stationName": "Bridger Trail",
    "mileage": 26.2,
    "cutoffTime": "14:30",
    "operatorCallsign": "KG7EW"
  },
  {
    "stationId": "Aid12",
    "stationName": "Finish Line",
    "mileage": 100.0,
    "cutoffTime": "23:59",
    "operatorCallsign": "N8MLS"
  }
]

2. athletes.csv

  • Purpose: Validates master registration checks, roster searching (TS 3.1b), and names matching.
  • Testing Coverage: Contains specific IDs used throughout your time-stamping testing scripts.
BibID,FirstName,LastName,City,StartTime
104,Alice,Smith,Logan,06:00:00
215,Bob,Jones,Providence,06:00:00
318,Charlie,Brown,Hyde Park,06:00:00
450,Diana,Prince,Smithfield,06:15:00

3. drops.csv

  • Purpose: Validates Did Not Start and Drop Reason import behavior (TS 1.1).
  • Testing Coverage: Includes one Did Not Start and one Withdrew record for roster-status and station-precedence checks.
eventname-2026,0-start-line,drops-export
stationId,bibId,dropReason,dropDateTime,note
0-start-line,450,did-not-start,06:15:00 01 Sep 2026,Unable to start
5-bridger-trail,215,withdrew,11:24:12 01 Sep 2026,Knee injury

5. continuous-history-ledger.csv

  • Purpose: Validates TS 1.2 (Catastrophic Database Restoration from a raw log).
  • Testing Coverage: Contains baseline historical data to check if records are completely restored after a database wipe.
index,sent,bibId,timeIn,timeOut,dropReason,dropStation,note
1,1,104,10:15:30 01 Sep 2026,10:22:15 01 Sep 2026,,,Feeling strong; clear hydration check
2,1,215,11:10:00 01 Sep 2026,11:24:12 01 Sep 2026,withdrew,5-bridger-trail,Withdrew due to knee injury

💡 Execution Tips for Testing:

  1. Load these files in order via the Settings Page: stations.json → athletes.csv → drops.csv.
  2. To test TS 2.1 shortcuts, use Bib IDs 104, 215, and 318.
  3. To test TS 2.3b (Unknown Bib Warning), type 9999 into the input field.

If you are interested, I can provide a template for a Bug/Defect Logging table to track items that receive a "Fail" status during execution. Let me know how you want to proceed!

Clone this wiki locally