mirror of
https://github.com/nicotsx/zerobyte.git
synced 2026-04-19 06:18:12 -04:00
<!-- 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 -->
192 lines
5.1 KiB
TypeScript
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");
|
|
}
|
|
});
|
|
});
|