Upgrade to Jest 23.5.0 (#22791) (#22846)

I'd really like to upgrade to Typescript 3 for its `unknown` type, but we need to upgrade to `jest@23` to support a recent version of `ts-jest@23`.

The [jest changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md) breaks down the breaking changes in 23.x, but I found it to be slightly incomplete so I've broken down the changes that actually caused breaks for us here, and addressed each in individual commits to make review a little easier:

- the `testURL` config default was changed from `about:blank` to `http://localhost`
    - this cause some XHR requests powered by JSdom to start failing. It seems these requests just do nothing in master but start to fail when JSdom is initialized with an actual URL... I think we would ideally stop sending meaningless XHR requests in the tests, but it was a lot easier to just set the config to `about:blank` for now, and we can worry about cleanup later if necessary
- `expect(...).toThrow()` only passes if an actual error was thrown.
     - In two places in the index pattern code we were throwing strings, which broke the assertions. Fortunately/Unfortunately the errors are not being consumed by anything, so I was able to wrap them in `new Error()` without causing any issues.
- snapshots of mock functions now include a `results` array, detailing the return values of the function
- React fragments are now serialized as `<React.Fragment>` instead of `<UNDEFINED>`
- undefined props in React components are now stripped from snapshots
- minor changes to the ordering of mocks, imports resolution, and before hooks caused the uiSettings API tests to start breaking, but I'm replacing them with totally new tests in #22694 so I just deleted them here
- mocks created with `jest.spyOn()` that are restored now have their `mock.calls` reset, so some of the kbn-pm tests stated failing. This was fixed by restoring them with `jest.restoreAllMocks()` rather than trying to do it before the assertions
This commit is contained in:
Spencer 2018-09-07 20:30:49 -07:00 committed by GitHub
parent a9f06c0595
commit 9a7fa9a938
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
29 changed files with 939 additions and 1082 deletions

View file

@ -241,7 +241,7 @@
"@types/glob": "^5.0.35",
"@types/hapi-latest": "npm:@types/hapi@17.0.12",
"@types/has-ansi": "^3.0.0",
"@types/jest": "^22.2.3",
"@types/jest": "^23.3.1",
"@types/joi": "^10.4.4",
"@types/jquery": "3.3.1",
"@types/js-yaml": "^3.11.1",
@ -260,7 +260,7 @@
"@types/type-detect": "^4.0.1",
"angular-mocks": "1.4.7",
"babel-eslint": "8.1.2",
"babel-jest": "^22.4.3",
"babel-jest": "^23.4.2",
"backport": "4.2.0",
"chai": "3.5.0",
"chance": "1.0.10",
@ -276,7 +276,7 @@
"eslint-config-prettier": "^2.9.0",
"eslint-plugin-babel": "4.1.2",
"eslint-plugin-import": "2.8.0",
"eslint-plugin-jest": "^21.6.2",
"eslint-plugin-jest": "^21.22.0",
"eslint-plugin-mocha": "4.11.0",
"eslint-plugin-no-unsanitized": "^3.0.2",
"eslint-plugin-prefer-object-spread": "1.2.1",
@ -301,8 +301,8 @@
"husky": "0.8.1",
"image-diff": "1.6.0",
"istanbul-instrumenter-loader": "3.0.0",
"jest": "^22.4.3",
"jest-cli": "^22.4.3",
"jest": "^23.5.0",
"jest-cli": "^23.5.0",
"jest-raw-loader": "^1.0.1",
"jimp": "0.2.28",
"jsdom": "9.9.1",
@ -338,7 +338,7 @@
"supertest": "^3.1.0",
"supertest-as-promised": "^4.0.2",
"tree-kill": "^1.1.0",
"ts-jest": "^22.4.6",
"ts-jest": "^23.1.4",
"ts-loader": "^3.5.0",
"ts-node": "^6.0.3",
"tslint": "^5.10.0",

View file

@ -19,7 +19,7 @@
"eslint": "^4.1.0",
"eslint-plugin-babel": "^4.1.1",
"eslint-plugin-import": "^2.6.0",
"eslint-plugin-jest": "^21.0.0",
"eslint-plugin-jest": "^21.22.0",
"eslint-plugin-mocha": "^4.9.0",
"eslint-plugin-no-unsanitized": "^3.0.2",
"eslint-plugin-prefer-object-spread": "^1.2.1",

View file

@ -24,7 +24,7 @@
"eslint": "^4.11.0",
"eslint-plugin-babel": "^4.1.1",
"eslint-plugin-import": "^2.3.0",
"eslint-plugin-jest": "^21.3.2",
"eslint-plugin-jest": "^21.22.0",
"eslint-plugin-mocha": "^4.9.0",
"eslint-plugin-no-unsanitized": "^3.0.2",
"eslint-plugin-prefer-object-spread": "^1.2.1",

View file

@ -20,7 +20,7 @@
"@types/globby": "^6.1.0",
"@types/has-ansi": "^3.0.0",
"@types/indent-string": "^3.0.0",
"@types/jest": "^22.1.3",
"@types/jest": "^23.3.1",
"@types/lodash.clonedeepwith": "^4.5.3",
"@types/log-symbols": "^2.0.0",
"@types/mkdirp": "^0.5.2",

View file

@ -53,6 +53,7 @@ const noop = () => {
afterEach(() => {
jest.resetAllMocks();
jest.restoreAllMocks();
});
test('handles dependencies of dependencies', async () => {
@ -96,8 +97,6 @@ test('handles dependencies of dependencies', async () => {
rootPath: '',
});
logMock.mockRestore();
expect(mockInstallInDir.mock.calls).toMatchSnapshot('install in dir');
expect(logMock.mock.calls).toMatchSnapshot('logs');
});
@ -127,8 +126,6 @@ test('does not run installer if no deps in package', async () => {
rootPath: '',
});
logMock.mockRestore();
expect(mockInstallInDir.mock.calls).toMatchSnapshot('install in dir');
expect(logMock.mock.calls).toMatchSnapshot('logs');
});
@ -143,7 +140,7 @@ test('handles "frozen-lockfile"', async () => {
const projects = new Map([['kibana', kibana]]);
const projectGraph = buildProjectGraph(projects);
const logMock = jest.spyOn(console, 'log').mockImplementation(noop);
jest.spyOn(console, 'log').mockImplementation(noop);
await BootstrapCommand.run(projects, projectGraph, {
extraArgs: [],
@ -153,8 +150,6 @@ test('handles "frozen-lockfile"', async () => {
rootPath: '',
});
logMock.mockRestore();
expect(mockInstallInDir.mock.calls).toMatchSnapshot('install in dir');
});
@ -177,7 +172,7 @@ test('calls "kbn:bootstrap" scripts and links executables after installing deps'
const projects = new Map([['kibana', kibana], ['bar', bar]]);
const projectGraph = buildProjectGraph(projects);
const logMock = jest.spyOn(console, 'log').mockImplementation(noop);
jest.spyOn(console, 'log').mockImplementation(noop);
await BootstrapCommand.run(projects, projectGraph, {
extraArgs: [],
@ -185,8 +180,6 @@ test('calls "kbn:bootstrap" scripts and links executables after installing deps'
rootPath: '',
});
logMock.mockRestore();
expect(mockLinkProjectExecutables.mock.calls).toMatchSnapshot('link bins');
expect(mockRunScriptInPackageStreaming.mock.calls).toMatchSnapshot('script');
});

View file

@ -81,6 +81,7 @@ expect.addSnapshotSerializer(stripAnsiSnapshotSerializer);
afterEach(() => {
jest.resetAllMocks();
jest.restoreAllMocks();
});
describe('bin script points nowhere', () => {
@ -102,7 +103,6 @@ describe('bin script points to a file', () => {
// noop
});
await linkProjectExecutables(projectsByName, projectGraph);
logMock.mockRestore();
expect(getFsMockCalls()).toMatchSnapshot('fs module calls');
expect(logMock.mock.calls).toMatchSnapshot('logs');

View file

@ -70,9 +70,9 @@
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/indent-string/-/indent-string-3.0.0.tgz#9ebb391ceda548926f5819ad16405349641b999f"
"@types/jest@^22.1.3":
version "22.1.3"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-22.1.3.tgz#25da391935e6fac537551456f077ce03144ec168"
"@types/jest@^23.3.1":
version "23.3.1"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.1.tgz#a4319aedb071d478e6f407d1c4578ec8156829cf"
"@types/lodash.clonedeepwith@^4.5.3":
version "4.5.3"

View file

@ -10,7 +10,7 @@
"kbn:bootstrap": "yarn build"
},
"devDependencies": {
"@types/jest": "^22.2.2",
"@types/jest": "^23.3.1",
"typescript": "^2.9.2"
}
}

View file

@ -2,9 +2,9 @@
# yarn lockfile v1
"@types/jest@^22.2.2":
version "22.2.2"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-22.2.2.tgz#afe5dacbd00d65325f52da0ed3e76e259629ac9d"
"@types/jest@^23.3.1":
version "23.3.1"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.1.tgz#a4319aedb071d478e6f407d1c4578ec8156829cf"
typescript@^2.9.2:
version "2.9.2"

View file

@ -32,6 +32,12 @@ Array [
"starting legacy service",
],
],
"results": Array [
Object {
"isThrow": false,
"value": undefined,
},
],
},
"error": [MockFunction],
"fatal": [MockFunction],

