import { describe, expect, it } from 'vitest'; import dayjs from 'dayjs'; import { buildCheckInPayload, buildTransferPayload } from './occupancy-form'; describe('occupancy check-in form', () => { it('submits all required manual check-in fields with defaults', () => { expect( buildCheckInPayload({ studentId: 1, roomId: 2, checkInDate: dayjs('2026-07-18'), billingStartDate: dayjs('2026-07-18'), stayType: 'short', collectDeposit: true, depositAmount: 500, bedId: 3, notes: ' 备注 ', }), ).toEqual({ studentId: 1, roomId: 2, checkInDate: '2026-07-18', billingStartDate: '2026-07-18', stayType: 'short', collectDeposit: true, depositAmount: 500, notes: '备注', bedId: 3, lockerId: undefined, }); }); it('falls back to check-in date and short stay type', () => { expect( buildCheckInPayload({ studentId: 1, roomId: 2, checkInDate: dayjs('2026-07-18'), collectDeposit: false, bedId: 3, }), ).toEqual( expect.objectContaining({ billingStartDate: '2026-07-18', stayType: 'short', collectDeposit: false, depositAmount: undefined, }), ); }); }); describe('occupancy transfer form', () => { it('submits the target room resources with the transfer dates', () => { expect( buildTransferPayload({ newRoomId: 5, newBedId: 12, newLockerId: 18, transferDate: dayjs('2026-07-13'), oldBillingEndDate: dayjs('2026-07-13'), newBillingStartDate: dayjs('2026-07-14'), reason: '调整宿舍', }), ).toEqual({ newRoomId: 5, newBedId: 12, newLockerId: 18, transferDate: '2026-07-13', oldBillingEndDate: '2026-07-13', newBillingStartDate: '2026-07-14', reason: '调整宿舍', }); }); });