feat: improve occupancy import template
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
import {
|
||||
createOccupancyImportTemplateWorkbook,
|
||||
OCCUPANCY_IMPORT_COLUMNS,
|
||||
parseOccupancyImportWorksheet,
|
||||
} from './occupancy-import-template';
|
||||
|
||||
describe('occupancy import template', () => {
|
||||
it('includes the current occupancy fields including bed and locker numbers', () => {
|
||||
const workbook = createOccupancyImportTemplateWorkbook();
|
||||
const ws = workbook.getWorksheet('入住名单导入模板')!;
|
||||
const headers = ws.getRow(1).values as unknown[];
|
||||
|
||||
expect(headers).toEqual(
|
||||
expect.arrayContaining([
|
||||
'宿舍号',
|
||||
'楼栋',
|
||||
'床位号',
|
||||
'柜子号',
|
||||
'计费起始日',
|
||||
'入住类型',
|
||||
'备注',
|
||||
]),
|
||||
);
|
||||
expect(ws.columnCount).toBe(OCCUPANCY_IMPORT_COLUMNS.length);
|
||||
});
|
||||
|
||||
it('keeps Excel Date cells on the same local calendar day', () => {
|
||||
const workbook = createOccupancyImportTemplateWorkbook();
|
||||
const ws = workbook.getWorksheet('入住名单导入模板')!;
|
||||
ws.getCell('J2').value = new Date(2026, 3, 21);
|
||||
ws.getCell('K2').value = new Date(2026, 3, 22);
|
||||
ws.getCell('L2').value = new Date(2026, 3, 30);
|
||||
|
||||
expect(parseOccupancyImportWorksheet(ws)[0]).toMatchObject({
|
||||
checkInDate: '2026-04-21',
|
||||
billingStartDate: '2026-04-22',
|
||||
checkOutDate: '2026-04-30',
|
||||
});
|
||||
});
|
||||
|
||||
it('parses rows by header so new columns do not shift existing fields', () => {
|
||||
const workbook = createOccupancyImportTemplateWorkbook();
|
||||
const ws = workbook.getWorksheet('入住名单导入模板')!;
|
||||
const rows = parseOccupancyImportWorksheet(ws);
|
||||
|
||||
expect(rows[0]).toMatchObject({
|
||||
roomNumber: '4-102',
|
||||
building: '4号楼',
|
||||
bedNumber: '1号床',
|
||||
lockerNumber: 'A01',
|
||||
name: '张三',
|
||||
checkInDate: '2026-04-21',
|
||||
billingStartDate: '2026-04-21',
|
||||
stayType: 'short',
|
||||
});
|
||||
expect(rows[1]).toMatchObject({
|
||||
bedNumber: '2号床',
|
||||
lockerNumber: 'A02',
|
||||
stayType: 'long',
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user