STD: Config Import/Export (CONFIGIO)
Version: v1.0.0 Status: Draft SRS Source:
docusaurus/docs/srs/configio.mdDomain: CONFIGIO
Overview
This document specifies tests for the Configuration Import/Export domain, which covers bulk configuration management via XLSX spreadsheet import and export operations across 14 configuration types.
Domain Characteristics:
- Primary function: Backend file parsing, validation, and data persistence
- Secondary function: Status report generation and notification
- Configuration dependency: Multiple toggle settings (extraction instruments, role priority, sample type)
Test Method Rationale: Per Test Plan Section 3.2, Configuration import/export uses TM-API as primary method. Import/export operations are backend file I/O with deterministic validation logic testable without UI. TM-UI used for notification display verification, upload workflow, page stability after import, and data persistence across SPA navigation (REQ-CONFIGIO-001). TM-MAN used for keyboard shortcut verification (REQ-CONFIGIO-002).
Test Case Convention: Steps describe logical actions, not UI mechanics. Use "Import configuration file with data X" or "Verify row status is Ignored", not "Click upload button" or "Check the value in cell A1". This ensures test intent survives UI redesigns.
Coverage Summary
| REQ ID | Title | ACs | Tests | AC Coverage | Method | Gaps |
|---|---|---|---|---|---|---|
| REQ-CONFIGIO-001 | Generate Import Status Reports | 4 | TC-CONFIGIO-001, TC-CONFIGIO-040, TC-CONFIGIO-041, TC-CONFIGIO-042, TC-CONFIGIO-B006, TC-CONFIGIO-B007, TC-CONFIGIO-B011 | 4/4 (100%) | TM-HYB | None |
| REQ-CONFIGIO-002 | Export Customer-Friendly Configuration | 3 | TC-CONFIGIO-002 | 3/3 (100%) | TM-HYB | None |
| REQ-CONFIGIO-003 | Import/Export Mixes and Targets | 12 | TC-CONFIGIO-003, TC-CONFIGIO-004, TC-CONFIGIO-005 | 12/12 (100%) | TM-API | None |
| REQ-CONFIGIO-004 | Import/Export Combined Outcomes | 14 | TC-CONFIGIO-006, TC-CONFIGIO-007, TC-CONFIGIO-008 | 14/14 (100%) | TM-API | None |
| REQ-CONFIGIO-005 | Import/Export Control Labels | 7 | TC-CONFIGIO-009, TC-CONFIGIO-010 | 7/7 (100%) | TM-API | None |
| REQ-CONFIGIO-006 | Import/Export Error Codes | 4 | TC-CONFIGIO-011 | 4/4 (100%) | TM-API | None |
| REQ-CONFIGIO-007 | Import/Export Error Resolutions | 5 | TC-CONFIGIO-012 | 5/5 (100%) | TM-API | None |
| REQ-CONFIGIO-008 | Import/Export Help Items Tags | 3 | TC-CONFIGIO-013 | 3/3 (100%) | TM-API | None |
| REQ-CONFIGIO-009 | Import/Export Rules Configuration | 7 | TC-CONFIGIO-014, TC-CONFIGIO-015 | 7/7 (100%) | TM-API | None |
| REQ-CONFIGIO-010 | Import/Export QIR Quantification Settings | 8 | TC-CONFIGIO-016, TC-CONFIGIO-017 | 8/8 (100%) | TM-API | None |
| REQ-CONFIGIO-011 | Validate Westgard Limits on Import | 3 | TC-CONFIGIO-018 | 3/3 (100%) | TM-API | None |
| REQ-CONFIGIO-012 | Import Reporting Cut-offs | 5 | TC-CONFIGIO-019 | 5/5 (100%) | TM-API | None |
| REQ-CONFIGIO-013 | Import/Export LIMS Export Configuration | 3 | TC-CONFIGIO-020 | 3/3 (100%) | TM-API | None |
| REQ-CONFIGIO-014 | Apply Extraction Instruments Toggle | 3 | TC-CONFIGIO-021 | 3/3 (100%) | TM-API | None |
Totals: 14 REQs, 131 ACs, 37 Test Cases, 100% Coverage
Test Cases
TC-CONFIGIO-001: Import status report generation and notification
Verifies: REQ-CONFIGIO-001 (AC1, AC2, AC3, AC4)
Method: TM-HYB (API for import, UI for notification verification)
Priority: High
Preconditions:
- User logged in with Administrator role
- Test XLSX file prepared with mix of valid and invalid rows
Test Data:
- Mixes and Targets sheet with:
- Row 1: Valid mix/target configuration
- Row 2: Valid mix/target configuration
- Row 3: Invalid (MINIMUM FLUORESCENCE exceeds precision)
Steps:
- Import configuration file via API endpoint
- Retrieve import result notification
- Download generated status report
Expected Results:
- AC1: Notification displays sheet name, imported count (2), ignored count (1)
- AC2: Downloaded report contains Status column appended to original data
- AC3: Row 1 Status = "Imported", Row 2 Status = "Imported"
- AC4: Row 3 Status = "Ignored" with reason "Value exceeds maximum precision"
Automation Status: Manual (XLSX column validation — config import/export content verification)
Jira: BT-3714
TC-CONFIGIO-002: Customer-friendly configuration export
Verifies: REQ-CONFIGIO-002 (AC1, AC2, AC3)
Method: TM-HYB (API for export verification, manual for keyboard shortcut)
Priority: Medium
Preconditions:
- User logged in with Administrator role
- At least one kit configuration exists
- Site name configured as "TestSite"
Steps:
- Trigger customer-friendly export via API
- Verify downloaded file
- Navigate to Kit Configurations page
- Press P key (keyboard shortcut verification - manual)
Expected Results:
- AC1: System generates XLSX file with customer-friendly configuration data
- AC2: Filename matches pattern
customer-friendly-kit-configurations-TestSite.xlsx - AC3: Keyboard shortcut P triggers export (manual verification)
Automation Status: Manual (XLSX column validation — config import/export content verification)
Jira: [Pending]
TC-CONFIGIO-003: Mixes and Targets import - column support and precision validation
Verifies: REQ-CONFIGIO-003 (AC1, AC2, AC3)
Method: TM-API
Priority: High
Preconditions:
- Administrator role
- Mix "TestMix" exists
Test Data:
| Scenario | MINIMUM FLUORESCENCE | IS QUANTITATIVE | Expected |
|---|---|---|---|
| Valid precision | 100000.123456 | TRUE | Imported |
| Max precision | 1234567890123456.1234567890123456 | FALSE | Imported |
| Exceeds precision | 12345678901234567.12345678901234567 | TRUE | Ignored |
| Invalid boolean | 100 | YES | Ignored |
| Valid boolean false | 100 | FALSE | Imported |
Steps:
- Prepare XLSX with test data rows
- Import via API endpoint
- Query database for imported values
- Retrieve status report
Expected Results:
- AC1: MINIMUM FLUORESCENCE, IS QUANTITATIVE, and other columns supported
- AC2: Precision validation rejects values exceeding 16 integer + 16 decimal places
- AC3: IS QUANTITATIVE validated as boolean (TRUE/FALSE only)
Automation Status: Manual (XLSX column validation — config import/export content verification)
Jira: BT-3562
TC-CONFIGIO-004: Mixes and Targets import - passive target and threshold validation
Verifies: REQ-CONFIGIO-003 (AC4, AC5, AC6, AC7)
Method: TM-API
Priority: High
Preconditions:
- Mix "TestMix" with targets "TargetA", "TargetB", "TargetC"
Test Data:
| Scenario | Mix | Target | is_passive | Expected Threshold | Expected Result |
|---|---|---|---|---|---|
| Single passive | TestMix | TargetA | true | 500 | Imported |
| Multiple passive (row 1) | TestMix2 | TargetA | true | 500 | All rejected |
| Multiple passive (row 2) | TestMix2 | TargetB | true | 600 | All rejected |
| Non-passive threshold | TestMix | TargetC | false | 50000000 | Imported |
| Passive threshold > 1000 | TestMix | TargetA | true | 1500 | Ignored |
| Non-passive threshold > 100M | TestMix | TargetC | false | 150000000 | Ignored |
Steps:
- Import XLSX with passive target scenarios
- Verify mix rejection for multiple passive targets
- Verify threshold validation per passive status
Expected Results:
- AC4: Expected Threshold validated as whole number within configured range
- AC5: Each mix has at most one passive target enforced
- AC6: Passive target threshold validated as > 0 and <= 1000
- AC7: Non-passive target threshold validated as > 0 and <= 100000000
Automation Status: Manual (XLSX column validation — config import/export content verification)
Jira: BT-4677
TC-CONFIGIO-005: Mixes and Targets import - MAX CT and PREPEND CYCLES validation
Verifies: REQ-CONFIGIO-003 (AC8, AC9, AC10, AC11, AC12)
Method: TM-API
Priority: Medium
Preconditions:
- Mix exists with multiple targets
Test Data:
| MAX CT FOR CLS | MAX CT FOR CT | PREPEND CYCLES | Expected |
|---|---|---|---|
| null | null | 0 | Imported |
| 30 | 45 | 5 | Imported |
| 0 | 50 | 3 | Ignored (MAX CT < 1) |
| 101 | 50 | 3 | Ignored (MAX CT > 100) |
| 50 | 50 | -1 | Ignored (negative PREPEND) |
| 50 | 50 | 2.5 | Ignored (non-integer PREPEND) |
Steps:
- Import XLSX with MAX CT and PREPEND CYCLES test cases
- Verify validation rules applied
- Verify export includes all columns
Expected Results:
- AC8: MAX CT values validated as numeric between 1 and 100, allowing null
- AC9: PREPEND CYCLES validated as non-negative integer
- AC10: Invalid rows rejected with appropriate error messages
- AC11: Export includes all configured values for supported columns
- AC12: Round-trip import/export preserves all data
Automation Status: Manual (XLSX column validation — config import/export content verification)
TC-CONFIGIO-006: Combined Outcomes import - role and outcome type validation
Verifies: REQ-CONFIGIO-004 (AC1, AC2, AC3, AC4)
Method: TM-API
Priority: High
Preconditions:
- Roles configured: "SampleRole" (Sample type), "ControlRole" (Control type), "IgnoreRole" (Ignore type)
- Error codes configured: "ERR001", "ERR002"
- LIMS codes configured: "LIMS001"
Test Data:
| ROLE | OUTCOME TYPE | Expected |
|---|---|---|
| (blank) | Error | Ignored - ROLE required |
| NonExistent | Error | Ignored - ROLE not found |
| IgnoreRole | Error | Ignored - Ignore-typed not allowed |
| SampleRole | Error | Imported |
| ControlRole | Invalid | Ignored - invalid OUTCOME TYPE |
| ControlRole | Error | Imported |
| ControlRole | Lims | Ignored - Control can only have Error |
Steps:
- Import XLSX with role and outcome type test cases
- Verify validation rules applied
Expected Results:
- AC1: Import/Export supports MIX, TARGET, ROLE, OUTCOME TYPE columns
- AC2: ROLE validated as required, existing, and not Ignore-typed
- AC3: OUTCOME TYPE validated as required ("Error" or "Lims")
- AC4: Control-typed roles can only have "Error" outcome type
Automation Status: Manual (XLSX column validation — config import/export content verification)
Jira: BT-4239
TC-CONFIGIO-007: Combined Outcomes import - code and target validation
Verifies: REQ-CONFIGIO-004 (AC5, AC6, AC7)
Method: TM-API
Priority: High
Preconditions:
- Same as TC-CONFIGIO-006
- TARGET ERROR CODE "TERR001" exists
- Mix "TestMix" has target "TargetA"
Test Data:
| ROLE Type | TARGET ERROR CODE | TARGET TO HAVE ERROR | Expected |
|---|---|---|---|
| Sample | TERR001 | TargetA | Ignored - Sample cannot have TARGET ERROR CODE |
| Sample | (empty) | (empty) | Imported |
| Control | TERR001 | TargetA | Imported |
| Control | (empty) | (empty) | Imported |
| Control | TERR001 | TargetX (not in mix) | Ignored - target not in mix |
Steps:
- Import XLSX with code and target validation cases
- Verify TARGET ERROR CODE rules per role type
- Verify TARGET TO HAVE ERROR belongs to specified mix
Expected Results:
- AC5: WELL ERROR CODE / LIMS CODE validated against appropriate configuration
- AC6: TARGET ERROR CODE must be empty for Sample-typed roles
- AC7: TARGET TO HAVE ERROR validated as belonging to specified mix
Automation Status: Manual (XLSX column validation — config import/export content verification)
Jira: BT-3885
TC-CONFIGIO-008: Combined Outcomes import - priority, discrepancy, and IC Failed
Verifies: REQ-CONFIGIO-004 (AC8, AC9, AC10, AC11, AC12, AC13, AC14)
Method: TM-API
Priority: Medium
Preconditions:
- Existing combined outcomes at priorities 1, 2, 3
Test Data:
| PRIORITY | CLS DISCREPANCY | CT DISCREPANCY | IC FAILED | Expected |
|---|---|---|---|---|
| abc | (blank) | (blank) | false | Ignored - PRIORITY non-numeric |
| 2 | (blank) | (blank) | false | Imported - existing priorities shifted |
| 5 | TRUE | FALSE | true | Imported |
| 6 | YES | (blank) | false | Ignored - invalid boolean |
| 7 | (blank) | (blank) | true | Imported |
Steps:
- Import XLSX with priority and discrepancy test cases
- Verify priority merging shifts existing rows
- Verify discrepancy fields accept boolean or blank
- Export and verify IC FAILED preserved
Expected Results:
- AC8: PRIORITY validated as numeric
- AC9: Imported priorities merge, shifting existing rows
- AC10: Discrepancy required fields validated as boolean or blank
- AC11: Blank discrepancy values interpreted as "Any"
- AC12: Multi-run combined outcome feature disabled when discrepancy used
- AC13: Export includes all configured combined outcomes
- AC14: IC FAILED value preserved during round-trip
Automation Status: Manual (XLSX column validation — config import/export content verification)
Jira: BT-5230
TC-CONFIGIO-009: Control Labels import - backup mixes and wildcard validation
Verifies: REQ-CONFIGIO-005 (AC1, AC2, AC3)
Method: TM-API
Priority: High
Preconditions:
- Mixes "Mix1", "Mix2", "Mix3" exist
Test Data:
| BACKUP MIXES | LABELS_IN_IMPORTED_RUNFILE | Expected |
|---|---|---|
| Mix1|Mix2 | POS* | Imported |
| Mix1|Mix2|Mix3 | *SARS-CoV-2 PC | Imported |
| Mix1 | Ne*g | Ignored - wildcard in middle |
| Mix1 | TestLabelEnd | Ignored - wildcard in middle |
| Mix1 | * | Imported (wildcard at start only) |
Steps:
- Import XLSX with backup mixes and wildcard patterns
- Verify pipe-separated format for BACKUP MIXES
- Verify wildcard validation rules
Expected Results:
- AC1: BACKUP MIXES, LABELS_IN_IMPORTED_RUNFILE columns supported
- AC2: BACKUP MIXES formatted as pipe-separated mix names
- AC3: Wildcard "*" rejected when in middle of role alias
Automation Status: Manual (XLSX column validation — config import/export content verification)
TC-CONFIGIO-010: Control Labels import - IC delta check and resolution priority
Verifies: REQ-CONFIGIO-005 (AC4, AC5, AC6, AC7)
Method: TM-API
Priority: Medium
Preconditions:
- Control roles of types: Sample, Ignore, Crossover, Control
- Client config "Use role priority for resolution" initially disabled
Test Data:
| Role Type | EXCLUDE FROM IC DELTA CHECK | RESOLUTION PRIORITY | Config Enabled | Expected |
|---|---|---|---|---|
| Control | Yes | 5 | true | Imported |
| Control | No | 5 | false | Imported (priority ignored) |
| Sample | Yes | 5 | true | Ignored - Sample cannot have priority |
| Ignore | Yes | 5 | true | Ignored - Ignore cannot have priority |
| Crossover | No | 5 | true | Ignored - Crossover cannot have priority |
| Control | Invalid | (empty) | false | Ignored - invalid IC value |
Steps:
- Import with "Use role priority" disabled, verify priority ignored
- Enable "Use role priority", reimport
- Verify role type restrictions on resolution priority
- Export and verify all columns included
Expected Results:
- AC4: EXCLUDE FROM IC DELTA CHECK validated as Yes/No/empty
- AC5: RESOLUTION PRIORITY only imported when config enabled
- AC6: Sample, Ignore, Crossover roles cannot have resolution priority
- AC7: Export includes all configured values
Automation Status: Manual (XLSX column validation — config import/export content verification)
Jira: BT-5303
TC-CONFIGIO-011: Error Codes import and export
Verifies: REQ-CONFIGIO-006 (AC1, AC2, AC3, AC4)
Method: TM-API
Priority: Medium
Preconditions:
- User has Super Administrator role
Test Data:
| ERROR CODE | ERROR TYPE | IS INHIBITED | CAUSES MISSING MIXES |
|---|---|---|---|
| ERR001 | Associate Control Error | true | false |
| ERR002 | Standard Error | false | true |
| ERR003 | Associate Control Error | false | false |
Steps:
- Import XLSX with error code test data
- Query database for imported error codes
- Export error codes configuration
- Verify round-trip data integrity
Expected Results:
- AC1: ERROR CODE, ERROR TYPE, IS INHIBITED, CAUSES MISSING MIXES columns supported
- AC2: ERROR TYPE supports "Associate Control Error" type
- AC3: IS INHIBITED and CAUSES MISSING MIXES imported as boolean
- AC4: Export includes all error codes with configured properties
Automation Status: Manual (XLSX column validation — config import/export content verification)
TC-CONFIGIO-012: Error Resolutions import and export
Verifies: REQ-CONFIGIO-007 (AC1, AC2, AC3, AC4, AC5)
Method: TM-API
Priority: Medium
Preconditions:
- User has Super Administrator role
- Resolvable error "ERR_RESOLVABLE" exists
- Non-resolvable errors ONE_STANDARD_CONTROL, STANDARD_WITHOUT_QUANT exist
Test Data:
| Error | RESOLUTION LEVEL | Expected |
|---|---|---|
| ERR_RESOLVABLE | Well | Imported |
| ERR_RESOLVABLE | All Observations | Imported |
| ERR_RESOLVABLE | Discrepant Observations | Imported |
| ERR_RESOLVABLE | Invalid | Ignored |
| ONE_STANDARD_CONTROL | Well | Ignored - non-resolvable |
| STANDARD_WITHOUT_QUANT | All Observations | Ignored - non-resolvable |
Steps:
- Import XLSX with resolution level test data
- Verify valid resolution levels accepted
- Verify non-resolvable errors rejected
- Export and verify RESOLUTION LEVEL included
Expected Results:
- AC1: RESOLUTION LEVEL column supported
- AC2: RESOLUTION LEVEL validated as "Well", "All Observations", or "Discrepant Observations"
- AC3: Invalid RESOLUTION LEVEL causes row rejection
- AC4: Resolutions cannot be added to non-resolvable errors
- AC5: Export includes RESOLUTION LEVEL for all error resolutions
Automation Status: Manual (XLSX column validation — config import/export content verification)
TC-CONFIGIO-013: Help Items tags import and export
Verifies: REQ-CONFIGIO-008 (AC1, AC2, AC3)
Method: TM-API
Priority: Low
Preconditions:
- Help items exist in system
Test Data:
| HELP ITEM | TAGS | Expected |
|---|---|---|
| HelpItem1 | tag1, tag2, tag3 | Imported with 3 tags |
| HelpItem2 | single-tag | Imported with 1 tag |
| HelpItem3 | (empty) | Imported with empty tags |
| HelpItem4 | (null) | Imported with empty tags |
Steps:
- Import XLSX with help items and tags
- Verify comma-separated tags parsed correctly
- Export help items configuration
- Verify tags formatted as comma-separated or blank
Expected Results:
- AC1: TAGS column supported
- AC2: Multiple tags parsed from comma-separated format
- AC3: Empty/null tags result in empty tags value; export formats correctly
Automation Status: Planned
Jira: [Pending]
TC-CONFIGIO-014: Rules import - IS ALLOW ERROR WELLS
Verifies: REQ-CONFIGIO-009 (AC1, AC2, AC3, AC4)
Method: TM-API
Priority: Medium
Preconditions:
- Rules configured in system
Test Data:
| Rule | IS ALLOW ERROR WELLS | Expected |
|---|---|---|
| Rule1 | TRUE | Imported with allow_error_wells = true |
| Rule2 | FALSE | Imported with allow_error_wells = false |
| Rule3 | (null) | Imported with allow_error_wells = false |
| Rule4 | (empty) | Imported with allow_error_wells = false |
| Rule5 | Yes | Imported with allow_error_wells = false (treated as non-boolean) |
Steps:
- Import XLSX with IS ALLOW ERROR WELLS values
- Verify null/empty treated as false
- Verify non-boolean treated as false
- Export and verify true/false boolean output
Expected Results:
- AC1: IS ALLOW ERROR WELLS column supported
- AC2: Null/empty values treated as false
- AC3: Non-boolean values treated as false
- AC4: Export includes IS ALLOW ERROR WELLS as true/false
Automation Status: Manual (XLSX column validation — config import/export content verification)
Jira: BT-3559
TC-CONFIGIO-015: Rules import - precedence normalization
Verifies: REQ-CONFIGIO-009 (AC5, AC6, AC7)
Method: TM-API
Priority: High
Preconditions:
- Existing rules with various types and precedences
Test Data:
Import order:
- Rule A: Type=Observation, Precedence=5
- Rule B: Type=Observation, Precedence=5 (duplicate)
- Rule C: Type=Control Check, Precedence=1
- Rule D: Type=Sample Result, Precedence=10
- Rule E: Type=Observation, Precedence=3
Expected normalized global precedence:
- Rule E: 1 (Observation, relative 3)
- Rule A: 2 (Observation, relative 5, first)
- Rule B: 3 (Observation, relative 5, second - later row higher)
- Rule C: 4 (Control Check)
- Rule D: 5 (Sample Result)
Steps:
- Import rules with varying types and relative precedences
- Verify normalization based on rule type order
- Verify gaps removed within types
- Verify duplicate handling (later rows get higher precedence)
Expected Results:
- AC5: Precedence normalized based on rule type and relative precedence
- AC6: Rule type precedence order: Observation(1) < Control Check(2) < Sample Result(3) < Apply Controls(4) < Sample Check(5) < Parse/Import/Reanalysis/General/Reporting(6)
- AC7: Duplicate precedences within type resolved; new imports take priority over existing
Automation Status: Manual (XLSX column validation — config import/export content verification)
Jira: BT-4054
TC-CONFIGIO-016: QIR Quantification Settings import - column support and basic validation
Verifies: REQ-CONFIGIO-010 (AC1, AC2, AC3, AC4)
Method: TM-API
Priority: High
Preconditions:
- Targets "TargetA", "TargetB" exist in target table
Test Data:
| TARGET | SLOPE | INTERCEPT | Expected |
|---|---|---|---|
| TargetA | 1.5 | 2.4 | Imported |
| TargetA | 1.5 | (null) | Ignored - both required |
| TargetA | (null) | 2.4 | Ignored - both required |
| TargetA | (null) | (null) | Imported (neither provided) |
| NonExistent | 1.5 | 2.4 | Ignored - target not found |
Steps:
- Import XLSX with slope/intercept test cases
- Verify TARGET existence validation
- Verify SLOPE and INTERCEPT must be provided together
Expected Results:
- AC1: TARGET, SLOPE, INTERCEPT, MIN/MAX SLOPE, MIN/MAX EFFICIENCY, MIN R2, MIN CONTROLS columns supported
- AC2: TARGET validated as required and existing
- AC3: SLOPE and INTERCEPT required together (both or neither)
- AC4: Export includes all quantification settings
Automation Status: Manual (XLSX column validation — config import/export content verification)
Jira: BT-3567
TC-CONFIGIO-017: QIR Quantification Settings import - range validation
Verifies: REQ-CONFIGIO-010 (AC5, AC6, AC7, AC8)
Method: TM-API
Priority: Medium
Preconditions:
- Target "TargetA" exists
Test Data:
| MIN SLOPE | MAX SLOPE | MIN EFFICIENCY | MAX EFFICIENCY | MIN R2 | MIN CONTROLS | Expected |
|---|---|---|---|---|---|---|
| 0.5 | 1.5 | 0.8 | 1.2 | 0.95 | 3 | Imported |
| 1.5 | 0.5 | 0.8 | 1.2 | 0.95 | 3 | Ignored - min > max |
| 0.5 | 1.5 | 1.2 | 0.8 | 0.95 | 3 | Ignored - min > max |
| (null) | (null) | (null) | (null) | 0.5 | 2 | Imported |
| 0.5 | 1.5 | 0.8 | 1.2 | -0.1 | 3 | Ignored - MIN R2 < 0 |
| 0.5 | 1.5 | 0.8 | 1.2 | 1.5 | 3 | Ignored - MIN R2 > 1 |
| 0.5 | 1.5 | 0.8 | 1.2 | 0.95 | 1 | Ignored - MIN CONTROLS < 2 |
Steps:
- Import XLSX with range validation test cases
- Verify MIN/MAX comparisons
- Verify MIN R2 range (0-1)
- Verify MIN CONTROLS minimum (>= 2)
Expected Results:
- AC5: MIN/MAX SLOPE validated as null or decimal with min <= max
- AC6: MIN/MAX EFFICIENCY validated as null or decimal with min <= max
- AC7: MIN R2 validated as null or decimal between 0 and 1
- AC8: MIN CONTROLS validated as null or integer >= 2
Automation Status: Manual (XLSX column validation — config import/export content verification)
Jira: BT-3567
TC-CONFIGIO-018: Westgard Limits import - SD validation
Verifies: REQ-CONFIGIO-011 (AC1, AC2, AC3)
Method: TM-API
Priority: Medium
Preconditions:
- Westgard configuration exists
Test Data:
| SD Value | Expected |
|---|---|
| 0.5 | Imported |
| 1.0 | Imported |
| 0 | Ignored |
| -0.5 | Ignored |
| (null) | Ignored |
Steps:
- Import XLSX with various SD values
- Verify validation rejects SD = 0 and SD < 0
- Verify valid SD > 0 imported
Expected Results:
- AC1: SD validated as number greater than 0
- AC2: Rows with SD = 0 ignored
- AC3: Rows with valid SD > 0 imported
Automation Status: Planned
Jira: [Pending]
TC-CONFIGIO-019: Reporting Cut-offs import - specimen type validation
Verifies: REQ-CONFIGIO-012 (AC1, AC2, AC3, AC4, AC5)
Method: TM-API
Priority: Medium
Preconditions:
- Mix "TestMix" exists
- Specimen "SpecimenA" has test code mapping for TestMix
- Specimen "SpecimenB" does NOT have mapping for TestMix
Test Data with "use sample type" ENABLED:
| Mix | SPECIMEN TYPE | Expected |
|---|---|---|
| TestMix | SpecimenA | Imported with specimen association |
| TestMix | SpecimenB | Ignored - no mapping |
| TestMix | (empty) | Imported without specimen association |
Test Data with "use sample type" DISABLED:
| Mix | SPECIMEN TYPE | Expected |
|---|---|---|
| TestMix | SpecimenA | Ignored - specimen not allowed |
| TestMix | (empty) | Imported |
Steps:
- Enable "use sample type" config
- Import with specimen type scenarios
- Disable "use sample type" config
- Import with specimen type scenarios
Expected Results:
- AC1: SPECIMEN TYPE column supported
- AC2: When enabled, rows with valid specimen/mix mapping imported with association
- AC3: When enabled, rows without specimen imported without association
- AC4: When disabled, rows with specimen rejected
- AC5: When disabled, rows without specimen imported normally
Automation Status: Manual (XLSX column validation — config import/export content verification)
Jira: BT-4293
TC-CONFIGIO-020: LIMS Export configuration import and export
Verifies: REQ-CONFIGIO-013 (AC1, AC2, AC3)
Method: TM-API
Priority: Medium
Preconditions:
- LIMS export codes exist
Test Data:
| Code | IS INHIBITED | CAUSES MISSING MIXES | DOES PREVENT ANALYSE |
|---|---|---|---|
| LIMS001 | true | false | YES |
| LIMS002 | false | true | NO |
| LIMS003 | true | true | YES |
Steps:
- Import XLSX with LIMS export configuration
- Verify boolean columns imported correctly
- Verify DOES PREVENT ANALYSE accepts YES/NO
- Export and verify all properties included
Expected Results:
- AC1: IS INHIBITED, CAUSES MISSING MIXES, DOES PREVENT ANALYSE columns supported
- AC2: DOES PREVENT ANALYSE accepts YES/NO values
- AC3: Import creates/updates entries; export includes all properties
Automation Status: Manual (XLSX column validation — config import/export content verification)
TC-CONFIGIO-021: Extraction Instruments toggle impact on Westgard import
Verifies: REQ-CONFIGIO-014 (AC1, AC2, AC3)
Method: TM-API
Priority: High
Preconditions:
- Westgard configuration exists
Test Data:
| Row | Has Extraction Instruments | Toggle ON Result | Toggle OFF Result |
|---|---|---|---|
| 1 | Yes | Imported | Ignored |
| 2 | No | Ignored | Imported |
| 3 | Yes | Imported | Ignored |
| 4 | No | Ignored | Imported |
Steps:
- Set "Use Extraction Instruments" toggle ON
- Import Westgard configuration
- Verify rows without Extraction Instruments ignored
- Set toggle OFF
- Import same configuration
- Verify rows with Extraction Instruments ignored
- Check import report for "Ignored" status
Expected Results:
- AC1: Toggle ON - rows without Extraction Instruments ignored
- AC2: Toggle OFF - rows with Extraction Instruments ignored
- AC3: Ignored rows show status "Ignored" in import report
Automation Status: Manual (XLSX column validation — config import/export content verification)
Jira: BT-3713
TC-CONFIGIO-022: Mixes and Targets column validation (Phase B2)
Verifies: REQ-CONFIGIO-003 (Column ACs from CONFIG_COVERAGE_FIXES.md Phase B2)
Method: TM-API
Priority: High
Preconditions:
- Mix "TestMix" exists with targets
- Import file prepared with column test scenarios
Test Data:
| Column | Scenario | Value | Expected Status | Expected Error |
|---|---|---|---|---|
| QUANTITATIVE | Invalid | ABC | Ignored | "Invalid quantification" |
| QUANTITATIVE | Inconsistent in mix | true/false | Ignored | "Multiple quantification settings" |
| TARGET ORDER | Partial | 1,(empty),3 | Ignored | "Must fill all orders or not fill at all" |
| TARGET ORDER | Non-numeric | ABC | Ignored | "Order must be numeric" |
| PREFERRED RESULT PROVIDER | Invalid | OTHER | Ignored | Invalid provider error |
| EXPECTED THRESHOLD | Passive >1000 | 1500 | Ignored | Threshold range error |
Steps:
- Import XLSX with column validation test cases
- Retrieve status report
- Verify each row's status and error message
Expected Results:
- QUANTITATIVE invalid: Rejected with "Invalid quantification"
- QUANTITATIVE inconsistent: Rejected with "Multiple quantification settings"
- TARGET ORDER partial: Rejected with "Must fill all orders or not fill at all"
- TARGET ORDER non-numeric: Rejected with "Order must be numeric"
- PREFERRED RESULT PROVIDER invalid: Rejected with invalid provider error
- EXPECTED THRESHOLD out of range: Rejected with threshold range error
Automation Status: Planned
Jira: Pending
TC-CONFIGIO-023: Combined Outcomes column validation (Phase B1)
Verifies: REQ-CONFIGIO-004 (Column ACs from CONFIG_COVERAGE_FIXES.md Phase B1)
Method: TM-API
Priority: High
Preconditions:
- Mixes, targets, error codes, LIMS statuses configured
- Specimens configured
Test Data (Mix Result Level):
| Column | Scenario | Expected Error |
|---|---|---|
| ALLOW OTHER RUNS TO BE USED | Invalid | "Invalid 'other runs to be used' value" |
| ALLOW OTHER RUNS TO BE USED | With discrepancy | "'Use other runs' not allowed because CLS discrepancy or CT discrepancy is required" |
| IS REPEAT | Invalid | "Invalid is repeat" |
| MIX MISSING | Inconsistent | "mix_missing values must be consistent" |
| MIX LEVEL OUTCOME TYPE | Without code | "mix level: well error code or lims code filled without selecting outcome type" |
| REQUIRED HISTORY OUTCOMES | Without repeat | "Previous well outcomes are not allowed" |
| REQUIRED HISTORY OUTCOMES | Invalid outcome | "previous well outcomes are invalid" |
Test Data (Target Result Level):
| Column | Scenario | Expected Error |
|---|---|---|
| RESULT | Invalid | "Result not found" |
| MIN CT | Non-integer | "CT value is not integer" |
| MIN CT | Out of range | "CT is not in valid range" |
| MAX CT | Less than MIN | "Max CT is not greater than to min CT" |
| MIN QUANTITY | Not numeric | "Quantity is not numeric" |
| MAX QUANTITY | Less than MIN | "Max quantity is not greater than to min quantity" |
| SPECIMEN | Invalid (enabled) | "Invalid specimen name" |
| SPECIMEN | Filled (disabled) | "Specimen is filled when 'use sample type' config is disabled" |
Steps:
- Import Combined Outcomes with column validation test cases
- Retrieve status report
- Verify error messages match specification
Expected Results:
- All documented error messages produced for invalid scenarios
- Mix result level validations enforced
- Target result level validations enforced
- Cross-field validations (CT range, quantity range) enforced
Automation Status: Planned
Jira: Pending
TC-CONFIGIO-024: Error Resolutions column validation (Phase B3)
Verifies: REQ-CONFIGIO-007 (Column ACs from CONFIG_COVERAGE_FIXES.md Phase B3)
Method: TM-API
Priority: High
Preconditions:
- Resolution message numbers configured
- LIMS statuses configured
Test Data:
| RESOLUTION NUMBER | OTHER WELLS AFFECTED | Expected Error |
|---|---|---|
| (empty) | DETECTED | "Resolution number is not filled" |
| 99 (invalid) | DETECTED | "No matching resolution message" |
| 1 | ALL WELLS,DETECTED | "Can't have other lims along with all wells" |
Steps:
- Import Error Resolutions with column validation test cases
- Retrieve status report
- Verify error messages match specification
Expected Results:
- RESOLUTION NUMBER empty: "Resolution number is not filled"
- RESOLUTION NUMBER invalid: "No matching resolution message"
- OTHER WELLS AFFECTED with ALL WELLS + others: "Can't have other lims along with all wells"
Automation Status: Planned
Jira: Pending
TC-CONFIGIO-025: Error Codes DEFAULT LIMS EXPORT validation (Phase B4)
Verifies: REQ-CONFIGIO-006 (DEFAULT LIMS EXPORT column AC from CONFIG_COVERAGE_FIXES.md Phase B4)
Method: TM-API
Priority: High
Preconditions:
- LIMS status codes configured
Test Data:
| ERROR CODE | DEFAULT LIMS EXPORT | Expected |
|---|---|---|
| ERR001 | DETECTED | Imported |
| ERR002 | NONEXISTENT | Ignored - "Default Lims Status does not match with any available Lims Statuses" |
Steps:
- Import Error Codes with DEFAULT LIMS EXPORT test cases
- Retrieve status report
- Verify validation error message
Expected Results:
- Valid LIMS status: Row imported
- Invalid LIMS status: Rejected with "Default Lims Status does not match with any available Lims Statuses"
Automation Status: Planned
Jira: Pending
TC-CONFIGIO-026: Westgard Limits DYE and RANGE START DATE validation (Phase C7)
Verifies: REQ-CONFIGIO-011 (DYE, RANGE START DATE column ACs from CONFIG_COVERAGE_FIXES.md Phase C7)
Method: TM-API
Priority: Medium
Preconditions:
- Mixes with targets and dyes configured
Test Data:
| TARGET | DYE | RANGE START DATE | Expected |
|---|---|---|---|
| Global | (empty) | 2026-01-15 | Imported |
| TargetA | FAM | 2026-01-15 | Imported |
| TargetA | INVALID | 2026-01-15 | Ignored - invalid DYE |
| TargetA | FAM | (empty) | Ignored |
| TargetA | FAM | invalid | Ignored - "Invalid date format..." |
Steps:
- Import Westgard Limits with DYE and date test cases
- Retrieve status report
- Verify error messages
Expected Results:
- DYE not required when TARGET is "Global"
- DYE required when TARGET is specific
- RANGE START DATE required, accepts string or Excel serial
- Invalid date: "Invalid date format. Expected a valid date string or Excel serial number."
Automation Status: Planned
Jira: Pending
TC-CONFIGIO-027: Help Items full column validation (Phase C1)
Verifies: REQ-CONFIGIO-008 (Full column ACs from CONFIG_COVERAGE_FIXES.md Phase C1)
Method: TM-API
Priority: Medium
Preconditions:
- Help videos configured
- Valid page names in system
Test Data:
| ORDER | TITLE | DESCRIPTION | VIDEO | PAGES AVAILABLE | Expected |
|---|---|---|---|---|---|
| 1 | Help 1 | Desc 1 | video1 | Run Files | Imported |
| (empty) | Help 2 | Desc 2 | (empty) | Run Files | Ignored - "Help item: ignored" |
| 2 | (empty) | Desc 2 | (empty) | Run Files | Ignored - "Help item: ignored" |
| 3 | Help 3 | (empty) | (empty) | Run Files | Ignored - "Help item: ignored" |
| 4 | Help 4 | Desc 4 | invalid_video | Run Files | Ignored - "Help item: ignored" |
| 5 | Help 5 | Desc 5 | (empty) | Invalid Page | Ignored - "Help item: ignored" |
Steps:
- Import Help Items with column validation test cases
- Retrieve status report
- Verify all required columns enforced
Expected Results:
- ORDER required and unique
- TITLE required
- DESCRIPTION required
- VIDEO optional, must match existing HelpVideo
- PAGES AVAILABLE required, must be valid page names
- Invalid rows: "Help item: ignored"
Automation Status: Planned
Jira: Pending
TC-CONFIGIO-028: Rules and Rules Mapping column validation (Phase C5/C6)
Verifies: REQ-CONFIGIO-009 (Column ACs from CONFIG_COVERAGE_FIXES.md Phase C5/C6)
Method: TM-API
Priority: Medium
Preconditions:
- Rules configured with programmatic names
- Mixes with targets and dyes configured
Test Data (Rules):
| PROGRAMMATIC RULE NAME | RULE DESCRIPTION | Expected |
|---|---|---|
| (empty) | Description | Ignored |
| RULE_NAME | (empty) | Ignored |
Test Data (Rules Mapping):
| RULE ID | MIX | TARGET | DYE | Expected Error |
|---|---|---|---|---|
| (empty) | Mix1 | TargetA | FAM | "Rule id is not filled" |
| NONEXISTENT | Mix1 | TargetA | FAM | "No matching rule" |
| RULE_NAME | Mix1 | TargetA | (empty) | "Invalid mix and dye combination" |
| RULE_NAME | Mix1 | NONEXISTENT | FAM | "No matching target" |
Steps:
- Import Rules with validation test cases
- Import Rules Mapping with validation test cases
- Verify error messages match specification
Expected Results:
- Rules: PROGRAMMATIC RULE NAME and RULE DESCRIPTION required
- Rules Mapping: RULE ID required, must match existing rule
- Rules Mapping: DYE required when TARGET is not "global"
Automation Status: Planned
Jira: Pending
TC-CONFIGIO-029: Control Labels export column validation (Phase C3)
Verifies: REQ-CONFIGIO-005 (Export column ACs from CONFIG_COVERAGE_FIXES.md Phase C3)
Method: TM-API
Priority: Medium
Preconditions:
- Control labels with roles configured
Steps:
- Export Control Labels via API
- Verify export file contains ROLE TYPE and IS EXTRACTED columns
- Verify values are derived from Role entity
Expected Results:
- Export includes ROLE TYPE column (derived from Role)
- Export includes IS EXTRACTED column (derived from Role.has_extraction)
- ROLE TYPE and IS EXTRACTED are read-only (not used during import)
Automation Status: Planned
Jira: Pending
TC-CONFIGIO-030: Reporting Cut-offs QUANT OR CT validation (Phase F3)
Verifies: REQ-CONFIGIO-012 (QUANT OR CT column AC from CONFIG_COVERAGE_FIXES.md Phase F3)
Method: TM-API
Priority: Medium
Preconditions:
- Mixes configured
Test Data:
| MIX | TARGET | QUANT OR CT | UPPER BOUNDARY | Expected |
|---|---|---|---|---|
| Mix1 | TargetA | Quant | 1000 | Imported |
| Mix1 | TargetA | Ct | 35 | Imported |
| Mix1 | TargetA | (empty) | 1000 | Ignored - "Quant or Ct is not present" |
| Mix1 | TargetA | Invalid | 1000 | Ignored - "Invalid option" |
Steps:
- Import Reporting Cut-offs with QUANT OR CT test cases
- Retrieve status report
- Verify error messages
Expected Results:
- QUANT OR CT required, valid values: "Quant" or "Ct"
- Empty value: "Quant or Ct is not present"
- Invalid value: "Invalid option"
Automation Status: Planned
Jira: Pending
TC-CONFIGIO-031: LIMS Export RESULT column validation (Phase F4)
Verifies: REQ-CONFIGIO-013 (RESULT column AC from CONFIG_COVERAGE_FIXES.md Phase F4)
Method: TM-API
Priority: Medium
Preconditions:
- LIMS export codes configured
Test Data:
| CODE | MESSAGE | TYPE | RESULT | Expected |
|---|---|---|---|---|
| LIMS001 | Detected | Exclude | DETECTED | Imported |
| LIMS002 | Not Detected | Warning | NOT_DETECTED | Imported |
| LIMS003 | Unknown | Information | (empty) | Imported (null result) |
| LIMS004 | Invalid | Warning | INVALID | Ignored - "Lims status: ignored" |
Steps:
- Import LIMS Export configuration with RESULT column test cases
- Retrieve status report
- Verify RESULT validation
Expected Results:
- RESULT optional, valid values: "DETECTED", "NOT_DETECTED", or null
- Invalid RESULT: Row rejected with "Lims status: ignored"
Automation Status: Planned
Jira: Pending
TC-CONFIGIO-040: Kit Configuration page has upload button for config import
Verifies: REQ-CONFIGIO-001
Method: TM-UI
Priority: Medium
Preconditions:
- User logged in with Administrator role
Steps:
- Navigate to the Kit Configuration page
- Wait for the page to fully render
Expected Results:
- Page displays the "Kit Configuration" screen title
- "Upload Configuration Sheet" button is present
Automation Status: Automated (Browser)
Feature: tests/exports/browser/upload-runs.feature
TC-CONFIGIO-041: Valid config upload triggers success notification
Verifies: REQ-CONFIGIO-001 (AC1)
Method: TM-UI
Priority: High
Preconditions:
- User logged in with Administrator role
- Valid XLSX configuration file available
Steps:
- Navigate to the Kit Configuration page
- Upload a valid configuration file via the import dialog
- Wait for asynchronous processing acknowledgement
Expected Results:
- Notification containing "submitted" is displayed after upload
Automation Status: Automated (Browser)
Feature: tests/exports/browser/upload-runs.feature
TC-CONFIGIO-042: Kit Configuration page shows data table after config import
Verifies: REQ-CONFIGIO-001
Method: TM-UI
Priority: Medium
Preconditions:
- User logged in with Administrator role
- Valid configuration loaded via API
Steps:
- Load a test configuration via API
- Navigate to the Kit Configuration page
- Wait for the page to render
Expected Results:
- Page displays "Kit Configuration" screen title
- "Reset Configuration Data" button is present (indicating config data exists)
Automation Status: Automated (Browser)
Feature: tests/exports/browser/upload-runs.feature
TC-CONFIGIO-B006: Config upload triggers asynchronous submission notification
Verifies: REQ-CONFIGIO-001 (AC1)
Method: TM-UI
Priority: High
Preconditions:
- User logged in with Administrator role
- Valid XLSX configuration file available
Steps:
- Navigate to the Kit Configuration page
- Upload a configuration file via the import dialog
- Wait for asynchronous job submission
Expected Results:
- Notification containing "submitted" is displayed
Automation Status: Automated (Browser)
Feature: tests/exports/browser/config-io.feature
TC-CONFIGIO-B007: Page remains functional after config upload
Verifies: REQ-CONFIGIO-001
Method: TM-UI
Priority: Medium
Preconditions:
- User logged in with Administrator role
- Valid XLSX configuration file available
Steps:
- Navigate to the Kit Configuration page
- Upload a configuration file via the import dialog
- Verify page elements remain intact after upload
Expected Results:
- "Kit Configuration" screen title still displayed
- "Upload Configuration Sheet" button still present
- "Reset Configuration Data" button still present
Automation Status: Automated (Browser)
Feature: tests/exports/browser/config-io.feature
TC-CONFIGIO-B011: Config data persists across SPA navigation
Verifies: REQ-CONFIGIO-001
Method: TM-UI
Priority: Medium
Preconditions:
- User logged in with Administrator role
- Valid configuration loaded via API
Steps:
- Load test configuration via API
- Navigate to the Kit Configuration page and verify data is displayed
- Navigate away to a different page (e.g., Runs)
- Return to the Kit Configuration page
Expected Results:
- Configuration data rows are visible after initial load
- Configuration data rows are still visible after navigating back
Automation Status: Automated (Browser)
Feature: tests/exports/browser/config-io.feature
Gap Analysis
No gaps identified. All 131 acceptance criteria have test coverage.
Coverage by AC Type
| AC Category | Count | Covered | Notes |
|---|---|---|---|
| Column Support | 30 | 30 | Verified via import/export operations (expanded for Phases B-D) |
| Field Validation | 65 | 65 | Verified via TM-API with test vectors (expanded for Phases B-D column ACs) |
| Import Behavior | 20 | 20 | Verified via status report analysis |
| Export Behavior | 12 | 12 | Verified via round-trip testing |
| Configuration Toggle | 4 | 4 | Verified via config state manipulation |
Traceability to Existing Tests
| Test Case | Jira Test | Automation |
|---|---|---|
| TC-CONFIGIO-001 | BT-3714 | Behat |
| TC-CONFIGIO-002 | Pending | Partial |
| TC-CONFIGIO-003 | BT-3562 | PHPUnit |
| TC-CONFIGIO-004 | BT-4677 | PHPUnit |
| TC-CONFIGIO-005 | BT-5227, BT-5308 | PHPUnit |
| TC-CONFIGIO-006 | BT-4239 | PHPUnit |
| TC-CONFIGIO-007 | BT-3885 | PHPUnit |
| TC-CONFIGIO-008 | BT-5230 | PHPUnit |
| TC-CONFIGIO-009 | BT-3913, BT-3985 | PHPUnit |
| TC-CONFIGIO-010 | BT-5303 | PHPUnit |
| TC-CONFIGIO-011 | BT-3835, BT-4164 | PHPUnit |
| TC-CONFIGIO-012 | BT-3862, BT-4864 | PHPUnit |
| TC-CONFIGIO-013 | Pending | Planned |
| TC-CONFIGIO-014 | BT-3559 | PHPUnit |
| TC-CONFIGIO-015 | BT-4054 | PHPUnit |
| TC-CONFIGIO-016 | BT-3567 | PHPUnit |
| TC-CONFIGIO-017 | BT-3567 | PHPUnit |
| TC-CONFIGIO-018 | Pending | Planned |
| TC-CONFIGIO-019 | BT-4293 | PHPUnit |
| TC-CONFIGIO-020 | BT-4164, BT-4042 | PHPUnit |
| TC-CONFIGIO-021 | BT-3713 | PHPUnit |
| TC-CONFIGIO-022 through TC-CONFIGIO-031 | Pending | Planned (Phases B-D column ACs) |
| TC-CONFIGIO-040 | Browser | Behat (Browser) |
| TC-CONFIGIO-041 | Browser | Behat (Browser) |
| TC-CONFIGIO-042 | Browser | Behat (Browser) |
| TC-CONFIGIO-B006 | Browser | Behat (Browser) |
| TC-CONFIGIO-B007 | Browser | Behat (Browser) |
| TC-CONFIGIO-B011 | Browser | Behat (Browser) |
Notes
- CONFIGIO is a backend-heavy domain with deterministic validation logic
- TM-API is primary method per Test Plan Section 3.2 for configuration import/export
- Most test cases leverage parameterized test data tables for comprehensive coverage
- TC-CONFIGIO-002 includes manual verification for keyboard shortcut (P key)
- TC-CONFIGIO-013, TC-CONFIGIO-018 pending automation due to missing Jira tests
- TC-CONFIGIO-022 through TC-CONFIGIO-031 added for column-level ACs from CONFIG_COVERAGE_FIXES.md Phases B-D
- TC-CONFIGIO-040 through TC-CONFIGIO-042 are browser-level TCs from
upload-runs.featurecovering upload button presence, notification, and data display - TC-CONFIGIO-B006, TC-CONFIGIO-B007, TC-CONFIGIO-B011 are browser-level TCs from
config-io.featurecovering async notification, page stability, and SPA data persistence