View file

@ -29,11 +29,11 @@ exports[`Inspector Data View component should render empty state 1`] = `
>
<EuiEmptyPrompt
body={
<UNDEFINED>
<React.Fragment>
<p>
The element did not provide any data.
</p>
</UNDEFINED>
</React.Fragment>
}
iconColor="subdued"
title={

View file

@ -212,7 +212,7 @@ exports[`after fetch renders call to action when no dashboards exist 1`] = `
</EuiButton>
}
body={
<UNDEFINED>
<React.Fragment>
<p>
You can combine data views from any Kibana app into one dashboard and see everything in one place.
</p>
@ -227,7 +227,7 @@ exports[`after fetch renders call to action when no dashboards exist 1`] = `
</EuiLink>
to take a test drive.
</p>
</UNDEFINED>
</React.Fragment>
}
iconColor="subdued"
iconType="dashboardApp"

View file

@ -55,8 +55,6 @@ exports[`render 1`] = `
}
paramValues={Object {}}
replaceTemplateStrings={[Function]}
textPost={undefined}
textPre={undefined}
/>,
"key": 0,
"title": "step 1",
@ -70,8 +68,6 @@ exports[`render 1`] = `
}
paramValues={Object {}}
replaceTemplateStrings={[Function]}
textPost={undefined}
textPre={undefined}
/>,
"key": 1,
"title": "step 2",
@ -137,8 +133,6 @@ exports[`statusCheckState checking status 1`] = `
}
paramValues={Object {}}
replaceTemplateStrings={[Function]}
textPost={undefined}
textPre={undefined}
/>,
"key": 0,
"title": "step 1",
@ -152,14 +146,12 @@ exports[`statusCheckState checking status 1`] = `
}
paramValues={Object {}}
replaceTemplateStrings={[Function]}
textPost={undefined}
textPre={undefined}
/>,
"key": 1,
"title": "step 2",
},
Object {
"children": <UNDEFINED>
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
@ -196,7 +188,7 @@ exports[`statusCheckState checking status 1`] = `
<EuiSpacer
size="s"
/>
</UNDEFINED>,
</React.Fragment>,
"key": "checkStatusStep",
"status": "incomplete",
"title": "custom title",
@ -262,8 +254,6 @@ exports[`statusCheckState failed status check - error 1`] = `
}
paramValues={Object {}}
replaceTemplateStrings={[Function]}
textPost={undefined}
textPre={undefined}
/>,
"key": 0,
"title": "step 1",
@ -277,14 +267,12 @@ exports[`statusCheckState failed status check - error 1`] = `
}
paramValues={Object {}}
replaceTemplateStrings={[Function]}
textPost={undefined}
textPre={undefined}
/>,
"key": 1,
"title": "step 2",
},
Object {
"children": <UNDEFINED>
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
@ -326,7 +314,7 @@ exports[`statusCheckState failed status check - error 1`] = `
size="m"
title="custom error msg"
/>
</UNDEFINED>,
</React.Fragment>,
"key": "checkStatusStep",
"status": "danger",
"title": "custom title",
@ -392,8 +380,6 @@ exports[`statusCheckState failed status check - no data 1`] = `
}
paramValues={Object {}}
replaceTemplateStrings={[Function]}
textPost={undefined}
textPre={undefined}
/>,
"key": 0,
"title": "step 1",
@ -407,14 +393,12 @@ exports[`statusCheckState failed status check - no data 1`] = `
}
paramValues={Object {}}
replaceTemplateStrings={[Function]}
textPost={undefined}
textPre={undefined}
/>,
"key": 1,
"title": "step 2",
},
Object {
"children": <UNDEFINED>
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
@ -456,7 +440,7 @@ exports[`statusCheckState failed status check - no data 1`] = `
size="m"
title="custom error msg"
/>
</UNDEFINED>,
</React.Fragment>,
"key": "checkStatusStep",
"status": "warning",
"title": "custom title",
@ -522,8 +506,6 @@ exports[`statusCheckState initial state - no check has been attempted 1`] = `
}
paramValues={Object {}}
replaceTemplateStrings={[Function]}
textPost={undefined}
textPre={undefined}
/>,
"key": 0,
"title": "step 1",
@ -537,14 +519,12 @@ exports[`statusCheckState initial state - no check has been attempted 1`] = `
}
paramValues={Object {}}
replaceTemplateStrings={[Function]}
textPost={undefined}
textPre={undefined}
/>,
"key": 1,
"title": "step 2",
},
Object {
"children": <UNDEFINED>
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
@ -581,7 +561,7 @@ exports[`statusCheckState initial state - no check has been attempted 1`] = `
<EuiSpacer
size="s"
/>
</UNDEFINED>,
</React.Fragment>,
"key": "checkStatusStep",
"status": "incomplete",
"title": "custom title",
@ -647,8 +627,6 @@ exports[`statusCheckState successful status check 1`] = `
}
paramValues={Object {}}
replaceTemplateStrings={[Function]}
textPost={undefined}
textPre={undefined}
/>,
"key": 0,
"title": "step 1",
@ -662,14 +640,12 @@ exports[`statusCheckState successful status check 1`] = `
}
paramValues={Object {}}
replaceTemplateStrings={[Function]}
textPost={undefined}
textPre={undefined}
/>,
"key": 1,
"title": "step 2",
},
Object {
"children": <UNDEFINED>
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
@ -711,7 +687,7 @@ exports[`statusCheckState successful status check 1`] = `
size="m"
title="custom success msg"
/>
</UNDEFINED>,
</React.Fragment>,
"key": "checkStatusStep",
"status": "complete",
"title": "custom title",

View file

