diff --git a/server/src/service/business/maintenanceWindowService.ts b/server/src/service/business/maintenanceWindowService.ts index 5d7a05b7d..d198d1e9d 100644 --- a/server/src/service/business/maintenanceWindowService.ts +++ b/server/src/service/business/maintenanceWindowService.ts @@ -107,7 +107,7 @@ export class MaintenanceWindowService implements IMaintenanceWindowService { }); } - await this.maintenanceWindowsRepository.create({ + const created = await this.maintenanceWindowsRepository.create({ teamId, monitorIds: monitorIDs, name: name, @@ -118,6 +118,10 @@ export class MaintenanceWindowService implements IMaintenanceWindowService { start: start, end: end, }); + + if (isWindowActive(created)) { + await this.monitorsRepository.updateByIds(created.monitorIds, teamId, { status: "maintenance" }); + } }; getMaintenanceWindowById = async ({ id, teamId }: { id: string; teamId: string }) => { diff --git a/server/test/unit/services/maintenanceWindowService.test.ts b/server/test/unit/services/maintenanceWindowService.test.ts index a51fd5703..bee60d4ef 100644 --- a/server/test/unit/services/maintenanceWindowService.test.ts +++ b/server/test/unit/services/maintenanceWindowService.test.ts @@ -149,6 +149,26 @@ describe("MaintenanceWindowService", () => { expect(maintenanceWindowsRepository.create).toHaveBeenCalledTimes(1); expect(maintenanceWindowsRepository.create).toHaveBeenCalledWith(expect.objectContaining({ monitorIds: ["mon-1"] })); }); + + it("flips monitors to maintenance when the created window is active", async () => { + const maintenanceWindowsRepository = createMaintenanceWindowsRepo(); + (maintenanceWindowsRepository.create as jest.Mock).mockResolvedValue(makeActiveWindow({ monitorIds: ["mon-1", "mon-2"] })); + const { service, monitorsRepository } = createService({ maintenanceWindowsRepository }); + + await service.createMaintenanceWindow(defaultCreateParams); + + expect(monitorsRepository.updateByIds).toHaveBeenCalledTimes(1); + expect(monitorsRepository.updateByIds).toHaveBeenCalledWith(["mon-1", "mon-2"], "team-1", { status: "maintenance" }); + }); + + it("does not touch monitor status when the created window is inactive", async () => { + // default mock returns makeWindow() with past dates → inactive + const { service, monitorsRepository } = createService(); + + await service.createMaintenanceWindow(defaultCreateParams); + + expect(monitorsRepository.updateByIds).not.toHaveBeenCalled(); + }); }); // ── getMaintenanceWindowById ─────────────────────────────────────────────