import { Environment, EnvironmentValues, getValueForEnvironment, } from '../get-value-for-environment'; describe(`[web-components] ${getValueForEnvironment.name}`, () => { const originalLocation = window.location; let values: EnvironmentValues & { [key: string]: string }; let hostname: string | undefined; let defaultEnvironment: Environment | undefined; const subject = () => getValueForEnvironment(values, defaultEnvironment, hostname); beforeAll(() => { Object.defineProperty(window, 'location', { configurable: true, value: new URL('https://example.com'), }); }); afterAll(() => { Object.defineProperty(window, 'location', { configurable: true, value: originalLocation, }); }); beforeEach(() => { values = { dev: 'dev-value', qa: 'qa-value', test: 'test-value' }; hostname = undefined; defaultEnvironment = undefined; process.env.NODE_ENV = 'production'; }); function itReturnsQAEnvironment() { test('returns id for "qa" environment', () => { expect(subject()).toBe(values.qa); }); } itReturnsQAEnvironment(); describe('when in test environment', () => { beforeEach(() => (process.env.NODE_ENV = 'test')); test('returns id for "test" environment', () => { expect(subject()).toBe(values.test); }); }); describe('with a default environment', () => { beforeEach(() => (defaultEnvironment = 'dev')); test('returns id for default environment', () => { expect(subject()).toBe(values[defaultEnvironment!]); }); }); describe.each(['127.0.0.1', 'localhost', 'app-web'])('when hostname contains "%s"', host => { beforeEach(() => (hostname = host)); test('returns id for "dev" environment', () => { expect(subject()).toBe(values.dev); }); }); describe('when hostname contains "{key}.servicetitan.com"', () => { const key = 'foo-bar'; beforeEach(() => { hostname = `${key}.servicetitan.com`; values = { [key]: 'key-value' }; }); test('returns key value', () => { expect(subject()).toBe(values[key]); }); }); describe('when hostname contains ".st.dev"', () => { beforeEach(() => (hostname = 'foo-bar-stage.st.dev')); itReturnsQAEnvironment(); describe('when key matches ".st.dev" domain', () => { const key = 'stage.st.dev'; beforeEach(() => (values = { [key]: 'key-value' })); test('returns key value', () => { expect(subject()).toBe(values[key]); }); }); }); });