mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
add tests for list schemas
refs f9cb7eddda
refs elastic/security-team/issues/543
This commit is contained in:
parent
6a874c07e2
commit
b2cf2236b9
4 changed files with 150 additions and 0 deletions
|
@ -51,6 +51,7 @@ export const OPERATOR_EXCLUDED = 'excluded';
|
|||
export const ENTRY_VALUE = 'some host name';
|
||||
export const MATCH = 'match';
|
||||
export const MATCH_ANY = 'match_any';
|
||||
export const WILDCARD = 'wildcard';
|
||||
export const MAX_IMPORT_PAYLOAD_BYTES = 9000000;
|
||||
export const IMPORT_BUFFER_SIZE = 1000;
|
||||
export const LIST = 'list';
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
|
||||
import * as t from 'io-ts';
|
||||
|
||||
import { NonEmptyString } from '../../../shared_imports';
|
||||
import { operatorIncluded } from '../../common/schemas';
|
||||
|
||||
export const endpointEntryMatchWildcard = t.exact(
|
||||
t.type({
|
||||
field: NonEmptyString,
|
||||
operator: operatorIncluded,
|
||||
type: t.keyof({ wildcard: null }),
|
||||
value: NonEmptyString,
|
||||
})
|
||||
);
|
||||
export type EndpointEntryMatchWildcard = t.TypeOf<typeof endpointEntryMatchWildcard>;
|
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
|
||||
import { ENTRY_VALUE, FIELD, OPERATOR, WILDCARD } from '../../constants.mock';
|
||||
|
||||
import { EntryMatchWildcard } from './entry_match_wildcard';
|
||||
|
||||
export const getEntryMatchWildcardMock = (): EntryMatchWildcard => ({
|
||||
field: FIELD,
|
||||
operator: OPERATOR,
|
||||
type: WILDCARD,
|
||||
value: ENTRY_VALUE,
|
||||
});
|
||||
|
||||
export const getEntryMatchWildcardExcludeMock = (): EntryMatchWildcard => ({
|
||||
...getEntryMatchWildcardMock(),
|
||||
operator: 'excluded',
|
||||
});
|
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License
|
||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
|
||||
import { pipe } from 'fp-ts/lib/pipeable';
|
||||
import { left } from 'fp-ts/lib/Either';
|
||||
|
||||
import { foldLeftRight, getPaths } from '../../shared_imports';
|
||||
|
||||
import { getEntryMatchWildcardMock } from './entry_match_wildcard.mock';
|
||||
import { EntryMatchWildcard, entriesMatchWildcard } from './entry_match_wildcard';
|
||||
|
||||
describe('entriesMatchWildcard', () => {
|
||||
test('it should validate an entry', () => {
|
||||
const payload = getEntryMatchWildcardMock();
|
||||
const decoded = entriesMatchWildcard.decode(payload);
|
||||
const message = pipe(decoded, foldLeftRight);
|
||||
|
||||
expect(getPaths(left(message.errors))).toEqual([]);
|
||||
expect(message.schema).toEqual(payload);
|
||||
});
|
||||
|
||||
test('it should validate when operator is "included"', () => {
|
||||
const payload = getEntryMatchWildcardMock();
|
||||
const decoded = entriesMatchWildcard.decode(payload);
|
||||
const message = pipe(decoded, foldLeftRight);
|
||||
|
||||
expect(getPaths(left(message.errors))).toEqual([]);
|
||||
expect(message.schema).toEqual(payload);
|
||||
});
|
||||
|
||||
test('it should validate when "operator" is "excluded"', () => {
|
||||
const payload = getEntryMatchWildcardMock();
|
||||
payload.operator = 'excluded';
|
||||
const decoded = entriesMatchWildcard.decode(payload);
|
||||
const message = pipe(decoded, foldLeftRight);
|
||||
|
||||
expect(getPaths(left(message.errors))).toEqual([]);
|
||||
expect(message.schema).toEqual(payload);
|
||||
});
|
||||
|
||||
test('it should FAIL validation when "field" is empty string', () => {
|
||||
const payload: Omit<EntryMatchWildcard, 'field'> & { field: string } = {
|
||||
...getEntryMatchWildcardMock(),
|
||||
field: '',
|
||||
};
|
||||
const decoded = entriesMatchWildcard.decode(payload);
|
||||
const message = pipe(decoded, foldLeftRight);
|
||||
|
||||
expect(getPaths(left(message.errors))).toEqual(['Invalid value "" supplied to "field"']);
|
||||
expect(message.schema).toEqual({});
|
||||
});
|
||||
|
||||
test('it should FAIL validation when "value" is not string', () => {
|
||||
const payload: Omit<EntryMatchWildcard, 'value'> & { value: string[] } = {
|
||||
...getEntryMatchWildcardMock(),
|
||||
value: ['some value'],
|
||||
};
|
||||
const decoded = entriesMatchWildcard.decode(payload);
|
||||
const message = pipe(decoded, foldLeftRight);
|
||||
|
||||
expect(getPaths(left(message.errors))).toEqual([
|
||||
'Invalid value "["some value"]" supplied to "value"',
|
||||
]);
|
||||
expect(message.schema).toEqual({});
|
||||
});
|
||||
|
||||
test('it should FAIL validation when "value" is empty string', () => {
|
||||
const payload: Omit<EntryMatchWildcard, 'value'> & { value: string } = {
|
||||
...getEntryMatchWildcardMock(),
|
||||
value: '',
|
||||
};
|
||||
const decoded = entriesMatchWildcard.decode(payload);
|
||||
const message = pipe(decoded, foldLeftRight);
|
||||
|
||||
expect(getPaths(left(message.errors))).toEqual(['Invalid value "" supplied to "value"']);
|
||||
expect(message.schema).toEqual({});
|
||||
});
|
||||
|
||||
test('it should FAIL validation when "type" is not "wildcard"', () => {
|
||||
const payload: Omit<EntryMatchWildcard, 'type'> & { type: string } = {
|
||||
...getEntryMatchWildcardMock(),
|
||||
type: 'match',
|
||||
};
|
||||
const decoded = entriesMatchWildcard.decode(payload);
|
||||
const message = pipe(decoded, foldLeftRight);
|
||||
|
||||
expect(getPaths(left(message.errors))).toEqual(['Invalid value "match" supplied to "type"']);
|
||||
expect(message.schema).toEqual({});
|
||||
});
|
||||
|
||||
test('it should strip out extra keys', () => {
|
||||
const payload: EntryMatchWildcard & {
|
||||
extraKey?: string;
|
||||
} = getEntryMatchWildcardMock();
|
||||
payload.extraKey = 'some value';
|
||||
const decoded = entriesMatchWildcard.decode(payload);
|
||||
const message = pipe(decoded, foldLeftRight);
|
||||
|
||||
expect(getPaths(left(message.errors))).toEqual([]);
|
||||
expect(message.schema).toEqual(getEntryMatchWildcardMock());
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue