Skip to main content
Version: Next

STD: Config Mode (CFGMODE)

Version: v3.1.0 Status: Draft SRS Source: docusaurus/docs/srs/configmode.md Domain: 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 IDTitleACsTestsAC CoverageMethodGaps
REQ-CFGMODE-001Config Mode as separate application mode6TC-CFGMODE-001, TC-CFGMODE-0026/6 (100%)TM-UINone
REQ-CFGMODE-002Config Sidebar navigation10TC-CFGMODE-003, TC-CFGMODE-004, TC-CFGMODE-00510/10 (100%)TM-UINone
REQ-CFGMODE-003Config Home split-panel layout6TC-CFGMODE-006, TC-CFGMODE-0076/6 (100%)TM-UINone
REQ-CFGMODE-004Hierarchical tab navigation3TC-CFGMODE-0083/3 (100%)TM-UINone
REQ-CFGMODE-005Multiselect mode for bulk assay operations3TC-CFGMODE-0093/3 (100%)TM-UINone
REQ-CFGMODE-006Kit and Assay management4TC-CFGMODE-0104/4 (100%)TM-UINone
REQ-CFGMODE-007Changes Drawer4TC-CFGMODE-0114/4 (100%)TM-UINone
REQ-CFGMODE-008Two-step propose/approve workflow7TC-CFGMODE-012, TC-CFGMODE-0137/7 (100%)TM-HYBNone
REQ-CFGMODE-009Proposed Configurations floating button3TC-CFGMODE-0143/3 (100%)TM-UINone
REQ-CFGMODE-010Proposed Configurations Drawer6TC-CFGMODE-015, TC-CFGMODE-0166/6 (100%)TM-HYBNone
REQ-CFGMODE-011Real-time proposed config notifications4TC-CFGMODE-0174/4 (100%)TM-HYBNone
REQ-CFGMODE-012CLIENT_CONFIG role access3TC-CFGMODE-0183/3 (100%)TM-UINone
REQ-CFGMODE-013Exit Config Mode1TC-CFGMODE-0191/1 (100%)TM-UINone
REQ-CFGMODE-014Proposed Configurations history page3TC-CFGMODE-0203/3 (100%)TM-UINone
REQ-CFGMODE-015Rule Mappings tab access2TC-CFGMODE-0212/2 (100%)TM-UINone
REQ-CFGMODE-016Automapped vs custom rule categorization4TC-CFGMODE-0224/4 (100%)TM-UINone
REQ-CFGMODE-017Rule Mappings form fields6TC-CFGMODE-0236/6 (100%)TM-UINone
REQ-CFGMODE-018Rule Mappings confirm and cancel4TC-CFGMODE-0244/4 (100%)TM-UINone
REQ-CFGMODE-019Remove all mappings3TC-CFGMODE-0253/3 (100%)TM-UINone
REQ-CFGMODE-020Mapping record generation2TC-CFGMODE-0262/2 (100%)TM-HYBNone
REQ-CFGMODE-021Rule Mapping changes in Changes Drawer2TC-CFGMODE-0272/2 (100%)TM-UINone
REQ-CFGMODE-022Rule Mapping changes in Proposed Config Drawer1TC-CFGMODE-0281/1 (100%)TM-UINone
REQ-CFGMODE-023Paginated rules data fetching2TC-CFGMODE-0292/2 (100%)TM-APINone
REQ-CFGMODE-024Data tables in collapsible bottom panel3TC-CFGMODE-0303/3 (100%)TM-UINone
REQ-CFGMODE-025Global/Strict UI pattern7TC-CFGMODE-031, TC-CFGMODE-0327/7 (100%)TM-UINone
REQ-CFGMODE-026Reporting Cut-offs tab8TC-CFGMODE-033, TC-CFGMODE-0348/8 (100%)TM-UINone
REQ-CFGMODE-027Combined Outcomes tab9TC-CFGMODE-035, TC-CFGMODE-036, TC-CFGMODE-0379/9 (100%)TM-UINone
REQ-CFGMODE-028Cross Contamination Limits tab4TC-CFGMODE-0384/4 (100%)TM-UINone
REQ-CFGMODE-029Curve Control Limits tab3TC-CFGMODE-0393/3 (100%)TM-UINone
REQ-CFGMODE-030Combined Outcomes Changes Drawer detail4TC-CFGMODE-0404/4 (100%)TM-UINone
REQ-CFGMODE-031Reporting Cut-offs existing settings table3TC-CFGMODE-0413/3 (100%)TM-UINone
REQ-CFGMODE-032Combined Outcomes proposal payload optimization5TC-CFGMODE-0425/5 (100%)TM-APINone
REQ-CFGMODE-033Combined Outcomes is_strict change detection2TC-CFGMODE-0432/2 (100%)TM-UINone
REQ-CFGMODE-034Combined Outcomes Min/Max CT visibility3TC-CFGMODE-0443/3 (100%)TM-UINone

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:

TVInputExpectedAC
TV-001SUPER_ADMIN views main application sidebar"Config Mode" button visible, replacing individual config page linksAC-001a
TV-002SUPER_ADMIN clicks Config Mode buttonLayout switches to pink header, config sidebar, and config home contentAC-001b
TV-003Observe URL after entering Config ModeRoute is /config-homeAC-001c

Steps:

  1. Observe the main application sidebar for Config Mode entry point
  2. Click the Config Mode button
  3. 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:

TVInputExpectedAC
TV-001Observe Config Mode header background colorPink background, distinct from standard blue headerAC-001d
TV-002SUPER_ADMIN with multi-sites observes headerSite selector dropdown presentAC-001e
TV-003Observe header controlsNotifications, settings, logout, role indicator, and display name presentAC-001f

Steps:

  1. Observe the Config Mode header bar
  2. 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:

TVInputExpectedAC
TV-001Observe sidebar top controlsLogo, "Add Assay", "Create Kit", "Enable/Disable Multiselect" presentAC-002a
TV-002Observe sidebar hierarchyKits with nested assays, then unassigned assays, then unrecognised mixesAC-002b
TV-003Observe sidebar bottom section"Other Settings" expandable menu visibleAC-002c
TV-004Observe sidebar bottom section"Exit Config Mode" button visibleAC-002d
TV-005SUPER_ADMIN observes sidebarApplication version displayedAC-002e

Steps:

  1. Observe sidebar structure and elements
  2. Verify kit/assay hierarchy display
  3. 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:

TVInputExpectedAC
TV-001Drag mix from Kit A to Kit B (multiselect disabled)Mix moves to Kit B in sidebar hierarchyAC-002f
TV-002Observe visual feedback during dragDrag preview and invalid drop zone hint displayedAC-002g

Steps:

  1. Drag a mix from one kit to another
  2. Observe visual feedback during drag operation
  3. 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_instruments enabled, help_items enabled, specimen_type_source = "From Target Suffix"
  • User is in Config Mode

Test Data:

RoleExpected Menu Items
SUPER_ADMINExtraction 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_CONFIGProposed Configurations only

Test Vectors:

TVInputExpectedAC
TV-001SUPER_ADMIN expands "Other Settings" menuFull menu with all feature-gated items visibleAC-002h, AC-002i
TV-002CLIENT_CONFIG expands "Other Settings" menuOnly "Proposed Configurations" visibleAC-002j
TV-003SUPER_ADMIN with use_extraction_instruments disabled"Extraction Models and Instruments" hidden from menuAC-002h

Steps:

  1. Expand the "Other Settings" menu as SUPER_ADMIN
  2. Verify all expected items are present
  3. 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:

TVInputExpectedAC
TV-001Enter Config Mode with no mix selectedLeft panel (1/3) shows tab tree, right panel (2/3) shows "No Mix Selected" warningAC-003a, AC-003b
TV-002Select a mix from sidebarConfiguration forms render in right panelAC-003c

Steps:

  1. Observe the Config Home page with no mix selected
  2. Select a mix from the sidebar
  3. 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:

TVInputExpectedAC
TV-001Observe form area footer with mix selectedBack and Next buttons visibleAC-003d
TV-002Navigate to first tab, observe Back buttonBack button disabledAC-003e
TV-003Navigate to last tab, observe Next buttonNext button disabledAC-003e
TV-004Make unsaved change, click NextNavigation blocked; warning message displayedAC-003e, AC-003f

Steps:

  1. Observe Back/Next buttons in the form area footer
  2. Navigate sequentially through tabs using Next
  3. Verify button disable states at first and last tabs
  4. 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:

TVInputExpectedAC
TV-001Expand all collapsible sections in tab treeHierarchy matches spec: Assays And Targets, Controls, Rule Mappings, Test Codes (hidden), Control & Reporting Limits, Outcomes, Kits, Quantification (hidden), CalibrationAC-004a
TV-002Make unsaved change, click a different tabTab click blocked (cursor: not-allowed)AC-004b
TV-003Cancel unsaved change, click a different tabTab navigation succeedsAC-004c

Steps:

  1. Observe the tab tree hierarchy in the left panel
  2. Expand all collapsible sections and verify structure matches specification
  3. Make a change to a form field
  4. 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:

TVInputExpectedAC
TV-001Click "Enable Multiselect"Checkboxes appear next to each kit and mixAC-005a
TV-002Observe button label after enablingLabel changes to "Disable Multiselect"AC-005b
TV-003Select multiple kits and mixes via checkboxesAll selected items highlighted for bulk filteringAC-005c

Steps:

  1. Click "Enable Multiselect" button
  2. Observe checkboxes appearing next to kits and mixes
  3. Select multiple kits and mixes
  4. 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:

TVInputExpectedAC
TV-001Click "Create Kit", enter kit nameNew kit appears in sidebarAC-006a
TV-002Click "Add Assay", enter assay nameNew assay (mix) appears in sidebarAC-006b
TV-003Rename an existing kitKit name updated in sidebarAC-006c
TV-004Delete a kitKit removed from sidebarAC-006d

Steps:

  1. Click "Create Kit" and enter a kit name
  2. Click "Add Assay" and enter an assay name
  3. Rename a kit
  4. Rename an assay
  5. 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:

TVInputExpectedAC
TV-001Modify a configuration valueFloating "Unsaved Changes" button appears at top-rightAC-007a
TV-002Click "Unsaved Changes" buttonChanges Drawer opensAC-007b
TV-003Observe Changes Drawer contentAll pending modifications listed with detailed descriptionsAC-007c
TV-004Two-step workflow enabled, observe drawer actions"Propose Changes" button availableAC-007d
TV-005Two-step workflow disabled, observe drawer actions"Update" button available instead of "Propose Changes"AC-007d

Steps:

  1. Modify a configuration value on any tab
  2. Observe the floating "Unsaved Changes" button
  3. Click the button to open the Changes Drawer
  4. 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_workflow enabled
  • User A logged in with SUPER_ADMIN role
  • Mix selected in Config Mode

Test Data:

ScenarioWorkflow EnabledExisting ProposalExpected
Propose changestrueNonePropose button active
Direct updatefalseN/AUpdate button (no propose)
Conflicting proposaltruePending for same mixPropose disabled with tooltip
Global outcome conflicttrueAny pending + current has globalPropose disabled

Test Vectors:

TVInputExpectedAC
TV-001Two-step enabled, modify config"Propose Changes" available, "Update" not availableAC-008a
TV-002Two-step disabled, modify config"Update" available, no propose stepAC-008b
TV-003Submit proposal for Mix X, then User B proposes for same Mix X"Propose Changes" disabled with tooltip identifying conflicting proposerAC-008c
TV-004Pending proposal exists, propose changes with global CO"Propose Changes" disabled due to global CO conflictAC-008d

Steps:

  1. Enable two-step workflow and modify configuration
  2. Observe that "Propose Changes" is available (not "Update")
  3. Submit a proposal
  4. Create a second proposal for the same mix and observe conflict detection
  5. 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_workflow enabled
  • 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:

TVInputExpectedAC
TV-001User A submits proposalUser B (CLIENT_CONFIG) receives notificationAC-008e
TV-002User C approves proposalUser A (original proposer) receives approval notificationAC-008f
TV-003Proposal submitted/approvedWebSocket broadcasts update all connected clients in real-timeAC-008g

Steps:

  1. User A submits a proposal
  2. Verify User B receives a notification
  3. User C approves the proposal
  4. Verify User A receives an approval notification
  5. 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_workflow enabled
  • User logged in as CLIENT_CONFIG or SUPER_ADMIN

Test Data:

StateButton ColorLabelBehavior
Proposals existBlue"Proposed Configurations"Opens drawer
Approval in progressGrey + spinner"Approval in Progress"Read-only
Approval completedYellow + pulse"the config is changed, update"Refetches config

