alepha
Version:
Easy-to-use modern TypeScript framework for building many kind of applications.
98 lines (79 loc) • 3.23 kB
text/typescript
import { Alepha } from "alepha";
import { FileSystemProvider, MemoryFileSystemProvider } from "alepha/system";
import { describe, expect, it } from "vitest";
import { EnvUtils } from "../helpers/EnvUtils.ts";
describe("EnvUtils", () => {
describe("parseEnv", () => {
it("should strip double quotes from values", async () => {
const alepha = Alepha.create().with({
provide: FileSystemProvider,
use: MemoryFileSystemProvider,
});
const fs = alepha.inject(MemoryFileSystemProvider);
await fs.writeFile("/project/.env", 'FOO="bar"\n');
const envUtils = alepha.inject(EnvUtils);
const result = await envUtils.parseEnv("/project");
expect(result.FOO).toBe("bar");
});
it("should strip single quotes from values", async () => {
const alepha = Alepha.create().with({
provide: FileSystemProvider,
use: MemoryFileSystemProvider,
});
const fs = alepha.inject(MemoryFileSystemProvider);
await fs.writeFile("/project/.env", "FOO='bar'\n");
const envUtils = alepha.inject(EnvUtils);
const result = await envUtils.parseEnv("/project");
expect(result.FOO).toBe("bar");
});
it("should preserve values without quotes", async () => {
const alepha = Alepha.create().with({
provide: FileSystemProvider,
use: MemoryFileSystemProvider,
});
const fs = alepha.inject(MemoryFileSystemProvider);
await fs.writeFile("/project/.env", "FOO=bar\n");
const envUtils = alepha.inject(EnvUtils);
const result = await envUtils.parseEnv("/project");
expect(result.FOO).toBe("bar");
});
it("should preserve values with equals signs in quoted strings", async () => {
const alepha = Alepha.create().with({
provide: FileSystemProvider,
use: MemoryFileSystemProvider,
});
const fs = alepha.inject(MemoryFileSystemProvider);
await fs.writeFile(
"/project/.env",
'DATABASE_URL="postgres://user:pass@host/db?sslmode=require"\n',
);
const envUtils = alepha.inject(EnvUtils);
const result = await envUtils.parseEnv("/project");
expect(result.DATABASE_URL).toBe(
"postgres://user:pass@host/db?sslmode=require",
);
});
it("should not strip mismatched quotes", async () => {
const alepha = Alepha.create().with({
provide: FileSystemProvider,
use: MemoryFileSystemProvider,
});
const fs = alepha.inject(MemoryFileSystemProvider);
await fs.writeFile("/project/.env", "FOO=\"bar'\n");
const envUtils = alepha.inject(EnvUtils);
const result = await envUtils.parseEnv("/project");
expect(result.FOO).toBe("\"bar'");
});
it("should not strip quotes from single-character values", async () => {
const alepha = Alepha.create().with({
provide: FileSystemProvider,
use: MemoryFileSystemProvider,
});
const fs = alepha.inject(MemoryFileSystemProvider);
await fs.writeFile("/project/.env", 'FOO="\n');
const envUtils = alepha.inject(EnvUtils);
const result = await envUtils.parseEnv("/project");
expect(result.FOO).toBe('"');
});
});
});