Skip to main content
Version: 3.0.0

STD: Config Import/Export (CONFIGIO)

Version: v1.0.0 Status: Draft SRS Source: docusaurus/docs/srs/configio.md Domain: 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 IDTitleACsTestsAC CoverageMethodGaps
REQ-CONFIGIO-001Generate Import Status Reports4TC-CONFIGIO-001, TC-CONFIGIO-040, TC-CONFIGIO-041, TC-CONFIGIO-042, TC-CONFIGIO-B006, TC-CONFIGIO-B007, TC-CONFIGIO-B0114/4 (100%)TM-HYBNone
REQ-CONFIGIO-002Export Customer-Friendly Configuration3TC-CONFIGIO-0023/3 (100%)TM-HYBNone
REQ-CONFIGIO-003Import/Export Mixes and Targets12TC-CONFIGIO-003, TC-CONFIGIO-004, TC-CONFIGIO-00512/12 (100%)TM-APINone
REQ-CONFIGIO-004Import/Export Combined Outcomes14TC-CONFIGIO-006, TC-CONFIGIO-007, TC-CONFIGIO-00814/14 (100%)TM-APINone
REQ-CONFIGIO-005Import/Export Control Labels7TC-CONFIGIO-009, TC-CONFIGIO-0107/7 (100%)TM-APINone
REQ-CONFIGIO-006Import/Export Error Codes4TC-CONFIGIO-0114/4 (100%)TM-APINone
REQ-CONFIGIO-007Import/Export Error Resolutions5TC-CONFIGIO-0125/5 (100%)TM-APINone
REQ-CONFIGIO-008Import/Export Help Items Tags3TC-CONFIGIO-0133/3 (100%)TM-APINone
REQ-CONFIGIO-009Import/Export Rules Configuration7TC-CONFIGIO-014, TC-CONFIGIO-0157/7 (100%)TM-APINone
REQ-CONFIGIO-010Import/Export QIR Quantification Settings8TC-CONFIGIO-016, TC-CONFIGIO-0178/8 (100%)TM-APINone
REQ-CONFIGIO-011Validate Westgard Limits on Import3TC-CONFIGIO-0183/3 (100%)TM-APINone
REQ-CONFIGIO-012Import Reporting Cut-offs5TC-CONFIGIO-0195/5 (100%)TM-APINone
REQ-CONFIGIO-013Import/Export LIMS Export Configuration3TC-CONFIGIO-0203/3 (100%)TM-APINone
REQ-CONFIGIO-014Apply Extraction Instruments Toggle3TC-CONFIGIO-0213/3 (100%)TM-APINone

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:

  1. Import configuration file via API endpoint
  2. Retrieve import result notification
  3. 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:

  1. Trigger customer-friendly export via API
  2. Verify downloaded file
  3. Navigate to Kit Configurations page
  4. 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:

ScenarioMINIMUM FLUORESCENCEIS QUANTITATIVEExpected
Valid precision100000.123456TRUEImported
Max precision1234567890123456.1234567890123456FALSEImported
Exceeds precision12345678901234567.12345678901234567TRUEIgnored
Invalid boolean100YESIgnored
Valid boolean false100FALSEImported

Steps:

  1. Prepare XLSX with test data rows
  2. Import via API endpoint
  3. Query database for imported values
  4. 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:

ScenarioMixTargetis_passiveExpected ThresholdExpected Result
Single passiveTestMixTargetAtrue500Imported
Multiple passive (row 1)TestMix2TargetAtrue500All rejected
Multiple passive (row 2)TestMix2TargetBtrue600All rejected
Non-passive thresholdTestMixTargetCfalse50000000Imported
Passive threshold > 1000TestMixTargetAtrue1500Ignored
Non-passive threshold > 100MTestMixTargetCfalse150000000Ignored

Steps:

  1. Import XLSX with passive target scenarios
  2. Verify mix rejection for multiple passive targets
  3. 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 CLSMAX CT FOR CTPREPEND CYCLESExpected
nullnull0Imported
30455Imported
0503Ignored (MAX CT < 1)
101503Ignored (MAX CT > 100)
5050-1Ignored (negative PREPEND)
50502.5Ignored (non-integer PREPEND)

