Skip to content

Commit

Permalink
fix(config): validate config tools
Browse files Browse the repository at this point in the history
  • Loading branch information
hatemhosny committed May 22, 2023
1 parent c66b476 commit 0698f9f
Show file tree
Hide file tree
Showing 2 changed files with 193 additions and 5 deletions.
184 changes: 184 additions & 0 deletions src/livecodes/config/__tests__/validate-config.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -160,4 +160,188 @@ describe('validateConfig', () => {
const correctConfig = {};
expect(validateConfig(testConfig)).toEqual(correctConfig);
});

test('tools: invalid - obj', () => {
const testConfig = {
tools: { invalid: 'hi' },
} as any;

const correctConfig = {
tools: {
enabled: 'all',
status: '',
active: '',
},
};
expect(validateConfig(testConfig)).toEqual(correctConfig);
});

test('tools: empty', () => {
const testConfig = {
tools: {},
} as any;

const correctConfig = {
tools: {
enabled: 'all',
status: '',
active: '',
},
};
expect(validateConfig(testConfig)).toEqual(correctConfig);
});

test('tools: enabled all', () => {
const testConfig = {
tools: { enabled: 'all' },
} as any;

const correctConfig = {
tools: {
enabled: 'all',
status: '',
active: '',
},
};
expect(validateConfig(testConfig)).toEqual(correctConfig);
});

test('tools: enabled invalid', () => {
const testConfig = {
tools: { enabled: 'invalid' },
} as any;

const correctConfig = {
tools: {
enabled: 'all',
status: '',
active: '',
},
};
expect(validateConfig(testConfig)).toEqual(correctConfig);
});

test('tools: enabled console', () => {
const testConfig = {
tools: { enabled: ['console'] },
} as any;

const correctConfig = {
tools: {
enabled: ['console'],
status: '',
active: '',
},
};
expect(validateConfig(testConfig)).toEqual(correctConfig);
});

test('tools: enabled invalid array', () => {
const testConfig = {
tools: { enabled: ['myconsole'] },
} as any;

const correctConfig = {
tools: {
enabled: [],
status: '',
active: '',
},
};
expect(validateConfig(testConfig)).toEqual(correctConfig);
});

test('tools: enabled invalid item', () => {
const testConfig = {
tools: { enabled: ['console', 'compiled22'] },
} as any;

const correctConfig = {
tools: {
enabled: ['console'],
status: '',
active: '',
},
};
expect(validateConfig(testConfig)).toEqual(correctConfig);
});

test('tools: status none', () => {
const testConfig = {
tools: { status: 'none' },
} as any;

const correctConfig = {
tools: {
enabled: [],
status: 'none',
active: '',
},
};
expect(validateConfig(testConfig)).toEqual(correctConfig);
});

test('tools: active invalid', () => {
const testConfig = {
tools: { active: 'invalid' },
} as any;

const correctConfig = {
tools: {
enabled: 'all',
status: '',
active: '',
},
};
expect(validateConfig(testConfig)).toEqual(correctConfig);
});

test('tools: active not enabled', () => {
const testConfig = {
tools: {
enabled: ['console'],
status: '',
active: 'compiled',
},
} as any;

const correctConfig = {
tools: {
enabled: ['console'],
status: '',
active: '',
},
};
expect(validateConfig(testConfig)).toEqual(correctConfig);
});

test('tools: status valid', () => {
const testConfig = {
tools: { status: 'open' },
} as any;

const correctConfig = {
tools: {
enabled: 'all',
status: 'open',
active: '',
},
};
expect(validateConfig(testConfig)).toEqual(correctConfig);
});

test('tools: status invalid', () => {
const testConfig = {
tools: { status: 'invalid' },
} as any;

const correctConfig = {
tools: {
enabled: 'all',
status: '',
active: '',
},
};
expect(validateConfig(testConfig)).toEqual(correctConfig);
});
});
14 changes: 9 additions & 5 deletions src/livecodes/config/validate-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,18 @@ export const validateConfig = (config: Partial<Config>): Partial<Config> => {

const validateToolsProps = (x: Partial<Config['tools']>): Config['tools'] => ({
...defaultConfig.tools,
...(x && (x.enabled === 'all' || x.enabled?.every((t) => includes(tools, t)))
? { enabled: x.enabled }
: { enabled: defaultConfig.tools.enabled }),
...(x && Array.isArray(x.enabled)
? { enabled: x.enabled.filter((t) => tools.includes(t)) }
: {
...(x && x.enabled == null && x.status === 'none'
? { enabled: [] }
: { enabled: defaultConfig.tools.enabled }),
}),
...(x &&
x.active != null &&
includes(tools, x.active) &&
(x.enabled === 'all' ||
!x.enabled ||
(typeof x.enabled === 'string' ||
x.enabled == null ||
(Array.isArray(x.enabled) && includes(x.enabled, x.active)))
? { active: x.active }
: { active: defaultConfig.tools.active }),
Expand Down

0 comments on commit 0698f9f

Please sign in to comment.