feat: 调整默认排课节奏并限制时间选择
第一节 08:00-09:00,之后从 09:30 起每小时一节至 21:30;排课时间仅可选整点或半点。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -51,7 +51,7 @@ describe('SlotGeneratorService', () => {
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
describe('generateSlots', () => {
|
||||
it('creates slots for every day using the default schedule (14 slots per day)', async () => {
|
||||
it('creates slots for every day using the default schedule', async () => {
|
||||
const defaultSlots = getDefaultTimeSlots()
|
||||
mockPrisma.timeSlot.createMany.mockResolvedValueOnce({ count: defaultSlots.length * 7 })
|
||||
|
||||
@@ -64,24 +64,25 @@ describe('SlotGeneratorService', () => {
|
||||
skipDuplicates: boolean
|
||||
}
|
||||
expect(skipDuplicates).toBe(true)
|
||||
// 7 days × 14 slots per day = 98
|
||||
expect(data).toHaveLength(defaultSlots.length * 7)
|
||||
expect(count).toBe(defaultSlots.length * 7)
|
||||
})
|
||||
|
||||
it('creates 14 slots per day (08:00-22:00 hourly)', async () => {
|
||||
mockPrisma.timeSlot.createMany.mockResolvedValueOnce({ count: 14 })
|
||||
it('creates 13 slots per day (08:00-09:00, then 09:30-21:30 hourly)', async () => {
|
||||
mockPrisma.timeSlot.createMany.mockResolvedValueOnce({ count: 13 })
|
||||
|
||||
await service.generateSlots(1)
|
||||
|
||||
const { data } = mockPrisma.timeSlot.createMany.mock.calls[0][0] as {
|
||||
data: Array<{ startTime: string; endTime: string }>
|
||||
}
|
||||
expect(data).toHaveLength(14)
|
||||
expect(data).toHaveLength(13)
|
||||
expect(data[0].startTime).toBe('08:00')
|
||||
expect(data[0].endTime).toBe('09:00')
|
||||
expect(data[13].startTime).toBe('21:00')
|
||||
expect(data[13].endTime).toBe('22:00')
|
||||
expect(data[1].startTime).toBe('09:30')
|
||||
expect(data[1].endTime).toBe('10:30')
|
||||
expect(data[12].startTime).toBe('20:30')
|
||||
expect(data[12].endTime).toBe('21:30')
|
||||
})
|
||||
|
||||
it('passes skipDuplicates: true to handle existing date+time combinations', async () => {
|
||||
@@ -96,7 +97,7 @@ describe('SlotGeneratorService', () => {
|
||||
})
|
||||
|
||||
it('sets source to TEMPLATE for all generated slots', async () => {
|
||||
mockPrisma.timeSlot.createMany.mockResolvedValueOnce({ count: 14 })
|
||||
mockPrisma.timeSlot.createMany.mockResolvedValueOnce({ count: 13 })
|
||||
|
||||
await service.generateSlots(1)
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ export class SlotGeneratorService {
|
||||
|
||||
/**
|
||||
* Generate time slots for the next `daysAhead` days based on the fixed
|
||||
* default schedule (Mon-Sun, 08:00-22:00 hourly).
|
||||
* default schedule (Mon-Sun: 08:00-09:00, then 09:30-21:30 hourly).
|
||||
* Uses `createMany` with `skipDuplicates` so re-runs are safe.
|
||||
*
|
||||
* @returns Number of newly created slots
|
||||
|
||||
Reference in New Issue
Block a user