Steps:

  1. Import XLSX with MAX CT and PREPEND CYCLES test cases
  2. Verify validation rules applied
  3. 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)

Jira: BT-5227, BT-5308


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:

ROLEOUTCOME TYPEExpected
(blank)ErrorIgnored - ROLE required
NonExistentErrorIgnored - ROLE not found
IgnoreRoleErrorIgnored - Ignore-typed not allowed
SampleRoleErrorImported
ControlRoleInvalidIgnored - invalid OUTCOME TYPE
ControlRoleErrorImported
ControlRoleLimsIgnored - Control can only have Error

Steps:

  1. Import XLSX with role and outcome type test cases
  2. 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 TypeTARGET ERROR CODETARGET TO HAVE ERRORExpected
SampleTERR001TargetAIgnored - Sample cannot have TARGET ERROR CODE
Sample(empty)(empty)Imported
ControlTERR001TargetAImported
Control(empty)(empty)Imported
ControlTERR001TargetX (not in mix)Ignored - target not in mix

Steps:

  1. Import XLSX with code and target validation cases
  2. Verify TARGET ERROR CODE rules per role type
  3. 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:

PRIORITYCLS DISCREPANCYCT DISCREPANCYIC FAILEDExpected
abc(blank)(blank)falseIgnored - PRIORITY non-numeric
2(blank)(blank)falseImported - existing priorities shifted
5TRUEFALSEtrueImported
6YES(blank)falseIgnored - invalid boolean
7(blank)(blank)trueImported

Steps:

  1. Import XLSX with priority and discrepancy test cases
  2. Verify priority merging shifts existing rows
  3. Verify discrepancy fields accept boolean or blank
  4. 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 MIXESLABELS_IN_IMPORTED_RUNFILEExpected
Mix1|Mix2POS*Imported
Mix1|Mix2|Mix3*SARS-CoV-2 PCImported
Mix1Ne*gIgnored - wildcard in middle
Mix1TestLabelEndIgnored - wildcard in middle
Mix1*Imported (wildcard at start only)

Steps:

  1. Import XLSX with backup mixes and wildcard patterns
  2. Verify pipe-separated format for BACKUP MIXES
  3. 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)

Jira: BT-3913, BT-3985


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 TypeEXCLUDE FROM IC DELTA CHECKRESOLUTION PRIORITYConfig EnabledExpected
ControlYes5trueImported
ControlNo5falseImported (priority ignored)
SampleYes5trueIgnored - Sample cannot have priority
IgnoreYes5trueIgnored - Ignore cannot have priority
CrossoverNo5trueIgnored - Crossover cannot have priority
ControlInvalid(empty)falseIgnored - invalid IC value

Steps:

  1. Import with "Use role priority" disabled, verify priority ignored
  2. Enable "Use role priority", reimport
  3. Verify role type restrictions on resolution priority
  4. 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 CODEERROR TYPEIS INHIBITEDCAUSES MISSING MIXES
ERR001Associate Control Errortruefalse
ERR002Standard Errorfalsetrue
ERR003Associate Control Errorfalsefalse

Steps:

  1. Import XLSX with error code test data
  2. Query database for imported error codes
  3. Export error codes configuration
  4. 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)

Jira: BT-3835, BT-4164


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:

ErrorRESOLUTION LEVELExpected
ERR_RESOLVABLEWellImported
ERR_RESOLVABLEAll ObservationsImported
ERR_RESOLVABLEDiscrepant ObservationsImported
ERR_RESOLVABLEInvalidIgnored
ONE_STANDARD_CONTROLWellIgnored - non-resolvable
STANDARD_WITHOUT_QUANTAll ObservationsIgnored - non-resolvable

Steps:

  1. Import XLSX with resolution level test data
  2. Verify valid resolution levels accepted
  3. Verify non-resolvable errors rejected
  4. 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)

Jira: BT-3862, BT-4864


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 ITEMTAGSExpected
HelpItem1tag1, tag2, tag3Imported with 3 tags
HelpItem2single-tagImported with 1 tag
HelpItem3(empty)Imported with empty tags
HelpItem4(null)Imported with empty tags

