import { describe, it, expect } from 'vitest'; import { envSchema } from './env'; describe('envSchema', () => { it('should allow missing MAIL_HOST in development', () => { const result = envSchema.safeParse({ NEXT_PUBLIC_BASE_URL: 'http://localhost:3000', TARGET: 'development', }); expect(result.success).toBe(true); }); it('should require MAIL_HOST in production', () => { const result = envSchema.safeParse({ NEXT_PUBLIC_BASE_URL: 'https://example.com', TARGET: 'production', }); expect(result.success).toBe(false); if (!result.success) { expect(result.error.issues[0].message).toBe( 'MAIL_HOST is required in non-development environments', ); } }); it('should require MAIL_HOST in testing', () => { const result = envSchema.safeParse({ NEXT_PUBLIC_BASE_URL: 'https://testing.example.com', TARGET: 'testing', }); expect(result.success).toBe(false); if (!result.success) { expect(result.error.issues[0].message).toBe( 'MAIL_HOST is required in non-development environments', ); } }); it('should require MAIL_HOST in staging', () => { const result = envSchema.safeParse({ NEXT_PUBLIC_BASE_URL: 'https://staging.example.com', TARGET: 'staging', }); expect(result.success).toBe(false); if (!result.success) { expect(result.error.issues[0].message).toBe( 'MAIL_HOST is required in non-development environments', ); } }); it('should pass if MAIL_HOST is provided in production', () => { const result = envSchema.safeParse({ NEXT_PUBLIC_BASE_URL: 'https://example.com', TARGET: 'production', MAIL_HOST: 'smtp.example.com', }); expect(result.success).toBe(true); }); it('should skip MAIL_HOST requirement if SKIP_RUNTIME_ENV_VALIDATION is true', () => { process.env.SKIP_RUNTIME_ENV_VALIDATION = 'true'; const result = envSchema.safeParse({ NEXT_PUBLIC_BASE_URL: 'https://example.com', TARGET: 'production', }); expect(result.success).toBe(true); delete process.env.SKIP_RUNTIME_ENV_VALIDATION; }); });