diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/constant.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/constant.ts index 6f10f25934afc..a04c8aed403d9 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/constant.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/constant.ts @@ -13,4 +13,6 @@ export const REPOSITORY_EDIT = getRepository({ name: REPOSITORY_NAME }); export const POLICY_NAME = 'my-test-policy'; +export const SNAPSHOT_NAME = 'my-test-snapshot'; + export const POLICY_EDIT = getPolicy({ name: POLICY_NAME, retention: { minCount: 1 } }); diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/home.helpers.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/home.helpers.ts index 1e16fa2a40129..11475ae7c2461 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/home.helpers.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/home.helpers.ts @@ -14,6 +14,7 @@ import { AsyncTestBedConfig, delay, } from '@kbn/test/jest'; +import { HttpSetup } from 'src/core/public'; import { SnapshotRestoreHome } from '../../../public/application/sections/home/home'; import { BASE_PATH } from '../../../public/application/constants'; import { WithAppDependencies } from './setup_environment'; @@ -26,8 +27,6 @@ const testBedConfig: AsyncTestBedConfig = { doMountAsync: true, }; -const initTestBed = registerTestBed(WithAppDependencies(SnapshotRestoreHome), testBedConfig); - export interface HomeTestBed extends TestBed { actions: { clickReloadButton: () => void; @@ -40,7 +39,11 @@ export interface HomeTestBed extends TestBed { }; } -export const setup = async (): Promise => { +export const setup = async (httpSetup: HttpSetup): Promise => { + const initTestBed = registerTestBed( + WithAppDependencies(SnapshotRestoreHome, httpSetup), + testBedConfig + ); const testBed = await initTestBed(); const REPOSITORY_TABLE = 'repositoryTable'; const SNAPSHOT_TABLE = 'snapshotTable'; diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/http_requests.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/http_requests.ts index 662c50a98bfe8..3c14c444d4664 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/http_requests.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/http_requests.ts @@ -5,117 +5,119 @@ * 2.0. */ -import sinon, { SinonFakeServer } from 'sinon'; +import { httpServiceMock } from '../../../../../../src/core/public/mocks'; import { API_BASE_PATH } from '../../../common'; +type HttpMethod = 'GET' | 'PUT' | 'POST'; type HttpResponse = Record | any[]; -const mockResponse = (defaultResponse: HttpResponse, response?: HttpResponse) => [ - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify({ ...defaultResponse, ...response }), -]; +export interface ResponseError { + statusCode: number; + message: string | Error; +} // Register helpers to mock HTTP Requests -const registerHttpRequestMockHelpers = (server: SinonFakeServer) => { - const setLoadRepositoriesResponse = (response: HttpResponse = {}) => { - const defaultResponse = { repositories: [] }; - - server.respondWith( - 'GET', - `${API_BASE_PATH}repositories`, - mockResponse(defaultResponse, response) - ); +const registerHttpRequestMockHelpers = ( + httpSetup: ReturnType +) => { + const mockResponses = new Map>>( + ['GET', 'PUT', 'POST'].map( + (method) => [method, new Map()] as [HttpMethod, Map>] + ) + ); + + const mockMethodImplementation = (method: HttpMethod, path: string) => + mockResponses.get(method)?.get(path) ?? Promise.resolve({}); + + httpSetup.get.mockImplementation((path) => + mockMethodImplementation('GET', path as unknown as string) + ); + httpSetup.post.mockImplementation((path) => + mockMethodImplementation('POST', path as unknown as string) + ); + httpSetup.put.mockImplementation((path) => + mockMethodImplementation('PUT', path as unknown as string) + ); + + const mockResponse = (method: HttpMethod, path: string, response?: unknown, error?: unknown) => { + const defuse = (promise: Promise) => { + promise.catch(() => {}); + return promise; + }; + + return mockResponses + .get(method)! + .set(path, error ? defuse(Promise.reject({ body: error })) : Promise.resolve(response)); }; - const setLoadRepositoryTypesResponse = (response: HttpResponse = []) => { - server.respondWith('GET', `${API_BASE_PATH}repository_types`, JSON.stringify(response)); - }; + const setLoadRepositoriesResponse = ( + response: HttpResponse = { repositories: [] }, + error?: ResponseError + ) => mockResponse('GET', `${API_BASE_PATH}repositories`, response, error); - const setGetRepositoryResponse = (response?: HttpResponse, delay = 0) => { - const defaultResponse = {}; - - server.respondWith( - 'GET', - /api\/snapshot_restore\/repositories\/.+/, - mockResponse(defaultResponse, response) - ); - }; + const setLoadRepositoryTypesResponse = (response: HttpResponse = [], error?: ResponseError) => + mockResponse('GET', `${API_BASE_PATH}repository_types`, response, error); - const setSaveRepositoryResponse = (response?: HttpResponse, error?: any) => { - const status = error ? error.status || 400 : 200; - const body = error ? JSON.stringify(error.body) : JSON.stringify(response); + const setGetRepositoryResponse = ( + repositoryName: string, + response?: HttpResponse, + error?: ResponseError + ) => mockResponse('GET', `${API_BASE_PATH}repositories/${repositoryName}`, response, error); - server.respondWith('PUT', `${API_BASE_PATH}repositories`, [ - status, - { 'Content-Type': 'application/json' }, - body, - ]); - }; + const setSaveRepositoryResponse = (response?: HttpResponse, error?: ResponseError) => + mockResponse('PUT', `${API_BASE_PATH}repositories`, response, error); - const setLoadSnapshotsResponse = (response: HttpResponse = {}) => { + const setLoadSnapshotsResponse = (response?: HttpResponse, error?: ResponseError) => { const defaultResponse = { errors: {}, snapshots: [], repositories: [], total: 0 }; - - server.respondWith('GET', `${API_BASE_PATH}snapshots`, mockResponse(defaultResponse, response)); + return mockResponse('GET', `${API_BASE_PATH}snapshots`, response ?? defaultResponse, error); }; - const setGetSnapshotResponse = (response?: HttpResponse) => { - const defaultResponse = {}; - - server.respondWith( + const setGetSnapshotResponse = ( + repositoryName: string, + snapshotName: string, + response?: HttpResponse, + error?: ResponseError + ) => + mockResponse( 'GET', - /\/api\/snapshot_restore\/snapshots\/.+/, - mockResponse(defaultResponse, response) + `${API_BASE_PATH}snapshots/${repositoryName}/${snapshotName}`, + response, + error ); - }; - - const setLoadIndicesResponse = (response: HttpResponse = {}) => { - const defaultResponse = { indices: [] }; - server.respondWith( - 'GET', - `${API_BASE_PATH}policies/indices`, - mockResponse(defaultResponse, response) + const setLoadIndicesResponse = ( + response: HttpResponse = { indices: [] }, + error?: ResponseError + ) => mockResponse('GET', `${API_BASE_PATH}policies/indices`, response, error); + + const setAddPolicyResponse = (response?: HttpResponse, error?: ResponseError) => + mockResponse('POST', `${API_BASE_PATH}policies`, response, error); + + const setCleanupRepositoryResponse = ( + repositoryName: string, + response?: HttpResponse, + error?: ResponseError + ) => + mockResponse('POST', `${API_BASE_PATH}repositories/${repositoryName}/cleanup`, response, error); + + const setGetPolicyResponse = ( + policyName: string, + response?: HttpResponse, + error?: ResponseError + ) => mockResponse('GET', `${API_BASE_PATH}policy/${policyName}`, response, error); + + const setRestoreSnapshotResponse = ( + repositoryName: string, + snapshotId: string, + response?: HttpResponse, + error?: ResponseError + ) => + mockResponse( + 'POST', + `${API_BASE_PATH}restore/${repositoryName}/${snapshotId}`, + response, + error ); - }; - - const setAddPolicyResponse = (response?: HttpResponse, error?: any) => { - const status = error ? error.status || 400 : 200; - const body = error ? JSON.stringify(error.body) : JSON.stringify(response); - - server.respondWith('POST', `${API_BASE_PATH}policies`, [ - status, - { 'Content-Type': 'application/json' }, - body, - ]); - }; - - const setCleanupRepositoryResponse = (response?: HttpResponse, error?: any) => { - const status = error ? error.status || 503 : 200; - const body = error ? JSON.stringify(error) : JSON.stringify(response); - - server.respondWith('POST', `${API_BASE_PATH}repositories/:name/cleanup`, [ - status, - { 'Content-Type': 'application/json' }, - body, - ]); - }; - - const setGetPolicyResponse = (response?: HttpResponse) => { - server.respondWith('GET', `${API_BASE_PATH}policy/:name`, [ - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify(response), - ]); - }; - - const setRestoreSnapshotResponse = (response?: HttpResponse) => { - server.respondWith('POST', `${API_BASE_PATH}restore/:repository/:snapshot`, [ - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify(response), - ]); - }; return { setLoadRepositoriesResponse, @@ -133,18 +135,11 @@ const registerHttpRequestMockHelpers = (server: SinonFakeServer) => { }; export const init = () => { - const server = sinon.fakeServer.create(); - server.respondImmediately = true; - - // Define default response for unhandled requests. - // We make requests to APIs which don't impact the component under test, e.g. UI metric telemetry, - // and we can mock them all with a 200 instead of mocking each one individually. - server.respondWith([200, {}, 'DefaultResponse']); - - const httpRequestsMockHelpers = registerHttpRequestMockHelpers(server); + const httpSetup = httpServiceMock.createSetupContract(); + const httpRequestsMockHelpers = registerHttpRequestMockHelpers(httpSetup); return { - server, + httpSetup, httpRequestsMockHelpers, }; }; diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/policy_add.helpers.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/policy_add.helpers.ts index a6e7c4a4c1056..025960eaf5740 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/policy_add.helpers.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/policy_add.helpers.ts @@ -6,6 +6,7 @@ */ import { registerTestBed, AsyncTestBedConfig } from '@kbn/test/jest'; +import { HttpSetup } from 'src/core/public'; import { PolicyAdd } from '../../../public/application/sections/policy_add'; import { formSetup, PolicyFormTestSubjects } from './policy_form.helpers'; import { WithAppDependencies } from './setup_environment'; @@ -18,9 +19,11 @@ const testBedConfig: AsyncTestBedConfig = { doMountAsync: true, }; -const initTestBed = registerTestBed( - WithAppDependencies(PolicyAdd), - testBedConfig -); +export const setup = async (httpSetup: HttpSetup) => { + const initTestBed = registerTestBed( + WithAppDependencies(PolicyAdd, httpSetup), + testBedConfig + ); -export const setup = formSetup.bind(null, initTestBed); + return formSetup(initTestBed); +}; diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/policy_edit.helpers.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/policy_edit.helpers.ts index 2014d22ffbfbc..caded2b2b06dc 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/policy_edit.helpers.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/policy_edit.helpers.ts @@ -6,6 +6,7 @@ */ import { registerTestBed, AsyncTestBedConfig } from '@kbn/test/jest'; +import { HttpSetup } from 'src/core/public'; import { PolicyEdit } from '../../../public/application/sections/policy_edit'; import { WithAppDependencies } from './setup_environment'; import { POLICY_NAME } from './constant'; @@ -19,9 +20,11 @@ const testBedConfig: AsyncTestBedConfig = { doMountAsync: true, }; -const initTestBed = registerTestBed( - WithAppDependencies(PolicyEdit), - testBedConfig -); +export const setup = async (httpSetup: HttpSetup) => { + const initTestBed = registerTestBed( + WithAppDependencies(PolicyEdit, httpSetup), + testBedConfig + ); -export const setup = formSetup.bind(null, initTestBed); + return formSetup(initTestBed); +}; diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/repository_add.helpers.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/repository_add.helpers.ts index b369b20c122eb..de78c88f897b5 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/repository_add.helpers.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/repository_add.helpers.ts @@ -6,14 +6,11 @@ */ import { registerTestBed, TestBed } from '@kbn/test/jest'; +import { HttpSetup } from 'src/core/public'; import { RepositoryType } from '../../../common/types'; import { RepositoryAdd } from '../../../public/application/sections/repository_add'; import { WithAppDependencies } from './setup_environment'; -const initTestBed = registerTestBed(WithAppDependencies(RepositoryAdd), { - doMountAsync: true, -}); - export interface RepositoryAddTestBed extends TestBed { actions: { clickNextButton: () => void; @@ -23,7 +20,13 @@ export interface RepositoryAddTestBed extends TestBed }; } -export const setup = async (): Promise => { +export const setup = async (httpSetup: HttpSetup): Promise => { + const initTestBed = registerTestBed( + WithAppDependencies(RepositoryAdd, httpSetup), + { + doMountAsync: true, + } + ); const testBed = await initTestBed(); // User actions diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/repository_edit.helpers.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/repository_edit.helpers.ts index f0563f2831a98..b70ff78f5f6f9 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/repository_edit.helpers.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/repository_edit.helpers.ts @@ -6,6 +6,7 @@ */ import { registerTestBed, AsyncTestBedConfig } from '@kbn/test/jest'; +import { HttpSetup } from 'src/core/public'; import { RepositoryEdit } from '../../../public/application/sections/repository_edit'; import { WithAppDependencies } from './setup_environment'; import { REPOSITORY_NAME } from './constant'; @@ -18,10 +19,14 @@ const testBedConfig: AsyncTestBedConfig = { doMountAsync: true, }; -export const setup = registerTestBed( - WithAppDependencies(RepositoryEdit), - testBedConfig -); +export const setup = async (httpSetup: HttpSetup) => { + const initTestBed = registerTestBed( + WithAppDependencies(RepositoryEdit, httpSetup), + testBedConfig + ); + + return await initTestBed(); +}; export type RepositoryEditTestSubjects = TestSubjects | ThreeLevelDepth | NonVisibleTestSubjects; diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/restore_snapshot.helpers.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/restore_snapshot.helpers.ts index 123ae0cbb1c2e..7c3893c4afcff 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/restore_snapshot.helpers.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/restore_snapshot.helpers.ts @@ -7,22 +7,19 @@ import { act } from 'react-dom/test-utils'; import { registerTestBed, TestBed, AsyncTestBedConfig } from '@kbn/test/jest'; +import { HttpSetup } from 'src/core/public'; import { RestoreSnapshot } from '../../../public/application/sections/restore_snapshot'; import { WithAppDependencies } from './setup_environment'; +import { REPOSITORY_NAME, SNAPSHOT_NAME } from '../helpers/constant'; const testBedConfig: AsyncTestBedConfig = { memoryRouter: { - initialEntries: ['/add_policy'], - componentRoutePath: '/add_policy', + initialEntries: [`/restore/${REPOSITORY_NAME}/${SNAPSHOT_NAME}`], + componentRoutePath: '/restore/:repositoryName?/:snapshotId*', }, doMountAsync: true, }; -const initTestBed = registerTestBed( - WithAppDependencies(RestoreSnapshot), - testBedConfig -); - const setupActions = (testBed: TestBed) => { const { find, component, form, exists } = testBed; @@ -84,7 +81,12 @@ export type RestoreSnapshotTestBed = TestBed & { actions: Actions; }; -export const setup = async (): Promise => { +export const setup = async (httpSetup: HttpSetup): Promise => { + const initTestBed = registerTestBed( + WithAppDependencies(RestoreSnapshot, httpSetup), + testBedConfig + ); + const testBed = await initTestBed(); return { diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/setup_environment.tsx b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/setup_environment.tsx index 66ba21b136816..0c961d5e151bc 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/setup_environment.tsx +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/setup_environment.tsx @@ -6,11 +6,10 @@ */ import React from 'react'; -import axios from 'axios'; -import axiosXhrAdapter from 'axios/lib/adapters/xhr'; import { i18n } from '@kbn/i18n'; import { LocationDescriptorObject } from 'history'; +import { HttpSetup } from 'src/core/public'; import { coreMock, scopedHistoryMock } from 'src/core/public/mocks'; import { setUiMetricService, httpService } from '../../../public/application/services/http'; import { @@ -22,8 +21,6 @@ import { textService } from '../../../public/application/services/text'; import { init as initHttpRequests } from './http_requests'; import { UiMetricService } from '../../../public/application/services'; -const mockHttpClient = axios.create({ adapter: axiosXhrAdapter }); - const history = scopedHistoryMock.create(); history.createHref.mockImplementation((location: LocationDescriptorObject) => { return `${location.pathname}?${location.search}`; @@ -48,18 +45,11 @@ const appDependencies = { }; export const setupEnvironment = () => { - // @ts-ignore - httpService.setup(mockHttpClient); breadcrumbService.setup(() => undefined); textService.setup(i18n); docTitleService.setup(() => undefined); - const { server, httpRequestsMockHelpers } = initHttpRequests(); - - return { - server, - httpRequestsMockHelpers, - }; + return initHttpRequests(); }; /** @@ -70,9 +60,16 @@ export const setupEnvironment = () => { this.terminate = () => {}; }; -export const WithAppDependencies = (Comp: any) => (props: any) => - ( +export const WithAppDependencies = (Comp: any, httpSetup?: HttpSetup) => (props: any) => { + // We need to optionally setup the httpService since some cit helpers (such as snapshot_list.helpers) + // use jest mocks to stub the fetch hooks instead of mocking api responses. + if (httpSetup) { + httpService.setup(httpSetup); + } + + return ( ); +}; diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/snapshot_list.helpers.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/snapshot_list.helpers.ts index 176e5714f1308..c7b988cf63f8d 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/snapshot_list.helpers.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/helpers/snapshot_list.helpers.ts @@ -35,6 +35,7 @@ const searchErrorSelector = 'snapshotListSearchError'; export const setup = async (query?: string): Promise => { const testBed = await initTestBed(query); + const { form, component, find, exists } = testBed; const setSearchText = async (value: string, advanceTime = true) => { diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/home.test.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/home.test.ts index 4a64d42d18b93..818655ebdb64a 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/home.test.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/home.test.ts @@ -41,16 +41,12 @@ const removeWhiteSpaceOnArrayValues = (array: any[]) => }); describe('', () => { - const { server, httpRequestsMockHelpers } = setupEnvironment(); + const { httpSetup, httpRequestsMockHelpers } = setupEnvironment(); let testBed: HomeTestBed; - afterAll(() => { - server.restore(); - }); - describe('on component mount', () => { beforeEach(async () => { - testBed = await setup(); + testBed = await setup(httpSetup); }); test('should set the correct app title', () => { @@ -79,7 +75,7 @@ describe('', () => { describe('tabs', () => { beforeEach(async () => { - testBed = await setup(); + testBed = await setup(httpSetup); await act(async () => { await nextTick(); @@ -132,7 +128,7 @@ describe('', () => { }); test('should display an empty prompt', async () => { - const { component, exists } = await setup(); + const { component, exists } = await setup(httpSetup); await act(async () => { await nextTick(); @@ -164,7 +160,7 @@ describe('', () => { beforeEach(async () => { httpRequestsMockHelpers.setLoadRepositoriesResponse({ repositories }); - testBed = await setup(); + testBed = await setup(httpSetup); await act(async () => { await nextTick(); @@ -208,7 +204,6 @@ describe('', () => { test('should have a button to reload the repositories', async () => { const { component, exists, actions } = testBed; - const totalRequests = server.requests.length; expect(exists('reloadButton')).toBe(true); await act(async () => { @@ -217,9 +212,9 @@ describe('', () => { component.update(); }); - expect(server.requests.length).toBe(totalRequests + 1); - expect(server.requests[server.requests.length - 1].url).toBe( - `${API_BASE_PATH}repositories` + expect(httpSetup.get).toHaveBeenLastCalledWith( + `${API_BASE_PATH}repositories`, + expect.anything() ); }); @@ -273,10 +268,10 @@ describe('', () => { component.update(); }); - const latestRequest = server.requests[server.requests.length - 1]; - - expect(latestRequest.method).toBe('DELETE'); - expect(latestRequest.url).toBe(`${API_BASE_PATH}repositories/${repo1.name}`); + expect(httpSetup.delete).toHaveBeenLastCalledWith( + `${API_BASE_PATH}repositories/${repo1.name}`, + expect.anything() + ); }); }); @@ -304,23 +299,20 @@ describe('', () => { }); test('should show a loading state while fetching the repository', async () => { - server.respondImmediately = false; const { find, exists, actions } = testBed; // By providing undefined, the "loading section" will be displayed - httpRequestsMockHelpers.setGetRepositoryResponse(undefined); + httpRequestsMockHelpers.setGetRepositoryResponse(repo1.name, undefined); await actions.clickRepositoryAt(0); expect(exists('repositoryDetail.sectionLoading')).toBe(true); expect(find('repositoryDetail.sectionLoading').text()).toEqual('Loading repository…'); - - server.respondImmediately = true; }); describe('when the repository has been fetched', () => { beforeEach(async () => { - httpRequestsMockHelpers.setGetRepositoryResponse({ + httpRequestsMockHelpers.setGetRepositoryResponse(repo1.name, { repository: { name: 'my-repo', type: 'fs', @@ -357,15 +349,15 @@ describe('', () => { component.update(); }); - const latestRequest = server.requests[server.requests.length - 1]; - - expect(latestRequest.method).toBe('GET'); - expect(latestRequest.url).toBe(`${API_BASE_PATH}repositories/${repo1.name}/verify`); + expect(httpSetup.get).toHaveBeenLastCalledWith( + `${API_BASE_PATH}repositories/${repo1.name}/verify`, + expect.anything() + ); }); describe('clean repository', () => { test('shows results when request succeeds', async () => { - httpRequestsMockHelpers.setCleanupRepositoryResponse({ + httpRequestsMockHelpers.setCleanupRepositoryResponse(repo1.name, { cleanup: { cleaned: true, response: { @@ -383,16 +375,17 @@ describe('', () => { }); component.update(); - const latestRequest = server.requests[server.requests.length - 1]; - expect(latestRequest.method).toBe('POST'); - expect(latestRequest.url).toBe(`${API_BASE_PATH}repositories/${repo1.name}/cleanup`); + expect(httpSetup.post).toHaveBeenLastCalledWith( + `${API_BASE_PATH}repositories/${repo1.name}/cleanup`, + expect.anything() + ); expect(exists('repositoryDetail.cleanupCodeBlock')).toBe(true); expect(exists('repositoryDetail.cleanupError')).toBe(false); }); test('shows error when success fails', async () => { - httpRequestsMockHelpers.setCleanupRepositoryResponse({ + httpRequestsMockHelpers.setCleanupRepositoryResponse(repo1.name, { cleanup: { cleaned: false, error: { @@ -408,9 +401,10 @@ describe('', () => { }); component.update(); - const latestRequest = server.requests[server.requests.length - 1]; - expect(latestRequest.method).toBe('POST'); - expect(latestRequest.url).toBe(`${API_BASE_PATH}repositories/${repo1.name}/cleanup`); + expect(httpSetup.post).toHaveBeenLastCalledWith( + `${API_BASE_PATH}repositories/${repo1.name}/cleanup`, + expect.anything() + ); expect(exists('repositoryDetail.cleanupCodeBlock')).toBe(false); expect(exists('repositoryDetail.cleanupError')).toBe(true); @@ -420,7 +414,7 @@ describe('', () => { describe('when the repository has been fetched (and has snapshots)', () => { beforeEach(async () => { - httpRequestsMockHelpers.setGetRepositoryResponse({ + httpRequestsMockHelpers.setGetRepositoryResponse(repo1.name, { repository: { name: 'my-repo', type: 'fs', @@ -448,7 +442,7 @@ describe('', () => { }); beforeEach(async () => { - testBed = await setup(); + testBed = await setup(httpSetup); await act(async () => { testBed.actions.selectTab('snapshots'); @@ -478,7 +472,7 @@ describe('', () => { total: 0, }); - testBed = await setup(); + testBed = await setup(httpSetup); await act(async () => { testBed.actions.selectTab('snapshots'); @@ -517,7 +511,7 @@ describe('', () => { total: 2, }); - testBed = await setup(); + testBed = await setup(httpSetup); await act(async () => { testBed.actions.selectTab('snapshots'); @@ -561,7 +555,7 @@ describe('', () => { }, }); - testBed = await setup(); + testBed = await setup(httpSetup); await act(async () => { testBed.actions.selectTab('snapshots'); @@ -589,7 +583,7 @@ describe('', () => { }, }); - testBed = await setup(); + testBed = await setup(httpSetup); await act(async () => { testBed.actions.selectTab('snapshots'); @@ -625,7 +619,6 @@ describe('', () => { test('should have a button to reload the snapshots', async () => { const { component, exists, actions } = testBed; - const totalRequests = server.requests.length; expect(exists('reloadButton')).toBe(true); await act(async () => { @@ -634,13 +627,19 @@ describe('', () => { component.update(); }); - expect(server.requests.length).toBe(totalRequests + 1); - expect(server.requests[server.requests.length - 1].url).toBe(`${API_BASE_PATH}snapshots`); + expect(httpSetup.get).toHaveBeenLastCalledWith( + `${API_BASE_PATH}snapshots`, + expect.anything() + ); }); describe('detail panel', () => { beforeEach(async () => { - httpRequestsMockHelpers.setGetSnapshotResponse(snapshot1); + httpRequestsMockHelpers.setGetSnapshotResponse( + snapshot1.repository, + snapshot1.snapshot, + snapshot1 + ); }); test('should show the detail when clicking on a snapshot', async () => { @@ -656,17 +655,18 @@ describe('', () => { // that makes the component crash. I tried a few things with no luck so, as this // is a low impact test, I prefer to skip it and move on. test.skip('should show a loading while fetching the snapshot', async () => { - server.respondImmediately = false; const { find, exists, actions } = testBed; // By providing undefined, the "loading section" will be displayed - httpRequestsMockHelpers.setGetSnapshotResponse(undefined); + httpRequestsMockHelpers.setGetSnapshotResponse( + snapshot1.repository, + snapshot1.snapshot, + undefined + ); await actions.clickSnapshotAt(0); expect(exists('snapshotDetail.sectionLoading')).toBe(true); expect(find('snapshotDetail.sectionLoading').text()).toEqual('Loading snapshot…'); - - server.respondImmediately = true; }); describe('on mount', () => { @@ -757,7 +757,11 @@ describe('', () => { const setSnapshotStateAndUpdateDetail = async (state: string) => { const updatedSnapshot = { ...snapshot1, state }; - httpRequestsMockHelpers.setGetSnapshotResponse(updatedSnapshot); + httpRequestsMockHelpers.setGetSnapshotResponse( + itemIndexToClickOn === 0 ? snapshot1.repository : snapshot2.repository, + itemIndexToClickOn === 0 ? snapshot1.snapshot : snapshot2.snapshot, + updatedSnapshot + ); await actions.clickSnapshotAt(itemIndexToClickOn); // click another snapshot to trigger the HTTP call }; @@ -787,9 +791,12 @@ describe('', () => { }; // Call sequentially each state and verify that the message is ok - return Object.entries(mapStateToMessage).reduce((promise, [state, message]) => { - return promise.then(async () => expectMessageForSnapshotState(state, message)); - }, Promise.resolve()); + return Object.entries(mapStateToMessage).reduce( + async (promise, [state, message]) => { + return promise.then(async () => expectMessageForSnapshotState(state, message)); + }, + Promise.resolve() + ); }); }); @@ -805,8 +812,12 @@ describe('', () => { test('should display a message when snapshot in progress ', async () => { const { find, actions } = testBed; - const updatedSnapshot = { ...snapshot1, state: 'IN_PROGRESS' }; - httpRequestsMockHelpers.setGetSnapshotResponse(updatedSnapshot); + const updatedSnapshot = { ...snapshot2, state: 'IN_PROGRESS' }; + httpRequestsMockHelpers.setGetSnapshotResponse( + snapshot2.repository, + snapshot2.snapshot, + updatedSnapshot + ); await actions.clickSnapshotAt(1); // click another snapshot to trigger the HTTP call actions.selectSnapshotDetailTab('failedIndices'); @@ -825,7 +836,11 @@ describe('', () => { beforeEach(async () => { const updatedSnapshot = { ...snapshot1, indexFailures }; - httpRequestsMockHelpers.setGetSnapshotResponse(updatedSnapshot); + httpRequestsMockHelpers.setGetSnapshotResponse( + updatedSnapshot.repository, + updatedSnapshot.snapshot, + updatedSnapshot + ); await testBed.actions.clickSnapshotAt(0); testBed.actions.selectSnapshotDetailTab('failedIndices'); }); diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_add.test.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_add.test.ts index 1e8546bef50e5..0950eda8fc630 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_add.test.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_add.test.ts @@ -12,6 +12,7 @@ import { ReactElement } from 'react'; import { act } from 'react-dom/test-utils'; import * as fixtures from '../../test/fixtures'; +import { API_BASE_PATH } from '../../common'; import { PolicyFormTestBed } from './helpers/policy_form.helpers'; import { DEFAULT_POLICY_SCHEDULE } from '../../public/application/constants'; @@ -36,12 +37,7 @@ const repository = fixtures.getRepository({ name: `a${getRandomString()}`, type: describe('', () => { let testBed: PolicyFormTestBed; - - const { server, httpRequestsMockHelpers } = setupEnvironment(); - - afterAll(() => { - server.restore(); - }); + const { httpSetup, httpRequestsMockHelpers } = setupEnvironment(); describe('on component mount', () => { beforeEach(async () => { @@ -51,7 +47,7 @@ describe('', () => { dataStreams: ['my_data_stream', 'my_other_data_stream'], }); - testBed = await setup(); + testBed = await setup(httpSetup); await nextTick(); testBed.component.update(); }); @@ -241,36 +237,37 @@ describe('', () => { await nextTick(); }); - const latestRequest = server.requests[server.requests.length - 1]; - - const expected = { - config: {}, - isManagedPolicy: false, - name: POLICY_NAME, - repository: repository.name, - retention: { - expireAfterUnit: 'd', // default - expireAfterValue: Number(EXPIRE_AFTER_VALUE), - maxCount: Number(MAX_COUNT), - minCount: Number(MIN_COUNT), - }, - schedule: DEFAULT_POLICY_SCHEDULE, - snapshotName: SNAPSHOT_NAME, - }; - - expect(JSON.parse(JSON.parse(latestRequest.requestBody).body)).toEqual(expected); + expect(httpSetup.post).toHaveBeenLastCalledWith( + `${API_BASE_PATH}policies`, + expect.objectContaining({ + body: JSON.stringify({ + name: POLICY_NAME, + snapshotName: SNAPSHOT_NAME, + schedule: DEFAULT_POLICY_SCHEDULE, + repository: repository.name, + config: {}, + retention: { + expireAfterValue: Number(EXPIRE_AFTER_VALUE), + expireAfterUnit: 'd', // default + maxCount: Number(MAX_COUNT), + minCount: Number(MIN_COUNT), + }, + isManagedPolicy: false, + }), + }) + ); }); it('should surface the API errors from the put HTTP request', async () => { const { component, actions, find, exists } = testBed; const error = { - status: 409, + statusCode: 409, error: 'Conflict', message: `There is already a policy with name '${POLICY_NAME}'`, }; - httpRequestsMockHelpers.setAddPolicyResponse(undefined, { body: error }); + httpRequestsMockHelpers.setAddPolicyResponse(undefined, error); await act(async () => { actions.clickSubmitButton(); diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_edit.test.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_edit.test.ts index 7d5d605b216bc..117d6f0e0e223 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_edit.test.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/policy_edit.test.ts @@ -8,6 +8,7 @@ import { act } from 'react-dom/test-utils'; import { setupEnvironment, pageHelpers, nextTick } from './helpers'; +import { API_BASE_PATH } from '../../common'; import { PolicyForm } from '../../public/application/components/policy_form'; import { PolicyFormTestBed } from './helpers/policy_form.helpers'; import { POLICY_EDIT } from './helpers/constant'; @@ -22,15 +23,11 @@ const EXPIRE_AFTER_UNIT = TIME_UNITS.MINUTE; describe('', () => { let testBed: PolicyFormTestBed; let testBedPolicyAdd: PolicyFormTestBed; - const { server, httpRequestsMockHelpers } = setupEnvironment(); - - afterAll(() => { - server.restore(); - }); + const { httpSetup, httpRequestsMockHelpers } = setupEnvironment(); describe('on component mount', () => { beforeEach(async () => { - httpRequestsMockHelpers.setGetPolicyResponse({ policy: POLICY_EDIT }); + httpRequestsMockHelpers.setGetPolicyResponse(POLICY_EDIT.name, { policy: POLICY_EDIT }); httpRequestsMockHelpers.setLoadIndicesResponse({ indices: ['my_index'], dataStreams: ['my_data_stream'], @@ -39,7 +36,7 @@ describe('', () => { repositories: [{ name: POLICY_EDIT.repository }], }); - testBed = await setup(); + testBed = await setup(httpSetup); await act(async () => { await nextTick(); @@ -55,7 +52,7 @@ describe('', () => { describe('policy with pre-existing repository that was deleted', () => { beforeEach(async () => { - httpRequestsMockHelpers.setGetPolicyResponse({ policy: POLICY_EDIT }); + httpRequestsMockHelpers.setGetPolicyResponse(POLICY_EDIT.name, { policy: POLICY_EDIT }); httpRequestsMockHelpers.setLoadIndicesResponse({ indices: ['my_index'], dataStreams: ['my_data_stream'], @@ -64,7 +61,7 @@ describe('', () => { repositories: [{ name: 'this-is-a-new-repository' }], }); - testBed = await setup(); + testBed = await setup(httpSetup); await act(async () => { await nextTick(); @@ -97,7 +94,7 @@ describe('', () => { * the same form component is indeed shared between the 2 app sections. */ test('should use the same Form component as the "" section', async () => { - testBedPolicyAdd = await setupPolicyAdd(); + testBedPolicyAdd = await setupPolicyAdd(httpSetup); await act(async () => { await nextTick(); @@ -143,27 +140,28 @@ describe('', () => { await nextTick(); }); - const latestRequest = server.requests[server.requests.length - 1]; - const { name, isManagedPolicy, schedule, repository, retention } = POLICY_EDIT; - const expected = { - name, - isManagedPolicy, - schedule, - repository, - config: { - ignoreUnavailable: true, - }, - retention: { - ...retention, - expireAfterValue: Number(EXPIRE_AFTER_VALUE), - expireAfterUnit: EXPIRE_AFTER_UNIT, - }, - snapshotName: editedSnapshotName, - }; - - expect(JSON.parse(JSON.parse(latestRequest.requestBody).body)).toEqual(expected); + expect(httpSetup.put).toHaveBeenLastCalledWith( + `${API_BASE_PATH}policies/${name}`, + expect.objectContaining({ + body: JSON.stringify({ + name, + snapshotName: editedSnapshotName, + schedule, + repository, + config: { + ignoreUnavailable: true, + }, + retention: { + ...retention, + expireAfterUnit: EXPIRE_AFTER_UNIT, + expireAfterValue: Number(EXPIRE_AFTER_VALUE), + }, + isManagedPolicy, + }), + }) + ); }); it('should provide a default time unit value for retention', async () => { @@ -184,25 +182,27 @@ describe('', () => { await nextTick(); }); - const latestRequest = server.requests[server.requests.length - 1]; - const { name, isManagedPolicy, schedule, repository, retention, config, snapshotName } = POLICY_EDIT; - const expected = { - name, - isManagedPolicy, - schedule, - repository, - config, - snapshotName, - retention: { - ...retention, - expireAfterValue: Number(EXPIRE_AFTER_VALUE), - expireAfterUnit: TIME_UNITS.DAY, // default value - }, - }; - expect(JSON.parse(JSON.parse(latestRequest.requestBody).body)).toEqual(expected); + expect(httpSetup.put).toHaveBeenLastCalledWith( + `${API_BASE_PATH}policies/${name}`, + expect.objectContaining({ + body: JSON.stringify({ + name, + snapshotName, + schedule, + repository, + config, + retention: { + ...retention, + expireAfterUnit: TIME_UNITS.DAY, // default value + expireAfterValue: Number(EXPIRE_AFTER_VALUE), + }, + isManagedPolicy, + }), + }) + ); }); }); }); diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/repository_add.test.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/repository_add.test.ts index 85d438fc5f3ae..3a34926272e07 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/repository_add.test.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/repository_add.test.ts @@ -8,6 +8,7 @@ import { act } from 'react-dom/test-utils'; import { INVALID_NAME_CHARS } from '../../public/application/services/validation/validate_repository'; +import { API_BASE_PATH } from '../../common'; import { getRepository } from '../../test/fixtures'; import { RepositoryType } from '../../common/types'; import { setupEnvironment, pageHelpers, nextTick, delay } from './helpers'; @@ -18,18 +19,13 @@ const repositoryTypes = ['fs', 'url', 'source', 'azure', 'gcs', 's3', 'hdfs']; describe('', () => { let testBed: RepositoryAddTestBed; - - const { server, httpRequestsMockHelpers } = setupEnvironment(); - - afterAll(() => { - server.restore(); - }); + const { httpSetup, httpRequestsMockHelpers } = setupEnvironment(); describe('on component mount', () => { beforeEach(async () => { httpRequestsMockHelpers.setLoadRepositoryTypesResponse(repositoryTypes); - testBed = await setup(); + testBed = await setup(httpSetup); }); test('should set the correct page title', () => { @@ -65,7 +61,7 @@ describe('', () => { describe('when no repository types are not found', () => { beforeEach(async () => { httpRequestsMockHelpers.setLoadRepositoryTypesResponse([]); - testBed = await setup(); + testBed = await setup(httpSetup); await nextTick(); testBed.component.update(); }); @@ -81,7 +77,7 @@ describe('', () => { describe('when repository types are found', () => { beforeEach(async () => { httpRequestsMockHelpers.setLoadRepositoryTypesResponse(repositoryTypes); - testBed = await setup(); + testBed = await setup(httpSetup); await nextTick(); testBed.component.update(); }); @@ -104,7 +100,7 @@ describe('', () => { beforeEach(async () => { httpRequestsMockHelpers.setLoadRepositoryTypesResponse(repositoryTypes); - testBed = await setup(); + testBed = await setup(httpSetup); await nextTick(); testBed.component.update(); }); @@ -205,7 +201,7 @@ describe('', () => { beforeEach(async () => { httpRequestsMockHelpers.setLoadRepositoryTypesResponse(repositoryTypes); - testBed = await setup(); + testBed = await setup(httpSetup); }); describe('not source only', () => { @@ -231,17 +227,23 @@ describe('', () => { component.update(); - const latestRequest = server.requests[server.requests.length - 1]; - - expect(JSON.parse(JSON.parse(latestRequest.requestBody).body)).toEqual({ - name: fsRepository.name, - type: fsRepository.type, - settings: { - ...fsRepository.settings, - compress: true, - readonly: true, - }, - }); + expect(httpSetup.put).toHaveBeenLastCalledWith( + `${API_BASE_PATH}repositories`, + expect.objectContaining({ + body: JSON.stringify({ + name: fsRepository.name, + type: fsRepository.type, + settings: { + location: fsRepository.settings.location, + compress: true, + chunkSize: fsRepository.settings.chunkSize, + maxSnapshotBytesPerSec: fsRepository.settings.maxSnapshotBytesPerSec, + maxRestoreBytesPerSec: fsRepository.settings.maxRestoreBytesPerSec, + readonly: true, + }, + }), + }) + ); }); test('should send the correct payload for Azure repository', async () => { @@ -283,17 +285,25 @@ describe('', () => { component.update(); - const latestRequest = server.requests[server.requests.length - 1]; - - expect(JSON.parse(JSON.parse(latestRequest.requestBody).body)).toEqual({ - name: azureRepository.name, - type: azureRepository.type, - settings: { - ...azureRepository.settings, - compress: false, - readonly: true, - }, - }); + expect(httpSetup.put).toHaveBeenLastCalledWith( + `${API_BASE_PATH}repositories`, + expect.objectContaining({ + body: JSON.stringify({ + name: azureRepository.name, + type: azureRepository.type, + settings: { + client: azureRepository.settings.client, + container: azureRepository.settings.container, + basePath: azureRepository.settings.basePath, + compress: false, + chunkSize: azureRepository.settings.chunkSize, + maxSnapshotBytesPerSec: azureRepository.settings.maxSnapshotBytesPerSec, + maxRestoreBytesPerSec: azureRepository.settings.maxRestoreBytesPerSec, + readonly: true, + }, + }), + }) + ); }); test('should send the correct payload for GCS repository', async () => { @@ -332,17 +342,25 @@ describe('', () => { component.update(); - const latestRequest = server.requests[server.requests.length - 1]; - - expect(JSON.parse(JSON.parse(latestRequest.requestBody).body)).toEqual({ - name: gcsRepository.name, - type: gcsRepository.type, - settings: { - ...gcsRepository.settings, - compress: false, - readonly: true, - }, - }); + expect(httpSetup.put).toHaveBeenLastCalledWith( + `${API_BASE_PATH}repositories`, + expect.objectContaining({ + body: JSON.stringify({ + name: gcsRepository.name, + type: gcsRepository.type, + settings: { + client: gcsRepository.settings.client, + bucket: gcsRepository.settings.bucket, + basePath: gcsRepository.settings.basePath, + compress: false, + chunkSize: gcsRepository.settings.chunkSize, + maxSnapshotBytesPerSec: gcsRepository.settings.maxSnapshotBytesPerSec, + maxRestoreBytesPerSec: gcsRepository.settings.maxRestoreBytesPerSec, + readonly: true, + }, + }), + }) + ); }); test('should send the correct payload for HDFS repository', async () => { @@ -379,18 +397,24 @@ describe('', () => { component.update(); - const latestRequest = server.requests[server.requests.length - 1]; - - expect(JSON.parse(JSON.parse(latestRequest.requestBody).body)).toEqual({ - name: hdfsRepository.name, - type: hdfsRepository.type, - settings: { - ...hdfsRepository.settings, - uri: `hdfs://${hdfsRepository.settings.uri}`, - compress: false, - readonly: true, - }, - }); + expect(httpSetup.put).toHaveBeenLastCalledWith( + `${API_BASE_PATH}repositories`, + expect.objectContaining({ + body: JSON.stringify({ + name: hdfsRepository.name, + type: hdfsRepository.type, + settings: { + uri: `hdfs://${hdfsRepository.settings.uri}`, + path: hdfsRepository.settings.path, + compress: false, + chunkSize: hdfsRepository.settings.chunkSize, + maxSnapshotBytesPerSec: hdfsRepository.settings.maxSnapshotBytesPerSec, + maxRestoreBytesPerSec: hdfsRepository.settings.maxRestoreBytesPerSec, + readonly: true, + }, + }), + }) + ); }); test('should send the correct payload for S3 repository', async () => { @@ -431,17 +455,26 @@ describe('', () => { component.update(); - const latestRequest = server.requests[server.requests.length - 1]; - - expect(JSON.parse(JSON.parse(latestRequest.requestBody).body)).toEqual({ - name: s3Repository.name, - type: s3Repository.type, - settings: { - ...s3Repository.settings, - compress: false, - readonly: true, - }, - }); + expect(httpSetup.put).toHaveBeenLastCalledWith( + `${API_BASE_PATH}repositories`, + expect.objectContaining({ + body: JSON.stringify({ + name: s3Repository.name, + type: s3Repository.type, + settings: { + bucket: s3Repository.settings.bucket, + client: s3Repository.settings.client, + basePath: s3Repository.settings.basePath, + bufferSize: s3Repository.settings.bufferSize, + compress: false, + chunkSize: s3Repository.settings.chunkSize, + maxSnapshotBytesPerSec: s3Repository.settings.maxSnapshotBytesPerSec, + maxRestoreBytesPerSec: s3Repository.settings.maxRestoreBytesPerSec, + readonly: true, + }, + }), + }) + ); }); test('should surface the API errors from the "save" HTTP request', async () => { @@ -457,12 +490,12 @@ describe('', () => { form.toggleEuiSwitch('compressToggle'); const error = { - status: 400, + statusCode: 400, error: 'Bad request', message: 'Repository payload is invalid', }; - httpRequestsMockHelpers.setSaveRepositoryResponse(undefined, { body: error }); + httpRequestsMockHelpers.setSaveRepositoryResponse(undefined, error); await act(async () => { actions.clickSubmitButton(); @@ -496,16 +529,19 @@ describe('', () => { component.update(); - const latestRequest = server.requests[server.requests.length - 1]; - - expect(JSON.parse(JSON.parse(latestRequest.requestBody).body)).toEqual({ - name: fsRepository.name, - type: 'source', - settings: { - delegateType: fsRepository.type, - location: fsRepository.settings.location, - }, - }); + expect(httpSetup.put).toHaveBeenLastCalledWith( + `${API_BASE_PATH}repositories`, + expect.objectContaining({ + body: JSON.stringify({ + name: fsRepository.name, + type: 'source', + settings: { + delegateType: fsRepository.type, + location: fsRepository.settings.location, + }, + }), + }) + ); }); }); }); diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/repository_edit.test.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/repository_edit.test.ts index 8adf1e988ff1e..102c0d13a012b 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/repository_edit.test.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/repository_edit.test.ts @@ -11,7 +11,7 @@ import { setupEnvironment, pageHelpers, nextTick, TestBed, getRandomString } fro import { RepositoryForm } from '../../public/application/components/repository_form'; import { RepositoryEditTestSubjects } from './helpers/repository_edit.helpers'; import { RepositoryAddTestSubjects } from './helpers/repository_add.helpers'; -import { REPOSITORY_EDIT } from './helpers/constant'; +import { REPOSITORY_EDIT, REPOSITORY_NAME } from './helpers/constant'; const { setup } = pageHelpers.repositoryEdit; const { setup: setupRepositoryAdd } = pageHelpers.repositoryAdd; @@ -19,19 +19,15 @@ const { setup: setupRepositoryAdd } = pageHelpers.repositoryAdd; describe('', () => { let testBed: TestBed; let testBedRepositoryAdd: TestBed; - const { server, httpRequestsMockHelpers } = setupEnvironment(); - - afterAll(() => { - server.restore(); - }); + const { httpSetup, httpRequestsMockHelpers } = setupEnvironment(); describe('on component mount', () => { beforeEach(async () => { - httpRequestsMockHelpers.setGetRepositoryResponse({ + httpRequestsMockHelpers.setGetRepositoryResponse(REPOSITORY_EDIT.name, { repository: REPOSITORY_EDIT, snapshots: { count: 0 }, }); - testBed = await setup(); + testBed = await setup(httpSetup); await act(async () => { await nextTick(); @@ -54,7 +50,7 @@ describe('', () => { test('should use the same Form component as the "" section', async () => { httpRequestsMockHelpers.setLoadRepositoryTypesResponse(['fs', 'url']); - testBedRepositoryAdd = await setupRepositoryAdd(); + testBedRepositoryAdd = await setupRepositoryAdd(httpSetup); const formEdit = testBed.component.find(RepositoryForm); const formAdd = testBedRepositoryAdd.component.find(RepositoryForm); @@ -66,11 +62,11 @@ describe('', () => { describe('should populate the correct values', () => { const mountComponentWithMock = async (repository: any) => { - httpRequestsMockHelpers.setGetRepositoryResponse({ + httpRequestsMockHelpers.setGetRepositoryResponse(REPOSITORY_NAME, { repository: { name: getRandomString(), ...repository }, snapshots: { count: 0 }, }); - testBed = await setup(); + testBed = await setup(httpSetup); await act(async () => { await nextTick(); diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/restore_snapshot.test.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/restore_snapshot.test.ts index 2d8c734af3605..1bd9898f9f1b2 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/restore_snapshot.test.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/restore_snapshot.test.ts @@ -6,8 +6,10 @@ */ import { act } from 'react-dom/test-utils'; +import { API_BASE_PATH } from '../../common'; import { pageHelpers, setupEnvironment } from './helpers'; import { RestoreSnapshotTestBed } from './helpers/restore_snapshot.helpers'; +import { REPOSITORY_NAME, SNAPSHOT_NAME } from './helpers/constant'; import * as fixtures from '../../test/fixtures'; const { @@ -15,19 +17,19 @@ const { } = pageHelpers; describe('', () => { - const { server, httpRequestsMockHelpers } = setupEnvironment(); + const { httpSetup, httpRequestsMockHelpers } = setupEnvironment(); let testBed: RestoreSnapshotTestBed; - afterAll(() => { - server.restore(); - }); - describe('wizard navigation', () => { beforeEach(async () => { - httpRequestsMockHelpers.setGetSnapshotResponse(fixtures.getSnapshot()); + httpRequestsMockHelpers.setGetSnapshotResponse( + REPOSITORY_NAME, + SNAPSHOT_NAME, + fixtures.getSnapshot() + ); await act(async () => { - testBed = await setup(); + testBed = await setup(httpSetup); }); testBed.component.update(); @@ -44,10 +46,14 @@ describe('', () => { describe('with data streams', () => { beforeEach(async () => { - httpRequestsMockHelpers.setGetSnapshotResponse(fixtures.getSnapshot()); + httpRequestsMockHelpers.setGetSnapshotResponse( + REPOSITORY_NAME, + SNAPSHOT_NAME, + fixtures.getSnapshot() + ); await act(async () => { - testBed = await setup(); + testBed = await setup(httpSetup); }); testBed.component.update(); @@ -61,9 +67,13 @@ describe('', () => { describe('without data streams', () => { beforeEach(async () => { - httpRequestsMockHelpers.setGetSnapshotResponse(fixtures.getSnapshot({ totalDataStreams: 0 })); + httpRequestsMockHelpers.setGetSnapshotResponse( + REPOSITORY_NAME, + SNAPSHOT_NAME, + fixtures.getSnapshot({ totalDataStreams: 0 }) + ); await act(async () => { - testBed = await setup(); + testBed = await setup(httpSetup); }); testBed.component.update(); @@ -77,9 +87,13 @@ describe('', () => { describe('global state', () => { beforeEach(async () => { - httpRequestsMockHelpers.setGetSnapshotResponse(fixtures.getSnapshot()); + httpRequestsMockHelpers.setGetSnapshotResponse( + REPOSITORY_NAME, + SNAPSHOT_NAME, + fixtures.getSnapshot() + ); await act(async () => { - testBed = await setup(); + testBed = await setup(httpSetup); }); testBed.component.update(); @@ -100,11 +114,14 @@ describe('', () => { // the form controls and asserting that the correct payload is sent to the API. describe('include aliases', () => { beforeEach(async () => { - httpRequestsMockHelpers.setGetSnapshotResponse(fixtures.getSnapshot()); - httpRequestsMockHelpers.setRestoreSnapshotResponse({}); + httpRequestsMockHelpers.setGetSnapshotResponse( + REPOSITORY_NAME, + SNAPSHOT_NAME, + fixtures.getSnapshot() + ); await act(async () => { - testBed = await setup(); + testBed = await setup(httpSetup); }); testBed.component.update(); @@ -116,9 +133,14 @@ describe('', () => { actions.goToStep(3); await actions.clickRestore(); - const expectedPayload = { includeAliases: false }; - const latestRequest = server.requests[server.requests.length - 1]; - expect(JSON.parse(JSON.parse(latestRequest.requestBody).body)).toEqual(expectedPayload); + expect(httpSetup.post).toHaveBeenLastCalledWith( + `${API_BASE_PATH}restore/${REPOSITORY_NAME}/${SNAPSHOT_NAME}`, + expect.objectContaining({ + body: JSON.stringify({ + includeAliases: false, + }), + }) + ); }); }); });