Steps:

  1. Import XLSX with help items and tags
  2. Verify comma-separated tags parsed correctly
  3. Export help items configuration
  4. 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:

RuleIS ALLOW ERROR WELLSExpected
Rule1TRUEImported with allow_error_wells = true
Rule2FALSEImported with allow_error_wells = false
Rule3(null)Imported with allow_error_wells = false
Rule4(empty)Imported with allow_error_wells = false
Rule5YesImported with allow_error_wells = false (treated as non-boolean)

Steps:

  1. Import XLSX with IS ALLOW ERROR WELLS values
  2. Verify null/empty treated as false
  3. Verify non-boolean treated as false
  4. 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:

  1. Rule A: Type=Observation, Precedence=5
  2. Rule B: Type=Observation, Precedence=5 (duplicate)
  3. Rule C: Type=Control Check, Precedence=1
  4. Rule D: Type=Sample Result, Precedence=10
  5. 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:

  1. Import rules with varying types and relative precedences
  2. Verify normalization based on rule type order
  3. Verify gaps removed within types
  4. 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:

TARGETSLOPEINTERCEPTExpected
TargetA1.52.4Imported
TargetA1.5(null)Ignored - both required
TargetA(null)2.4Ignored - both required
TargetA(null)(null)Imported (neither provided)
NonExistent1.52.4Ignored - target not found

Steps:

  1. Import XLSX with slope/intercept test cases
  2. Verify TARGET existence validation
  3. 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 SLOPEMAX SLOPEMIN EFFICIENCYMAX EFFICIENCYMIN R2MIN CONTROLSExpected
0.51.50.81.20.953Imported
1.50.50.81.20.953Ignored - min > max
0.51.51.20.80.953Ignored - min > max
(null)(null)(null)(null)0.52Imported
0.51.50.81.2-0.13Ignored - MIN R2 < 0
0.51.50.81.21.53Ignored - MIN R2 > 1
0.51.50.81.20.951Ignored - MIN CONTROLS < 2

Steps:

  1. Import XLSX with range validation test cases
  2. Verify MIN/MAX comparisons
  3. Verify MIN R2 range (0-1)
  4. 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 ValueExpected
0.5Imported
1.0Imported
0Ignored
-0.5Ignored
(null)Ignored

Steps:

  1. Import XLSX with various SD values
  2. Verify validation rejects SD = 0 and SD < 0
  3. 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:

MixSPECIMEN TYPEExpected
TestMixSpecimenAImported with specimen association
TestMixSpecimenBIgnored - no mapping
TestMix(empty)Imported without specimen association

Test Data with "use sample type" DISABLED:

MixSPECIMEN TYPEExpected
TestMixSpecimenAIgnored - specimen not allowed
TestMix(empty)Imported

Steps:

  1. Enable "use sample type" config
  2. Import with specimen type scenarios
  3. Disable "use sample type" config
  4. 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:

CodeIS INHIBITEDCAUSES MISSING MIXESDOES PREVENT ANALYSE
LIMS001truefalseYES
LIMS002falsetrueNO
LIMS003truetrueYES

Steps:

  1. Import XLSX with LIMS export configuration
  2. Verify boolean columns imported correctly
  3. Verify DOES PREVENT ANALYSE accepts YES/NO
  4. 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)

Jira: BT-4164, BT-4042


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:

RowHas Extraction InstrumentsToggle ON ResultToggle OFF Result
1YesImportedIgnored
2NoIgnoredImported
3YesImportedIgnored
4NoIgnoredImported

Steps:

  1. Set "Use Extraction Instruments" toggle ON
  2. Import Westgard configuration
  3. Verify rows without Extraction Instruments ignored
  4. Set toggle OFF
  5. Import same configuration
  6. Verify rows with Extraction Instruments ignored
  7. 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:

ColumnScenarioValueExpected StatusExpected Error
QUANTITATIVEInvalidABCIgnored"Invalid quantification"
QUANTITATIVEInconsistent in mixtrue/falseIgnored"Multiple quantification settings"
TARGET ORDERPartial1,(empty),3Ignored"Must fill all orders or not fill at all"
TARGET ORDERNon-numericABCIgnored"Order must be numeric"
PREFERRED RESULT PROVIDERInvalidOTHERIgnoredInvalid provider error
EXPECTED THRESHOLDPassive >10001500IgnoredThreshold range error

