74 lines
1.8 KiB
TypeScript
74 lines
1.8 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
buildDeletionPlan,
|
|
buildExportItems,
|
|
filterValidationResults
|
|
} from '../../src/renderer/src/hooks/cleaner/helpers'
|
|
import type { ValidationResult } from '../../src/renderer/src/hooks/cleaner/types'
|
|
|
|
const sampleResults: ValidationResult[] = [
|
|
{
|
|
materialName: 'A',
|
|
materialCode: 'M1',
|
|
specification: '',
|
|
model: '',
|
|
managerName: 'alice',
|
|
isMarkedForDeletion: true
|
|
},
|
|
{
|
|
materialName: 'B',
|
|
materialCode: 'M2',
|
|
specification: '',
|
|
model: '',
|
|
managerName: '',
|
|
isMarkedForDeletion: false
|
|
},
|
|
{
|
|
materialName: 'C',
|
|
materialCode: 'M3',
|
|
specification: '',
|
|
model: '',
|
|
managerName: 'bob',
|
|
isMarkedForDeletion: false
|
|
}
|
|
]
|
|
|
|
describe('cleaner helpers', () => {
|
|
it('filters results for non-admin users and hidden items', () => {
|
|
const filtered = filterValidationResults({
|
|
validationResults: sampleResults,
|
|
isAdmin: false,
|
|
currentUsername: 'alice',
|
|
managers: [],
|
|
selectedManagers: new Set(),
|
|
hiddenItems: new Set(['M2'])
|
|
})
|
|
|
|
expect(filtered.map((item) => item.materialCode)).toEqual(['M1'])
|
|
})
|
|
|
|
it('builds deletion plan with missing managers', () => {
|
|
const plan = buildDeletionPlan(sampleResults, new Set(['M1', 'M2']))
|
|
|
|
expect(plan.materialsToUpsert).toEqual([{ materialCode: 'M1', managerName: 'alice' }])
|
|
expect(plan.materialsToDelete).toEqual(['M3'])
|
|
expect(plan.missingManager).toEqual(['M2'])
|
|
})
|
|
|
|
it('builds export items with selection state', () => {
|
|
const items = buildExportItems(sampleResults.slice(0, 1), new Set(['M1']))
|
|
|
|
expect(items).toEqual([
|
|
{
|
|
materialName: 'A',
|
|
materialCode: 'M1',
|
|
specification: '',
|
|
model: '',
|
|
managerName: 'alice',
|
|
isMarkedForDeletion: true,
|
|
isSelected: true
|
|
}
|
|
])
|
|
})
|
|
})
|