Test Vectors:

TVInputExpectedAC
TV-001Proposals exist with two-step enabledBlue "Proposed Configurations" button visibleAC-009a
TV-002Click blue buttonProposed Configurations Drawer opensAC-009b
TV-003Approval in progressGrey button with spinner, "Approval in Progress" labelAC-009b
TV-004Approval completedYellow pulsing button, "the config is changed, update" labelAC-009c
TV-005Click yellow pulsing buttonConfigurations refetched, default UI state restoredAC-009c

Steps:

  1. Create a proposal and verify blue button state
  2. Initiate approval and verify grey spinner state
  3. Complete approval and verify yellow pulse state
  4. 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:

TVInputExpectedAC
TV-001Open Proposed Configurations DrawerProposal cards display proposer name, change count, targeted mix namesAC-010a
TV-002View proposal with global scopeCard shows "All mixes" instead of specific mix namesAC-010a
TV-003Expand a proposal cardDetailed changes organized by type (up to 14 config types)AC-010b

Steps:

  1. Open the Proposed Configurations Drawer
  2. Observe proposal card contents
  3. 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:

TVInputExpectedAC
TV-001Open Proposed Config Drawer with pending proposal"Approve Selected Proposal" button availableAC-010c
TV-002User A attempts to approve own proposalSelf-approval blocked with toast warningAC-010d
TV-003User B (different SUPER_ADMIN) approves proposalAsync job dispatched, changes applied, proposer notifiedAC-010e
TV-004User B clicks "Reject Selected Proposal"Confirmation dialog shown; proposal deleted on confirm, broadcast sentAC-010f

Steps:

  1. Attempt to approve own proposal and verify rejection
  2. As a different SUPER_ADMIN, approve a proposal
  3. Verify async job dispatches and changes apply
  4. 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_workflow enabled

Test Vectors:

TVInputExpectedAC
TV-001User A submits proposalProposedConfigurationsChangedBroadcast triggers refetch on User BAC-011a
TV-002User B begins approvalProposalApprovalInProgressBroadcast shows "Approval in Progress" on User AAC-011b
TV-003Verify WebSocket channelChannel is ConfigUpdates.{siteId} (presence channel)AC-011c
TV-004Approval completes, click yellow pulsing buttonConfigs refetched, default UI state restoredAC-011d

Steps:

  1. User A submits a proposal
  2. Verify ProposedConfigurationsChangedBroadcast triggers refetch on User B
  3. User B begins approval
  4. Verify ProposalApprovalInProgressBroadcast shows "Approval in Progress" on User A
  5. After approval completes, click yellow pulsing button to refetch configurations

Expected Results:

  • AC-011a: ProposedConfigurationsChangedBroadcast triggers proposal list refetch on all clients
  • AC-011b: ProposalApprovalInProgressBroadcast shows "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:

TVInputExpectedAC
TV-001CLIENT_CONFIG user views main sidebar"Config Mode" button visibleAC-012a
TV-002CLIENT_CONFIG clicks Config Mode buttonConfig Mode layout renders, config home accessibleAC-012b
TV-003CLIENT_CONFIG expands "Other Settings""Proposed Configurations" link visibleAC-012c

Steps:

  1. Observe main application sidebar for Config Mode button
  2. Enter Config Mode
  3. 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:

TVInputExpectedAC
TV-001Click "Exit Config Mode" in config sidebarNavigates to standard AppLayout with blue header and standard sidebarAC-013a

Steps:

  1. Click "Exit Config Mode" in the config sidebar
  2. 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:

TVInputExpectedAC
TV-001SUPER_ADMIN navigates to Other Settings > Proposed ConfigurationsPage loads with pending and approved proposals listedAC-014a, AC-014b
TV-002CLIENT_CONFIG navigates to Proposed ConfigurationsPage accessible with proposals visibleAC-014a
TV-003Click bulk delete all proposalsAll proposals removedAC-014c
TV-004Click bulk delete approved proposals onlyOnly approved proposals removed, pending retainedAC-014c

Steps:

  1. Navigate to Other Settings > Proposed Configurations
  2. Verify the page lists pending and approved proposals
  3. Test bulk deletion of all proposals
  4. 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:

