[READ-ONLY] a fast, modern browser for the npm registry
at main 173 lines 4.6 kB view raw
1import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' 2 3const ALL_ENV_VARS = [ 4 'CONTEXT', 5 'VERCEL_ENV', 6 'URL', 7 'NUXT_ENV_VERCEL_URL', 8 'NUXT_ENV_VERCEL_PROJECT_PRODUCTION_URL', 9] 10 11describe('getPreviewUrl', () => { 12 beforeEach(() => { 13 // Reset consts evaluated at module init time 14 vi.resetModules() 15 }) 16 17 beforeEach(() => { 18 for (const envVar of ALL_ENV_VARS) { 19 vi.stubEnv(envVar, undefined) 20 } 21 }) 22 23 afterEach(() => { 24 vi.unstubAllEnvs() 25 }) 26 27 it('returns `undefined` if no known preview env is detected', async () => { 28 const { getPreviewUrl } = await import('../../../config/env') 29 30 expect(getPreviewUrl()).toBeUndefined() 31 }) 32 33 it.each([ 34 ['Netlify production', { CONTEXT: 'production', URL: 'https://prod.example.com' }], 35 ['Vercel production', { VERCEL_ENV: 'production', NUXT_ENV_VERCEL_URL: 'prod.example.com' }], 36 ])('%s environment returns `undefined`', async (_name, envVars) => { 37 for (const [key, value] of Object.entries(envVars)) { 38 vi.stubEnv(key, value) 39 } 40 const { getPreviewUrl } = await import('../../../config/env') 41 42 expect(getPreviewUrl()).toBeUndefined() 43 }) 44 45 it.each([ 46 ['Netlify dev', { CONTEXT: 'dev', URL: 'https://dev.example.com' }, 'https://dev.example.com'], 47 [ 48 'Netlify deploy-preview', 49 { 50 CONTEXT: 'deploy-preview', 51 URL: 'https://preview.example.com', 52 }, 53 'https://preview.example.com', 54 ], 55 [ 56 'Netlify branch-deploy', 57 { CONTEXT: 'branch-deploy', URL: 'https://beta.example.com' }, 58 'https://beta.example.com', 59 ], 60 [ 61 'Netlify preview-server', 62 { 63 CONTEXT: 'preview-server', 64 URL: 'https://my-feat--preview.example.com', 65 }, 66 'https://my-feat--preview.example.com', 67 ], 68 [ 69 'Vercel development', 70 { VERCEL_ENV: 'development', NUXT_ENV_VERCEL_URL: 'dev.example.com' }, 71 'https://dev.example.com', 72 ], 73 [ 74 'Vercel preview', 75 { VERCEL_ENV: 'preview', NUXT_ENV_VERCEL_URL: 'preview.example.com' }, 76 'https://preview.example.com', 77 ], 78 ])('%s environment returns preview URL', async (_name, envVars, expectedUrl) => { 79 for (const [key, value] of Object.entries(envVars)) { 80 vi.stubEnv(key, value) 81 } 82 83 const { getPreviewUrl } = await import('../../../config/env') 84 85 expect(getPreviewUrl()).toBe(expectedUrl) 86 }) 87}) 88 89describe('getProductionUrl', () => { 90 beforeEach(() => { 91 // Reset consts evaluated at module init time 92 vi.resetModules() 93 }) 94 95 beforeEach(() => { 96 for (const envVar of ALL_ENV_VARS) { 97 vi.stubEnv(envVar, undefined) 98 } 99 }) 100 101 afterEach(() => { 102 vi.unstubAllEnvs() 103 }) 104 105 it('returns `undefined` if no known production env is detected', async () => { 106 const { getProductionUrl } = await import('../../../config/env') 107 108 expect(getProductionUrl()).toBeUndefined() 109 }) 110 111 it.each([ 112 ['Netlify dev', { CONTEXT: 'dev', URL: 'https://dev.example.com' }], 113 [ 114 'Netlify deploy-preview', 115 { 116 CONTEXT: 'deploy-preview', 117 URL: 'https://preview.example.com', 118 }, 119 ], 120 ['Netlify branch-deploy', { CONTEXT: 'branch-deploy', URL: 'https://beta.example.com' }], 121 [ 122 'Netlify preview-server', 123 { 124 CONTEXT: 'preview-server', 125 URL: 'https://my-feat--preview.example.com', 126 }, 127 ], 128 [ 129 'Vercel development', 130 { 131 VERCEL_ENV: 'development', 132 NUXT_ENV_VERCEL_PROJECT_PRODUCTION_URL: 'dev.example.com', 133 }, 134 ], 135 [ 136 'Vercel preview', 137 { 138 VERCEL_ENV: 'preview', 139 NUXT_ENV_VERCEL_PROJECT_PRODUCTION_URL: 'preview.example.com', 140 }, 141 ], 142 ])('%s environment returns `undefined`', async (_name, envVars) => { 143 for (const [key, value] of Object.entries(envVars)) { 144 vi.stubEnv(key, value) 145 } 146 const { getProductionUrl } = await import('../../../config/env') 147 148 expect(getProductionUrl()).toBeUndefined() 149 }) 150 151 it.each([ 152 [ 153 'Netlify production', 154 { CONTEXT: 'production', URL: 'https://prod.example.com' }, 155 'https://prod.example.com', 156 ], 157 [ 158 'Vercel production', 159 { 160 VERCEL_ENV: 'production', 161 NUXT_ENV_VERCEL_PROJECT_PRODUCTION_URL: 'prod.example.com', 162 }, 163 'https://prod.example.com', 164 ], 165 ])('%s environment returns production URL', async (_name, envVars, expectedUrl) => { 166 for (const [key, value] of Object.entries(envVars)) { 167 vi.stubEnv(key, value) 168 } 169 const { getProductionUrl } = await import('../../../config/env') 170 171 expect(getProductionUrl()).toBe(expectedUrl) 172 }) 173})