import fs from 'fs'; import path from 'path'; import { RunMode } from '../../dataServer.types'; import { setConfig } from '../config'; import { ConfigOptions, NonSanitizedConfigOptions } from '../config.types'; import { InvalidRunMode, MissingDirectory, MissingRequiredOption, } from '../error'; describe('Config test', () => { describe('setConfig', () => { it('Returns correct config', () => { const testConfig: NonSanitizedConfigOptions = { dataDir: 'src/__tests__/fixtures/data/', workDir: 'src/__tests__/fixtures/work/', queryDir: 'src/__tests__/fixtures/query', hookDir: 'src/__tests__/fixtures/hook', taskDir: 'src/__tests__/fixtures/task', }; const expectedConfig = { dataDir: fs.realpathSync(path.resolve(testConfig.dataDir)), workDir: fs.realpathSync(path.resolve(testConfig.workDir)), queryDir: fs.realpathSync(path.resolve(testConfig.queryDir)), hookDir: fs.realpathSync(path.resolve(testConfig.hookDir)), taskDir: fs.realpathSync(path.resolve(testConfig.taskDir)), runMode: 'prod', }; expect(setConfig(testConfig)).toEqual(expectedConfig); }); it('Required option dataDir returns expected error', () => { const config = { runMode: RunMode.DEV, }; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(() => setConfig(config)).toThrow(MissingRequiredOption); }); it('wrong option runMode returns expected error', () => { const config = { dataDir: 'src/__tests__/fixtures/data/', runMode: 'xx', }; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore expect(() => setConfig(config)).toThrow(InvalidRunMode); }); it('Wrong dataDir returns expected error', () => { const config: ConfigOptions = { dataDir: 'non-existent-dir', runMode: RunMode.DEV, }; expect.assertions(2); try { setConfig(config); } catch (error) { expect(error).toBeInstanceOf(MissingDirectory); expect(error).toHaveProperty('directoryId', 'dataDir'); } }); it('Wrong workDir returns expected error', () => { const config: ConfigOptions = { dataDir: 'src/__tests__/fixtures/data/', workDir: 'non-existent-dir', runMode: RunMode.DEV, }; expect.assertions(2); try { setConfig(config); } catch (error) { expect(error).toBeInstanceOf(MissingDirectory); expect(error).toHaveProperty('directoryId', 'workDir'); } }); it('Wrong queryDir returns expected error', () => { const config: ConfigOptions = { dataDir: 'src/__tests__/fixtures/data/', queryDir: 'non-existent-dir', runMode: RunMode.DEV, }; expect.assertions(2); try { setConfig(config); } catch (error) { expect(error).toBeInstanceOf(MissingDirectory); expect(error).toHaveProperty('directoryId', 'queryDir'); } }); it('Wrong hookDir returns expected error', () => { const config = { dataDir: 'src/__tests__/fixtures/data/', hookDir: 'non-existent-dir', runMode: RunMode.DEV, }; expect.assertions(2); try { setConfig(config); } catch (error) { expect(error).toBeInstanceOf(MissingDirectory); expect(error).toHaveProperty('directoryId', 'hookDir'); } }); it('Wrong taskDir returns expected error', () => { const config = { dataDir: 'src/__tests__/fixtures/data/', taskDir: 'non-existent-dir', runMode: RunMode.DEV, }; expect.assertions(2); try { setConfig(config); } catch (error) { expect(error).toBeInstanceOf(MissingDirectory); expect(error).toHaveProperty('directoryId', 'taskDir'); } }); }); });