STD: Config Mode (CFGMODE)
Version: v3.1.0 Status: Draft SRS Source:
docusaurus/docs/srs/configmode.mdDomain: CFGMODE
Overview
This document specifies tests for the Config Mode domain, which covers the dedicated configuration application mode introduced in v3.1.0. Config Mode replaces the legacy single-page AssayConfigurations interface with a multi-panel, multi-tab configuration management environment featuring a propose/approve workflow, real-time broadcasting, and role-based access control.
Domain Characteristics:
- Primary function: UI application mode with dedicated layout, sidebar, and tab navigation
- Secondary function: Two-step propose/approve workflow for configuration changes
- Tertiary function: Real-time WebSocket broadcasting and role-based access
- Configuration dependency:
config_mode_two_step_workflow,use_sample_type,help_items,use_extraction_instruments,specimen_type_source
Test Method Rationale: Config Mode is predominantly a UI feature domain. The primary test method is TM-UI (browser tests) for layout verification, navigation flows, form behavior, and visual feedback. TM-API supplements for proposal workflow data operations, pagination, and payload validation. TM-HYB is used where both UI interaction and backend state verification are required (e.g., propose/approve lifecycle, WebSocket events).
Test Case Convention: Steps describe logical actions, not raw UI mechanics. Use "Navigate to Config Mode" or "Propose configuration changes", not "Click the pink button" or "Drag the drawer handle". This ensures test intent survives UI redesigns.
Coverage Summary
| REQ ID | Title | ACs | Tests | AC Coverage | Method | Gaps |
|---|---|---|---|---|---|---|
| REQ-CFGMODE-001 | Config Mode as separate application mode | 6 | TC-CFGMODE-001, TC-CFGMODE-002 | 6/6 (100%) | TM-UI | None |
| REQ-CFGMODE-002 | Config Sidebar navigation | 10 | TC-CFGMODE-003, TC-CFGMODE-004, TC-CFGMODE-005 | 10/10 (100%) | TM-UI | None |
| REQ-CFGMODE-003 | Config Home split-panel layout | 6 | TC-CFGMODE-006, TC-CFGMODE-007 | 6/6 (100%) | TM-UI | None |
| REQ-CFGMODE-004 | Hierarchical tab navigation | 3 | TC-CFGMODE-008 | 3/3 (100%) | TM-UI | None |
| REQ-CFGMODE-005 | Multiselect mode for bulk assay operations | 3 | TC-CFGMODE-009 | 3/3 (100%) | TM-UI | None |
| REQ-CFGMODE-006 | Kit and Assay management | 4 | TC-CFGMODE-010 | 4/4 (100%) | TM-UI | None |
| REQ-CFGMODE-007 | Changes Drawer | 4 | TC-CFGMODE-011 | 4/4 (100%) | TM-UI | None |
| REQ-CFGMODE-008 | Two-step propose/approve workflow | 7 | TC-CFGMODE-012, TC-CFGMODE-013 | 7/7 (100%) | TM-HYB | None |
| REQ-CFGMODE-009 | Proposed Configurations floating button | 3 | TC-CFGMODE-014 | 3/3 (100%) | TM-UI | None |
| REQ-CFGMODE-010 | Proposed Configurations Drawer | 6 | TC-CFGMODE-015, TC-CFGMODE-016 | 6/6 (100%) | TM-HYB | None |
| REQ-CFGMODE-011 | Real-time proposed config notifications | 4 | TC-CFGMODE-017 | 4/4 (100%) | TM-HYB | None |
| REQ-CFGMODE-012 | CLIENT_CONFIG role access | 3 | TC-CFGMODE-018 | 3/3 (100%) | TM-UI | None |
| REQ-CFGMODE-013 | Exit Config Mode | 1 | TC-CFGMODE-019 | 1/1 (100%) | TM-UI | None |
| REQ-CFGMODE-014 | Proposed Configurations history page | 3 | TC-CFGMODE-020 | 3/3 (100%) | TM-UI | None |
| REQ-CFGMODE-015 | Rule Mappings tab access | 2 | TC-CFGMODE-021 | 2/2 (100%) | TM-UI | None |
| REQ-CFGMODE-016 | Automapped vs custom rule categorization | 4 | TC-CFGMODE-022 | 4/4 (100%) | TM-UI | None |
| REQ-CFGMODE-017 | Rule Mappings form fields | 6 | TC-CFGMODE-023 | 6/6 (100%) | TM-UI | None |
| REQ-CFGMODE-018 | Rule Mappings confirm and cancel | 4 | TC-CFGMODE-024 | 4/4 (100%) | TM-UI | None |
| REQ-CFGMODE-019 | Remove all mappings | 3 | TC-CFGMODE-025 | 3/3 (100%) | TM-UI | None |
| REQ-CFGMODE-020 | Mapping record generation | 2 | TC-CFGMODE-026 | 2/2 (100%) | TM-HYB | None |
| REQ-CFGMODE-021 | Rule Mapping changes in Changes Drawer | 2 | TC-CFGMODE-027 | 2/2 (100%) | TM-UI | None |
| REQ-CFGMODE-022 | Rule Mapping changes in Proposed Config Drawer | 1 | TC-CFGMODE-028 | 1/1 (100%) | TM-UI | None |
| REQ-CFGMODE-023 | Paginated rules data fetching | 2 | TC-CFGMODE-029 | 2/2 (100%) | TM-API | None |
| REQ-CFGMODE-024 | Data tables in collapsible bottom panel | 3 | TC-CFGMODE-030 | 3/3 (100%) | TM-UI | None |
| REQ-CFGMODE-025 | Global/Strict UI pattern | 7 | TC-CFGMODE-031, TC-CFGMODE-032 | 7/7 (100%) | TM-UI | None |
| REQ-CFGMODE-026 | Reporting Cut-offs tab | 8 | TC-CFGMODE-033, TC-CFGMODE-034 | 8/8 (100%) | TM-UI | None |
| REQ-CFGMODE-027 | Combined Outcomes tab | 9 | TC-CFGMODE-035, TC-CFGMODE-036, TC-CFGMODE-037 | 9/9 (100%) | TM-UI | None |
| REQ-CFGMODE-028 | Cross Contamination Limits tab | 4 | TC-CFGMODE-038 | 4/4 (100%) | TM-UI | None |
| REQ-CFGMODE-029 | Curve Control Limits tab | 3 | TC-CFGMODE-039 | 3/3 (100%) | TM-UI | None |
| REQ-CFGMODE-030 | Combined Outcomes Changes Drawer detail | 4 | TC-CFGMODE-040 | 4/4 (100%) | TM-UI | None |
| REQ-CFGMODE-031 | Reporting Cut-offs existing settings table | 3 | TC-CFGMODE-041 | 3/3 (100%) | TM-UI | None |
| REQ-CFGMODE-032 | Combined Outcomes proposal payload optimization | 5 | TC-CFGMODE-042 | 5/5 (100%) | TM-API | None |
| REQ-CFGMODE-033 | Combined Outcomes is_strict change detection | 2 | TC-CFGMODE-043 | 2/2 (100%) | TM-UI | None |
| REQ-CFGMODE-034 | Combined Outcomes Min/Max CT visibility | 3 | TC-CFGMODE-044 | 3/3 (100%) | TM-UI | None |
Totals: 34 REQs, 140 ACs, 44 Test Cases, 100% Coverage
Test Cases
TC-CFGMODE-001: Config Mode entry and layout
Verifies: REQ-CFGMODE-001 (Entry and Layout ACs)
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- User logged in with SUPER_ADMIN role
- Multi-site configuration enabled with at least 2 sites
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | SUPER_ADMIN views main application sidebar | "Config Mode" button visible, replacing individual config page links | AC-001a |
| TV-002 | SUPER_ADMIN clicks Config Mode button | Layout switches to pink header, config sidebar, and config home content | AC-001b |
| TV-003 | Observe URL after entering Config Mode | Route is /config-home | AC-001c |
Steps:
- Observe the main application sidebar for Config Mode entry point
- Click the Config Mode button
- Verify the Config Mode layout renders with distinct visual identity
Expected Results:
- AC-001a: Main sidebar displays a single "Config Mode" button for SUPER_ADMIN, replacing individual configuration page links from v3.0.0
- AC-001b: Clicking Config Mode switches to Config Mode layout with pink header, config sidebar, and config home content
- AC-001c: Route navigates to
/config-home
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-002: Config Mode header elements
Verifies: REQ-CFGMODE-001 (Header ACs)
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- User logged in with SUPER_ADMIN role
- Multi-site enabled with at least 2 sites
- User is in Config Mode
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Observe Config Mode header background color | Pink background, distinct from standard blue header | AC-001d |
| TV-002 | SUPER_ADMIN with multi-sites observes header | Site selector dropdown present | AC-001e |
| TV-003 | Observe header controls | Notifications, settings, logout, role indicator, and display name present | AC-001f |
Steps:
- Observe the Config Mode header bar
- Verify all header elements are present and functional
Expected Results:
- AC-001d: Header displays pink background distinct from standard blue header
- AC-001e: Header contains site selector dropdown (SUPER_ADMIN with multi-sites)
- AC-001f: Header contains notifications, settings button, logout button, user role indicator, and user display name
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-003: Config Sidebar structure
Verifies: REQ-CFGMODE-002 (Sidebar Structure ACs)
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- User logged in with SUPER_ADMIN role
- At least 2 kits configured, each with at least 1 mix
- At least 1 mix not assigned to any kit
- User is in Config Mode
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Observe sidebar top controls | Logo, "Add Assay", "Create Kit", "Enable/Disable Multiselect" present | AC-002a |
| TV-002 | Observe sidebar hierarchy | Kits with nested assays, then unassigned assays, then unrecognised mixes | AC-002b |
| TV-003 | Observe sidebar bottom section | "Other Settings" expandable menu visible | AC-002c |
| TV-004 | Observe sidebar bottom section | "Exit Config Mode" button visible | AC-002d |
| TV-005 | SUPER_ADMIN observes sidebar | Application version displayed | AC-002e |
Steps:
- Observe sidebar structure and elements
- Verify kit/assay hierarchy display
- Verify bottom section elements
Expected Results:
- AC-002a: Sidebar displays application logo (click navigates to config home), "Add Assay" button, "Create Kit" button, "Enable/Disable Multiselect" toggle button
- AC-002b: Sidebar lists all kits with assays nested underneath, followed by unassigned assays, followed by unrecognised mixes
- AC-002c: Sidebar displays "Other Settings" expandable menu at the bottom
- AC-002d: Sidebar displays "Exit Config Mode" button at the bottom
- AC-002e: Sidebar displays application version for SUPER_ADMIN users
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-004: Config Sidebar drag-and-drop
Verifies: REQ-CFGMODE-002 (Drag-and-Drop ACs)
Method: TM-UI
Priority: Medium
Version: @V3_1_0
Preconditions:
- User logged in with SUPER_ADMIN role
- Multiselect is disabled
- At least 2 kits with mixes configured
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Drag mix from Kit A to Kit B (multiselect disabled) | Mix moves to Kit B in sidebar hierarchy | AC-002f |
| TV-002 | Observe visual feedback during drag | Drag preview and invalid drop zone hint displayed | AC-002g |
Steps:
- Drag a mix from one kit to another
- Observe visual feedback during drag operation
- Attempt to drop in an invalid zone
Expected Results:
- AC-002f: Sidebar supports drag-and-drop to reorganize mixes between kits when multiselect is disabled
- AC-002g: System provides visual feedback during drag operations including drag preview and invalid drop zone hint
Automation Status: Planned (drag-and-drop may require specialized browser driver support)
Jira: BT-4820
TC-CFGMODE-005: Config Sidebar Other Settings menu
Verifies: REQ-CFGMODE-002 (Other Settings ACs)
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- User logged in with SUPER_ADMIN role
- Feature flags:
use_extraction_instrumentsenabled,help_itemsenabled,specimen_type_source= "From Target Suffix" - User is in Config Mode
Test Data:
| Role | Expected Menu Items |
|---|---|
| SUPER_ADMIN | Extraction Models and Instruments, Thermocyclers Models and Instruments, Error Codes, Error Resolution, Lims Export, Help Items, Rule Tags, Tags, Specimen Types, Target Name Suffix to Specimen, Proposed Configurations |
| CLIENT_CONFIG | Proposed Configurations only |
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | SUPER_ADMIN expands "Other Settings" menu | Full menu with all feature-gated items visible | AC-002h, AC-002i |
| TV-002 | CLIENT_CONFIG expands "Other Settings" menu | Only "Proposed Configurations" visible | AC-002j |
| TV-003 | SUPER_ADMIN with use_extraction_instruments disabled | "Extraction Models and Instruments" hidden from menu | AC-002h |
Steps:
- Expand the "Other Settings" menu as SUPER_ADMIN
- Verify all expected items are present
- Log in as CLIENT_CONFIG and verify restricted menu
Expected Results:
- AC-002h: Other Settings provides access to secondary configuration pages based on role and feature flags
- AC-002i: SUPER_ADMIN sees full menu including feature-gated items (Extraction Models, Help Items, Target Name Suffix to Specimen)
- AC-002j: CLIENT_CONFIG sees only Proposed Configurations
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-006: Config Home layout and no-mix warning
Verifies: REQ-CFGMODE-003 (Layout ACs)
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- User logged in with SUPER_ADMIN role
- User is in Config Mode
- No mix selected from sidebar
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Enter Config Mode with no mix selected | Left panel (1/3) shows tab tree, right panel (2/3) shows "No Mix Selected" warning | AC-003a, AC-003b |
| TV-002 | Select a mix from sidebar | Configuration forms render in right panel | AC-003c |
Steps:
- Observe the Config Home page with no mix selected
- Select a mix from the sidebar
- Observe the layout change
Expected Results:
- AC-003a: Left panel displays hierarchical tab tree (1/3 width)
- AC-003b: Right panel (2/3 width) displays "No Mix Selected" warning with instructions when no mix is selected
- AC-003c: Configuration forms render only when a mix is selected
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-007: Config Home sequential navigation
Verifies: REQ-CFGMODE-003 (Sequential Navigation ACs)
Method: TM-UI
Priority: Medium
Version: @V3_1_0
Preconditions:
- User logged in with SUPER_ADMIN role
- Mix selected in Config Mode
- User is on the first tab
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Observe form area footer with mix selected | Back and Next buttons visible | AC-003d |
| TV-002 | Navigate to first tab, observe Back button | Back button disabled | AC-003e |
| TV-003 | Navigate to last tab, observe Next button | Next button disabled | AC-003e |
| TV-004 | Make unsaved change, click Next | Navigation blocked; warning message displayed | AC-003e, AC-003f |
Steps:
- Observe Back/Next buttons in the form area footer
- Navigate sequentially through tabs using Next
- Verify button disable states at first and last tabs
- Make a change on a tab and attempt to navigate away
Expected Results:
- AC-003d: Form area footer provides Back and Next buttons for sequential tab navigation
- AC-003e: Back disabled at first tab; Next disabled at last tab; both disabled when unsaved/unconfirmed changes exist
- AC-003f: Warning "Please save (or cancel) your changes before leaving this form" displayed when navigation blocked by unsaved changes
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-008: Hierarchical tab navigation
Verifies: REQ-CFGMODE-004 (Tab Hierarchy and Navigation Blocking ACs)
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- User logged in with SUPER_ADMIN role
- Mix selected in Config Mode
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Expand all collapsible sections in tab tree | Hierarchy matches spec: Assays And Targets, Controls, Rule Mappings, Test Codes (hidden), Control & Reporting Limits, Outcomes, Kits, Quantification (hidden), Calibration | AC-004a |
| TV-002 | Make unsaved change, click a different tab | Tab click blocked (cursor: not-allowed) | AC-004b |
| TV-003 | Cancel unsaved change, click a different tab | Tab navigation succeeds | AC-004c |
Steps:
- Observe the tab tree hierarchy in the left panel
- Expand all collapsible sections and verify structure matches specification
- Make a change to a form field
- Attempt to click a different tab
Expected Results:
- AC-004a: Tab hierarchy matches v3.1.0 specification: Assays And Targets, Controls, Rule Mappings, Test Codes (hidden), Control & Reporting Limits (with sub-tabs), Outcomes (with sub-tabs), Kits, Quantification (hidden, with sub-tabs), Calibration
- AC-004b: Tab clicks blocked (cursor: not-allowed) when unconfirmed changes exist
- AC-004c: User must save or cancel current changes before navigating to a different tab
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-009: Multiselect mode
Verifies: REQ-CFGMODE-005
Method: TM-UI
Priority: Medium
Version: @V3_1_0
Preconditions:
- User logged in with SUPER_ADMIN role
- At least 2 kits and 3 mixes configured
- User is in Config Mode
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Click "Enable Multiselect" | Checkboxes appear next to each kit and mix | AC-005a |
| TV-002 | Observe button label after enabling | Label changes to "Disable Multiselect" | AC-005b |
| TV-003 | Select multiple kits and mixes via checkboxes | All selected items highlighted for bulk filtering | AC-005c |
Steps:
- Click "Enable Multiselect" button
- Observe checkboxes appearing next to kits and mixes
- Select multiple kits and mixes
- Observe button label change
Expected Results:
- AC-005a: Clicking "Enable Multiselect" displays checkboxes next to each kit and mix
- AC-005b: Button label changes to "Disable Multiselect" when active
- AC-005c: Multiple kits and mixes may be selected simultaneously for bulk filtering
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-010: Kit and Assay management
Verifies: REQ-CFGMODE-006
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- User logged in with SUPER_ADMIN role
- User is in Config Mode
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Click "Create Kit", enter kit name | New kit appears in sidebar | AC-006a |
| TV-002 | Click "Add Assay", enter assay name | New assay (mix) appears in sidebar | AC-006b |
| TV-003 | Rename an existing kit | Kit name updated in sidebar | AC-006c |
| TV-004 | Delete a kit | Kit removed from sidebar | AC-006d |
Steps:
- Click "Create Kit" and enter a kit name
- Click "Add Assay" and enter an assay name
- Rename a kit
- Rename an assay
- Delete a kit
Expected Results:
- AC-006a: Sidebar provides "Create Kit" button and creates new kit
- AC-006b: Sidebar provides "Add Assay" button and adds new assay (mix)
- AC-006c: Kits and assays support rename operations
- AC-006d: Kits support delete operations
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-011: Changes Drawer display and actions
Verifies: REQ-CFGMODE-007
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- User logged in with SUPER_ADMIN role
- Mix selected in Config Mode
- Two-step workflow enabled for one test, disabled for another
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Modify a configuration value | Floating "Unsaved Changes" button appears at top-right | AC-007a |
| TV-002 | Click "Unsaved Changes" button | Changes Drawer opens | AC-007b |
| TV-003 | Observe Changes Drawer content | All pending modifications listed with detailed descriptions | AC-007c |
| TV-004 | Two-step workflow enabled, observe drawer actions | "Propose Changes" button available | AC-007d |
| TV-005 | Two-step workflow disabled, observe drawer actions | "Update" button available instead of "Propose Changes" | AC-007d |
Steps:
- Modify a configuration value on any tab
- Observe the floating "Unsaved Changes" button
- Click the button to open the Changes Drawer
- Observe drawer content and action buttons
Expected Results:
- AC-007a: Floating "Unsaved Changes" button appears at top-right when modifications not yet saved/proposed
- AC-007b: Clicking the button opens the Changes Drawer
- AC-007c: Changes Drawer lists all pending modifications with detailed descriptions
- AC-007d: Changes Drawer provides "Propose Changes" (two-step enabled) or "Update" (two-step disabled) action buttons
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-012: Two-step propose/approve workflow - proposal submission
Verifies: REQ-CFGMODE-008 (Proposal Submission ACs)
Method: TM-HYB
Priority: Critical
Version: @V3_1_0
Preconditions:
config_mode_two_step_workflowenabled- User A logged in with SUPER_ADMIN role
- Mix selected in Config Mode
Test Data:
| Scenario | Workflow Enabled | Existing Proposal | Expected |
|---|---|---|---|
| Propose changes | true | None | Propose button active |
| Direct update | false | N/A | Update button (no propose) |
| Conflicting proposal | true | Pending for same mix | Propose disabled with tooltip |
| Global outcome conflict | true | Any pending + current has global | Propose disabled |
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Two-step enabled, modify config | "Propose Changes" available, "Update" not available | AC-008a |
| TV-002 | Two-step disabled, modify config | "Update" available, no propose step | AC-008b |
| TV-003 | Submit proposal for Mix X, then User B proposes for same Mix X | "Propose Changes" disabled with tooltip identifying conflicting proposer | AC-008c |
| TV-004 | Pending proposal exists, propose changes with global CO | "Propose Changes" disabled due to global CO conflict | AC-008d |
Steps:
- Enable two-step workflow and modify configuration
- Observe that "Propose Changes" is available (not "Update")
- Submit a proposal
- Create a second proposal for the same mix and observe conflict detection
- Disable two-step workflow and verify "Update" is available instead
Expected Results:
- AC-008a: When two-step enabled, changes must be proposed; "Update" not available
- AC-008b: When two-step disabled, users may directly update without proposing
- AC-008c: "Propose Changes" disabled when a conflicting proposal exists, with tooltip identifying the conflicting proposer
- AC-008d: Conflict detection identifies overlapping proposals (same mix, or any pending with global CO, or current global CO with any pending)
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-013: Two-step workflow - notifications and real-time updates
Verifies: REQ-CFGMODE-008 (Notifications and Real-Time ACs), also supports REQ-CFGMODE-011
Method: TM-HYB
Priority: High
Version: @V3_1_0
Preconditions:
config_mode_two_step_workflowenabled- User A (SUPER_ADMIN) proposes changes
- User B (CLIENT_CONFIG) is logged in on the same site
- User C (SUPER_ADMIN) available to approve
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | User A submits proposal | User B (CLIENT_CONFIG) receives notification | AC-008e |
| TV-002 | User C approves proposal | User A (original proposer) receives approval notification | AC-008f |
| TV-003 | Proposal submitted/approved | WebSocket broadcasts update all connected clients in real-time | AC-008g |
Steps:
- User A submits a proposal
- Verify User B receives a notification
- User C approves the proposal
- Verify User A receives an approval notification
- Verify real-time WebSocket broadcasts update all connected clients
Expected Results:
- AC-008e: When proposal submitted, CLIENT_CONFIG/SENIOR users on the site receive a notification
- AC-008f: When proposal approved, original proposer receives a notification
- AC-008g: Real-time WebSocket broadcasts update all clients on proposal change, approval-in-progress, and completion
Automation Status: Planned (requires multi-user browser session or WebSocket verification)
Jira: BT-4820
TC-CFGMODE-014: Proposed Configurations floating button states
Verifies: REQ-CFGMODE-009
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
config_mode_two_step_workflowenabled- User logged in as CLIENT_CONFIG or SUPER_ADMIN
Test Data:
| State | Button Color | Label | Behavior |
|---|---|---|---|
| Proposals exist | Blue | "Proposed Configurations" | Opens drawer |
| Approval in progress | Grey + spinner | "Approval in Progress" | Read-only |
| Approval completed | Yellow + pulse | "the config is changed, update" | Refetches config |
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Proposals exist with two-step enabled | Blue "Proposed Configurations" button visible | AC-009a |
| TV-002 | Click blue button | Proposed Configurations Drawer opens | AC-009b |
| TV-003 | Approval in progress | Grey button with spinner, "Approval in Progress" label | AC-009b |
| TV-004 | Approval completed | Yellow pulsing button, "the config is changed, update" label | AC-009c |
| TV-005 | Click yellow pulsing button | Configurations refetched, default UI state restored | AC-009c |
Steps:
- Create a proposal and verify blue button state
- Initiate approval and verify grey spinner state
- Complete approval and verify yellow pulse state
- Click the yellow button and verify config refetch
Expected Results:
- AC-009a: Button visible when proposed configs exist and two-step enabled, or approval in progress, or update completed
- AC-009b: Blue state opens Proposed Configurations Drawer; grey state shows spinner during approval
- AC-009c: Yellow state with pulse animation; clicking refetches configurations and restores default UI state
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-015: Proposed Configurations Drawer - display
Verifies: REQ-CFGMODE-010 (Proposal Display ACs)
Method: TM-HYB
Priority: High
Version: @V3_1_0
Preconditions:
- At least 2 pending proposals (one mix-specific, one with global scope)
- User logged in as SUPER_ADMIN
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Open Proposed Configurations Drawer | Proposal cards display proposer name, change count, targeted mix names | AC-010a |
| TV-002 | View proposal with global scope | Card shows "All mixes" instead of specific mix names | AC-010a |
| TV-003 | Expand a proposal card | Detailed changes organized by type (up to 14 config types) | AC-010b |
Steps:
- Open the Proposed Configurations Drawer
- Observe proposal card contents
- Expand a proposal card to see change details
Expected Results:
- AC-010a: Each proposal card displays proposer name, change count summary, and targeted mix names (or "All mixes" for global scope)
- AC-010b: Expanding a proposal card shows detailed changes organized by type (up to 14 configuration types)
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-016: Proposed Configurations Drawer - approve and reject
Verifies: REQ-CFGMODE-010 (Approval and Rejection ACs)
Method: TM-HYB
Priority: Critical
Version: @V3_1_0
Preconditions:
- Pending proposal exists from User A
- User B logged in as SUPER_ADMIN (different from proposer)
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Open Proposed Config Drawer with pending proposal | "Approve Selected Proposal" button available | AC-010c |
| TV-002 | User A attempts to approve own proposal | Self-approval blocked with toast warning | AC-010d |
| TV-003 | User B (different SUPER_ADMIN) approves proposal | Async job dispatched, changes applied, proposer notified | AC-010e |
| TV-004 | User B clicks "Reject Selected Proposal" | Confirmation dialog shown; proposal deleted on confirm, broadcast sent | AC-010f |
Steps:
- Attempt to approve own proposal and verify rejection
- As a different SUPER_ADMIN, approve a proposal
- Verify async job dispatches and changes apply
- Reject a different proposal and verify deletion
Expected Results:
- AC-010c: "Approve Selected Proposal" button available in drawer
- AC-010d: Self-approval blocked with toast warning
- AC-010e: On approval: async job dispatched, progress broadcast, changes applied, proposer notified
- AC-010f: "Reject Selected Proposal" with confirmation dialog; rejection deletes proposal and broadcasts change
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-017: Real-time WebSocket notifications
Verifies: REQ-CFGMODE-011
Method: TM-HYB
Priority: High
Version: @V3_1_0
Preconditions:
- Pusher/WebSocket configured
- Two users connected on the same site in Config Mode
config_mode_two_step_workflowenabled
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | User A submits proposal | ProposedConfigurationsChangedBroadcast triggers refetch on User B | AC-011a |
| TV-002 | User B begins approval | ProposalApprovalInProgressBroadcast shows "Approval in Progress" on User A | AC-011b |
| TV-003 | Verify WebSocket channel | Channel is ConfigUpdates.{siteId} (presence channel) | AC-011c |
| TV-004 | Approval completes, click yellow pulsing button | Configs refetched, default UI state restored | AC-011d |
Steps:
- User A submits a proposal
- Verify
ProposedConfigurationsChangedBroadcasttriggers refetch on User B - User B begins approval
- Verify
ProposalApprovalInProgressBroadcastshows "Approval in Progress" on User A - After approval completes, click yellow pulsing button to refetch configurations
Expected Results:
- AC-011a:
ProposedConfigurationsChangedBroadcasttriggers proposal list refetch on all clients - AC-011b:
ProposalApprovalInProgressBroadcastshows "Approval in Progress" state on all clients - AC-011c: WebSocket channel is
ConfigUpdates.{siteId}(presence channel) - AC-011d: After approval, yellow pulsing "update" button refetches configs and restores default UI state
Automation Status: Planned (requires WebSocket/Pusher in test environment)
Jira: BT-4820
TC-CFGMODE-018: CLIENT_CONFIG role access
Verifies: REQ-CFGMODE-012
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- User logged in with CLIENT_CONFIG role
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | CLIENT_CONFIG user views main sidebar | "Config Mode" button visible | AC-012a |
| TV-002 | CLIENT_CONFIG clicks Config Mode button | Config Mode layout renders, config home accessible | AC-012b |
| TV-003 | CLIENT_CONFIG expands "Other Settings" | "Proposed Configurations" link visible | AC-012c |
Steps:
- Observe main application sidebar for Config Mode button
- Enter Config Mode
- Verify access to Proposed Configurations in Other Settings
Expected Results:
- AC-012a: CLIENT_CONFIG users see the "Config Mode" button in the main sidebar (new in v3.1.0)
- AC-012b: CLIENT_CONFIG users can enter Config Mode, access config home, and interact with configuration
- AC-012c: CLIENT_CONFIG users have "Proposed Configurations" link in Other Settings
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-019: Exit Config Mode
Verifies: REQ-CFGMODE-013
Method: TM-UI
Priority: Medium
Version: @V3_1_0
Preconditions:
- User is in Config Mode
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Click "Exit Config Mode" in config sidebar | Navigates to standard AppLayout with blue header and standard sidebar | AC-013a |
Steps:
- Click "Exit Config Mode" in the config sidebar
- Verify return to standard layout
Expected Results:
- AC-013a: Clicking "Exit Config Mode" navigates back to standard AppLayout with blue header and standard sidebar navigation
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-020: Proposed Configurations history page
Verifies: REQ-CFGMODE-014
Method: TM-UI
Priority: Medium
Version: @V3_1_0
Preconditions:
- Multiple proposals exist (some pending, some approved)
- User logged in with SUPER_ADMIN role
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | SUPER_ADMIN navigates to Other Settings > Proposed Configurations | Page loads with pending and approved proposals listed | AC-014a, AC-014b |
| TV-002 | CLIENT_CONFIG navigates to Proposed Configurations | Page accessible with proposals visible | AC-014a |
| TV-003 | Click bulk delete all proposals | All proposals removed | AC-014c |
| TV-004 | Click bulk delete approved proposals only | Only approved proposals removed, pending retained | AC-014c |
Steps:
- Navigate to Other Settings > Proposed Configurations
- Verify the page lists pending and approved proposals
- Test bulk deletion of all proposals
- Test bulk deletion of approved proposals only
Expected Results:
- AC-014a: Page accessible to SUPER_ADMIN and CLIENT_CONFIG roles
- AC-014b: Page lists all proposals (pending and approved) with full history
- AC-014c: Page supports bulk deletion of all proposals or only approved proposals
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-021: Rule Mappings tab access
Verifies: REQ-CFGMODE-015
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- User logged in with SUPER_ADMIN role
- Mix selected in Config Mode
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Observe tab tree in left panel | Rule Mappings is third top-level tab (after Controls) | AC-015a |
| TV-002 | Click Rule Mappings tab | Form in right panel; data table in bottom collapsible panel | AC-015b |
Steps:
- Observe the tab list for Rule Mappings position
- Click the Rule Mappings tab
- Verify form appears in right panel and data table available in bottom panel
Expected Results:
- AC-015a: Rule Mappings tab appears as the third top-level tab (after Controls)
- AC-015b: Form appears in the right panel; existing rules data table available in the bottom collapsible panel
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-022: Automapped vs custom rule categorization
Verifies: REQ-CFGMODE-016
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- Mix selected with both automapped and custom rules configured
- User logged in with SUPER_ADMIN role
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Open Rule Mappings data table | Four sections: Patient, Control, System (SUPER_ADMIN), Custom | AC-016a |
| TV-002 | Click an automapped rule row | Row is non-selectable; warning "Automapped Rules cannot be modified" | AC-016b, AC-016c |
| TV-003 | Toggle "Show automapped rules" OFF | Automapped sections hidden, only Custom Rules visible | AC-016b |
| TV-004 | Click a custom rule row | Form populated with selected rule's current mappings | AC-016d |
Steps:
- Open the Rule Mappings data table
- Observe the four sections: Patient Rules, Control Rules, System Rules, Custom Rules
- Attempt to interact with automapped rules
- Toggle "Show automapped rules" to hide/show automapped sections
- Click a custom rule to populate the form
Expected Results:
- AC-016a: Data table displays four sections: Patient Rules (automapped), Control Rules (automapped), System Rules (automapped, SUPER_ADMIN only), Custom Rules
- AC-016b: Automapped sections are read-only and non-selectable with "Show automapped rules" toggle
- AC-016c: Warning "Automapped Rules cannot be modified" displayed for automapped sections
- AC-016d: Clicking a custom rule populates the form with the selected rule's current mappings
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-023: Rule Mappings form fields
Verifies: REQ-CFGMODE-017
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- Mix selected with multiple roles, non-passive targets, and specimens configured
use_sample_typeenabled- Both new mapping and existing mapping scenarios
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Open Rule Mappings with no rule selected (new mode) | Roles, Targets, Specimens, and Rules dropdowns all visible | AC-017a, AC-017b, AC-017c, AC-017d |
| TV-002 | Clear all roles in new mode | Confirm button disabled | AC-017a |
| TV-003 | Observe Rules dropdown options | Available plain rules listed, excluding automapped and rules with matching role-target combos | AC-017e |
| TV-004 | Select existing rule from data table (edit mode) | Rules dropdown hidden; Roles/Targets/Specimens populated with current values | AC-017f |
| TV-005 | Disable use_sample_type, open new mapping mode | Specimens dropdown not visible | AC-017c |
Steps:
- Open Rule Mappings tab with no rule selected (new mapping mode)
- Verify Roles, Targets, Specimens, and Rules dropdowns are visible
- Select an existing rule from the data table (edit mode)
- Verify Rules dropdown is hidden; Roles/Targets/Specimens populated with current values
- Clear all roles and verify Confirm button disabled
Expected Results:
- AC-017a: Multi-select Roles dropdown displayed; at least one role required; Confirm disabled if none selected
- AC-017b: Multi-select Targets dropdown displays non-passive targets from selected mix; empty = global
- AC-017c: Multi-select Specimens dropdown displayed only when
use_sample_typeis enabled - AC-017d: Multi-select Rules dropdown displayed for new mappings only
- AC-017e: Rules dropdown lists available plain rules excluding automapped and rules with matching role-target combos
- AC-017f: When modifying existing rule, Rules dropdown is not visible
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-024: Rule Mappings confirm and cancel
Verifies: REQ-CFGMODE-018
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- Mix selected with existing rule mappings
- User has modified a rule mapping
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Modify rule's role/target selection | Confirm Changes button becomes enabled | AC-018a |
| TV-002 | Revert changes to original state | Confirm Changes button becomes disabled | AC-018b |
| TV-003 | Make change, click Cancel Changes | Form reverts to original state, tab navigation unblocked | AC-018c |
| TV-004 | Make change, attempt to click different tab | Tab navigation blocked | AC-018d |
Steps:
- Modify a rule's role/target selection
- Verify Confirm Changes button becomes enabled
- Revert changes to original state and verify button becomes disabled
- Make a change and click Cancel Changes
- Make a change and attempt tab navigation
Expected Results:
- AC-018a: Confirm Changes enabled only when deep comparison detects actual changes (sorted IDs)
- AC-018b: Button disabled when form is invalid or no changes made
- AC-018c: Cancel Changes reverts form to original state and unblocks tab navigation
- AC-018d: Unconfirmed changes block tab navigation; cancelling or reverting unblocks navigation
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-025: Remove all mappings
Verifies: REQ-CFGMODE-019
Method: TM-UI
Priority: Medium
Version: @V3_1_0
Preconditions:
- Mix selected with a custom rule that has existing mappings
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Select custom rule with existing mappings | "Remove All Mappings" button visible | AC-019a |
| TV-002 | Select custom rule with no mappings | "Remove All Mappings" button not visible | AC-019a |
| TV-003 | Click "Remove All Mappings" | Empty roles/targets/specimens submitted, all mappings cleared | AC-019b |
| TV-004 | Open Changes Drawer after removing mappings | Cleared mappings appear in drawer | AC-019c |
Steps:
- Select a custom rule with existing mappings
- Verify "Remove All Mappings" button is visible
- Click the button
- Open the Changes Drawer and verify cleared mappings appear
Expected Results:
- AC-019a: "Remove All Mappings" button visible only when selected rule has existing custom mappings
- AC-019b: Clicking submits empty roles/targets/specimens to clear all mappings
- AC-019c: Cleared mappings appear in the Changes Drawer
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-026: Mapping record generation
Verifies: REQ-CFGMODE-020
Method: TM-HYB
Priority: High
Version: @V3_1_0
Preconditions:
- Mix A selected with roles {R1, R2}, targets {T1, T2}, rule {Rule1}
- Rule1 also has existing mappings in Mix B
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Select R1, R2 roles + T1, T2 targets + Rule1, confirm | 4 mapping records created (R1xT1, R1xT2, R2xT1, R2xT2) | AC-020a |
| TV-002 | After confirm, check Mix B's mappings | Mix B's existing Rule1 mappings unchanged | AC-020b |
Steps:
- Select roles R1 and R2, targets T1 and T2, and rule Rule1
- Confirm changes
- Verify Cartesian product of mapping records created
- Verify Mix B's existing mappings remain unchanged
Expected Results:
- AC-020a: Mapping records created as Cartesian product: R1xT1, R1xT2, R2xT1, R2xT2 for Rule1 (x specimen if applicable)
- AC-020b: Existing mappings for other mixes preserved; only selected mix's mappings regenerated
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-027: Rule Mapping changes in Changes Drawer
Verifies: REQ-CFGMODE-021
Method: TM-UI
Priority: Medium
Version: @V3_1_0
Preconditions:
- User has modified rule mappings for at least 2 rules
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Open Changes Drawer after modifying 2 rules | "Rule Mappings" section shows count of 2 modified rules | AC-021a |
| TV-002 | Expand a modified rule in drawer | Changes grouped by role (and specimen); added in green, removed in red | AC-021b |
Steps:
- Open the Changes Drawer
- Locate the "Rule Mappings" section
- Expand a modified rule to see change details
Expected Results:
- AC-021a: Changes Drawer displays "Rule Mappings" section with count of modified rules
- AC-021b: Expanding a rule shows changes grouped by role (and specimen) with added in green and removed in red
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-028: Rule Mapping changes in Proposed Config Drawer
Verifies: REQ-CFGMODE-022
Method: TM-UI
Priority: Medium
Version: @V3_1_0
Preconditions:
- Proposed configuration exists with rule mapping changes (both new and modified rules)
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Open Proposed Config Drawer, expand proposal with new and modified rules | Each rule shows header ("New Rule"/"Modified Rule"), title, mappings with role/specimen/target names | AC-022a |
Steps:
- Open the Proposed Configurations Drawer
- Expand the proposal card
- Locate rule mapping details
Expected Results:
- AC-022a: For each proposed rule: header ("New Rule" or "Modified Rule"), rule title, all mappings with role name, specimen name (if applicable), and target name
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-029: Paginated rules data fetching
Verifies: REQ-CFGMODE-023
Method: TM-API
Priority: Medium
Version: @V3_1_0
Preconditions:
- Large rule dataset configured (exceeding single-response limits)
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Fetch rules data via API | Rules returned without mappings; mappings fetched separately with 2000/page pagination | AC-023a |
| TV-002 | Observe client-side data assembly | Data combined from parallel requests, no single response exceeds 6MB | AC-023b |
Steps:
- Fetch rules data via API endpoint
- Verify rules returned without mappings first
- Verify mappings fetched separately with pagination (2000 per page)
Expected Results:
- AC-023a: Rules fetched without mappings first, mappings fetched separately with pagination at 2000 per page
- AC-023b: Data combined client-side from parallel requests to prevent exceeding 6MB response limit
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-030: Data tables in collapsible bottom panel
Verifies: REQ-CFGMODE-024
Method: TM-UI
Priority: Medium
Version: @V3_1_0
Preconditions:
- User in Config Mode with mix selected
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Toggle bottom panel on Controls tab | Panel shows/hides with existing settings table, fixed at bottom | AC-024a, AC-024b |
| TV-002 | Navigate to "Assays And Targets" tab | No toggle button for bottom panel | AC-024a |
| TV-003 | Open Controls tab bottom panel | Two sub-tabs: "Existing Controls" and "Un-mapped Controls" | AC-024c |
Steps:
- Navigate to multiple tabs (Controls, Rule Mappings, Reporting Cut-offs)
- Toggle the bottom panel on each tab
- Navigate to "Assays And Targets" tab and verify no toggle button
- On Controls tab, verify the two sub-tabs
Expected Results:
- AC-024a: Each tab (except "Assays And Targets") has a toggle button to show/hide bottom panel with existing settings table
- AC-024b: Panel is fixed at the bottom of the page, full width minus sidebar
- AC-024c: Controls tab data table has two sub-tabs: "Existing Controls" and "Un-mapped Controls"
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-031: Global/Strict toggle pattern - common behavior
Verifies: REQ-CFGMODE-025 (Common Pattern ACs)
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- Mix selected with both global and strict settings configured
- Test on Reporting Cut-offs tab (representative entity tab)
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Set "Applies to all mixes" toggle ON | Target selector hidden; is_strict=false | AC-025a, AC-025b |
| TV-002 | Set toggle OFF (strict mode) | Target selector displayed; is_strict=true | AC-025a, AC-025b |
| TV-003 | Observe existing settings table | Global entries listed first with "Global" badge, then strict entries | AC-025c |
| TV-004 | Open form for new entry vs existing entry | Header shows "Add" for new, "Edit" for existing | AC-025d |
| TV-005 | Submit without changes or with duplicate entry | Confirm Changes button disabled | AC-025e |
Steps:
- Observe the "Applies to all mixes" (Global Mix) toggle
- Set toggle ON (global) and verify target selector hidden
- Set toggle OFF (strict) and verify target selector displayed
- Observe existing settings table ordering
- Create a new entry and an edit of existing entry
Expected Results:
- AC-025a: Toggle controls
is_strictfield; ON = global (is_strict=false), OFF = strict (is_strict=true) - AC-025b: Global mode hides target-specific selectors; strict mode displays target selector
- AC-025c: Existing settings table lists global entries first (with "Global" badge), then strict entries
- AC-025d: Edit widget header shows "Add" for new entries and "Edit" for existing entries
- AC-025e: Confirm Changes button disabled when no actual changes, form validation errors, or duplicate entries
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-032: Global/Strict change detection
Verifies: REQ-CFGMODE-025 (Change Detection ACs)
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- Existing settings with both global and strict entries
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Toggle existing entry from global to strict | Change detected; appears in Changes Drawer | AC-025f |
| TV-002 | Submit proposal with no entry modifications | Unmodified entries excluded from payload | AC-025g |
Steps:
- Toggle an existing entry's global/strict flag
- Verify the change is detected and appears in Changes Drawer
- Submit a proposal without modifying any entries
- Verify unmodified entries excluded from payload
Expected Results:
- AC-025f: Toggling global/strict flag detected as a change (v3.1.0 improvement)
- AC-025g: Unmodified entries excluded from proposal payloads
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-033: Reporting Cut-offs tab - form and validation
Verifies: REQ-CFGMODE-026 (Tab Access, Form Fields, Validation ACs)
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- Mix selected (one quantitative, one qualitative available)
use_sample_typeenabled- Stored Curve quantitative mix available for converted boundary test
Test Data:
| Mode | Max Groups | Group Fields |
|---|---|---|
| Quant | 9 | Group, Description, Upper Boundary, Converted Boundary Reference |
| CT | 1 | Group, Description, Upper Boundary |
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Open Reporting Cut-offs tab | Split view: form on left, existing settings table on right | AC-026a |
| TV-002 | Toggle to strict mode | Target selector appears; disabled for existing reportings | AC-026b |
| TV-003 | Toggle to global mode with quantitative mix | Quant/CT selector visible | AC-026c |
| TV-004 | use_sample_type enabled, create new reporting | Specimen selector visible, defaults to "Any" | AC-026d |
| TV-005 | Add 9 reporting groups in Quant mode | All 9 groups accepted; single group limit in CT mode | AC-026e |
| TV-006 | Switch from Quant to CT mode | All upper boundaries cleared | AC-026f |
| TV-007 | Enter duplicate descriptions or incorrect boundary ordering | Validation errors displayed | AC-026g |
Steps:
- Observe split view layout (form left, table right)
- Toggle to strict mode and verify target selector appears
- Switch to global mode and verify Quant/CT selector for quantitative mix
- Enable specimen selector and verify default "Any" for new reportings
- Add multiple reporting groups in Quant mode (up to 9)
- Switch to CT mode and verify boundaries clear and single group limit
- Test validation: duplicate descriptions, duplicate boundaries, incorrect ordering
- Test duplicate detection (same mix/target/specimen combo)
Expected Results:
- AC-026a: Split view: form on left, existing settings table on right
- AC-026b: Target selector visible in strict mode, disabled for existing reportings
- AC-026c: Quant/CT selector visible when global or mix is quantitative
- AC-026d: Specimen selector visible when
use_sample_typeenabled; defaults to "Any" for new - AC-026e: Up to 9 reporting groups in Quant mode; single group in CT mode
- AC-026f: Switching Quant/CT clears all upper boundaries
- AC-026g: Validation prevents duplicate descriptions, duplicate boundaries, incorrect boundary ordering (ascending Quant, descending CT)
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-034: Reporting Cut-offs - Converted Boundary Reference
Verifies: REQ-CFGMODE-026 (Converted Boundary Reference AC)
Method: TM-UI
Priority: Medium
Version: @V3_1_0
Preconditions:
- Stored Curve quantitative mix selected
- Calibration data available (slope and intercept)
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Enter Upper Boundary for Stored Curve quant mix | Read-only Converted Boundary Reference field shows real-time conversion | AC-026h |
Steps:
- Navigate to Reporting Cut-offs for a Stored Curve quantitative mix
- Enter an Upper Boundary value
- Observe the Converted Boundary Reference field
Expected Results:
- AC-026h: For Stored Curve quantitative mixes, a read-only field displays real-time Quant-to-CT or CT-to-Quant conversion using CT = slope x log10(value) + intercept
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-035: Combined Outcomes tab - form fields
Verifies: REQ-CFGMODE-027 (Form Fields ACs)
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- Mix selected with patient and control roles configured
- Both patient and control combined outcomes scenarios
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Create new patient combined outcome | Core fields visible: Code, Name, Role, Specimen/Sample Type, Outcome Type | AC-027a |
| TV-002 | Set Outcome Type to "Lims" | LIMS Status field appears | AC-027b |
| TV-003 | Set Outcome Type to "Error" | Well Error field appears | AC-027b |
| TV-004 | Switch to control outcomes with well_error | Target Error field visible | AC-027b |
| TV-005 | Open patient outcome form | Role and specimen auto-populated | AC-027c |
Steps:
- Create a new patient combined outcome
- Verify core identity fields: Code (required, unique), Name (required, unique, max 191 chars), Role, Specimen/Sample Type, Outcome Type
- Set Outcome Type to "Lims" and verify LIMS Status field appears
- Set Outcome Type to "Error" and verify Well Error field appears
- Switch to control outcomes and verify Target Error field for well_error
- Verify patient outcomes auto-populate role and specimen
Expected Results:
- AC-027a: Core identity fields: Code (required, unique), Name (required, unique, max 191), Role (required), Specimen/Sample Type (patient only, includes "Any"), Outcome Type ("Lims" for patient, "Error")
- AC-027b: LIMS Status visible for outcome_type="Lims"; Well Error for outcome_type="Error"; Target Error for control with well_error
- AC-027c: Patient outcomes auto-populate role and specimen; control outcomes auto-select outcome type when only one available
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-036: Combined Outcomes tab - Mix Results
Verifies: REQ-CFGMODE-027 (Mix Results ACs)
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- Combined outcome with at least 2 mixes configured (one quantitative, one qualitative)
- Global target configured
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Add mix results to combined outcome | Per-mix toggles: Use Latest Uploaded Run, IC Failed, Repeated Well | AC-027d |
| TV-002 | Add target results for qualitative mix | Min/Max Final CT fields visible | AC-027e, AC-027f |
| TV-003 | Add target results for quantitative mix | Min/Max Final CT and Min/Max Quantity visible | AC-027e, AC-027f |
| TV-004 | Observe existing settings table for quant mix | CT and Quantity joined with " / " in display | AC-027e |
Steps:
- Add mix results to a combined outcome
- Verify per-mix fields: Use Latest Uploaded Run, IC Failed, Repeated Well toggles
- Add target results with Min/Max Final CT for both quant and qual mixes
- Verify Min/Max CT visible for all mix types (v3.1.0 improvement)
- Observe existing settings table for quantitative mix (CT and Quantity joined with " / ")
Expected Results:
- AC-027d: Mix Results contain per-mix config: Use Latest Uploaded Run, IC Failed, Repeated Well toggles
- AC-027e: Target Results: Result/Final Class, Min/Max Final CT, Min/Max Quantity (quant or global), CLS/CT Discrepancy Required
- AC-027f: Min/Max Final CT visible regardless of mix type (v3.1.0 improvement)
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-037: Combined Outcomes tab - deletion and proposals
Verifies: REQ-CFGMODE-027 (Deletion and Proposals ACs)
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- Multiple combined outcomes configured
- Kit/mix filters applied
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Delete a combined outcome, apply mix/kit filters | Deleted outcome still visible in filtered results | AC-027g |
| TV-002 | Propose changes with mix of new/modified/deleted outcomes | Payload contains only changed entries with operation flags | AC-027h |
| TV-003 | Open Changes Drawer after modifications | Changes organized by operation type (New, Modified, Deleted) with full detail | AC-027i |
Steps:
- Delete a combined outcome
- Apply mix/kit filters and verify deleted outcomes still visible
- Propose changes and verify proposal payload contains only modified/new/deleted entries
- Open Changes Drawer and verify combined outcome changes organized by operation type
Expected Results:
- AC-027g: Deleted outcomes always visible in filtered results, never hidden by mix/kit filters (v3.1.0 improvement)
- AC-027h: Proposal payload includes only modified, new, deleted outcomes with explicit operation flags
- AC-027i: Changes Drawer displays changes by operation type (New, Modified, Deleted) with full detail including mix results and target results
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-038: Cross Contamination Limits tab
Verifies: REQ-CFGMODE-028
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- Mix selected with both global and strict cross contamination limits
- Kit/mix filters available
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Navigate to Cross Contamination Limits tab | Table shows global limits first, then strict limits grouped by mix | AC-028a |
| TV-002 | Observe table column headers | "Potential Contaminated Result" and "Potential Contaminating Result" | AC-028b |
| TV-003 | Add new entry via edit widget | Widget accepts Config Mode filters and mix targets; "Add" mode | AC-028c |
| TV-004 | Apply kit/mix filters | Only adjacents for selected mixes plus global entries shown | AC-028d |
Steps:
- Navigate to Cross Contamination Limits tab
- Observe table: global limits first, then strict limits grouped by mix
- Verify column headers
- Add and edit entries using the edit widget
- Apply kit/mix filters and verify filtering behavior
Expected Results:
- AC-028a: Table displays global limits first, then strict limits grouped by mix
- AC-028b: Column headers are "Potential Contaminated Result" and "Potential Contaminating Result"
- AC-028c: Edit widget accepts Config Mode filters and mix targets; supports "Add" and "Edit" modes
- AC-028d: Kit/mix filters show only adjacents for selected mixes plus global entries
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-039: Curve Control Limits tab
Verifies: REQ-CFGMODE-029
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- Mix selected with global curve control limit settings configured
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Navigate to Curve Control Limits tab | Site roles and stable identifiers displayed for global settings | AC-029a |
| TV-002 | Observe global settings role relation | Role populated from global mapping data | AC-029b |
| TV-003 | Modify a setting, open Changes Drawer | Correct diff and proposal state displayed | AC-029c |
Steps:
- Navigate to Curve Control Limits tab
- Verify site roles and stable identifiers displayed for global settings
- Verify global settings have role relation from global mapping data
- Modify a setting and observe changes drawer diff and proposal state
Expected Results:
- AC-029a: UI includes site roles and stable identifiers for global settings
- AC-029b: Global settings have role relation populated from global mapping data
- AC-029c: Changes drawer displays correct diff and proposal state for Curve Control Limits
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-040: Combined Outcomes Changes Drawer detail
Verifies: REQ-CFGMODE-030
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- User has created, modified, and deleted combined outcomes in the current session
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Open Changes Drawer with created, modified, and deleted outcomes | Operation type labels: "New", "Modified", "Deleted Combined Outcome" | AC-030a |
| TV-002 | Observe deleted outcome entry | Minimal display: code and "This outcome will be deleted." | AC-030b |
| TV-003 | Observe created/updated outcome entry | Full detail: General, Configuration, Conditions, Mix Results sections | AC-030c |
| TV-004 | Verify ID resolution in drawer | Role IDs, specimen IDs, mix/target IDs resolved to human-readable names | AC-030d |
Steps:
- Open the Changes Drawer
- Locate the Combined Outcomes section
- Verify operation type labels for each changed outcome
- Verify deleted outcome displays minimal info
- Verify create/update outcomes display full detail sections
Expected Results:
- AC-030a: Operation types: "New Combined Outcome", "Modified Combined Outcome", "Deleted Combined Outcome"
- AC-030b: Deleted outcomes: minimal display with code and "This outcome will be deleted."
- AC-030c: Create/update outcomes: General section (Code, Name, Role, Sample Type, Outcome Type, LIMS Status), Configuration section, Conditions section, Mix Results section with per-target detail
- AC-030d: Role IDs, specimen IDs, mix/target IDs resolved to human-readable names
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-041: Reporting Cut-offs existing settings table
Verifies: REQ-CFGMODE-031
Method: TM-UI
Priority: Medium
Version: @V3_1_0
Preconditions:
- Mix selected with both global and strict reportings configured
use_sample_typeenabled
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Open Reporting Cut-offs existing settings table | Columns: Mix, Target, Specimen Type, Quant/Ct, Group, Upper Boundary | AC-031a |
| TV-002 | Observe table ordering | Global reportings listed first, then strict | AC-031b |
| TV-003 | Click a row in settings table | Reporting loaded into form for editing; row highlighted | AC-031c |
Steps:
- Open the Reporting Cut-offs tab bottom panel or split view table
- Verify table columns
- Verify ordering: global first, then strict
- Click a row and verify it loads into the form
Expected Results:
- AC-031a: Columns: Mix, Target, Specimen Type (if
use_sample_type), Quant or Ct, Group, Upper Boundary - AC-031b: Global reportings (
is_strict=false) listed first, then strict reportings - AC-031c: Clicking a row loads reporting into form for editing; selected row highlighted
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-042: Combined Outcomes proposal payload optimization
Verifies: REQ-CFGMODE-032
Method: TM-API
Priority: High
Version: @V3_1_0
Preconditions:
- Multiple combined outcomes: some new, some modified, some deleted, some unchanged
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Create new outcome, submit proposal | Payload includes outcome with _operation: 'create' | AC-032a |
| TV-002 | Modify existing outcome, submit proposal | Payload includes outcome with _operation: 'update' | AC-032b |
| TV-003 | Delete outcome, submit proposal | Payload includes minimal entry with _operation: 'delete' | AC-032c |
| TV-004 | Leave outcomes unchanged, submit proposal | Unmodified outcomes excluded from payload | AC-032d |
| TV-005 | Confirm newly created outcome, inspect state | is_new flag retained for correct proposal categorization | AC-032e |
Steps:
- Create a new combined outcome
- Modify an existing combined outcome
- Delete another combined outcome
- Leave remaining outcomes unchanged
- Submit a proposal and inspect the payload
Expected Results:
- AC-032a: New outcomes tagged with
_operation: 'create' - AC-032b: Modified outcomes tagged with
_operation: 'update' - AC-032c: Deleted outcomes tagged with
_operation: 'delete'with minimal payload (id, name, code) - AC-032d: Unmodified outcomes excluded from payload
- AC-032e: After confirming, newly created outcomes retain
is_newflag for correct proposal categorization
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-043: Combined Outcomes is_strict change detection
Verifies: REQ-CFGMODE-033
Method: TM-UI
Priority: Medium
Version: @V3_1_0
Preconditions:
- Existing combined outcome with
is_strict=false(global)
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Toggle "Applies to all mixes" from ON to OFF | Change detected; Changes Drawer reflects is_strict change | AC-033a, AC-033b |
| TV-002 | Toggle back to ON (revert) | No net change detected | AC-033a |
Steps:
- Toggle "Applies to all mixes" from ON to OFF for an existing combined outcome
- Verify the change is detected and the Changes Drawer reflects the
is_strictchange - Toggle back to ON and verify no net change detected
Expected Results:
- AC-033a:
CombinedOutcomeComparatorcomparesis_strictboolean between original and modified - AC-033b: Toggling "Applies to all mixes" detected as a change in Changes Drawer (v3.1.0 improvement; previously not detected)
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-044: Combined Outcomes Min/Max CT visibility
Verifies: REQ-CFGMODE-034
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- Combined outcome with target results for both quantitative and qualitative mixes
- Global target configured
Test Data:
| Mix Type | Target Scope | CT Visible | Quantity Visible | Both Configurable |
|---|---|---|---|---|
| Qualitative | Strict | Yes | No | N/A |
| Quantitative | Strict | Yes | Yes | No (choose one) |
| Quantitative | Global | Yes | Yes | Yes (both) |
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Open target result for qualitative mix | Min/Max Final CT fields visible | AC-034a |
| TV-002 | Open target result for quant mix (strict target) | CT visible; must choose CT or Quantity, cannot set both | AC-034a, AC-034b |
| TV-003 | Open target result for global target in quant mix | Both CT and Quantity configurable simultaneously | AC-034c |
Steps:
- Open a target result for a qualitative mix -- verify Min/Max CT visible
- Open a target result for a quantitative mix (strict target) -- verify CT visible, must choose CT or Quantity
- Open a target result for a global target in a quantitative mix -- verify both CT and Quantity configurable
Expected Results:
- AC-034a: Min/Max Final CT fields visible for all mix types (v3.1.0 improvement; previously hidden for quantitative mixes)
- AC-034b: Non-global targets in quantitative mixes: user must choose CT or Quantity (cannot set both)
- AC-034c: Global targets: both CT and Quantity may be configured simultaneously
Automation Status: Planned
Jira: BT-4820
Negative Test Cases
TC-CFGMODE-N001: Unauthorized role access
Verifies: REQ-CFGMODE-001, REQ-CFGMODE-012
Method: TM-UI
Priority: High
Version: @V3_1_0
Preconditions:
- Users with MANAGER and ANALYST roles available
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | Log in as MANAGER, observe sidebar | Config Mode button absent | REQ-CFGMODE-001 |
| TV-002 | Log in as ANALYST, observe sidebar | Config Mode button absent | REQ-CFGMODE-001 |
| TV-003 | MANAGER navigates directly to /config-home | Redirected or access denied | REQ-CFGMODE-012 |
Steps:
- Log in as MANAGER and verify Config Mode button is absent from sidebar
- Log in as ANALYST and verify Config Mode button is absent from sidebar
- Attempt direct navigation to
/config-homeas MANAGER
Expected Results:
- MANAGER does not see Config Mode button in sidebar
- ANALYST does not see Config Mode button in sidebar
- Direct navigation to
/config-homeredirected or access denied for unauthorized roles
Automation Status: Planned
Jira: BT-4820
TC-CFGMODE-N002: Proposal conflict scenarios
Verifies: REQ-CFGMODE-008
Method: TM-HYB
Priority: High
Version: @V3_1_0
Preconditions:
config_mode_two_step_workflowenabled- User A has submitted a proposal for Mix X
Test Vectors:
| TV | Input | Expected | AC |
|---|---|---|---|
| TV-001 | User B proposes changes for same Mix X (pending proposal exists) | Propose button disabled with tooltip | REQ-CFGMODE-008 |
| TV-002 | User B proposes global CO with any pending proposal | Propose button disabled | REQ-CFGMODE-008 |
| TV-003 | User A attempts to approve own proposal | Self-approval blocked with toast warning | REQ-CFGMODE-008 |
Steps:
- User B attempts to propose changes for the same Mix X
- User B attempts to propose changes with a global combined outcome when any pending proposal exists
- User A attempts to approve their own proposal
Expected Results:
- Propose button disabled with tooltip for same-mix conflict
- Propose button disabled for global CO conflict with any pending proposal
- Self-approval blocked with toast warning
Automation Status: Planned
Jira: BT-4820
Appendix: Test Environment Requirements
| Requirement | Detail |
|---|---|
| Roles needed | SUPER_ADMIN, CLIENT_CONFIG, MANAGER, ANALYST |
| Feature flags | config_mode_two_step_workflow, use_sample_type, help_items, use_extraction_instruments, specimen_type_source |
| WebSocket | Pusher configured for real-time broadcast tests (TC-CFGMODE-013, 014, 017) |
| Multi-user | At least 2 concurrent browser sessions for propose/approve and real-time tests |
| Config data | Multiple kits, mixes (quant + qual), targets, rules (automapped + custom), combined outcomes, reportings |