Skip to content

Commit

Permalink
config unit test (#566)
Browse files Browse the repository at this point in the history
  • Loading branch information
VICTOR RAPHAEL BRAGA DE SALES MASCARENHAS authored and KiranNiranjan committed Mar 19, 2019
1 parent 27de23d commit 99d38d9
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 0 deletions.
6 changes: 6 additions & 0 deletions spec/__mocks__/electron.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ const mockIdleTime: number = 15;
const appName: string = 'Symphony';
const executableName: string = '/Symphony.exe';
const isReady: boolean = true;
const version: string = '4.0.0';
interface IApp {
getAppPath(): string;
getPath(type: string): string;
getName(): string;
isReady(): boolean;
getVersion(): string;
}
interface IIpcMain {
on(event: any, cb: any): void;
Expand Down Expand Up @@ -38,10 +40,14 @@ const app: IApp = {
if (type === 'exe') {
return path.join(pathToConfigDir(), executableName);
}
if (type === 'userData') {
return path.join(pathToConfigDir(), '/../config');
}
return pathToConfigDir();
},
getName: () => appName,
isReady: () => isReady,
getVersion: () => version,
};

// simple ipc mocks for render and main process ipc using
Expand Down
128 changes: 128 additions & 0 deletions spec/config.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
import * as fs from 'fs';
import * as os from 'os';
import * as path from 'path';
import { IConfig } from '../src/app/config-handler';

describe('config', () => {
const configFileName: string = 'Symphony.config';
let userConfigDir: string;
let globalConfigDir: string;
let configInstance: any;

const createTempGlobalConfig = (fileName: string): string => {
const tmpDir = os.tmpdir();
return path.join(fs.mkdtempSync(path.join(tmpDir, 'config-')), fileName);
};

const createTempUserConfig = (fileName: string): string => {
const tmpDir = os.tmpdir();
return path.join(fs.mkdtempSync(path.join(tmpDir, 'user-')), fileName);
};

// write data in global config created
const writeConfigFile = (data: object): void => {
fs.writeFileSync(globalConfigDir, JSON.stringify(data));
};

// write data in user config created
const writeUserFile = (data: object): void => {
fs.writeFileSync(userConfigDir, JSON.stringify(data));
};

beforeEach(() => {
const { config } = require('../src/app/config-handler');

globalConfigDir = createTempGlobalConfig(configFileName);
userConfigDir = createTempUserConfig(configFileName);

configInstance = config;
jest.resetModules();
});

describe('getConfigFields', () => {
it('should fail when field not present in either user or global config', () => {
const fieldMock: string[] = ['no-url'];
const globalConfig: object = { url: 'test' };
const userConfig: object = { configVersion: '4.0.1' };

// creating temp file
writeConfigFile(globalConfig);
writeUserFile(userConfig);

// changing path from /Users/.../SymphonyElectron/config/Symphony.config to temp path
configInstance.globalConfigPath = globalConfigDir;
configInstance.userConfigPath = userConfigDir;
configInstance.readGlobalConfig();
configInstance.readUserConfig();

const configField: IConfig = configInstance.getConfigFields(fieldMock);
expect(configField).toEqual({});
});

it('should succeed when only present in user config', () => {
const fieldMock: string[] = ['url'];
const globalConfig: object = { url: 'something' };
const userConfig: object = { configVersion: '4.0.1' };

writeConfigFile(globalConfig);
writeUserFile(userConfig);

configInstance.globalConfigPath = globalConfigDir;
configInstance.userConfigPath = userConfigDir;

configInstance.readUserConfig();
configInstance.readGlobalConfig();

const configField: IConfig = configInstance.getConfigFields(fieldMock);

expect(configField.url).toBe('something');
});

it('should fail when config path is invalid', () => {
const userConfig: object = { url: 'test' };
let isInvalidPath: boolean = false;
writeConfigFile(userConfig);

configInstance.globalConfigPath = '//';
try {
configInstance.readGlobalConfig();
} catch (e) {
isInvalidPath = true;
}
expect(isInvalidPath).toBeTruthy();
});
});

describe('updateConfig', () => {
it('should overwrite existing field', () => {
const userConfig: object = { configVersion: '4.0.0' };
const overwriteUserConfig: object = { configVersion: '4.0.1' };
writeUserFile(userConfig);

configInstance.userConfigPath = userConfigDir;
configInstance.readUserConfig();

configInstance.updateUserConfig(overwriteUserConfig);
expect(configInstance.userConfig.configVersion).toBe('4.0.1');
});

it('should add new field', () => {
const userConfig: object = { configVersion: '4.0.0' };
const newValue: object = { test: 'test' };

writeUserFile(userConfig);

configInstance.userConfigPath = userConfigDir;
configInstance.readUserConfig();

configInstance.updateUserConfig(newValue);
expect(configInstance.userConfig).toEqual({ configVersion: '4.0.0', test: 'test' });
});

it('should fail when invalid path is used', () => {
configInstance.userConfigPath = '//';

return expect(configInstance.readUserConfig()).rejects.toBeTruthy();
});
});
});

0 comments on commit 99d38d9

Please sign in to comment.