feat(cleaner): add configurable row number protection toggle
This commit is contained in:
@@ -23,7 +23,8 @@ describe('CleanerService - Helper Methods', () => {
|
||||
rowNumber: 100,
|
||||
pendingQty: '',
|
||||
materialCode: 'MAT001',
|
||||
deleteSet
|
||||
deleteSet,
|
||||
enableRowProtection: true
|
||||
})
|
||||
|
||||
expect(result).toBe(true)
|
||||
@@ -34,7 +35,8 @@ describe('CleanerService - Helper Methods', () => {
|
||||
rowNumber: 100,
|
||||
pendingQty: '',
|
||||
materialCode: 'MAT999',
|
||||
deleteSet
|
||||
deleteSet,
|
||||
enableRowProtection: true
|
||||
})
|
||||
|
||||
expect(result).toBe(false)
|
||||
@@ -45,7 +47,8 @@ describe('CleanerService - Helper Methods', () => {
|
||||
rowNumber: 5000,
|
||||
pendingQty: '',
|
||||
materialCode: 'MAT001',
|
||||
deleteSet
|
||||
deleteSet,
|
||||
enableRowProtection: true
|
||||
})
|
||||
|
||||
expect(result).toBe(false)
|
||||
@@ -56,7 +59,8 @@ describe('CleanerService - Helper Methods', () => {
|
||||
rowNumber: 100,
|
||||
pendingQty: '5',
|
||||
materialCode: 'MAT001',
|
||||
deleteSet
|
||||
deleteSet,
|
||||
enableRowProtection: true
|
||||
})
|
||||
|
||||
expect(result).toBe(false)
|
||||
@@ -67,7 +71,8 @@ describe('CleanerService - Helper Methods', () => {
|
||||
rowNumber: 100,
|
||||
pendingQty: ' ',
|
||||
materialCode: 'MAT001',
|
||||
deleteSet
|
||||
deleteSet,
|
||||
enableRowProtection: true
|
||||
})
|
||||
|
||||
expect(result).toBe(true) // whitespace-only is treated as empty after trim
|
||||
@@ -80,7 +85,8 @@ describe('CleanerService - Helper Methods', () => {
|
||||
rowNumber: 1999,
|
||||
pendingQty: '',
|
||||
materialCode: 'MAT001',
|
||||
deleteSet
|
||||
deleteSet,
|
||||
enableRowProtection: true
|
||||
})
|
||||
).toBe(true)
|
||||
|
||||
@@ -90,7 +96,8 @@ describe('CleanerService - Helper Methods', () => {
|
||||
rowNumber: 2000,
|
||||
pendingQty: '',
|
||||
materialCode: 'MAT001',
|
||||
deleteSet
|
||||
deleteSet,
|
||||
enableRowProtection: true
|
||||
})
|
||||
).toBe(false)
|
||||
|
||||
@@ -100,7 +107,8 @@ describe('CleanerService - Helper Methods', () => {
|
||||
rowNumber: 7999,
|
||||
pendingQty: '',
|
||||
materialCode: 'MAT001',
|
||||
deleteSet
|
||||
deleteSet,
|
||||
enableRowProtection: true
|
||||
})
|
||||
).toBe(false)
|
||||
|
||||
@@ -110,10 +118,47 @@ describe('CleanerService - Helper Methods', () => {
|
||||
rowNumber: 8000,
|
||||
pendingQty: '',
|
||||
materialCode: 'MAT001',
|
||||
deleteSet
|
||||
deleteSet,
|
||||
enableRowProtection: true
|
||||
})
|
||||
).toBe(true)
|
||||
})
|
||||
|
||||
it('should allow deletion when row protection is disabled (row in 2000-7999)', () => {
|
||||
const result = cleaner.shouldDeleteMaterial({
|
||||
rowNumber: 5000,
|
||||
pendingQty: '',
|
||||
materialCode: 'MAT001',
|
||||
deleteSet,
|
||||
enableRowProtection: false
|
||||
})
|
||||
|
||||
expect(result).toBe(true)
|
||||
})
|
||||
|
||||
it('should still block deletion when row protection is disabled but pendingQty is not empty', () => {
|
||||
const result = cleaner.shouldDeleteMaterial({
|
||||
rowNumber: 5000,
|
||||
pendingQty: '10',
|
||||
materialCode: 'MAT001',
|
||||
deleteSet,
|
||||
enableRowProtection: false
|
||||
})
|
||||
|
||||
expect(result).toBe(false)
|
||||
})
|
||||
|
||||
it('should still block deletion when row protection is disabled but material not in delete set', () => {
|
||||
const result = cleaner.shouldDeleteMaterial({
|
||||
rowNumber: 5000,
|
||||
pendingQty: '',
|
||||
materialCode: 'MAT999',
|
||||
deleteSet,
|
||||
enableRowProtection: false
|
||||
})
|
||||
|
||||
expect(result).toBe(false)
|
||||
})
|
||||
})
|
||||
|
||||
describe('getSkipReason()', () => {
|
||||
@@ -125,7 +170,8 @@ describe('CleanerService - Helper Methods', () => {
|
||||
rowNumber: 3000,
|
||||
pendingQty: '',
|
||||
materialCode: 'MAT001',
|
||||
deleteSet
|
||||
deleteSet,
|
||||
enableRowProtection: true
|
||||
})
|
||||
|
||||
expect(reason).toBe('行号在 2000-7999 范围内(受保护)')
|
||||
@@ -136,13 +182,15 @@ describe('CleanerService - Helper Methods', () => {
|
||||
rowNumber: 100,
|
||||
pendingQty: '',
|
||||
materialCode: 'MAT001',
|
||||
deleteSet
|
||||
deleteSet,
|
||||
enableRowProtection: true
|
||||
})
|
||||
const reason = cleaner.getSkipReason({
|
||||
rowNumber: 100,
|
||||
pendingQty: '',
|
||||
materialCode: 'MAT001',
|
||||
deleteSet
|
||||
deleteSet,
|
||||
enableRowProtection: true
|
||||
})
|
||||
|
||||
expect(result).toBe(true)
|
||||
@@ -154,7 +202,8 @@ describe('CleanerService - Helper Methods', () => {
|
||||
rowNumber: 100,
|
||||
pendingQty: '',
|
||||
materialCode: 'MAT999',
|
||||
deleteSet
|
||||
deleteSet,
|
||||
enableRowProtection: true
|
||||
})
|
||||
|
||||
expect(reason).toBe('物料不在删除清单中')
|
||||
@@ -165,7 +214,8 @@ describe('CleanerService - Helper Methods', () => {
|
||||
rowNumber: 100,
|
||||
pendingQty: '10',
|
||||
materialCode: 'MAT001',
|
||||
deleteSet
|
||||
deleteSet,
|
||||
enableRowProtection: true
|
||||
})
|
||||
|
||||
expect(reason).toBe('累计待发数量不为空')
|
||||
|
||||
Reference in New Issue
Block a user