mirror of
https://github.com/LukeHagar/dokploy.git
synced 2025-12-06 04:19:37 +00:00
103 lines
2.8 KiB
TypeScript
103 lines
2.8 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
import type { ApplicationNested } from "@dokploy/server/utils/builders";
|
|
import { mechanizeDockerContainer } from "@dokploy/server/utils/builders";
|
|
|
|
type MockCreateServiceOptions = {
|
|
StopGracePeriod?: number;
|
|
[key: string]: unknown;
|
|
};
|
|
|
|
const { inspectMock, getServiceMock, createServiceMock, getRemoteDockerMock } =
|
|
vi.hoisted(() => {
|
|
const inspect = vi.fn<[], Promise<never>>();
|
|
const getService = vi.fn(() => ({ inspect }));
|
|
const createService = vi.fn<[MockCreateServiceOptions], Promise<void>>(
|
|
async () => undefined,
|
|
);
|
|
const getRemoteDocker = vi.fn(async () => ({
|
|
getService,
|
|
createService,
|
|
}));
|
|
return {
|
|
inspectMock: inspect,
|
|
getServiceMock: getService,
|
|
createServiceMock: createService,
|
|
getRemoteDockerMock: getRemoteDocker,
|
|
};
|
|
});
|
|
|
|
vi.mock("@dokploy/server/utils/servers/remote-docker", () => ({
|
|
getRemoteDocker: getRemoteDockerMock,
|
|
}));
|
|
|
|
const createApplication = (
|
|
overrides: Partial<ApplicationNested> = {},
|
|
): ApplicationNested =>
|
|
({
|
|
appName: "test-app",
|
|
buildType: "dockerfile",
|
|
env: null,
|
|
mounts: [],
|
|
cpuLimit: null,
|
|
memoryLimit: null,
|
|
memoryReservation: null,
|
|
cpuReservation: null,
|
|
command: null,
|
|
ports: [],
|
|
sourceType: "docker",
|
|
dockerImage: "example:latest",
|
|
registry: null,
|
|
environment: {
|
|
project: { env: null },
|
|
env: null,
|
|
},
|
|
replicas: 1,
|
|
stopGracePeriodSwarm: 0n,
|
|
serverId: "server-id",
|
|
...overrides,
|
|
}) as unknown as ApplicationNested;
|
|
|
|
describe("mechanizeDockerContainer", () => {
|
|
beforeEach(() => {
|
|
inspectMock.mockReset();
|
|
inspectMock.mockRejectedValue(new Error("service not found"));
|
|
getServiceMock.mockClear();
|
|
createServiceMock.mockClear();
|
|
getRemoteDockerMock.mockClear();
|
|
getRemoteDockerMock.mockResolvedValue({
|
|
getService: getServiceMock,
|
|
createService: createServiceMock,
|
|
});
|
|
});
|
|
|
|
it("converts bigint stopGracePeriodSwarm to a number and keeps zero values", async () => {
|
|
const application = createApplication({ stopGracePeriodSwarm: 0n });
|
|
|
|
await mechanizeDockerContainer(application);
|
|
|
|
expect(createServiceMock).toHaveBeenCalledTimes(1);
|
|
const call = createServiceMock.mock.calls[0];
|
|
if (!call) {
|
|
throw new Error("createServiceMock should have been called once");
|
|
}
|
|
const [settings] = call;
|
|
expect(settings.StopGracePeriod).toBe(0);
|
|
expect(typeof settings.StopGracePeriod).toBe("number");
|
|
});
|
|
|
|
it("omits StopGracePeriod when stopGracePeriodSwarm is null", async () => {
|
|
const application = createApplication({ stopGracePeriodSwarm: null });
|
|
|
|
await mechanizeDockerContainer(application);
|
|
|
|
expect(createServiceMock).toHaveBeenCalledTimes(1);
|
|
const call = createServiceMock.mock.calls[0];
|
|
if (!call) {
|
|
throw new Error("createServiceMock should have been called once");
|
|
}
|
|
const [settings] = call;
|
|
expect(settings).not.toHaveProperty("StopGracePeriod");
|
|
});
|
|
});
|