Steps:

  1. Import XLSX with column validation test cases
  2. Retrieve status report
  3. 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):

ColumnScenarioExpected Error
ALLOW OTHER RUNS TO BE USEDInvalid"Invalid 'other runs to be used' value"
ALLOW OTHER RUNS TO BE USEDWith discrepancy"'Use other runs' not allowed because CLS discrepancy or CT discrepancy is required"
IS REPEATInvalid"Invalid is repeat"
MIX MISSINGInconsistent"mix_missing values must be consistent"
MIX LEVEL OUTCOME TYPEWithout code"mix level: well error code or lims code filled without selecting outcome type"
REQUIRED HISTORY OUTCOMESWithout repeat"Previous well outcomes are not allowed"
REQUIRED HISTORY OUTCOMESInvalid outcome"previous well outcomes are invalid"

Test Data (Target Result Level):

ColumnScenarioExpected Error
RESULTInvalid"Result not found"
MIN CTNon-integer"CT value is not integer"
MIN CTOut of range"CT is not in valid range"
MAX CTLess than MIN"Max CT is not greater than to min CT"
MIN QUANTITYNot numeric"Quantity is not numeric"
MAX QUANTITYLess than MIN"Max quantity is not greater than to min quantity"
SPECIMENInvalid (enabled)"Invalid specimen name"
SPECIMENFilled (disabled)"Specimen is filled when 'use sample type' config is disabled"

Steps:

  1. Import Combined Outcomes with column validation test cases
  2. Retrieve status report
  3. 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 NUMBEROTHER WELLS AFFECTEDExpected Error
(empty)DETECTED"Resolution number is not filled"
99 (invalid)DETECTED"No matching resolution message"
1ALL WELLS,DETECTED"Can't have other lims along with all wells"

Steps:

  1. Import Error Resolutions with column validation test cases
  2. Retrieve status report
  3. 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 CODEDEFAULT LIMS EXPORTExpected
ERR001DETECTEDImported
ERR002NONEXISTENTIgnored - "Default Lims Status does not match with any available Lims Statuses"

Steps:

  1. Import Error Codes with DEFAULT LIMS EXPORT test cases
  2. Retrieve status report
  3. 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:

TARGETDYERANGE START DATEExpected
Global(empty)2026-01-15Imported
TargetAFAM2026-01-15Imported
TargetAINVALID2026-01-15Ignored - invalid DYE
TargetAFAM(empty)Ignored
TargetAFAMinvalidIgnored - "Invalid date format..."

Steps:

  1. Import Westgard Limits with DYE and date test cases
  2. Retrieve status report
  3. 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:

ORDERTITLEDESCRIPTIONVIDEOPAGES AVAILABLEExpected
1Help 1Desc 1video1Run FilesImported
(empty)Help 2Desc 2(empty)Run FilesIgnored - "Help item: ignored"
2(empty)Desc 2(empty)Run FilesIgnored - "Help item: ignored"
3Help 3(empty)(empty)Run FilesIgnored - "Help item: ignored"
4Help 4Desc 4invalid_videoRun FilesIgnored - "Help item: ignored"
5Help 5Desc 5(empty)Invalid PageIgnored - "Help item: ignored"

Steps:

  1. Import Help Items with column validation test cases
  2. Retrieve status report
  3. 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 NAMERULE DESCRIPTIONExpected
(empty)DescriptionIgnored
RULE_NAME(empty)Ignored

Test Data (Rules Mapping):

RULE IDMIXTARGETDYEExpected Error
(empty)Mix1TargetAFAM"Rule id is not filled"
NONEXISTENTMix1TargetAFAM"No matching rule"
RULE_NAMEMix1TargetA(empty)"Invalid mix and dye combination"
RULE_NAMEMix1NONEXISTENTFAM"No matching target"