@ -130,6 +130,84 @@ exports[`bulkCreate should display error message when bulkCreate request fails 1
},
],
],
"results": Array [
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
Object {
"isThrow": false,
"value": "Imports index pattern, visualizations and pre-defined dashboards.",
},
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
Object {
"isThrow": false,
"value": "Imports index pattern, visualizations and pre-defined dashboards.",
},
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
Object {
"isThrow": false,
"value": "Imports index pattern, visualizations and pre-defined dashboards.",
},
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
Object {
"isThrow": false,
"value": "{savedObjectsLength} saved objects successfully added",
},
Object {
"isThrow": false,
"value": "Imports index pattern, visualizations and pre-defined dashboards.",
},
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
Object {
"isThrow": false,
"value": "Imports index pattern, visualizations and pre-defined dashboards.",
},
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
Object {
"isThrow": false,
"value": "Imports index pattern, visualizations and pre-defined dashboards.",
},
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
Object {
"isThrow": false,
"value": "Request failed, Error: {message}",
},
Object {
"isThrow": false,
"value": "Imports index pattern, visualizations and pre-defined dashboards.",
},
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
],
},
"formatNumber": [MockFunction],
"formatPlural": [MockFunction],
@ -155,7 +233,7 @@ exports[`bulkCreate should display error message when bulkCreate request fails 1
steps={
Array [
Object {
"children": <UNDEFINED>
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
@ -203,7 +281,7 @@ exports[`bulkCreate should display error message when bulkCreate request fails 1
size="m"
title="Request failed, Error: {message}"
/>
</UNDEFINED>,
</React.Fragment>,
"key": "installStep",
"status": "incomplete",
"title": "Load Kibana objects",
@ -439,6 +517,52 @@ exports[`bulkCreate should display success message when bulkCreate is successful
},
],
],
"results": Array [
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
Object {
"isThrow": false,
"value": "Imports index pattern, visualizations and pre-defined dashboards.",
},
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
Object {
"isThrow": false,
"value": "Imports index pattern, visualizations and pre-defined dashboards.",
},
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
Object {
"isThrow": false,
"value": "Imports index pattern, visualizations and pre-defined dashboards.",
},
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
Object {
"isThrow": false,
"value": "{savedObjectsLength} saved objects successfully added",
},
Object {
"isThrow": false,
"value": "Imports index pattern, visualizations and pre-defined dashboards.",
},
Object {
"isThrow": false,
"value": "Load Kibana objects",
},
],
},
"formatNumber": [MockFunction],
"formatPlural": [MockFunction],
@ -464,7 +588,7 @@ exports[`bulkCreate should display success message when bulkCreate is successful
steps={
Array [
Object {
"children": <UNDEFINED>
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
@ -512,7 +636,7 @@ exports[`bulkCreate should display success message when bulkCreate is successful
size="m"
title="{savedObjectsLength} saved objects successfully added"
/>
</UNDEFINED>,
</React.Fragment>,
"key": "installStep",
"status": "complete",
"title": "Load Kibana objects",
@ -716,7 +840,7 @@ exports[`renders 1`] = `
steps={
Array [
Object {
"children": <UNDEFINED>
"children": <React.Fragment>
<EuiFlexGroup
alignItems="center"
component="div"
@ -758,7 +882,7 @@ exports[`renders 1`] = `
<EuiSpacer
size="s"
/>
</UNDEFINED>,
</React.Fragment>,
"key": "installStep",
"status": "incomplete",
"title": "Load Kibana objects",

View file

@ -80,7 +80,7 @@ describe('getIndices', () => {
it('should throw exceptions', async () => {
const es = {
search: () => { throw 'Fail'; }
search: () => { throw new Error('Fail'); }
};
await expect(getIndices(es, 'kibana', 1)).rejects.toThrow();

View file

@ -42,7 +42,7 @@ export async function getIndices(es, rawPattern, limit) {
// We need to always provide a limit and not rely on the default
if (!limit) {
throw '`getIndices()` was called without the required `limit` parameter.';
throw new Error('`getIndices()` was called without the required `limit` parameter.');
}
const params = {

View file

@ -18,6 +18,12 @@ exports[`SourceFiltersTable should add a filter 1`] = `
"calls": Array [
Array [],
],
"results": Array [
Object {
"isThrow": false,
"value": undefined,
},
],
},
"sourceFilters": Array [
Object {
@ -106,6 +112,12 @@ exports[`SourceFiltersTable should remove a filter 1`] = `
"calls": Array [
Array [],
],
"results": Array [
Object {
"isThrow": false,
"value": undefined,
},
],
},
"sourceFilters": Array [
Object {
@ -308,6 +320,12 @@ exports[`SourceFiltersTable should update a filter 1`] = `
"calls": Array [
Array [],
],
"results": Array [
Object {
"isThrow": false,
"value": undefined,
},
],
},
"sourceFilters": Array [
Object {

View file

@ -18,7 +18,7 @@ exports[`Field for array setting should render as read only with help text if ov
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -26,7 +26,7 @@ exports[`Field for array setting should render as read only with help text if ov
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -34,15 +34,15 @@ exports[`Field for array setting should render as read only with help text if ov
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCode>
default_value
</EuiCode>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -119,7 +119,7 @@ exports[`Field for array setting should render custom setting icon if it is cust
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -127,7 +127,7 @@ exports[`Field for array setting should render custom setting icon if it is cust
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -202,7 +202,7 @@ exports[`Field for array setting should render default value if there is no user
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -210,7 +210,7 @@ exports[`Field for array setting should render default value if there is no user
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -280,7 +280,7 @@ exports[`Field for array setting should render user value if there is user value
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -288,7 +288,7 @@ exports[`Field for array setting should render user value if there is user value
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -296,15 +296,15 @@ exports[`Field for array setting should render user value if there is user value
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCode>
default_value
</EuiCode>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -389,7 +389,7 @@ exports[`Field for boolean setting should render as read only with help text if
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -397,7 +397,7 @@ exports[`Field for boolean setting should render as read only with help text if
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -405,15 +405,15 @@ exports[`Field for boolean setting should render as read only with help text if
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCode>
true
</EuiCode>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -488,7 +488,7 @@ exports[`Field for boolean setting should render custom setting icon if it is cu
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -496,7 +496,7 @@ exports[`Field for boolean setting should render custom setting icon if it is cu
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -569,7 +569,7 @@ exports[`Field for boolean setting should render default value if there is no us
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -577,7 +577,7 @@ exports[`Field for boolean setting should render default value if there is no us
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -645,7 +645,7 @@ exports[`Field for boolean setting should render user value if there is user val
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -653,7 +653,7 @@ exports[`Field for boolean setting should render user value if there is user val
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -661,15 +661,15 @@ exports[`Field for boolean setting should render user value if there is user val
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCode>
true
</EuiCode>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -752,7 +752,7 @@ exports[`Field for image setting should render as read only with help text if ov
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -760,7 +760,7 @@ exports[`Field for image setting should render as read only with help text if ov
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -768,15 +768,15 @@ exports[`Field for image setting should render as read only with help text if ov
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCode>
null
</EuiCode>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -850,7 +850,7 @@ exports[`Field for image setting should render custom setting icon if it is cust
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -858,7 +858,7 @@ exports[`Field for image setting should render custom setting icon if it is cust
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -932,7 +932,7 @@ exports[`Field for image setting should render default value if there is no user
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -940,7 +940,7 @@ exports[`Field for image setting should render default value if there is no user
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -1009,7 +1009,7 @@ exports[`Field for image setting should render user value if there is user value
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -1017,7 +1017,7 @@ exports[`Field for image setting should render user value if there is user value
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -1025,15 +1025,15 @@ exports[`Field for image setting should render user value if there is user value
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCode>
null
</EuiCode>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -1126,7 +1126,7 @@ exports[`Field for json setting should render as read only with help text if ove
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -1134,7 +1134,7 @@ exports[`Field for json setting should render as read only with help text if ove
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -1142,7 +1142,7 @@ exports[`Field for json setting should render as read only with help text if ove
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCodeBlock
language="json"
@ -1151,10 +1151,10 @@ exports[`Field for json setting should render as read only with help text if ove
>
{}
</EuiCodeBlock>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -1247,7 +1247,7 @@ exports[`Field for json setting should render custom setting icon if it is custo
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -1255,7 +1255,7 @@ exports[`Field for json setting should render custom setting icon if it is custo
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -1346,7 +1346,7 @@ exports[`Field for json setting should render default value if there is no user
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -1354,7 +1354,7 @@ exports[`Field for json setting should render default value if there is no user
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -1362,7 +1362,7 @@ exports[`Field for json setting should render default value if there is no user
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCodeBlock
language="json"
@ -1371,10 +1371,10 @@ exports[`Field for json setting should render default value if there is no user
>
{}
</EuiCodeBlock>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -1475,7 +1475,7 @@ exports[`Field for json setting should render user value if there is user value
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -1483,7 +1483,7 @@ exports[`Field for json setting should render user value if there is user value
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -1491,7 +1491,7 @@ exports[`Field for json setting should render user value if there is user value
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCodeBlock
language="json"
@ -1500,10 +1500,10 @@ exports[`Field for json setting should render user value if there is user value
>
{}
</EuiCodeBlock>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -1604,7 +1604,7 @@ exports[`Field for markdown setting should render as read only with help text if
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -1612,7 +1612,7 @@ exports[`Field for markdown setting should render as read only with help text if
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -1620,15 +1620,15 @@ exports[`Field for markdown setting should render as read only with help text if
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCode>
null
</EuiCode>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -1721,7 +1721,7 @@ exports[`Field for markdown setting should render custom setting icon if it is c
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -1729,7 +1729,7 @@ exports[`Field for markdown setting should render custom setting icon if it is c
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -1820,7 +1820,7 @@ exports[`Field for markdown setting should render default value if there is no u
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -1828,7 +1828,7 @@ exports[`Field for markdown setting should render default value if there is no u
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -1914,7 +1914,7 @@ exports[`Field for markdown setting should render user value if there is user va
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -1922,7 +1922,7 @@ exports[`Field for markdown setting should render user value if there is user va
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -1930,15 +1930,15 @@ exports[`Field for markdown setting should render user value if there is user va
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCode>
null
</EuiCode>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -2039,7 +2039,7 @@ exports[`Field for number setting should render as read only with help text if o
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -2047,7 +2047,7 @@ exports[`Field for number setting should render as read only with help text if o
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -2055,15 +2055,15 @@ exports[`Field for number setting should render as read only with help text if o
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCode>
5
</EuiCode>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -2140,7 +2140,7 @@ exports[`Field for number setting should render custom setting icon if it is cus
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -2148,7 +2148,7 @@ exports[`Field for number setting should render custom setting icon if it is cus
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -2223,7 +2223,7 @@ exports[`Field for number setting should render default value if there is no use
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -2231,7 +2231,7 @@ exports[`Field for number setting should render default value if there is no use
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -2301,7 +2301,7 @@ exports[`Field for number setting should render user value if there is user valu
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -2309,7 +2309,7 @@ exports[`Field for number setting should render user value if there is user valu
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -2317,15 +2317,15 @@ exports[`Field for number setting should render user value if there is user valu
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCode>
5
</EuiCode>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -2410,7 +2410,7 @@ exports[`Field for select setting should render as read only with help text if o
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -2418,7 +2418,7 @@ exports[`Field for select setting should render as read only with help text if o
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -2426,15 +2426,15 @@ exports[`Field for select setting should render as read only with help text if o
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCode>
orange
</EuiCode>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -2528,7 +2528,7 @@ exports[`Field for select setting should render custom setting icon if it is cus
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -2536,7 +2536,7 @@ exports[`Field for select setting should render custom setting icon if it is cus
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -2628,7 +2628,7 @@ exports[`Field for select setting should render default value if there is no use
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -2636,7 +2636,7 @@ exports[`Field for select setting should render default value if there is no use
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -2723,7 +2723,7 @@ exports[`Field for select setting should render user value if there is user valu
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -2731,7 +2731,7 @@ exports[`Field for select setting should render user value if there is user valu
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -2739,15 +2739,15 @@ exports[`Field for select setting should render user value if there is user valu
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCode>
orange
</EuiCode>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -2849,7 +2849,7 @@ exports[`Field for string setting should render as read only with help text if o
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -2857,7 +2857,7 @@ exports[`Field for string setting should render as read only with help text if o
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -2865,15 +2865,15 @@ exports[`Field for string setting should render as read only with help text if o
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCode>
null
</EuiCode>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -2950,7 +2950,7 @@ exports[`Field for string setting should render custom setting icon if it is cus
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -2958,7 +2958,7 @@ exports[`Field for string setting should render custom setting icon if it is cus
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -3033,7 +3033,7 @@ exports[`Field for string setting should render default value if there is no use
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -3041,7 +3041,7 @@ exports[`Field for string setting should render default value if there is no use
}
}
/>
</UNDEFINED>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"
@ -3111,7 +3111,7 @@ exports[`Field for string setting should render user value if there is user valu
<EuiDescribedFormGroup
className="advancedSettings__field__wrapper"
description={
<UNDEFINED>
<React.Fragment>
<div
dangerouslySetInnerHTML={
Object {
@ -3119,7 +3119,7 @@ exports[`Field for string setting should render user value if there is user valu
}
}
/>
<UNDEFINED>
<React.Fragment>
<EuiSpacer
size="s"
/>
@ -3127,15 +3127,15 @@ exports[`Field for string setting should render user value if there is user valu
grow={true}
size="xs"
>
<UNDEFINED>
<React.Fragment>
Default:
<EuiCode>
null
</EuiCode>
</UNDEFINED>
</React.Fragment>
</EuiText>
</UNDEFINED>
</UNDEFINED>
</React.Fragment>
</React.Fragment>
}
fullWidth={false}
gutterSize="l"

View file

@ -96,4 +96,6 @@ export default {
'default',
'<rootDir>/src/dev/jest/junit_reporter.js',
],
// TODO: prevent tests from making web requests that rely on this setting, see https://github.com/facebook/jest/pull/6792
testURL: 'about:blank',
};

View file

@ -17,8 +17,7 @@
* under the License.
*/
import { getCacheKey, install, process } from 'ts-jest';
import { JestConfig, TransformOptions } from 'ts-jest/dist/jest-types';
import TsJest from 'ts-jest';
import { getTsProjectForAbsolutePath } from '../typescript';
@ -26,11 +25,11 @@ const DEFAULT_TS_CONFIG_PATH = require.resolve('../../../tsconfig.json');
const DEFAULT_BROWSER_TS_CONFIG_PATH = require.resolve('../../../tsconfig.browser.json');
function extendJestConfigJSON(jestConfigJSON: string, filePath: string) {
const jestConfig = JSON.parse(jestConfigJSON) as JestConfig;
const jestConfig = JSON.parse(jestConfigJSON) as jest.ProjectConfig;
return JSON.stringify(extendJestConfig(jestConfig, filePath));
}
function extendJestConfig(jestConfig: JestConfig, filePath: string) {
function extendJestConfig(jestConfig: jest.ProjectConfig, filePath: string) {
let tsConfigFile = getTsProjectForAbsolutePath(filePath).tsConfigPath;
// swap ts config file for jest tests
@ -51,25 +50,25 @@ function extendJestConfig(jestConfig: JestConfig, filePath: string) {
}
module.exports = {
canInstrument: true,
process(
src: string,
filePath: string,
jestConfig: JestConfig,
transformOptions: TransformOptions
filePath: jest.Path,
jestConfig: jest.ProjectConfig,
transformOptions: jest.TransformOptions
) {
const extendedConfig = extendJestConfig(jestConfig, filePath);
return process(src, filePath, extendedConfig, transformOptions);
return TsJest.process(src, filePath, extendedConfig, transformOptions);
},
getCacheKey(
src: string,
filePath: string,
jestConfigJSON: string,
transformOptions: TransformOptions
transformOptions: jest.TransformOptions
) {
const extendedConfigJSON = extendJestConfigJSON(jestConfigJSON, filePath);
return getCacheKey(src, filePath, extendedConfigJSON, transformOptions);
return TsJest.getCacheKey!(src, filePath, extendedConfigJSON, transformOptions);
},
install,
};

View file

@ -34,7 +34,6 @@ exports[`ScriptingHelpFlyout should render normally 1`] = `
indexPattern={Object {}}
lang="painless"
name="myScriptedField"
script={undefined}
/>,
"data-test-subj": "testTab",
"id": "test",

View file

@ -8,7 +8,6 @@ exports[`should only render permalink panel when there are no other panels 1`] =
Object {
"content": <ShareUrlContent
getUnhashableStates={[Function]}
objectId={undefined}
objectType="dashboard"
/>,
"id": 1,
@ -27,7 +26,6 @@ exports[`should render context menu panel when there are more than one panel 1`]
Object {
"content": <ShareUrlContent
getUnhashableStates={[Function]}
objectId={undefined}
objectType="dashboard"
/>,
"id": 1,
@ -37,7 +35,6 @@ exports[`should render context menu panel when there are more than one panel 1`]
"content": <ShareUrlContent
getUnhashableStates={[Function]}
isEmbedded={true}
objectId={undefined}
objectType="dashboard"
/>,
"id": 2,

View file

@ -1,126 +0,0 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`#batchSet Buffers are always clear of previously buffered changes: buffered bar=foo 1`] = `
Array [
Object {
"body": Object {
"changes": Object {
"bar": "foo",
},
},
"method": "POST",
"path": "/api/kibana/settings",
},
]
`;
exports[`#batchSet Buffers are always clear of previously buffered changes: buffered baz=box 1`] = `
Array [
Object {
"body": Object {
"changes": Object {
"baz": "box",
},
},
"method": "POST",
"path": "/api/kibana/settings",
},
]
`;
exports[`#batchSet Buffers are always clear of previously buffered changes: unbuffered foo=bar 1`] = `
Array [
Array [
Object {
"body": Object {
"changes": Object {
"foo": "bar",
},
},
"method": "POST",
"path": "/api/kibana/settings",
},
],
]
`;
exports[`#batchSet Overwrites previously buffered values with new values for the same key: buffered bar=null 1`] = `
Array [
Array [
Object {
"body": Object {
"changes": Object {
"bar": null,
},
},
"method": "POST",
"path": "/api/kibana/settings",
},
],
]
`;
exports[`#batchSet Overwrites previously buffered values with new values for the same key: unbuffered foo=bar 1`] = `
Array [
Array [
Object {
"body": Object {
"changes": Object {
"foo": "bar",
},
},
"method": "POST",
"path": "/api/kibana/settings",
},
],
]
`;
exports[`#batchSet buffers changes while first request is in progress, sends buffered changes after first request completes: buffered foo=baz bar=bug 1`] = `
Array [
Array [
Object {
"body": Object {
"changes": Object {
"bar": "bug",
"foo": "baz",
},
},
"method": "POST",
"path": "/api/kibana/settings",
},
],
]
`;
exports[`#batchSet buffers changes while first request is in progress, sends buffered changes after first request completes: unbuffered foo=bar 1`] = `
Array [
Array [
Object {
"body": Object {
"changes": Object {
"foo": "bar",
},
},
"method": "POST",
"path": "/api/kibana/settings",
},
],
]
`;
exports[`#batchSet sends a single change immediately: unbuffered foo=bar 1`] = `
Array [
Array [
Object {
"body": Object {
"changes": Object {
"foo": "bar",
},
},
"method": "POST",
"path": "/api/kibana/settings",
},
],
]
`;

View file

@ -1,134 +0,0 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { createUiSettingsApi } from './ui_settings_api';
import { sendRequest } from './send_request';
jest.mock('./send_request', () => {
let resolve;
const sendRequest = jest.fn(() => new Promise((res) => {
resolve = res;
}));
return {
sendRequest,
resolveMockedSendRequest(value = {}) {
resolve(value);
},
async resolveMockedSendRequestAndWaitForNext(value = {}) {
const currentCallCount = sendRequest.mock.calls.length;
resolve(value);
const waitStart = Date.now();
while (sendRequest.mock.calls.length === currentCallCount) {
await new Promise(resolve => {
setImmediate(resolve);
});
if (Date.now() - waitStart > 10000) {
throw new Error('Waiting for subsequent call to sendRequest() timed out after 10 seconds');
}
}
},
};
});
beforeEach(() => {
sendRequest.mockRestore();
jest.clearAllMocks();
});
describe('#batchSet', () => {
it('sends a single change immediately', () => {
const uiSettingsApi = createUiSettingsApi();
const { sendRequest } = require('./send_request');
uiSettingsApi.batchSet('foo', 'bar');
expect(sendRequest).toHaveBeenCalledTimes(1);
expect(sendRequest.mock.calls).toMatchSnapshot('unbuffered foo=bar');
});
it('buffers changes while first request is in progress, sends buffered changes after first request completes', async () => {
const uiSettingsApi = createUiSettingsApi();
const { sendRequest, resolveMockedSendRequestAndWaitForNext } = require('./send_request');
uiSettingsApi.batchSet('foo', 'bar');
expect(sendRequest).toHaveBeenCalledTimes(1);
expect(sendRequest.mock.calls).toMatchSnapshot('unbuffered foo=bar');
sendRequest.mock.calls.length = 0;
uiSettingsApi.batchSet('foo', 'baz');
uiSettingsApi.batchSet('bar', 'bug');
expect(sendRequest).not.toHaveBeenCalled();
await resolveMockedSendRequestAndWaitForNext();
expect(sendRequest).toHaveBeenCalledTimes(1);
expect(sendRequest.mock.calls).toMatchSnapshot('buffered foo=baz bar=bug');
});
it('Overwrites previously buffered values with new values for the same key', async () => {
const uiSettingsApi = createUiSettingsApi();
const { sendRequest, resolveMockedSendRequestAndWaitForNext } = require('./send_request');
uiSettingsApi.batchSet('foo', 'bar');
expect(sendRequest).toHaveBeenCalledTimes(1);
expect(sendRequest.mock.calls).toMatchSnapshot('unbuffered foo=bar');
sendRequest.mock.calls.length = 0;
// if changes were sent to the API now they would be { bar: 'foo' }
uiSettingsApi.batchSet('bar', 'foo');
// these changes override the previous one, we should now send { bar: null }
uiSettingsApi.batchSet('bar', null);
await resolveMockedSendRequestAndWaitForNext();
expect(sendRequest).toHaveBeenCalledTimes(1);
expect(sendRequest.mock.calls).toMatchSnapshot('buffered bar=null');
});
it('Buffers are always clear of previously buffered changes', async () => {
const uiSettingsApi = createUiSettingsApi();
const { sendRequest, resolveMockedSendRequestAndWaitForNext } = require('./send_request');
uiSettingsApi.batchSet('foo', 'bar');
expect(sendRequest).toHaveBeenCalledTimes(1);
expect(sendRequest.mock.calls).toMatchSnapshot('unbuffered foo=bar');
sendRequest.mock.calls.length = 0;
// buffer a change
uiSettingsApi.batchSet('bar', 'foo');
// flush the buffer and wait for next request to start
await resolveMockedSendRequestAndWaitForNext();
// buffer another change
uiSettingsApi.batchSet('baz', 'box');
// flush the buffer and wait for next request to start
await resolveMockedSendRequestAndWaitForNext();
expect(sendRequest).toHaveBeenCalledTimes(2);
expect(sendRequest.mock.calls[0]).toMatchSnapshot('buffered bar=foo');
expect(sendRequest.mock.calls[1]).toMatchSnapshot('buffered baz=box');
});
});

View file

@ -50,6 +50,8 @@ export function createJestConfig({
reportName: 'X-Pack Jest Tests',
rootDirectory: xPackKibanaDirectory,
}]
]
],
// TODO: prevent tests from making web requests that rely on this setting, see https://github.com/facebook/jest/pull/6792
testURL: 'about:blank',
};
}

View file

@ -27,13 +27,13 @@
"@kbn/es": "link:../packages/kbn-es",
"@kbn/plugin-helpers": "link:../packages/kbn-plugin-helpers",
"@kbn/test": "link:../packages/kbn-test",
"@types/jest": "^22.2.3",
"@types/jest": "^23.3.1",
"@types/pngjs": "^3.3.1",
"abab": "^1.0.4",
"ansicolors": "0.3.2",
"aws-sdk": "2.2.33",
"axios": "^0.18.0",
"babel-jest": "^22.4.3",
"babel-jest": "^23.4.2",
"chalk": "^2.4.1",
"chance": "1.0.10",
"checksum": "0.1.1",
@ -52,9 +52,9 @@
"gulp-util": "3.0.7",
"gulp-zip": "3.1.0",
"hapi": "14.2.0",
"jest": "^22.4.3",
"jest-cli": "^22.4.3",
"jest-styled-components": "^5.0.1",
"jest": "^23.5.0",
"jest-cli": "^23.5.0",
"jest-styled-components": "^6.1.1",
"mocha": "3.3.0",
"mustache": "^2.3.0",
"mutation-observer": "^1.0.3",

View file

@ -172,7 +172,6 @@ exports[`Filter Lists Table renders with filter lists supplied 1`] = `
<NewFilterButton />,
<DeleteFilterListModal
refreshFilterLists={[MockFunction]}
selectedFilterLists={undefined}
/>,
],
}

View file

@ -150,9 +150,9 @@
dependencies:
"@types/node" "*"
"@types/jest@^22.2.3":
version "22.2.3"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-22.2.3.tgz#0157c0316dc3722c43a7b71de3fdf3acbccef10d"
"@types/jest@^23.3.1":
version "23.3.1"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.1.tgz#a4319aedb071d478e6f407d1c4578ec8156829cf"
"@types/loglevel@^1.5.3":
version "1.5.3"
@ -713,12 +713,12 @@ babel-helpers@^6.24.1:
babel-runtime "^6.22.0"
babel-template "^6.24.1"
babel-jest@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.3.tgz#4b7a0b6041691bbd422ab49b3b73654a49a6627a"
babel-jest@^23.4.2:
version "23.4.2"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.4.2.tgz#f276de67798a5d68f2d6e87ff518c2f6e1609877"
dependencies:
babel-plugin-istanbul "^4.1.5"
babel-preset-jest "^22.4.3"
babel-plugin-istanbul "^4.1.6"
babel-preset-jest "^23.2.0"
babel-messages@^6.23.0:
version "6.23.0"
@ -732,17 +732,18 @@ babel-plugin-check-es2015-constants@^6.22.0:
dependencies:
babel-runtime "^6.22.0"
babel-plugin-istanbul@^4.1.5:
version "4.1.5"
resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e"
babel-plugin-istanbul@^4.1.6:
version "4.1.6"
resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45"
dependencies:
babel-plugin-syntax-object-rest-spread "^6.13.0"
find-up "^2.1.0"
istanbul-lib-instrument "^1.7.5"
test-exclude "^4.1.1"
istanbul-lib-instrument "^1.10.1"
test-exclude "^4.2.1"
babel-plugin-jest-hoist@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.3.tgz#7d8bcccadc2667f96a0dcc6afe1891875ee6c14a"
babel-plugin-jest-hoist@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167"
babel-plugin-syntax-object-rest-spread@^6.13.0:
version "6.13.0"
@ -958,11 +959,11 @@ babel-preset-es2015@^6.24.1:
babel-plugin-transform-es2015-unicode-regex "^6.24.1"
babel-plugin-transform-regenerator "^6.24.1"
babel-preset-jest@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.3.tgz#e92eef9813b7026ab4ca675799f37419b5a44156"
babel-preset-jest@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46"
dependencies:
babel-plugin-jest-hoist "^22.4.3"
babel-plugin-jest-hoist "^23.2.0"
babel-plugin-syntax-object-rest-spread "^6.13.0"
babel-register@^6.26.0:
@ -994,7 +995,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0:
babylon "^6.18.0"
lodash "^4.17.4"
babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
dependencies:
@ -1008,7 +1009,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
invariant "^2.2.2"
lodash "^4.17.4"
babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
dependencies:
@ -1171,7 +1172,13 @@ browser-process-hrtime@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e"
browser-resolve@^1.11.2, browser-resolve@^1.8.1:
browser-resolve@^1.11.3:
version "1.11.3"
resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
dependencies:
resolve "1.1.7"
browser-resolve@^1.8.1:
version "1.11.2"
resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
dependencies:
@ -2357,16 +2364,16 @@ expect.js@0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/expect.js/-/expect.js-0.3.1.tgz#b0a59a0d2eff5437544ebf0ceaa6015841d09b5b"
expect@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674"
expect@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/expect/-/expect-23.5.0.tgz#18999a0eef8f8acf99023fde766d9c323c2562ed"
dependencies:
ansi-styles "^3.2.0"
jest-diff "^22.4.3"
jest-get-type "^22.4.3"
jest-matcher-utils "^22.4.3"
jest-message-util "^22.4.3"
jest-regex-util "^22.4.3"
jest-diff "^23.5.0"
jest-get-type "^22.1.0"
jest-matcher-utils "^23.5.0"
jest-message-util "^23.4.0"
jest-regex-util "^23.3.0"
extend-shallow@^1.1.2:
version "1.1.4"
@ -3615,7 +3622,7 @@ invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2:
dependencies:
loose-envify "^1.0.0"
invariant@^2.1.1:
invariant@^2.1.1, invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
dependencies:
@ -3945,66 +3952,66 @@ isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
istanbul-api@^1.1.14:
version "1.2.1"
resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620"
istanbul-api@^1.3.1:
version "1.3.7"
resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa"
dependencies:
async "^2.1.4"
fileset "^2.0.2"
istanbul-lib-coverage "^1.1.1"
istanbul-lib-hook "^1.1.0"
istanbul-lib-instrument "^1.9.1"
istanbul-lib-report "^1.1.2"
istanbul-lib-source-maps "^1.2.2"
istanbul-reports "^1.1.3"
istanbul-lib-coverage "^1.2.1"
istanbul-lib-hook "^1.2.2"
istanbul-lib-instrument "^1.10.2"
istanbul-lib-report "^1.1.5"
istanbul-lib-source-maps "^1.2.6"
istanbul-reports "^1.5.1"
js-yaml "^3.7.0"
mkdirp "^0.5.1"
once "^1.4.0"
istanbul-lib-coverage@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da"
istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0"
istanbul-lib-hook@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b"
istanbul-lib-hook@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86"
dependencies:
append-transform "^0.4.0"
istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e"
istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2:
version "1.10.2"
resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca"
dependencies:
babel-generator "^6.18.0"
babel-template "^6.16.0"
babel-traverse "^6.18.0"
babel-types "^6.18.0"
babylon "^6.18.0"
istanbul-lib-coverage "^1.1.1"
istanbul-lib-coverage "^1.2.1"
semver "^5.3.0"
istanbul-lib-report@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425"
istanbul-lib-report@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c"
dependencies:
istanbul-lib-coverage "^1.1.1"
istanbul-lib-coverage "^1.2.1"
mkdirp "^0.5.1"
path-parse "^1.0.5"
supports-color "^3.1.2"
istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c"
istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6:
version "1.2.6"
resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f"
dependencies:
debug "^3.1.0"
istanbul-lib-coverage "^1.1.1"
istanbul-lib-coverage "^1.2.1"
mkdirp "^0.5.1"
rimraf "^2.6.1"
source-map "^0.5.3"
istanbul-reports@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10"
istanbul-reports@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a"
dependencies:
handlebars "^4.0.3"
@ -4030,15 +4037,15 @@ jclass@^1.0.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/jclass/-/jclass-1.2.1.tgz#eaafeec0dd6a5bf8b3ea43c04e010c637638768b"
jest-changed-files@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.4.3.tgz#8882181e022c38bd46a2e4d18d44d19d90a90fb2"
jest-changed-files@^23.4.2:
version "23.4.2"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83"
dependencies:
throat "^4.0.0"
jest-cli@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.3.tgz#bf16c4a5fb7edc3fa5b9bb7819e34139e88a72c7"
jest-cli@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.5.0.tgz#d316b8e34a38a610a1efc4f0403d8ef8a55e4492"
dependencies:
ansi-escapes "^3.0.0"
chalk "^2.0.1"
@ -4047,129 +4054,143 @@ jest-cli@^22.4.3:
graceful-fs "^4.1.11"
import-local "^1.0.0"
is-ci "^1.0.10"
istanbul-api "^1.1.14"
istanbul-lib-coverage "^1.1.1"
istanbul-lib-instrument "^1.8.0"
istanbul-lib-source-maps "^1.2.1"
jest-changed-files "^22.4.3"
jest-config "^22.4.3"
jest-environment-jsdom "^22.4.3"
jest-get-type "^22.4.3"
jest-haste-map "^22.4.3"
jest-message-util "^22.4.3"
jest-regex-util "^22.4.3"
jest-resolve-dependencies "^22.4.3"
jest-runner "^22.4.3"
jest-runtime "^22.4.3"
jest-snapshot "^22.4.3"
jest-util "^22.4.3"
jest-validate "^22.4.3"
jest-worker "^22.4.3"
istanbul-api "^1.3.1"
istanbul-lib-coverage "^1.2.0"
istanbul-lib-instrument "^1.10.1"
istanbul-lib-source-maps "^1.2.4"
jest-changed-files "^23.4.2"
jest-config "^23.5.0"
jest-environment-jsdom "^23.4.0"
jest-get-type "^22.1.0"
jest-haste-map "^23.5.0"
jest-message-util "^23.4.0"
jest-regex-util "^23.3.0"
jest-resolve-dependencies "^23.5.0"
jest-runner "^23.5.0"
jest-runtime "^23.5.0"
jest-snapshot "^23.5.0"
jest-util "^23.4.0"
jest-validate "^23.5.0"
jest-watcher "^23.4.0"
jest-worker "^23.2.0"
micromatch "^2.3.11"
node-notifier "^5.2.1"
prompts "^0.1.9"
realpath-native "^1.0.0"
rimraf "^2.5.4"
slash "^1.0.0"
string-length "^2.0.0"
strip-ansi "^4.0.0"
which "^1.2.12"
yargs "^10.0.3"
yargs "^11.0.0"
jest-config@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.3.tgz#0e9d57db267839ea31309119b41dc2fa31b76403"
jest-config@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.5.0.tgz#3770fba03f7507ee15f3b8867c742e48f31a9773"
dependencies:
babel-core "^6.0.0"
babel-jest "^23.4.2"
chalk "^2.0.1"
glob "^7.1.1"
jest-environment-jsdom "^22.4.3"
jest-environment-node "^22.4.3"
jest-get-type "^22.4.3"
jest-jasmine2 "^22.4.3"
jest-regex-util "^22.4.3"
jest-resolve "^22.4.3"
jest-util "^22.4.3"
jest-validate "^22.4.3"
pretty-format "^22.4.3"
jest-environment-jsdom "^23.4.0"
jest-environment-node "^23.4.0"
jest-get-type "^22.1.0"
jest-jasmine2 "^23.5.0"
jest-regex-util "^23.3.0"
jest-resolve "^23.5.0"
jest-util "^23.4.0"
jest-validate "^23.5.0"
micromatch "^2.3.11"
pretty-format "^23.5.0"
jest-diff@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030"
jest-diff@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.5.0.tgz#250651a433dd0050290a07642946cc9baaf06fba"
dependencies:
chalk "^2.0.1"
diff "^3.2.0"
jest-get-type "^22.4.3"
pretty-format "^22.4.3"
jest-get-type "^22.1.0"
pretty-format "^23.5.0"
jest-docblock@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19"
jest-docblock@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7"
dependencies:
detect-newline "^2.1.0"
jest-environment-jsdom@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e"
jest-each@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.5.0.tgz#77f7e2afe6132a80954b920006e78239862b10ba"
dependencies:
jest-mock "^22.4.3"
jest-util "^22.4.3"
chalk "^2.0.1"
pretty-format "^23.5.0"
jest-environment-jsdom@^23.4.0:
version "23.4.0"
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023"
dependencies:
jest-mock "^23.2.0"
jest-util "^23.4.0"
jsdom "^11.5.1"
jest-environment-node@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129"
jest-environment-node@^23.4.0:
version "23.4.0"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10"
dependencies:
jest-mock "^22.4.3"
jest-util "^22.4.3"
jest-mock "^23.2.0"
jest-util "^23.4.0"
jest-get-type@^22.4.3:
jest-get-type@^22.1.0:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4"
jest-haste-map@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.3.tgz#25842fa2ba350200767ac27f658d58b9d5c2e20b"
jest-haste-map@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.5.0.tgz#d4ca618188bd38caa6cb20349ce6610e194a8065"
dependencies:
fb-watchman "^2.0.0"
graceful-fs "^4.1.11"
jest-docblock "^22.4.3"
jest-serializer "^22.4.3"
jest-worker "^22.4.3"
invariant "^2.2.4"
jest-docblock "^23.2.0"
jest-serializer "^23.0.1"
jest-worker "^23.2.0"
micromatch "^2.3.11"
sane "^2.0.0"
jest-jasmine2@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz#4daf64cd14c793da9db34a7c7b8dcfe52a745965"
jest-jasmine2@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.5.0.tgz#05fe7f1788e650eeb5a03929e6461ea2e9f3db53"
dependencies:
babel-traverse "^6.0.0"
chalk "^2.0.1"
co "^4.6.0"
expect "^22.4.3"
graceful-fs "^4.1.11"
expect "^23.5.0"
is-generator-fn "^1.0.0"
jest-diff "^22.4.3"
jest-matcher-utils "^22.4.3"
jest-message-util "^22.4.3"
jest-snapshot "^22.4.3"
jest-util "^22.4.3"
source-map-support "^0.5.0"
jest-diff "^23.5.0"
jest-each "^23.5.0"
jest-matcher-utils "^23.5.0"
jest-message-util "^23.4.0"
jest-snapshot "^23.5.0"
jest-util "^23.4.0"
pretty-format "^23.5.0"
jest-leak-detector@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz#2b7b263103afae8c52b6b91241a2de40117e5b35"
jest-leak-detector@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.5.0.tgz#14ac2a785bd625160a2ea968fd5d98b7dcea3e64"
dependencies:
pretty-format "^22.4.3"
pretty-format "^23.5.0"
jest-matcher-utils@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff"
jest-matcher-utils@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.5.0.tgz#0e2ea67744cab78c9ab15011c4d888bdd3e49e2a"
dependencies:
chalk "^2.0.1"
jest-get-type "^22.4.3"
pretty-format "^22.4.3"
jest-get-type "^22.1.0"
pretty-format "^23.5.0"
jest-message-util@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7"
jest-message-util@^23.4.0:
version "23.4.0"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f"
dependencies:
"@babel/code-frame" "^7.0.0-beta.35"
chalk "^2.0.1"
@ -4177,123 +4198,140 @@ jest-message-util@^22.4.3:
slash "^1.0.0"
stack-utils "^1.0.1"
jest-mock@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7"
jest-mock@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134"
jest-regex-util@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af"
jest-regex-util@^23.3.0:
version "23.3.0"
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5"
jest-resolve-dependencies@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz#e2256a5a846732dc3969cb72f3c9ad7725a8195e"
jest-resolve-dependencies@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.5.0.tgz#10c4d135beb9d2256de1fedc7094916c3ad74af7"
dependencies:
jest-regex-util "^22.4.3"
jest-regex-util "^23.3.0"
jest-snapshot "^23.5.0"
jest-resolve@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea"
jest-resolve@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.5.0.tgz#3b8e7f67e84598f0caf63d1530bd8534a189d0e6"
dependencies:
browser-resolve "^1.11.2"
browser-resolve "^1.11.3"
chalk "^2.0.1"
realpath-native "^1.0.0"
jest-runner@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.3.tgz#298ddd6a22b992c64401b4667702b325e50610c3"
jest-runner@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.5.0.tgz#570f7a044da91648b5bb9b6baacdd511076c71d7"
dependencies:
exit "^0.1.2"
jest-config "^22.4.3"
jest-docblock "^22.4.3"
jest-haste-map "^22.4.3"
jest-jasmine2 "^22.4.3"
jest-leak-detector "^22.4.3"
jest-message-util "^22.4.3"
jest-runtime "^22.4.3"
jest-util "^22.4.3"
jest-worker "^22.4.3"
graceful-fs "^4.1.11"
jest-config "^23.5.0"
jest-docblock "^23.2.0"
jest-haste-map "^23.5.0"
jest-jasmine2 "^23.5.0"
jest-leak-detector "^23.5.0"
jest-message-util "^23.4.0"
jest-runtime "^23.5.0"
jest-util "^23.4.0"
jest-worker "^23.2.0"
source-map-support "^0.5.6"
throat "^4.0.0"
jest-runtime@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.3.tgz#b69926c34b851b920f666c93e86ba2912087e3d0"
jest-runtime@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.5.0.tgz#eb503525a196dc32f2f9974e3482d26bdf7b63ce"
dependencies:
babel-core "^6.0.0"
babel-jest "^22.4.3"
babel-plugin-istanbul "^4.1.5"
babel-plugin-istanbul "^4.1.6"
chalk "^2.0.1"
convert-source-map "^1.4.0"
exit "^0.1.2"
fast-json-stable-stringify "^2.0.0"
graceful-fs "^4.1.11"
jest-config "^22.4.3"
jest-haste-map "^22.4.3"
jest-regex-util "^22.4.3"
jest-resolve "^22.4.3"
jest-util "^22.4.3"
jest-validate "^22.4.3"
json-stable-stringify "^1.0.1"
jest-config "^23.5.0"
jest-haste-map "^23.5.0"
jest-message-util "^23.4.0"
jest-regex-util "^23.3.0"
jest-resolve "^23.5.0"
jest-snapshot "^23.5.0"
jest-util "^23.4.0"
jest-validate "^23.5.0"
micromatch "^2.3.11"
realpath-native "^1.0.0"
slash "^1.0.0"
strip-bom "3.0.0"
write-file-atomic "^2.1.0"
yargs "^10.0.3"
yargs "^11.0.0"
jest-serializer@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436"
jest-serializer@^23.0.1:
version "23.0.1"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165"
jest-snapshot@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2"
jest-snapshot@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.5.0.tgz#cc368ebd8513e1175e2a7277f37a801b7358ae79"
dependencies:
babel-types "^6.0.0"
chalk "^2.0.1"
jest-diff "^22.4.3"
jest-matcher-utils "^22.4.3"
jest-diff "^23.5.0"
jest-matcher-utils "^23.5.0"
jest-message-util "^23.4.0"
jest-resolve "^23.5.0"
mkdirp "^0.5.1"
natural-compare "^1.4.0"
pretty-format "^22.4.3"
pretty-format "^23.5.0"
semver "^5.5.0"
jest-styled-components@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/jest-styled-components/-/jest-styled-components-5.0.1.tgz#386c5a161a0f5e783444d624bfc18c6d228d1277"
jest-styled-components@^6.1.1:
version "6.1.1"
resolved "https://registry.yarnpkg.com/jest-styled-components/-/jest-styled-components-6.1.1.tgz#2b9b6e3ded212b43ea71df72e82d55b856e9d1ed"
dependencies:
css "^2.2.1"
jest-util@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac"
jest-util@^23.4.0:
version "23.4.0"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561"
dependencies:
callsites "^2.0.0"
chalk "^2.0.1"
graceful-fs "^4.1.11"
is-ci "^1.0.10"
jest-message-util "^22.4.3"
jest-message-util "^23.4.0"
mkdirp "^0.5.1"
slash "^1.0.0"
source-map "^0.6.0"
jest-validate@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.3.tgz#0780954a5a7daaeec8d3c10834b9280865976b30"
jest-validate@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.5.0.tgz#f5df8f761cf43155e1b2e21d6e9de8a2852d0231"
dependencies:
chalk "^2.0.1"
jest-config "^22.4.3"
jest-get-type "^22.4.3"
jest-get-type "^22.1.0"
leven "^2.1.0"
pretty-format "^22.4.3"
pretty-format "^23.5.0"
jest-worker@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b"
jest-watcher@^23.4.0:
version "23.4.0"
resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c"
dependencies:
ansi-escapes "^3.0.0"
chalk "^2.0.1"
string-length "^2.0.0"
jest-worker@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9"
dependencies:
merge-stream "^1.0.1"
jest@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.3.tgz#2261f4b117dc46d9a4a1a673d2150958dee92f16"
jest@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/jest/-/jest-23.5.0.tgz#80de353d156ea5ea4a7332f7962ac79135fbc62e"
dependencies:
import-local "^1.0.0"
jest-cli "^22.4.3"
jest-cli "^23.5.0"
joi@10.x.x:
version "10.6.0"
@ -4501,6 +4539,10 @@ kind-of@^6.0.0, kind-of@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
kleur@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300"
lazy-cache@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
@ -5977,9 +6019,9 @@ preserve@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
pretty-format@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f"
pretty-format@^23.5.0:
version "23.5.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.5.0.tgz#0f9601ad9da70fe690a269cd3efca732c210687c"
dependencies:
ansi-regex "^3.0.0"
ansi-styles "^3.2.0"
@ -6018,6 +6060,13 @@ promise@^7.1.1:
dependencies:
asap "~2.0.3"
prompts@^0.1.9:
version "0.1.14"
resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2"
dependencies:
kleur "^2.0.1"
sisteransi "^0.1.1"
prop-types@15.5.8:
version "15.5.8"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.8.tgz#6b7b2e141083be38c8595aa51fc55775c7199394"
@ -7140,6 +7189,10 @@ sinon@^5.0.7:
supports-color "^5.1.0"
type-detect "^4.0.5"
sisteransi@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce"
slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
@ -7214,10 +7267,11 @@ source-map-support@^0.4.15:
dependencies:
source-map "^0.5.6"
source-map-support@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.0.tgz#2018a7ad2bdf8faf2691e5fddab26bed5a2bacab"
source-map-support@^0.5.6:
version "0.5.9"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f"
dependencies:
buffer-from "^1.0.0"
source-map "^0.6.0"
source-map-url@^0.4.0:
@ -7629,9 +7683,9 @@ temp@^0.8.3:
os-tmpdir "^1.0.0"
rimraf "~2.2.6"
test-exclude@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26"
test-exclude@^4.2.1:
version "4.2.3"
resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20"
dependencies:
arrify "^1.0.1"
micromatch "^2.3.11"
@ -8360,9 +8414,9 @@ yargs-parser@^5.0.0:
dependencies:
camelcase "^3.0.0"
yargs-parser@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
yargs-parser@^9.0.2:
version "9.0.2"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
dependencies:
camelcase "^4.1.0"
@ -8384,9 +8438,9 @@ yargs@4.7.1:
y18n "^3.2.1"
yargs-parser "^2.4.0"
yargs@^10.0.3:
version "10.1.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.1.tgz#5fe1ea306985a099b33492001fa19a1e61efe285"
yargs@^11.0.0:
version "11.1.0"
resolved "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77"
dependencies:
cliui "^4.0.0"
decamelize "^1.1.1"
@ -8399,7 +8453,7 @@ yargs@^10.0.3:
string-width "^2.0.0"
which-module "^2.0.0"
y18n "^3.2.1"
yargs-parser "^8.1.0"
yargs-parser "^9.0.2"
yargs@^7.0.0:
version "7.1.0"

674
yarn.lock

File diff suppressed because it is too large Load diff