import * as path from 'path'; import { EnvConfigSettingsFileLoader } from '../../src'; import { configRootsDir } from '../helpers'; describe('EnvConfigFileSettingsLoader', () => { const baseNameAsFileRoot = path.join(configRootsDir, 'baseNameAsFile'); const baseNameAsDirRoot = path.join(configRootsDir, 'baseNameAsDir'); const mergedRoot = path.join(configRootsDir, 'merged'); const refsRoot = path.join(configRootsDir, 'refs'); it('Should load settings file directly from path', async () => { const filePath = path.join(baseNameAsFileRoot, 'settings.yaml'); const loader = new EnvConfigSettingsFileLoader(filePath); const settings = await loader.load(); expect(settings).toHaveProperty('base'); expect(settings.base).toHaveProperty('setting1', 'value1'); }); it('Should load settings file defined with file named with baseName', async () => { const loader = new EnvConfigSettingsFileLoader(baseNameAsFileRoot, 'settings'); const settings = await loader.load(); expect(settings).toHaveProperty('base'); expect(settings.base).toHaveProperty('setting1', 'value1'); }); it('Should load settings file defined with directory named with baseName and file named base', async () => { const loader = new EnvConfigSettingsFileLoader(baseNameAsDirRoot, 'settings'); const settings = await loader.load(); expect(settings).toHaveProperty('base'); expect(settings.base).toHaveProperty('setting1', 'value1'); }); it('Should load settings from base and file with baseName development when NODE_ENV = development, along with defined environment variables', async () => { process.env.NODE_ENV = 'development'; const loader = new EnvConfigSettingsFileLoader(mergedRoot, 'settings'); const settings = await loader.load(); expect(settings).toHaveProperty('base'); expect(settings).toHaveProperty('nodeEnv'); expect(settings.nodeEnv).toHaveProperty('development'); expect(settings.base).toHaveProperty('setting1', 'baseValue1'); expect(settings.nodeEnv.development).toHaveProperty('setting2', 'devValue2'); expect(settings.envVars).toHaveProperty('setting3', 'TEST_SETTING_3'); }); it('Should load settings from base and file with baseName production when NODE_ENV = production, along with defined environment variables', async () => { process.env.NODE_ENV = 'production'; const loader = new EnvConfigSettingsFileLoader(mergedRoot, 'settings'); const settings = await loader.load(); expect(settings).toHaveProperty('base'); expect(settings).toHaveProperty('nodeEnv'); expect(settings.nodeEnv).toHaveProperty('production'); expect(settings.base).toHaveProperty('setting1', 'baseValue1'); expect(settings.nodeEnv.production).toHaveProperty('setting2', 'prodValue2'); expect(settings.nodeEnv.development).toBeFalsy(); expect(settings.envVars).toHaveProperty('setting3', 'TEST_SETTING_3'); }); });