TVInputExpectedAC
TV-001Observe tab tree in left panelRule Mappings is third top-level tab (after Controls)AC-015a
TV-002Click Rule Mappings tabForm in right panel; data table in bottom collapsible panelAC-015b

Steps:

  1. Observe the tab list for Rule Mappings position
  2. Click the Rule Mappings tab
  3. 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:

TVInputExpectedAC
TV-001Open Rule Mappings data tableFour sections: Patient, Control, System (SUPER_ADMIN), CustomAC-016a
TV-002Click an automapped rule rowRow is non-selectable; warning "Automapped Rules cannot be modified"AC-016b, AC-016c
TV-003Toggle "Show automapped rules" OFFAutomapped sections hidden, only Custom Rules visibleAC-016b
TV-004Click a custom rule rowForm populated with selected rule's current mappingsAC-016d

Steps:

  1. Open the Rule Mappings data table
  2. Observe the four sections: Patient Rules, Control Rules, System Rules, Custom Rules
  3. Attempt to interact with automapped rules
  4. Toggle "Show automapped rules" to hide/show automapped sections
  5. 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_type enabled
  • Both new mapping and existing mapping scenarios

Test Vectors:

TVInputExpectedAC
TV-001Open Rule Mappings with no rule selected (new mode)Roles, Targets, Specimens, and Rules dropdowns all visibleAC-017a, AC-017b, AC-017c, AC-017d
TV-002Clear all roles in new modeConfirm button disabledAC-017a
TV-003Observe Rules dropdown optionsAvailable plain rules listed, excluding automapped and rules with matching role-target combosAC-017e
TV-004Select existing rule from data table (edit mode)Rules dropdown hidden; Roles/Targets/Specimens populated with current valuesAC-017f
TV-005Disable use_sample_type, open new mapping modeSpecimens dropdown not visibleAC-017c

Steps:

  1. Open Rule Mappings tab with no rule selected (new mapping mode)
  2. Verify Roles, Targets, Specimens, and Rules dropdowns are visible
  3. Select an existing rule from the data table (edit mode)
  4. Verify Rules dropdown is hidden; Roles/Targets/Specimens populated with current values
  5. 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_type is 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:

TVInputExpectedAC
TV-001Modify rule's role/target selectionConfirm Changes button becomes enabledAC-018a
TV-002Revert changes to original stateConfirm Changes button becomes disabledAC-018b
TV-003Make change, click Cancel ChangesForm reverts to original state, tab navigation unblockedAC-018c
TV-004Make change, attempt to click different tabTab navigation blockedAC-018d

Steps:

  1. Modify a rule's role/target selection
  2. Verify Confirm Changes button becomes enabled
  3. Revert changes to original state and verify button becomes disabled
  4. Make a change and click Cancel Changes
  5. 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:

TVInputExpectedAC
TV-001Select custom rule with existing mappings"Remove All Mappings" button visibleAC-019a
TV-002Select custom rule with no mappings"Remove All Mappings" button not visibleAC-019a
TV-003Click "Remove All Mappings"Empty roles/targets/specimens submitted, all mappings clearedAC-019b
TV-004Open Changes Drawer after removing mappingsCleared mappings appear in drawerAC-019c

Steps:

  1. Select a custom rule with existing mappings
  2. Verify "Remove All Mappings" button is visible
  3. Click the button
  4. 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:

TVInputExpectedAC
TV-001Select R1, R2 roles + T1, T2 targets + Rule1, confirm4 mapping records created (R1xT1, R1xT2, R2xT1, R2xT2)AC-020a
TV-002After confirm, check Mix B's mappingsMix B's existing Rule1 mappings unchangedAC-020b

Steps:

  1. Select roles R1 and R2, targets T1 and T2, and rule Rule1
  2. Confirm changes
  3. Verify Cartesian product of mapping records created
  4. 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:

TVInputExpectedAC
TV-001Open Changes Drawer after modifying 2 rules"Rule Mappings" section shows count of 2 modified rulesAC-021a
TV-002Expand a modified rule in drawerChanges grouped by role (and specimen); added in green, removed in redAC-021b

Steps:

  1. Open the Changes Drawer
  2. Locate the "Rule Mappings" section
  3. 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:

TVInputExpectedAC
TV-001Open Proposed Config Drawer, expand proposal with new and modified rulesEach rule shows header ("New Rule"/"Modified Rule"), title, mappings with role/specimen/target namesAC-022a

