@sidequest/backend-test
Version:
@sidequest/backend-test is a test suite for backend implementations of Sidequest, a Node.js library for managing background jobs and distributed queues.
119 lines (116 loc) • 5.02 kB
JavaScript
import { describe, it } from 'vitest';
import { backend } from './backend.js';
function defineCreateNewJobTestSuite() {
describe("createNewJob", () => {
it("should insert new job with bare minimum", async () => {
// Insert a waiting job
const job = {
queue: "default",
class: "TestJob",
args: [],
constructor_args: [],
state: "waiting",
script: "test.js",
attempt: 0,
};
const insertedJob = await backend.createNewJob(job);
expect(insertedJob.queue).toBe("default");
expect(insertedJob.class).toBe("TestJob");
expect(insertedJob.args).toMatchObject([]);
expect(insertedJob.constructor_args).toMatchObject([]);
expect(insertedJob.state).toBe("waiting");
expect(insertedJob.available_at).toEqual(expect.any(Date));
expect(insertedJob.inserted_at).toEqual(expect.any(Date));
expect(insertedJob.script).toBe("test.js");
expect(insertedJob.attempt).toBe(0);
expect(insertedJob.max_attempts).toBe(5);
expect(insertedJob.result).toBe(null);
expect(insertedJob.errors).toBe(null);
expect(insertedJob.attempted_at).toBe(null);
expect(insertedJob.completed_at).toBe(null);
expect(insertedJob.failed_at).toBe(null);
expect(insertedJob.canceled_at).toBe(null);
expect(insertedJob.claimed_at).toBe(null);
expect(insertedJob.claimed_by).toBe(null);
expect(insertedJob.timeout).toBe(null);
expect(insertedJob.unique_digest).toBe(null);
expect(insertedJob.uniqueness_config).toBe(null);
});
it("should insert a new job with all optionals", async () => {
const twelve = new Date();
twelve.setUTCDate(12);
twelve.setUTCMonth(12);
twelve.setUTCFullYear(2012);
// Insert a waiting job
const job = {
queue: "default",
class: "TestJob",
args: [{ foo: "bar" }],
constructor_args: [{}],
state: "waiting",
script: "test.js",
attempt: 0,
max_attempts: 5,
timeout: 10,
available_at: twelve,
unique_digest: "test",
uniqueness_config: {
type: "alive",
},
};
const insertedJob = await backend.createNewJob(job);
expect(insertedJob.queue).toBe("default");
expect(insertedJob.class).toBe("TestJob");
expect(insertedJob.args).toMatchObject([{ foo: "bar" }]);
expect(insertedJob.constructor_args).toMatchObject([{}]);
expect(insertedJob.state).toBe("waiting");
expect(insertedJob.available_at).toEqual(twelve);
expect(insertedJob.inserted_at).toEqual(expect.any(Date));
expect(insertedJob.script).toBe("test.js");
expect(insertedJob.attempt).toBe(0);
expect(insertedJob.max_attempts).toBe(5);
expect(insertedJob.result).toBe(null);
expect(insertedJob.errors).toBe(null);
expect(insertedJob.attempted_at).toBe(null);
expect(insertedJob.completed_at).toBe(null);
expect(insertedJob.failed_at).toBe(null);
expect(insertedJob.canceled_at).toBe(null);
expect(insertedJob.claimed_at).toBe(null);
expect(insertedJob.claimed_by).toBe(null);
expect(insertedJob.timeout).toBe(10);
expect(insertedJob.unique_digest).toBe("test");
expect(insertedJob.uniqueness_config).toMatchObject({ type: "alive" });
});
it("should not insert two jobs with the same unique digest", async () => {
// Insert a waiting job
const job = {
queue: "default",
class: "TestJob",
args: [{ foo: "bar" }],
constructor_args: [{}],
state: "waiting",
script: "test.js",
attempt: 0,
max_attempts: 5,
timeout: 10,
unique_digest: "test",
};
const job2 = {
queue: "default2",
class: "TestJob2",
args: [{ foo: "bar2" }],
constructor_args: [{}],
state: "waiting",
script: "test2.js",
attempt: 0,
max_attempts: 5,
timeout: 10,
unique_digest: "test",
};
await backend.createNewJob(job);
await expect(backend.createNewJob(job2)).rejects.toThrow();
});
});
}
export { defineCreateNewJobTestSuite as default };
//# sourceMappingURL=createNewJob.js.map