Files
zerobyte/app/server/modules/backups/__tests__/backups.queries.test.ts
Nico 942bf2b31b refactor: tests (#585)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

* **Tests**
  * Improved test infrastructure and organization across backup, repository, volume, and utility modules with streamlined mock setup and cleaner test patterns.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-02-26 19:54:25 +01:00

192 lines
5.1 KiB
TypeScript

import { test, describe, expect } from "bun:test";
import { scheduleQueries } from "../backups.queries";
import { createTestBackupSchedule } from "~/test/helpers/backup";
import { createTestVolume } from "~/test/helpers/volume";
import { createTestRepository } from "~/test/helpers/repository";
import { createTestOrganization } from "~/test/helpers/organization";
import { TEST_ORG_ID } from "~/test/helpers/organization";
import { faker } from "@faker-js/faker";
describe("scheduleQueries.findExecutable", () => {
const createScheduleDependencies = async () => {
const volume = await createTestVolume();
const repository = await createTestRepository();
return {
volumeId: volume.id,
repositoryId: repository.id,
};
};
test("should return enabled schedules with null nextBackupAt", async () => {
// arrange
const { volumeId, repositoryId } = await createScheduleDependencies();
const schedule = await createTestBackupSchedule({
volumeId,
repositoryId,
enabled: true,
nextBackupAt: null,
lastBackupStatus: null,
});
// act
const result = await scheduleQueries.findExecutable(TEST_ORG_ID);
// assert
expect(result).toContain(schedule.id);
});
test("should return enabled schedules with past nextBackupAt", async () => {
// arrange
const { volumeId, repositoryId } = await createScheduleDependencies();
const pastTime = faker.date.past().getTime();
const schedule = await createTestBackupSchedule({
volumeId,
repositoryId,
enabled: true,
nextBackupAt: pastTime,
lastBackupStatus: null,
});
// act
const result = await scheduleQueries.findExecutable(TEST_ORG_ID);
// assert
expect(result).toContain(schedule.id);
});
test("should not return schedules with future nextBackupAt", async () => {
// arrange
const { volumeId, repositoryId } = await createScheduleDependencies();
const futureTime = faker.date.future().getTime();
const schedule = await createTestBackupSchedule({
volumeId,
repositoryId,
enabled: true,
nextBackupAt: futureTime,
lastBackupStatus: null,
});
// act
const result = await scheduleQueries.findExecutable(TEST_ORG_ID);
// assert
expect(result).not.toContain(schedule.id);
});
test("should not return disabled schedules", async () => {
// arrange
const { volumeId, repositoryId } = await createScheduleDependencies();
const schedule = await createTestBackupSchedule({
volumeId,
repositoryId,
enabled: false,
nextBackupAt: null,
lastBackupStatus: null,
});
// act
const result = await scheduleQueries.findExecutable(TEST_ORG_ID);
// assert
expect(result).not.toContain(schedule.id);
});
test("should not return schedules with in_progress status", async () => {
// arrange
const { volumeId, repositoryId } = await createScheduleDependencies();
const schedule = await createTestBackupSchedule({
volumeId,
repositoryId,
enabled: true,
nextBackupAt: null,
lastBackupStatus: "in_progress",
});
// act
const result = await scheduleQueries.findExecutable(TEST_ORG_ID);
// assert
expect(result).not.toContain(schedule.id);
});
test("should return schedules with success status and past nextBackupAt", async () => {
// arrange
const { volumeId, repositoryId } = await createScheduleDependencies();
const pastTime = faker.date.past().getTime();
const schedule = await createTestBackupSchedule({
volumeId,
repositoryId,
enabled: true,
nextBackupAt: pastTime,
lastBackupStatus: "success",
});
// act
const result = await scheduleQueries.findExecutable(TEST_ORG_ID);
// assert
expect(result).toContain(schedule.id);
});
test("should return schedules with error status and null nextBackupAt", async () => {
// arrange
const { volumeId, repositoryId } = await createScheduleDependencies();
const schedule = await createTestBackupSchedule({
volumeId,
repositoryId,
enabled: true,
nextBackupAt: null,
lastBackupStatus: "error",
});
// act
const result = await scheduleQueries.findExecutable(TEST_ORG_ID);
// assert
expect(result).toContain(schedule.id);
});
test("should not return schedules from other organizations", async () => {
// arrange
const { volumeId, repositoryId } = await createScheduleDependencies();
const otherOrgId = faker.string.uuid();
await createTestOrganization({ id: otherOrgId });
const schedule = await createTestBackupSchedule({
volumeId,
repositoryId,
enabled: true,
nextBackupAt: null,
lastBackupStatus: null,
organizationId: otherOrgId,
});
// act
const result = await scheduleQueries.findExecutable(TEST_ORG_ID);
// assert
expect(result).not.toContain(schedule.id);
});
test("should only return schedule IDs", async () => {
// arrange
const { volumeId, repositoryId } = await createScheduleDependencies();
await createTestBackupSchedule({
volumeId,
repositoryId,
enabled: true,
nextBackupAt: null,
lastBackupStatus: null,
});
// act
const result = await scheduleQueries.findExecutable(TEST_ORG_ID);
// assert
expect(result.length).toBeGreaterThan(0);
for (const id of result) {
expect(typeof id).toBe("number");
}
});
});