Steps:

  1. Open the Proposed Configurations Drawer
  2. Expand the proposal card
  3. 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:

TVInputExpectedAC
TV-001Fetch rules data via APIRules returned without mappings; mappings fetched separately with 2000/page paginationAC-023a
TV-002Observe client-side data assemblyData combined from parallel requests, no single response exceeds 6MBAC-023b

Steps:

  1. Fetch rules data via API endpoint
  2. Verify rules returned without mappings first
  3. 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:

TVInputExpectedAC
TV-001Toggle bottom panel on Controls tabPanel shows/hides with existing settings table, fixed at bottomAC-024a, AC-024b
TV-002Navigate to "Assays And Targets" tabNo toggle button for bottom panelAC-024a
TV-003Open Controls tab bottom panelTwo sub-tabs: "Existing Controls" and "Un-mapped Controls"AC-024c

Steps:

  1. Navigate to multiple tabs (Controls, Rule Mappings, Reporting Cut-offs)
  2. Toggle the bottom panel on each tab
  3. Navigate to "Assays And Targets" tab and verify no toggle button
  4. 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:

TVInputExpectedAC
TV-001Set "Applies to all mixes" toggle ONTarget selector hidden; is_strict=falseAC-025a, AC-025b
TV-002Set toggle OFF (strict mode)Target selector displayed; is_strict=trueAC-025a, AC-025b
TV-003Observe existing settings tableGlobal entries listed first with "Global" badge, then strict entriesAC-025c
TV-004Open form for new entry vs existing entryHeader shows "Add" for new, "Edit" for existingAC-025d
TV-005Submit without changes or with duplicate entryConfirm Changes button disabledAC-025e

Steps:

  1. Observe the "Applies to all mixes" (Global Mix) toggle
  2. Set toggle ON (global) and verify target selector hidden
  3. Set toggle OFF (strict) and verify target selector displayed
  4. Observe existing settings table ordering
  5. Create a new entry and an edit of existing entry

Expected Results:

  • AC-025a: Toggle controls is_strict field; 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:

TVInputExpectedAC
TV-001Toggle existing entry from global to strictChange detected; appears in Changes DrawerAC-025f
TV-002Submit proposal with no entry modificationsUnmodified entries excluded from payloadAC-025g

Steps:

  1. Toggle an existing entry's global/strict flag
  2. Verify the change is detected and appears in Changes Drawer
  3. Submit a proposal without modifying any entries
  4. 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_type enabled
  • Stored Curve quantitative mix available for converted boundary test

Test Data:

ModeMax GroupsGroup Fields
Quant9Group, Description, Upper Boundary, Converted Boundary Reference
CT1Group, Description, Upper Boundary

Test Vectors:

TVInputExpectedAC
TV-001Open Reporting Cut-offs tabSplit view: form on left, existing settings table on rightAC-026a
TV-002Toggle to strict modeTarget selector appears; disabled for existing reportingsAC-026b
TV-003Toggle to global mode with quantitative mixQuant/CT selector visibleAC-026c
TV-004use_sample_type enabled, create new reportingSpecimen selector visible, defaults to "Any"AC-026d
TV-005Add 9 reporting groups in Quant modeAll 9 groups accepted; single group limit in CT modeAC-026e
TV-006Switch from Quant to CT modeAll upper boundaries clearedAC-026f
TV-007Enter duplicate descriptions or incorrect boundary orderingValidation errors displayedAC-026g

Steps:

  1. Observe split view layout (form left, table right)
  2. Toggle to strict mode and verify target selector appears
  3. Switch to global mode and verify Quant/CT selector for quantitative mix
  4. Enable specimen selector and verify default "Any" for new reportings
  5. Add multiple reporting groups in Quant mode (up to 9)
  6. Switch to CT mode and verify boundaries clear and single group limit
  7. Test validation: duplicate descriptions, duplicate boundaries, incorrect ordering
  8. 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_type enabled; 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:

TVInputExpectedAC
TV-001Enter Upper Boundary for Stored Curve quant mixRead-only Converted Boundary Reference field shows real-time conversionAC-026h

Steps:

  1. Navigate to Reporting Cut-offs for a Stored Curve quantitative mix
  2. Enter an Upper Boundary value
  3. 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:

