website refactor
This commit is contained in:
75
tests/unit/website/apiBaseUrl.test.ts
Normal file
75
tests/unit/website/apiBaseUrl.test.ts
Normal file
@@ -0,0 +1,75 @@
|
||||
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
||||
import { getWebsiteApiBaseUrl } from '../../../apps/website/lib/config/apiBaseUrl';
|
||||
|
||||
describe('getWebsiteApiBaseUrl()', () => {
|
||||
const originalEnv = process.env;
|
||||
|
||||
beforeEach(() => {
|
||||
vi.resetModules();
|
||||
process.env = { ...originalEnv };
|
||||
// Clear relevant env vars
|
||||
delete process.env.NEXT_PUBLIC_API_BASE_URL;
|
||||
delete process.env.API_BASE_URL;
|
||||
delete process.env.NODE_ENV;
|
||||
delete process.env.CI;
|
||||
delete process.env.DOCKER;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
process.env = originalEnv;
|
||||
vi.unstubAllGlobals();
|
||||
});
|
||||
|
||||
describe('Browser Context', () => {
|
||||
beforeEach(() => {
|
||||
vi.stubGlobal('window', {});
|
||||
});
|
||||
|
||||
it('should use NEXT_PUBLIC_API_BASE_URL if provided', () => {
|
||||
process.env.NEXT_PUBLIC_API_BASE_URL = 'https://api.example.com/';
|
||||
expect(getWebsiteApiBaseUrl()).toBe('https://api.example.com');
|
||||
});
|
||||
|
||||
it('should throw if missing env in test-like environment (CI)', () => {
|
||||
process.env.CI = 'true';
|
||||
expect(() => getWebsiteApiBaseUrl()).toThrow(/Missing NEXT_PUBLIC_API_BASE_URL/);
|
||||
});
|
||||
|
||||
it('should throw if missing env in test-like environment (DOCKER)', () => {
|
||||
process.env.DOCKER = 'true';
|
||||
expect(() => getWebsiteApiBaseUrl()).toThrow(/Missing NEXT_PUBLIC_API_BASE_URL/);
|
||||
});
|
||||
|
||||
it('should fallback to localhost in development (non-docker)', () => {
|
||||
process.env.NODE_ENV = 'development';
|
||||
expect(getWebsiteApiBaseUrl()).toBe('http://localhost:3001');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Server Context', () => {
|
||||
beforeEach(() => {
|
||||
vi.stubGlobal('window', undefined);
|
||||
});
|
||||
|
||||
it('should prioritize API_BASE_URL over NEXT_PUBLIC_API_BASE_URL', () => {
|
||||
process.env.API_BASE_URL = 'https://internal-api.example.com';
|
||||
process.env.NEXT_PUBLIC_API_BASE_URL = 'https://public-api.example.com';
|
||||
expect(getWebsiteApiBaseUrl()).toBe('https://internal-api.example.com');
|
||||
});
|
||||
|
||||
it('should use NEXT_PUBLIC_API_BASE_URL if API_BASE_URL is missing', () => {
|
||||
process.env.NEXT_PUBLIC_API_BASE_URL = 'https://public-api.example.com';
|
||||
expect(getWebsiteApiBaseUrl()).toBe('https://public-api.example.com');
|
||||
});
|
||||
|
||||
it('should throw if missing env in test-like environment (CI)', () => {
|
||||
process.env.CI = 'true';
|
||||
expect(() => getWebsiteApiBaseUrl()).toThrow(/Missing API_BASE_URL/);
|
||||
});
|
||||
|
||||
it('should fallback to api:3000 in production (non-test environment)', () => {
|
||||
process.env.NODE_ENV = 'production';
|
||||
expect(getWebsiteApiBaseUrl()).toBe('http://api:3000');
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user