13 KiB
TESTING CHECKLIST: SCADA Equipment Auto-Propagation Fix
Date: 02 March 2026 Module: grt_scada v7.0.73 Status: Ready for Testing
✅ Pre-Testing Setup
- Code deployed to test environment
- Odoo service restarted
- Database backed up (safety first!)
- Test data set prepared
- Multiple BoMs created
- Various SCADA equipment assigned
- Different quantities for testing
🧪 Test Case 1: Basic Functionality - Single Component MO
Objective: Verify SCADA equipment auto-fills for simple MO with 1 component
Setup:
BoM: TestProduct_001
├─ Material_A: qty = 10 → SILO_01
Steps:
-
Open BoM TestProduct_001
- Verify Material_A has SILO_01 assigned
- Save
-
Create new Manufacturing Order
- Select TestProduct_001 as product
- Select TestProduct_001 BoM
- Set Quantity = 100
- Click SAVE
-
Verify Component Section
- Material_A row should show SILO_01 ✓
- NO manual input was needed
- Quantity auto-calculated as appropriate
Expected Result: ✅ PASS
- Component line shows SILO_01 automatically populated
Actual Result:
- PASS
- FAIL (describe issue):
Screenshots:
- Before (BoM with equipment)
- After (MO with auto-filled equipment)
🧪 Test Case 2: Multi-Component MO
Objective: Verify SCADA equipment auto-fills for all components in a complex BoM
Setup:
BoM: ComplexProduct_001
├─ Material_A: qty = 10 → SILO_01
├─ Material_B: qty = 20 → SILO_02
├─ Material_C: qty = 5 → SILO_03
└─ Material_D: qty = 8 → SILO_01 (same as Material_A)
Steps:
-
Open BoM ComplexProduct_001
- Verify all 4 materials have correct equipment assigned
- Save
-
Create new Manufacturing Order
- Select ComplexProduct_001
- Set Quantity = 50
- Click SAVE
-
Verify All Component Rows
- Material_A → SILO_01 ✓
- Material_B → SILO_02 ✓
- Material_C → SILO_03 ✓
- Material_D → SILO_01 ✓
- All quantities correct and quantities auto-calculated
Expected Result: ✅ PASS
- All 4 components have correct SCADA equipment populated
Actual Result:
- PASS
- FAIL (describe issue):
Screenshots:
- MO component list with all equipment filled
🧪 Test Case 3: MO Quantity Scaling
Objective: Verify component quantities scale correctly when creating MO with different qty
Setup:
BoM: ScaledProduct
├─ Material_X: qty = 10 → SILO_A (base unit = 1 unit of final product)
├─ Material_Y: qty = 5 → SILO_B
Steps:
-
Open BoM ScaledProduct (BASE: 1 unit final product)
-
Create MO with Qty = 100
- SAVE
- Check component quantities
- Material_X should be 10 * 100 = 1000? OR...?
- Material_Y should be 5 * 100 = 500? OR...?
- Verify calculation (system scaling logic)
- Check SCADA equipment
- Material_X → SILO_A ✓
- Material_Y → SILO_B ✓
-
Create another MO with Qty = 25
- Verify quantities are correctly scaled
- Verify equipment still auto-filled
Expected Result: ✅ PASS
- Quantities correctly scaled based on BoM base unit
- SCADA equipment populated even with different quantities
Actual Result:
- PASS
- FAIL (describe issue):
Notes:
- Record actual scaling behavior observed
- Equipment population is priority (independent of qty)
🧪 Test Case 4: Confirm MO (Sync Point #2)
Objective: Verify SCADA equipment persists and syncs correctly when confirming MO
Setup: Use MO from Test Case 2
Steps:
-
Open previously created MO (ComplexProduct_001)
-
Before Confirm - Verify Equipment Present
- Material_A → SILO_01 ✓
- Material_B → SILO_02 ✓
- Material_C → SILO_03 ✓
- Material_D → SILO_01 ✓
-
Click CONFIRM button
- Wait for confirmation process
-
After Confirm - Verify Equipment Persists
- Material_A → SILO_01 ✓ (should NOT disappear!)
- Material_B → SILO_02 ✓
- Material_C → SILO_03 ✓
- Material_D → SILO_01 ✓
-
Check stock.move records (backend)
SELECT id, product_id, scada_equipment_id, state FROM stock_move WHERE raw_material_production_id = <MO_ID>- All raw_material moves should have scada_equipment_id populated
- No NULL values in scada_equipment_id (for mapped materials)
Expected Result: ✅ PASS
- SCADA equipment survives confirm operation
- All stock moves have correct equipment assigned
- No data loss during confirm
Actual Result:
- PASS
- FAIL (describe issue):
SQL Query Results:
[Paste results here]
🧪 Test Case 5: Partial BoM (Some Components Without Equipment)
Objective: Verify system handles BoM where only SOME components have SCADA equipment
Setup:
BoM: MixedProduct
├─ Material_A: qty = 10 → SILO_X
├─ Material_B: qty = 20 → [EMPTY - No Equipment]
└─ Material_C: qty = 5 → SILO_Y
Steps:
-
Open BoM MixedProduct
- Verify Material_A → SILO_X
- Verify Material_B → [Empty] (intentional)
- Verify Material_C → SILO_Y
- Save
-
Create MO from this BoM
- Qty = 50
- Save
-
Verify Component Section
- Material_A → SILO_X ✓ (auto-filled)
- Material_B → [Empty] ✓ (correct, no equipment in BoM)
- Material_C → SILO_Y ✓ (auto-filled)
Expected Result: ✅ PASS
- Only materials with BoM equipment get auto-filled
- Materials without BoM equipment remain empty (expected behavior)
- No errors thrown
Actual Result:
- PASS
- FAIL (describe issue):
🧪 Test Case 6: Manual Override
Objective: Verify user can still manually override equipment in MO if needed
Setup: Use MO from Test Case 1
Steps:
-
Open Created MO with Material_A → SILO_01
-
Manually Edit Component
- In Material_A row, change SILO_01 → SILO_02 (different silo)
- Save MO
-
Verify Change Persisted
- Reload MO
- Material_A should show SILO_02 (user override saved) ✓
-
Confirm MO
- Click CONFIRM
- Material_A should STILL show SILO_02 (not reverted to SILO_01)
Expected Result: ✅ PASS
- User manual override is respected
- System doesn't force BoM value over user choice
- Override persists through confirm
Actual Result:
- PASS
- FAIL (describe issue):
🧪 Test Case 7: Constraint Enforcement (Error Case)
Objective: Verify constraint prevents duplicate equipment mapping
Setup:
This is an ERROR SCENARIO - we're testing the ERROR is thrown correctly
BoM: InvalidProduct (intentionally bad setup)
├─ Material_A → SILO_SAME
├─ Material_B → SILO_SAME (DUPLICATE - SHOULD CAUSE ERROR)
Steps:
-
Create BoM with above setup
- Try to SAVE
-
Expected: CONSTRAINT ERROR should be thrown
Error: Equipment 'SILO_SAME' sudah dipakai oleh material 'Material_A'. Satu equipment hanya boleh untuk satu bahan.- [ ] Error is shown ✓
-
Correct the BoM by assigning different equipment to Material_B
- Material_B → SILO_OTHER
- Save BoM (should work now)
-
Create MO from corrected BoM - should work fine
Expected Result: ✅ PASS
- Constraint prevents invalid equipment mapping
- Clear error message shown to user
- Fix is straightforward
Actual Result:
- PASS (Constraint working)
- FAIL (describe issue):
🧪 Test Case 8: BoM with By-Products
Objective: Verify SCADA equipment sync only affects raw materials, not by-products
Setup:
BoM: ProductWithByProducts
├─ Material_A: qty = 10 → SILO_01 [Raw Material]
├─ Material_B: qty = 5 → SILO_02 [Raw Material]
└─ By-Product_X: qty = 3 [By-Product - NO equipment]
Steps:
-
Open BoM ProductWithByProducts
- Set up as above
- Verify By-Product_X has NO equipment assigned
- Save
-
Create MO
- Qty = 50
- Save
-
Verify Components
- Material_A → SILO_01 ✓ (raw material, auto-filled)
- Material_B → SILO_02 ✓ (raw material, auto-filled)
- By-Product_X → [Empty] ✓ (by-product, no equipment - correct)
-
Confirm MO
- No issues should occur
- By-products handled normally (system ignores them for SCADA)
Expected Result: ✅ PASS
- Raw materials get SCADA equipment
- By-products are unaffected (correct business logic)
- No errors
Actual Result:
- PASS
- FAIL (describe issue):
🧪 Test Case 9: Empty BoM (No SCADA Equipment at All)
Objective: Verify MO can still be created from BoM with NO SCADA equipment setup
Setup:
BoM: OldStyleProduct (created before SCADA module, no equipment)
├─ Material_A: qty = 10 → [Empty - No Equipment Field Set]
├─ Material_B: qty = 20 → [Empty]
Steps:
-
Open BoM OldStyleProduct
- Verify NO equipment assigned to any material
- Save
-
Create MO from this BoM
- Qty = 100
- Save
-
Verify Components
- Material_A → [Empty] ✓ (no equipment in BoM, so empty in MO)
- Material_B → [Empty] ✓
-
System should work normally
- No errors about missing equipment
- SCADA equipment is OPTIONAL, not required
Expected Result: ✅ PASS
- System doesn't break if SCADA equipment unused
- Backward compatibility maintained
- Users can still use system without SCADA mapping
Actual Result:
- PASS
- FAIL (describe issue):
📊 Performance Testing
Test Case 10: Large BoM (50+ Components)
Objective: Verify performance is acceptable with large BoM
Setup: Create BoM with 50+ components, all with SCADA equipment
Steps:
-
Measure MO creation time
- Start timer: ______
- Create MO from large BoM
- End timer: ______
- Duration: ______ seconds
-
Measure MO confirm time
- Start timer: ______
- Click CONFIRM
- End timer: ______
- Duration: ______ seconds
Performance Criteria:
- MO creation < 5 seconds ✓
- Equipment sync < 1 second ✓
- MO confirm < 5 seconds ✓
- No timeouts
- No UI freezing
Actual Result:
- PASS (Performance acceptable)
- FAIL (describe performance issue):
🔧 Regression Testing
Test Case 11: Existing MO Not Affected
Objective: Verify that MO created BEFORE the fix are not affected
Setup:
- Have existing MO records created before this fix was deployed
- Some with manual equipment entries, some without
Steps:
-
Open pre-fix MO
- Equipment should exactly as it was before
- No unexpected changes
-
Try to edit and confirm pre-fix MO
- Should work normally
- No breaking changes
Expected Result: ✅ PASS
- Existing MO not modified
- No data migration needed
- Clean backward compatibility
Actual Result:
- PASS
- FAIL (describe issue):
📋 Summary Results
| Test Case | Status | Notes |
|---|---|---|
| 1. Basic 1-Component MO | [ ] PASS / [ ] FAIL | |
| 2. Multi-Component MO | [ ] PASS / [ ] FAIL | |
| 3. Quantity Scaling | [ ] PASS / [ ] FAIL | |
| 4. Confirm Sync | [ ] PASS / [ ] FAIL | |
| 5. Partial BoM | [ ] PASS / [ ] FAIL | |
| 6. Manual Override | [ ] PASS / [ ] FAIL | |
| 7. Constraint (Error) | [ ] PASS / [ ] FAIL | |
| 8. ByProducts | [ ] PASS / [ ] FAIL | |
| 9. Empty BoM | [ ] PASS / [ ] FAIL | |
| 10. Large BoM (50+) | [ ] PASS / [ ] FAIL | |
| 11. Regression (Pre-fix) | [ ] PASS / [ ] FAIL |
Overall Result:
- ALL PASS - Ready for Production! ✅
- SOME FAIL - Needs adjustment before deploy ⚠️
- CRITICAL FAIL - Do not deploy ❌
📝 Issues Found & Action Items
| Issue # | Description | Severity | Action | Status |
|---|---|---|---|---|
| 1 | [Describe if any] | [ ] Critical / [ ] Major / [ ] Minor | [ ] Fix | [ ] Open |
| 2 | ||||
| 3 |
✍️ Tester Information
Name: ___________________________ Date: ___________________________ Environment: Test / Staging / Production Odoo Version: ___________________________ Database: ___________________________
Testing Notes:
[Additional notes, observations, or context]
📞 Sign-Off
- Tester: Confirms all tests passed and fix is ready
- QA Lead: Approves for production deployment
- Team Lead: Authorizes release
Signatures:
- Tester: _________________________ Date: _________
- QA Lead: ________________________ Date: _________
- Team Lead: ______________________ Date: _________
Approval:
- ✅ APPROVED - Ready for Production Deployment
- ⚠️ CONDITIONAL - Approved with noted caveats below
- ❌ REJECTED - Do not deploy until resolved
Caveats/Notes:
[If conditional or rejected, explain here]