TVInputExpectedAC
TV-001Create new patient combined outcomeCore fields visible: Code, Name, Role, Specimen/Sample Type, Outcome TypeAC-027a
TV-002Set Outcome Type to "Lims"LIMS Status field appearsAC-027b
TV-003Set Outcome Type to "Error"Well Error field appearsAC-027b
TV-004Switch to control outcomes with well_errorTarget Error field visibleAC-027b
TV-005Open patient outcome formRole and specimen auto-populatedAC-027c

Steps:

  1. Create a new patient combined outcome
  2. Verify core identity fields: Code (required, unique), Name (required, unique, max 191 chars), Role, Specimen/Sample Type, Outcome Type
  3. Set Outcome Type to "Lims" and verify LIMS Status field appears
  4. Set Outcome Type to "Error" and verify Well Error field appears
  5. Switch to control outcomes and verify Target Error field for well_error
  6. 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:

TVInputExpectedAC
TV-001Add mix results to combined outcomePer-mix toggles: Use Latest Uploaded Run, IC Failed, Repeated WellAC-027d
TV-002Add target results for qualitative mixMin/Max Final CT fields visibleAC-027e, AC-027f
TV-003Add target results for quantitative mixMin/Max Final CT and Min/Max Quantity visibleAC-027e, AC-027f
TV-004Observe existing settings table for quant mixCT and Quantity joined with " / " in displayAC-027e

Steps:

  1. Add mix results to a combined outcome
  2. Verify per-mix fields: Use Latest Uploaded Run, IC Failed, Repeated Well toggles
  3. Add target results with Min/Max Final CT for both quant and qual mixes
  4. Verify Min/Max CT visible for all mix types (v3.1.0 improvement)
  5. 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:

TVInputExpectedAC
TV-001Delete a combined outcome, apply mix/kit filtersDeleted outcome still visible in filtered resultsAC-027g
TV-002Propose changes with mix of new/modified/deleted outcomesPayload contains only changed entries with operation flagsAC-027h
TV-003Open Changes Drawer after modificationsChanges organized by operation type (New, Modified, Deleted) with full detailAC-027i

Steps:

  1. Delete a combined outcome
  2. Apply mix/kit filters and verify deleted outcomes still visible
  3. Propose changes and verify proposal payload contains only modified/new/deleted entries
  4. 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:

TVInputExpectedAC
TV-001Navigate to Cross Contamination Limits tabTable shows global limits first, then strict limits grouped by mixAC-028a
TV-002Observe table column headers"Potential Contaminated Result" and "Potential Contaminating Result"AC-028b
TV-003Add new entry via edit widgetWidget accepts Config Mode filters and mix targets; "Add" modeAC-028c
TV-004Apply kit/mix filtersOnly adjacents for selected mixes plus global entries shownAC-028d

Steps:

  1. Navigate to Cross Contamination Limits tab
  2. Observe table: global limits first, then strict limits grouped by mix
  3. Verify column headers
  4. Add and edit entries using the edit widget
  5. 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:

TVInputExpectedAC
TV-001Navigate to Curve Control Limits tabSite roles and stable identifiers displayed for global settingsAC-029a
TV-002Observe global settings role relationRole populated from global mapping dataAC-029b
TV-003Modify a setting, open Changes DrawerCorrect diff and proposal state displayedAC-029c

Steps:

  1. Navigate to Curve Control Limits tab
  2. Verify site roles and stable identifiers displayed for global settings
  3. Verify global settings have role relation from global mapping data
  4. 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:

TVInputExpectedAC
TV-001Open Changes Drawer with created, modified, and deleted outcomesOperation type labels: "New", "Modified", "Deleted Combined Outcome"AC-030a
TV-002Observe deleted outcome entryMinimal display: code and "This outcome will be deleted."AC-030b
TV-003Observe created/updated outcome entryFull detail: General, Configuration, Conditions, Mix Results sectionsAC-030c
TV-004Verify ID resolution in drawerRole IDs, specimen IDs, mix/target IDs resolved to human-readable namesAC-030d

Steps:

  1. Open the Changes Drawer
  2. Locate the Combined Outcomes section
  3. Verify operation type labels for each changed outcome
  4. Verify deleted outcome displays minimal info
  5. 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_type enabled

Test Vectors:

TVInputExpectedAC
TV-001Open Reporting Cut-offs existing settings tableColumns: Mix, Target, Specimen Type, Quant/Ct, Group, Upper BoundaryAC-031a
TV-002Observe table orderingGlobal reportings listed first, then strictAC-031b
TV-003Click a row in settings tableReporting loaded into form for editing; row highlightedAC-031c

Steps:

  1. Open the Reporting Cut-offs tab bottom panel or split view table
  2. Verify table columns
  3. Verify ordering: global first, then strict
  4. 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:

TVInputExpectedAC
TV-001Create new outcome, submit proposalPayload includes outcome with _operation: 'create'AC-032a
TV-002Modify existing outcome, submit proposalPayload includes outcome with _operation: 'update'AC-032b
TV-003Delete outcome, submit proposalPayload includes minimal entry with _operation: 'delete'AC-032c
TV-004Leave outcomes unchanged, submit proposalUnmodified outcomes excluded from payloadAC-032d
TV-005Confirm newly created outcome, inspect stateis_new flag retained for correct proposal categorizationAC-032e

Steps:

  1. Create a new combined outcome
  2. Modify an existing combined outcome
  3. Delete another combined outcome
  4. Leave remaining outcomes unchanged
  5. 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_new flag 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:

TVInputExpectedAC
TV-001Toggle "Applies to all mixes" from ON to OFFChange detected; Changes Drawer reflects is_strict changeAC-033a, AC-033b
TV-002Toggle back to ON (revert)No net change detectedAC-033a

Steps:

  1. Toggle "Applies to all mixes" from ON to OFF for an existing combined outcome
  2. Verify the change is detected and the Changes Drawer reflects the is_strict change
  3. Toggle back to ON and verify no net change detected

Expected Results:

  • AC-033a: CombinedOutcomeComparator compares is_strict boolean 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 TypeTarget ScopeCT VisibleQuantity VisibleBoth Configurable
QualitativeStrictYesNoN/A
QuantitativeStrictYesYesNo (choose one)
QuantitativeGlobalYesYesYes (both)

Test Vectors:

TVInputExpectedAC
TV-001Open target result for qualitative mixMin/Max Final CT fields visibleAC-034a
TV-002Open target result for quant mix (strict target)CT visible; must choose CT or Quantity, cannot set bothAC-034a, AC-034b
TV-003Open target result for global target in quant mixBoth CT and Quantity configurable simultaneouslyAC-034c

Steps:

  1. Open a target result for a qualitative mix -- verify Min/Max CT visible
  2. Open a target result for a quantitative mix (strict target) -- verify CT visible, must choose CT or Quantity
  3. 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:

TVInputExpectedAC
TV-001Log in as MANAGER, observe sidebarConfig Mode button absentREQ-CFGMODE-001
TV-002Log in as ANALYST, observe sidebarConfig Mode button absentREQ-CFGMODE-001
TV-003MANAGER navigates directly to /config-homeRedirected or access deniedREQ-CFGMODE-012

Steps:

  1. Log in as MANAGER and verify Config Mode button is absent from sidebar
  2. Log in as ANALYST and verify Config Mode button is absent from sidebar
  3. Attempt direct navigation to /config-home as 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-home redirected 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_workflow enabled
  • User A has submitted a proposal for Mix X

Test Vectors:

TVInputExpectedAC
TV-001User B proposes changes for same Mix X (pending proposal exists)Propose button disabled with tooltipREQ-CFGMODE-008
TV-002User B proposes global CO with any pending proposalPropose button disabledREQ-CFGMODE-008
TV-003User A attempts to approve own proposalSelf-approval blocked with toast warningREQ-CFGMODE-008

Steps:

  1. User B attempts to propose changes for the same Mix X
  2. User B attempts to propose changes with a global combined outcome when any pending proposal exists
  3. 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

RequirementDetail
Roles neededSUPER_ADMIN, CLIENT_CONFIG, MANAGER, ANALYST
Feature flagsconfig_mode_two_step_workflow, use_sample_type, help_items, use_extraction_instruments, specimen_type_source
WebSocketPusher configured for real-time broadcast tests (TC-CFGMODE-013, 014, 017)
Multi-userAt least 2 concurrent browser sessions for propose/approve and real-time tests
Config dataMultiple kits, mixes (quant + qual), targets, rules (automapped + custom), combined outcomes, reportings