crowdin-helper
Version:
Unofficial Crowdin client to automate continuous integration workflow
82 lines (64 loc) • 2.55 kB
JavaScript
jest.mock('fs');
describe('config-manager', () => {
const originalProcess = process;
const processExitMock = jest.fn((code) => {
throw new Error(`process exit ${code}`);
});
let consoleData = '';
const originalConsole = global.console;
const consoleLogMock = jest.fn((value) => (consoleData += value));
beforeEach(() => {
jest.resetModules();
global.console = {
...global.console,
log: consoleLogMock,
};
global.process = {
...global.process,
exit: processExitMock,
};
});
afterEach(() => {
global.process = originalProcess;
global.console = originalConsole;
});
test('read config file and fill all fields', () => {
const configManager = require('../../lib/utilities/config-manager');
configManager.init();
expect(configManager.get('projectId')).toBe('my-project-id');
expect(configManager.get('token')).toBe('my-personal-access-token');
expect(configManager.get('sourceFilesPattern')).toBe('**/en.json');
expect(configManager.get('translationPattern')).toBe(
'/sample-translation-folder/%two_letters_code%.json',
);
expect(configManager.get('languagesToCheck')).toStrictEqual(['nl', 'de']);
expect(configManager.get('languagesToAutoTranslate')).toEqual(['nl', 'fi']);
expect(configManager.get('minutesSinceLastMasterMergeToPurgeSafely')).toBe(20);
expect(configManager.get('disableAutoTranslation')).toBeFalsy();
});
test('read config file from the path', () => {
const configManager = require('../../lib/utilities/config-manager');
configManager.init('/path/to/crowdin-helper.json');
expect(configManager.get('projectId')).toBe('my-another-project-id');
});
test('should exit if not get a valid JSON', () => {
require('fs').__setMockConfigFileContent(null);
let configManager;
try {
configManager = require('../../lib/utilities/config-manager');
configManager.init();
} catch (e) {}
expect(configManager.get('projectId')).toBeUndefined();
expect(processExitMock).toHaveBeenCalledWith(1);
});
test('should report of all missing required props', () => {
const requiredProps = ['token', 'projectId', 'source', 'translation'];
require('fs').__setMockConfigFileContent(JSON.stringify({}));
try {
require('../../lib/utilities/config-manager').init();
} catch (e) {}
requiredProps.forEach((requiredProp) => {
expect(consoleData).toContain(`Error: ${requiredProp} is missing in crowdin-helper.json`);
});
});
});