chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,215 @@
|
||||
import { describe, expect, it, vi, beforeEach } from "vitest";
|
||||
|
||||
describe("getRegistryConfig", () => {
|
||||
// Base env with all required fields to make env.server.ts happy
|
||||
const baseEnv = {
|
||||
NODE_ENV: "test" as const,
|
||||
DATABASE_URL: "postgresql://test:test@localhost:5432/test",
|
||||
DIRECT_URL: "postgresql://test:test@localhost:5432/test",
|
||||
SESSION_SECRET: "test-session-secret",
|
||||
MAGIC_LINK_SECRET: "test-magic-link-secret",
|
||||
ENCRYPTION_KEY: "test-encryption-keeeeey-32-bytes",
|
||||
CLICKHOUSE_URL: "http://localhost:8123",
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
// Reset modules to ensure fresh imports
|
||||
vi.resetModules();
|
||||
});
|
||||
|
||||
it("should return v3 config for non-v4 deployments", async () => {
|
||||
// Set up v3 env vars
|
||||
process.env = {
|
||||
...baseEnv,
|
||||
DEPLOY_REGISTRY_HOST: "v3-host.example.com",
|
||||
DEPLOY_REGISTRY_USERNAME: "v3-user",
|
||||
DEPLOY_REGISTRY_PASSWORD: "v3-password",
|
||||
DEPLOY_REGISTRY_NAMESPACE: "v3-namespace",
|
||||
DEPLOY_REGISTRY_ECR_TAGS: "env=v3,version=3",
|
||||
DEPLOY_REGISTRY_ECR_ASSUME_ROLE_ARN: "arn:aws:iam::123456789012:role/v3-role",
|
||||
DEPLOY_REGISTRY_ECR_ASSUME_ROLE_EXTERNAL_ID: "v3-external-id",
|
||||
};
|
||||
|
||||
const { getRegistryConfig } = await import("../app/v3/registryConfig.server");
|
||||
const config = getRegistryConfig(false);
|
||||
|
||||
expect(config).toEqual({
|
||||
host: "v3-host.example.com",
|
||||
username: "v3-user",
|
||||
password: "v3-password",
|
||||
namespace: "v3-namespace",
|
||||
ecrTags: "env=v3,version=3",
|
||||
ecrAssumeRoleArn: "arn:aws:iam::123456789012:role/v3-role",
|
||||
ecrAssumeRoleExternalId: "v3-external-id",
|
||||
});
|
||||
});
|
||||
|
||||
it("should return v4 config for v4 deployments when V4 vars are set", async () => {
|
||||
// Set up v3 + v4 env vars
|
||||
process.env = {
|
||||
...baseEnv,
|
||||
DEPLOY_REGISTRY_HOST: "v3-host.example.com",
|
||||
DEPLOY_REGISTRY_USERNAME: "v3-user",
|
||||
DEPLOY_REGISTRY_PASSWORD: "v3-password",
|
||||
DEPLOY_REGISTRY_NAMESPACE: "v3-namespace",
|
||||
DEPLOY_REGISTRY_ECR_TAGS: "env=v3,version=3",
|
||||
DEPLOY_REGISTRY_ECR_ASSUME_ROLE_ARN: "arn:aws:iam::123456789012:role/v3-role",
|
||||
DEPLOY_REGISTRY_ECR_ASSUME_ROLE_EXTERNAL_ID: "v3-external-id",
|
||||
|
||||
V4_DEPLOY_REGISTRY_HOST: "v4-host.example.com",
|
||||
V4_DEPLOY_REGISTRY_USERNAME: "v4-user",
|
||||
V4_DEPLOY_REGISTRY_PASSWORD: "v4-password",
|
||||
V4_DEPLOY_REGISTRY_NAMESPACE: "v4-namespace",
|
||||
V4_DEPLOY_REGISTRY_ECR_TAGS: "env=v4,version=4",
|
||||
V4_DEPLOY_REGISTRY_ECR_ASSUME_ROLE_ARN: "arn:aws:iam::456789012345:role/v4-role",
|
||||
V4_DEPLOY_REGISTRY_ECR_ASSUME_ROLE_EXTERNAL_ID: "v4-external-id",
|
||||
};
|
||||
|
||||
const { getRegistryConfig } = await import("../app/v3/registryConfig.server");
|
||||
const config = getRegistryConfig(true);
|
||||
|
||||
expect(config).toEqual({
|
||||
host: "v4-host.example.com",
|
||||
username: "v4-user",
|
||||
password: "v4-password",
|
||||
namespace: "v4-namespace",
|
||||
ecrTags: "env=v4,version=4",
|
||||
ecrAssumeRoleArn: "arn:aws:iam::456789012345:role/v4-role",
|
||||
ecrAssumeRoleExternalId: "v4-external-id",
|
||||
});
|
||||
});
|
||||
|
||||
it("should fallback to v3 config when V4 vars are not set", async () => {
|
||||
// Set up only v3 env vars (no v4 vars)
|
||||
process.env = {
|
||||
...baseEnv,
|
||||
DEPLOY_REGISTRY_HOST: "v3-only-host.example.com",
|
||||
DEPLOY_REGISTRY_USERNAME: "v3-only-user",
|
||||
DEPLOY_REGISTRY_PASSWORD: "v3-only-password",
|
||||
DEPLOY_REGISTRY_NAMESPACE: "v3-only-namespace",
|
||||
DEPLOY_REGISTRY_ECR_TAGS: "env=v3only",
|
||||
DEPLOY_REGISTRY_ECR_ASSUME_ROLE_ARN: "arn:aws:iam::111111111111:role/v3-only-role",
|
||||
DEPLOY_REGISTRY_ECR_ASSUME_ROLE_EXTERNAL_ID: "v3-only-external-id",
|
||||
// V4 vars not set - should fallback to v3 via transform
|
||||
};
|
||||
|
||||
const { getRegistryConfig } = await import("../app/v3/registryConfig.server");
|
||||
const config = getRegistryConfig(true);
|
||||
|
||||
expect(config).toEqual({
|
||||
host: "v3-only-host.example.com",
|
||||
username: "v3-only-user",
|
||||
password: "v3-only-password",
|
||||
namespace: "v3-only-namespace",
|
||||
ecrTags: "env=v3only",
|
||||
ecrAssumeRoleArn: "arn:aws:iam::111111111111:role/v3-only-role",
|
||||
ecrAssumeRoleExternalId: "v3-only-external-id",
|
||||
});
|
||||
});
|
||||
|
||||
it("should handle partial v4 config with mixed fallbacks", async () => {
|
||||
// Set up v3 vars + only some v4 vars
|
||||
process.env = {
|
||||
...baseEnv,
|
||||
DEPLOY_REGISTRY_HOST: "v3-mixed-host.example.com",
|
||||
DEPLOY_REGISTRY_USERNAME: "v3-mixed-user",
|
||||
DEPLOY_REGISTRY_PASSWORD: "v3-mixed-password",
|
||||
DEPLOY_REGISTRY_NAMESPACE: "v3-mixed-namespace",
|
||||
DEPLOY_REGISTRY_ECR_TAGS: "env=v3mixed",
|
||||
DEPLOY_REGISTRY_ECR_ASSUME_ROLE_ARN: "arn:aws:iam::222222222222:role/v3-mixed-role",
|
||||
DEPLOY_REGISTRY_ECR_ASSUME_ROLE_EXTERNAL_ID: "v3-mixed-external-id",
|
||||
|
||||
// Only some V4 vars are set - others should fallback to v3
|
||||
V4_DEPLOY_REGISTRY_HOST: "v4-partial-host.example.com",
|
||||
V4_DEPLOY_REGISTRY_USERNAME: "v4-partial-user",
|
||||
// V4_DEPLOY_REGISTRY_PASSWORD not set - should fallback to v3
|
||||
// Other V4 vars not set - should fallback to v3
|
||||
};
|
||||
|
||||
const { getRegistryConfig } = await import("../app/v3/registryConfig.server");
|
||||
const config = getRegistryConfig(true);
|
||||
|
||||
expect(config).toEqual({
|
||||
host: "v4-partial-host.example.com", // v4 value
|
||||
username: "v4-partial-user", // v4 value
|
||||
password: "v3-mixed-password", // v3 fallback
|
||||
namespace: "v3-mixed-namespace", // v3 fallback
|
||||
ecrTags: "env=v3mixed", // v3 fallback
|
||||
ecrAssumeRoleArn: "arn:aws:iam::222222222222:role/v3-mixed-role", // v3 fallback
|
||||
ecrAssumeRoleExternalId: "v3-mixed-external-id", // v3 fallback
|
||||
});
|
||||
});
|
||||
|
||||
it("should handle basic registry config without ECR or V4 vars", async () => {
|
||||
// Set up basic registry config without ECR or V4 vars
|
||||
process.env = {
|
||||
...baseEnv,
|
||||
DEPLOY_REGISTRY_HOST: "registry.example.com",
|
||||
DEPLOY_REGISTRY_USERNAME: "basic-user",
|
||||
DEPLOY_REGISTRY_PASSWORD: "basic-password",
|
||||
DEPLOY_REGISTRY_NAMESPACE: "basic-namespace",
|
||||
// No ECR vars and no V4 vars - should all be undefined
|
||||
};
|
||||
|
||||
const { getRegistryConfig } = await import("../app/v3/registryConfig.server");
|
||||
|
||||
const v3Config = getRegistryConfig(false);
|
||||
const v4Config = getRegistryConfig(true);
|
||||
|
||||
expect(v3Config).toEqual({
|
||||
host: "registry.example.com",
|
||||
username: "basic-user",
|
||||
password: "basic-password",
|
||||
namespace: "basic-namespace",
|
||||
ecrTags: undefined,
|
||||
ecrAssumeRoleArn: undefined,
|
||||
ecrAssumeRoleExternalId: undefined,
|
||||
});
|
||||
|
||||
// V4 should fallback to v3 values since V4 vars not set
|
||||
expect(v4Config).toEqual({
|
||||
host: "registry.example.com",
|
||||
username: "basic-user",
|
||||
password: "basic-password",
|
||||
namespace: "basic-namespace",
|
||||
ecrTags: undefined,
|
||||
ecrAssumeRoleArn: undefined,
|
||||
ecrAssumeRoleExternalId: undefined,
|
||||
});
|
||||
});
|
||||
|
||||
it("should handle undefined/null values gracefully", async () => {
|
||||
// Set up minimal required values only
|
||||
process.env = {
|
||||
...baseEnv,
|
||||
DEPLOY_REGISTRY_HOST: "minimal-host.example.com",
|
||||
DEPLOY_REGISTRY_NAMESPACE: "minimal-namespace",
|
||||
// Other vars not set - should be undefined
|
||||
};
|
||||
|
||||
const { getRegistryConfig } = await import("../app/v3/registryConfig.server");
|
||||
|
||||
const v3Config = getRegistryConfig(false);
|
||||
const v4Config = getRegistryConfig(true);
|
||||
|
||||
expect(v3Config).toEqual({
|
||||
host: "minimal-host.example.com",
|
||||
username: undefined,
|
||||
password: undefined,
|
||||
namespace: "minimal-namespace",
|
||||
ecrTags: undefined,
|
||||
ecrAssumeRoleArn: undefined,
|
||||
ecrAssumeRoleExternalId: undefined,
|
||||
});
|
||||
|
||||
expect(v4Config).toEqual({
|
||||
host: "minimal-host.example.com",
|
||||
username: undefined,
|
||||
password: undefined,
|
||||
namespace: "minimal-namespace", // fallback default
|
||||
ecrTags: undefined,
|
||||
ecrAssumeRoleArn: undefined,
|
||||
ecrAssumeRoleExternalId: undefined,
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user