Steps:

  1. Import Rules with validation test cases
  2. Import Rules Mapping with validation test cases
  3. 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:

  1. Export Control Labels via API
  2. Verify export file contains ROLE TYPE and IS EXTRACTED columns
  3. 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:

MIXTARGETQUANT OR CTUPPER BOUNDARYExpected
Mix1TargetAQuant1000Imported
Mix1TargetACt35Imported
Mix1TargetA(empty)1000Ignored - "Quant or Ct is not present"
Mix1TargetAInvalid1000Ignored - "Invalid option"

Steps:

  1. Import Reporting Cut-offs with QUANT OR CT test cases
  2. Retrieve status report
  3. 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:

CODEMESSAGETYPERESULTExpected
LIMS001DetectedExcludeDETECTEDImported
LIMS002Not DetectedWarningNOT_DETECTEDImported
LIMS003UnknownInformation(empty)Imported (null result)
LIMS004InvalidWarningINVALIDIgnored - "Lims status: ignored"

Steps:

  1. Import LIMS Export configuration with RESULT column test cases
  2. Retrieve status report
  3. 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:

  1. Navigate to the Kit Configuration page
  2. 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:

  1. Navigate to the Kit Configuration page
  2. Upload a valid configuration file via the import dialog
  3. 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:

  1. Load a test configuration via API
  2. Navigate to the Kit Configuration page
  3. 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:

  1. Navigate to the Kit Configuration page
  2. Upload a configuration file via the import dialog
  3. 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:

  1. Navigate to the Kit Configuration page
  2. Upload a configuration file via the import dialog
  3. 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:

  1. Load test configuration via API
  2. Navigate to the Kit Configuration page and verify data is displayed
  3. Navigate away to a different page (e.g., Runs)
  4. 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 CategoryCountCoveredNotes
Column Support3030Verified via import/export operations (expanded for Phases B-D)
Field Validation6565Verified via TM-API with test vectors (expanded for Phases B-D column ACs)
Import Behavior2020Verified via status report analysis
Export Behavior1212Verified via round-trip testing
Configuration Toggle44Verified via config state manipulation

Traceability to Existing Tests

Test CaseJira TestAutomation
TC-CONFIGIO-001BT-3714Behat
TC-CONFIGIO-002PendingPartial
TC-CONFIGIO-003BT-3562PHPUnit
TC-CONFIGIO-004BT-4677PHPUnit
TC-CONFIGIO-005BT-5227, BT-5308PHPUnit
TC-CONFIGIO-006BT-4239PHPUnit
TC-CONFIGIO-007BT-3885PHPUnit
TC-CONFIGIO-008BT-5230PHPUnit
TC-CONFIGIO-009BT-3913, BT-3985PHPUnit
TC-CONFIGIO-010BT-5303PHPUnit
TC-CONFIGIO-011BT-3835, BT-4164PHPUnit
TC-CONFIGIO-012BT-3862, BT-4864PHPUnit
TC-CONFIGIO-013PendingPlanned
TC-CONFIGIO-014BT-3559PHPUnit
TC-CONFIGIO-015BT-4054PHPUnit
TC-CONFIGIO-016BT-3567PHPUnit
TC-CONFIGIO-017BT-3567PHPUnit
TC-CONFIGIO-018PendingPlanned
TC-CONFIGIO-019BT-4293PHPUnit
TC-CONFIGIO-020BT-4164, BT-4042PHPUnit
TC-CONFIGIO-021BT-3713PHPUnit
TC-CONFIGIO-022 through TC-CONFIGIO-031PendingPlanned (Phases B-D column ACs)
TC-CONFIGIO-040BrowserBehat (Browser)
TC-CONFIGIO-041BrowserBehat (Browser)
TC-CONFIGIO-042BrowserBehat (Browser)
TC-CONFIGIO-B006BrowserBehat (Browser)
TC-CONFIGIO-B007BrowserBehat (Browser)
TC-CONFIGIO-B011BrowserBehat (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.feature covering upload button presence, notification, and data display
  • TC-CONFIGIO-B006, TC-CONFIGIO-B007, TC-CONFIGIO-B011 are browser-level TCs from config-io.feature covering async notification, page stability, and SPA data persistence