veza/apps/web/src/config/env.test.ts

129 lines
3.8 KiB
TypeScript

import { describe, it, expect, beforeEach, vi } from 'vitest';
import { env } from './env';
describe('Environment Variables', () => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const originalEnv = import.meta.env;
beforeEach(() => {
// Reset import.meta.env
vi.resetModules();
});
it('should have default values when env variables are not set', () => {
// Mock empty env
Object.defineProperty(import.meta, 'env', {
value: {},
writable: true,
});
// Need to re-import after mocking
vi.resetModules();
const { env: testEnv } = require('./env');
expect(testEnv.API_URL).toBe('http://localhost:8080/api/v1');
expect(testEnv.WS_URL).toBe('ws://localhost:8081/ws');
expect(testEnv.STREAM_URL).toBe('http://localhost:8082');
expect(testEnv.UPLOAD_URL).toBe('http://localhost:8080/upload');
expect(testEnv.APP_NAME).toBe('Veza');
expect(testEnv.DEBUG).toBe(false);
expect(testEnv.USE_MSW).toBe(false);
});
it('should parse environment variables correctly', () => {
Object.defineProperty(import.meta, 'env', {
value: {
VITE_API_URL: 'https://api.example.com/v1',
VITE_WS_URL: 'wss://ws.example.com/ws',
VITE_STREAM_URL: 'https://stream.example.com/stream',
VITE_UPLOAD_URL: 'https://upload.example.com',
VITE_APP_NAME: 'Test App',
VITE_DEBUG: 'true',
VITE_USE_MSW: '1',
},
writable: true,
});
vi.resetModules();
const { env: testEnv } = require('./env');
expect(testEnv.API_URL).toBe('https://api.example.com/v1');
expect(testEnv.WS_URL).toBe('wss://ws.example.com');
expect(testEnv.STREAM_URL).toBe('https://stream.example.com');
expect(testEnv.UPLOAD_URL).toBe('https://upload.example.com');
expect(testEnv.APP_NAME).toBe('Test App');
expect(testEnv.DEBUG).toBe(true);
expect(testEnv.USE_MSW).toBe(true);
});
it('should parse DEBUG as boolean correctly', () => {
Object.defineProperty(import.meta, 'env', {
value: {
VITE_DEBUG: 'true',
},
writable: true,
});
vi.resetModules();
const { env: testEnv } = require('./env');
expect(testEnv.DEBUG).toBe(true);
Object.defineProperty(import.meta, 'env', {
value: {
VITE_DEBUG: 'false',
},
writable: true,
});
vi.resetModules();
const { env: testEnv2 } = require('./env');
expect(testEnv2.DEBUG).toBe(false);
});
it('should parse USE_MSW as boolean correctly', () => {
Object.defineProperty(import.meta, 'env', {
value: {
VITE_USE_MSW: '1',
},
writable: true,
});
vi.resetModules();
const { env: testEnv } = require('./env');
expect(testEnv.USE_MSW).toBe(true);
Object.defineProperty(import.meta, 'env', {
value: {
VITE_USE_MSW: '0',
},
writable: true,
});
vi.resetModules();
const { env: testEnv2 } = require('./env');
expect(testEnv2.USE_MSW).toBe(false);
});
it('should export env object with correct structure', () => {
expect(env).toHaveProperty('API_URL');
expect(env).toHaveProperty('WS_URL');
expect(env).toHaveProperty('STREAM_URL');
expect(env).toHaveProperty('UPLOAD_URL');
expect(env).toHaveProperty('APP_NAME');
expect(env).toHaveProperty('DEBUG');
expect(env).toHaveProperty('USE_MSW');
expect(env).toHaveProperty('FCM_VAPID_KEY');
});
it('should have correct types for env values', () => {
expect(typeof env.API_URL).toBe('string');
expect(typeof env.WS_URL).toBe('string');
expect(typeof env.STREAM_URL).toBe('string');
expect(typeof env.UPLOAD_URL).toBe('string');
expect(typeof env.APP_NAME).toBe('string');
expect(typeof env.DEBUG).toBe('boolean');
expect(typeof env.USE_MSW).toBe('boolean');
});
});