Files
Jinho Jang fe62cee62b feat: tech stack related articles, feature cards polish, and node programme signup (#34)
* feat(node-programme): refactor signup form and implement submission logic

* fix(web): improve layout and styling of feature cards section

* feat(tech-stack): implement tech stack related articles functionality and update blog article fetching logic
2026-06-04 02:46:17 +09:00

61 lines
1.6 KiB
TypeScript

import { afterEach, describe, expect, test, vi } from 'vitest'
const originalEnv = { ...process.env }
const loadEnv = async (values: Record<string, string | undefined>) => {
vi.resetModules()
process.env = { ...originalEnv }
for (const [key, value] of Object.entries(values)) {
if (value === undefined) {
delete process.env[key]
} else {
process.env[key] = value
}
}
return import('../env')
}
afterEach(() => {
vi.resetModules()
process.env = { ...originalEnv }
})
describe('env', () => {
test('defaults NODE_ENV to development and keeps empty optional values undefined', async () => {
const { env } = await loadEnv({
NEXT_PUBLIC_ADMIN_ACID_API_URL: '',
NEXT_PUBLIC_API_MODE: '',
NEXT_PUBLIC_CMS_URL: '',
NEXT_PUBLIC_SITE_URL: '',
NODE_ENV: '',
})
expect(env).toMatchObject({
NODE_ENV: 'development',
NEXT_PUBLIC_ADMIN_ACID_API_URL: undefined,
NEXT_PUBLIC_API_MODE: undefined,
NEXT_PUBLIC_CMS_URL: undefined,
NEXT_PUBLIC_SITE_URL: undefined,
})
})
test('accepts production API mode for metadata indexing gates', async () => {
const { env } = await loadEnv({
NEXT_PUBLIC_API_MODE: 'production',
NODE_ENV: 'production',
})
expect(env.NODE_ENV).toBe('production')
expect(env.NEXT_PUBLIC_API_MODE).toBe('production')
})
test('rejects invalid enum values at import time', async () => {
await expect(
loadEnv({
NEXT_PUBLIC_API_MODE: 'prod',
NODE_ENV: 'production',
})
).rejects.toThrow(/NEXT_PUBLIC_API_MODE="prod" is invalid/)
})
})