20 KiB
Ant Design Select.Option Deprecation - Manual Testing Plan
Branch: feature/IO-3544-Ant-Select-Deprecation
Base Branch: master-AIO
Jira: IO-3544
Overview
This branch migrates all Ant Design <Select.Option> components to the new options prop pattern (required for Ant Design v5+). The deprecated Select.Option child component pattern has been replaced with the options array prop.
What Changed
- Old Pattern:
<Select><Select.Option value="x">Label</Select.Option></Select> - New Pattern:
<Select options={[{ value: "x", label: "Label" }]} /> - Search filtering updated from
optionFilterProp: "children"tooptionFilterProp: "label"or custom props - Custom filter functions updated to use
option.labelinstead ofoption.props.children - Complex components with custom rendered content (tags, icons, styled elements) now use
labelprop with JSX
Code Review Findings ✅
Validation completed on representative samples:
- ✅ Search functionality properly migrated (showSearch object syntax correct)
- ✅ Custom rendered content (tags, badges, icons) preserved in label prop
- ✅ Labor type selectors correctly implement all 14 types
- ✅ Vendor search with favorites and discount tags working correctly
- ✅ Employee selectors with flat_rate/straight_time tags properly structured
- ✅ Job search with owner display and status tags correctly migrated
- ✅ CiecaSelect utility updated to return options array format
- ✅ Performance optimizations added (useMemo in jobs-convert-button)
- ✅ Custom optionFilterProp values used where needed (e.g., "name", "search")
Testing Strategy
For each select component below, verify:
- ✅ Options Display: All options appear correctly
- ✅ Selection: Can select an option and value is saved
- ✅ Search/Filter: Search functionality works (if applicable)
- ✅ Visual Rendering: Labels, tags, and custom content display properly (especially vendor discounts, employee tags, job status badges)
- ✅ Form Integration: Value persists and submits correctly
- ✅ Custom Search Props: Components using custom optionFilterProp (name, search) work correctly
Component Test Cases
1. Employee Assignment & Allocation
Files Modified:
allocations-assignment.component.jsxallocations-bulk-assignment.component.jsxlabor-allocations-adjustment-edit.component.jsxemployee-search-select.component.jsxemployee-search-select-email.component.jsx
Test Scenarios:
-
Job Line Allocation: Assign employee to job line
- Navigate to a job → Job Lines tab
- Click allocate hours to an employee
- Verify employee dropdown shows full names
- Search for employee by name
- Verify selection saves
-
Bulk Assignment: Assign multiple job lines to employee
- Select multiple job lines
- Open bulk assignment modal
- Verify employee selector works
- Verify employee number, name, and tags (flat rate/straight time) display
-
Labor Allocations Adjustment: Edit labor allocations
- Navigate to labor allocations
- Edit adjustment form
- Verify employee dropdowns work with search
-
Employee Search Select with Email:
- Test in any form using employee email selector (uses custom
optionFilterProp: "search") - Search by employee number, first name, or last name
- Verify employee number, name display correctly
- Critical: Verify green tag shows "Flat Rate" or "Straight Time"
- Verify blue email tag displays when showEmail=true
- Test that search matches against concatenated string
- Test in any form using employee email selector (uses custom
2. Job Management
Files Modified:
job-search-select.component.jsxjobs-create-jobs-info.component.jsxjobs-detail-general.component.jsxjobs-detail-header-actions.component.jsxjobs-convert-button.component.jsxjobs-close-lines.component.jsxjob-3rd-party-modal.component.jsx
Test Scenarios:
-
Job Search Select: Search and select jobs
- Any form with job selector (e.g., linking jobs, referencing jobs)
- Search by RO number, customer name, or vehicle (uses
filterOption: falsewith custom search) - Critical: Verify job label shows:
[CLM_NO |] RO_NUMBER | Owner Name | Year Make Model - Critical: Verify status tag displays (e.g., "OPEN", "CLOSED")
- Verify loading spinner appears during search
- Test with claim numbers visible (clm_no prop)
- Verify selection works
-
Create Job Form:
- Navigate to Create New Job
- Test all dropdowns in job info section:
- Job type selection
- Status selection
- Department/class selection
- Estimator selection
- File handler selection
- Verify options display and selection works
-
Job Detail General Tab:
- Open any job → General tab
- Test select dropdowns:
- Status select
- Department/class select
- Estimator select
- File handler select
- Responsibility center select
- Verify all dropdowns work with search
-
Job Convert Button:
- Open estimate job
- Click convert to RO
- Verify conversion type dropdown works
- Test all options in conversion modal
-
Close Job Lines:
- Open converted job
- Go to close/finalize
- Test location selector in close lines modal
- Verify cost center dropdowns
-
Third Party Modal:
- Open job → Third party integration
- Test company/payer selector
- Verify dropdown options and selection
3. Job Lines & Labor
Files Modified:
job-lines-upsert-modal.component.jsxjob-line-bulk-assign.component.jsxjob-line-convert-to-labor.component.jsxjob-line-dispatch-button.component.jsxjob-line-status-popup.component.jsxjob-line-team-assignment.component.jsx
Test Scenarios:
-
Add/Edit Job Line:
- Open job → Add new line
- Test all dropdowns:
- Labor type selector (LAA, LAB, LAD, LAE, LAF, LAG, LAM, LAR, LAS, LAU, LA1-LA4)
- Location selector
- Status selector
- Skill/category selector
- Verify 14 labor type options display correctly
- Test search functionality
-
Bulk Line Assignment:
- Select multiple job lines
- Open bulk assign
- Test team assignment dropdown
-
Convert to Labor:
- Select part line
- Convert to labor
- Test labor type dropdown (LAA, LAB, etc.)
- Verify all 14 types available
-
Line Dispatch:
- Open dispatch modal for job line
- Test team/employee selector
-
Line Status Popup:
- Change job line status
- Verify status dropdown options
-
Team Assignment:
- Assign team to job line
- Test team selector dropdown
4. Owners & Vehicles
Files Modified:
owner-search-select.component.jsxvehicle-search-select.component.jsx
Test Scenarios:
-
Owner Search Select:
- Any form with owner selector
- Search by owner name
- Verify owner options display
- Test selection and search
-
Vehicle Search Select:
- Any form with vehicle selector
- Search by VIN, license plate, or vehicle description
- Verify vehicle options display correctly
- Test selection works
5. Vendors & Parts
Files Modified:
vendor-search-select.component.jsxparts-order-modal.component.jsxparts-receive-modal.component.jsx
Test Scenarios:
-
Vendor Search Select:
- Navigate to bills or parts ordering
- Test vendor selector
- Search for vendor by name (uses custom
optionFilterProp: "name") - Critical: Verify favorites (with heart icon) display at top
- Critical: Verify discount tags show correctly (e.g., "10%")
- Critical: Verify vendor tags display
- Verify phone numbers display if showPhone enabled
- Test selection saves discount value to form
-
Parts Order Modal:
- Order parts for a job
- Test all dropdowns in order form:
- Vendor selector
- Status selector
- Priority selector
- Verify options and selection
-
Parts Receive Modal:
- Receive parts
- Test selectors in receive form
- Verify dropdown functionality
6. Bills & Payments
Files Modified:
bill-form.component.jsxbill-form-lines.component.jsxbill-form-lines-extended.formitem.component.jsxpayment-form.component.jsx
Test Scenarios:
-
Bill Entry Form:
- Navigate to Bills → Add New Bill
- Test all dropdowns:
- Vendor selector
- Payment terms selector
- GL account selector
- Tax code selector
- Verify options display
-
Bill Lines:
- Add bill line
- Test line-level selectors:
- Job selector
- Job line selector
- Account selector
- Location selector
-
Bill Lines Extended:
- Add extended bill line
- Test responsibility center dropdown
- Test cost center dropdown
-
Payment Form:
- Navigate to Payments → New Payment
- Test all dropdowns:
- Vendor selector
- Payment method selector
- Bank account selector
- Verify selection works
7. Shop Configuration
Files Modified:
shop-info.general.component.jsxshop-info.intake.component.jsxshop-info.responsibilitycenters.component.jsxshop-info.rostatus.component.jsxshop-info.speedprint.component.jsxshop-intellipay-config.component.jsxshop-employees-form.component.jsx
Test Scenarios:
-
Shop Info - General:
- Navigate to Shop Settings → General
- Test all dropdowns:
- Timezone selector
- Currency selector
- Date format selector
- Default options
-
Shop Info - Intake:
- Navigate to Shop Settings → Intake
- Test intake form selectors
- Verify default options work
-
Shop Info - Responsibility Centers:
- Navigate to Shop Settings → Responsibility Centers
- Test cost center dropdowns
- Test location selectors
- Note: This file had major changes (980 lines modified)
-
Shop Info - RO Status:
- Navigate to Shop Settings → RO Status
- Test status configuration dropdowns
- Note: 120 lines modified
-
Shop Info - Speed Print:
- Navigate to Shop Settings → Speed Print
- Test printer selector
- Test template selector
-
IntelliPay Config:
- Navigate to Shop Settings → IntelliPay
- Test configuration dropdowns (56 lines modified)
-
Shop Employees Form:
- Navigate to Shop Settings → Employees → Add/Edit
- Test all dropdowns:
- Role selector
- Department selector
- Pay type selector
- Verify options display
8. Schedule & Time Tracking
Files Modified:
schedule-job-modal.component.jsxschedule-manual-event.component.jsxtech-job-clock-in-form.component.jsxtech-job-clock-out-button.component.jsxtime-ticket-modal.component.jsxtime-ticket-shift-form.component.jsx
Test Scenarios:
-
Schedule Job Modal:
- Navigate to Schedule → Add Appointment
- Test all dropdowns:
- Job selector
- Employee selector
- Time slot selector
- Duration selector
-
Schedule Manual Event:
- Add manual event to schedule
- Test event type dropdown
- Test employee selector
-
Tech Clock In Form:
- Navigate to Tech Portal
- Clock in to job
- Test job selector
- Test operation selector
-
Tech Clock Out:
- Clock out from job
- Test reason selector (if applicable)
- Verify dropdown works
-
Time Ticket Modal:
- Enter/edit time ticket
- Test all dropdowns:
- Employee selector
- Job selector
- Operation selector
-
Time Ticket Shift Form:
- Manage shift
- Test shift type selector
- Test employee selector
9. Contracts & Courtesy Cars
Files Modified:
contract-convert-to-ro.component.jsxcontract-status-select.component.jsxcourtesy-car-readiness-select.component.jsxcourtesy-car-status-select.component.jsx
Test Scenarios:
-
Contract Convert to RO:
- Open contract
- Convert to RO
- Test conversion options dropdown
-
Contract Status Select:
- Change contract status
- Test status options:
- New
- Out
- Returned
- Verify all 3 status options work
-
Courtesy Car Readiness:
- Navigate to Courtesy Cars
- Change car readiness
- Test readiness options:
- Ready
- Not Ready
- Verify both options work
-
Courtesy Car Status:
- Change courtesy car status
- Test all status options:
- In
- In Service
- Out
- Sold
- Lease Return
- Unavailable
- Verify all 6 status options work
10. Email & Communication
Files Modified:
email-overlay.component.jsxchat-tag-ro.component.jsxparts-shop-info-email-presets.component.jsx
Test Scenarios:
-
Email Overlay:
- Send email from any feature
- Test all dropdowns:
- From email selector (current user, shop email, custom emails)
- Template selector
- Priority selector
- Verify custom from emails display correctly
-
Chat Tag RO:
- Open chat
- Tag to RO
- Test RO selector dropdown
-
Parts Shop Email Presets:
- Navigate to Parts Settings → Email Presets
- Test preset selector
- Verify options display
11. DMS Integration
Files Modified:
dms-post-form/cdklike-dms-post-form.jsxdms/dms.container.jsxdms-payables/dms-payables.container.jsx
Test Scenarios:
-
DMS Post Form:
- Navigate to DMS posting
- Test all dropdowns in post form:
- Account selector
- Department selector
- GL code selector
-
DMS Container:
- Navigate to DMS section
- Test filter dropdowns
- Verify selection works
-
DMS Payables:
- Navigate to DMS Payables
- Test payables filter selectors
12. Production & Admin
Files Modified:
production-list-config-manager.component.jsxjobs-admin-class.component.jsxjobs-close/jobs-close.component.jsx
Test Scenarios:
-
Production List Config:
- Navigate to Production Board → Configure
- Test column configuration dropdown
- Verify display settings work
-
Jobs Admin Class:
- Navigate to Admin → Jobs
- Change job class/department
- Test class selector dropdown
-
Jobs Close Page:
- Navigate to Jobs → Close/Export
- Test filter dropdowns:
- Status filter
- Date range
- Department filter
- Verify selections work
13. Miscellaneous Components
Files Modified:
Ciecaselect.jsx(utility component - 75 lines modified)
Test Scenarios:
- CIECA Select Utility:
- Used in bill-form-lines-extended for labor type adjustments
- Returns options array with 14 labor types (LAA-LAU, LA1-LA4)
- Returns 10 part types (PAA, PAC, PAL, PAG, PAM, PAP, PAN, PAO, PAR, PAS) when parts=true
- Verify function returns properly formatted options array
- Test in any form using DMS integration with CIECA codes
Cross-Component Testing
Search Functionality
Test search across all searchable selects:
- Employee search (by name, employee number)
- Job search (by RO number, customer name, vehicle)
- Vendor search (by name)
- Vehicle search (by VIN, plate, make/model)
- Owner search (by name)
Multi-Select Components
If any components use mode="multiple":
- Verify multi-select works
- Verify tags display correctly
- Verify removal of selections works
Disabled State
- Test dropdowns in disabled state
- Verify disabled styling matches original
Form Validation
- Test required field validation on selects
- Verify error messages display correctly
- Test form submission with select values
Regression Testing Priority
High Priority (Critical User Flows)
- ✅ Create new job with all required fields
- ✅ Add job lines with labor types
- ✅ Assign employees to job lines
- ✅ Order parts with vendor selection
- ✅ Enter bills with vendor and account selection
- ✅ Close and export jobs
Medium Priority
- Convert estimate to RO
- Schedule appointments
- Clock in/out (tech portal)
- Update shop configuration
- Manage courtesy cars
Low Priority (Admin Functions)
- DMS integration posting
- Production board configuration
- Admin job modifications
Browser Testing
Test in:
- Chrome (latest)
- Firefox (latest)
- Safari (if applicable)
- Edge (latest)
Known Changed Components Summary
Total Files Modified: 54 client files + 1 server file
Labor Type Selectors (14 options):
- LAA, LAB, LAD, LAE, LAF, LAG, LAM, LAR, LAS, LAU, LA1, LA2, LA3, LA4
- Found in: job-lines-upsert-modal, job-line-convert-to-labor, bill-form-lines
Most Complex Changes:
shop-info.responsibilitycenters.component.jsx(980 lines changed)vendor-search-select.component.jsx(120 lines changed)shop-info.rostatus.component.jsx(120 lines changed)jobs-convert-button.component.jsx(198 lines changed)Ciecaselect.jsx(75 lines changed)
Internal Code Review Results ✅
Files Validated (Sample):
- ✅
allocations-assignment.component.jsx- Simple employee selector with search - ✅
contract-status-select.component.jsx- Static 3-option select - ✅
courtesy-car-status-select.component.jsx- Static 6-option select - ✅
job-lines-upsert-modal.component.jsx- 14 labor type options inline - ✅
email-overlay.component.jsx- From email with custom emails array - ✅
employee-search-select-email.component.jsx- Complex with tags and custom search prop - ✅
bill-form-lines-extended.formitem.component.jsx- CiecaSelect utility usage - ✅
vendor-search-select.component.jsx- Complex with favorites, tags, discount, phone - ✅
job-search-select.component.jsx- Complex with owner display, status tags, loading states - ✅
Ciecaselect.jsx- Utility function returning options array
Validation Checklist:
- All
Select.Optionpatterns removed - Replaced with
optionsarray prop showSearchuses object syntax{{ optionFilterProp: "label" }}- Custom
optionFilterPropused where needed ("name", "search", etc.) - Complex rendered content preserved in
labelprop with JSX - Tags, icons, badges, and styled elements working correctly
- Search functionality using correct property references
- Labor types: All 14 types present (LAA, LAB, LAD, LAE, LAF, LAG, LAM, LAR, LAS, LAU, LA1, LA2, LA3, LA4)
- Part types: All 10 types in CiecaSelect (PAA, PAC, PAL, PAG, PAM, PAP, PAN, PAO, PAR, PAS)
- Custom filterOption functions updated (option.label vs option.props.children)
- Performance optimizations added (useMemo for large option lists)
- labelRender custom rendering preserved where used
- optionLabelProp used correctly for display vs value
Known Complex Patterns Verified:
- Vendor Select: Favorites with heart icon, discount tags, phone display, custom search by "name"
- Employee Select: Flat rate/straight time tags, custom search by "search" prop (employee number + name)
- Job Select: Owner display function, status tags, loading states, conditional claim number display
- Email Overlay: Multiple from addresses (user email, shop email, custom md_from_emails array)
- Bill Lines Extended: Conditional DMS vs responsibility centers, CiecaSelect utility
No Issues Found - All migrations follow the correct pattern.
Testing Notes
- Focus on components with search functionality - filtering logic changed from
childrentolabel - Pay attention to components with custom rendered content (tags, badges, formatted text)
- Verify
optionFilterPropworks correctly for custom search fields - Test components that map over arrays to generate options
- Check components with conditional option rendering
Sign-Off
- All high priority tests passed
- All medium priority tests passed
- All low priority tests passed
- No console errors observed
- Visual appearance matches original
- Performance is acceptable (no lag in large dropdowns)
Tested By: _________________
Date: _________________
Environment: _________________
Notes: _________________