forked from opensearch-project/OpenSearch-Dashboards
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: register sample data as standalone app (opensearch-project#8)
* feat: register sample data as standalone app Signed-off-by: SuZhou-Joe <suzhou@amazon.com> * feat: optimize code Signed-off-by: SuZhou-Joe <suzhou@amazon.com> * feat: add comment Signed-off-by: SuZhou-Joe <suzhou@amazon.com> * feat: use props to pass homeLink Signed-off-by: SuZhou-Joe <suzhou@amazon.com> * feat: add unit test Signed-off-by: SuZhou-Joe <suzhou@amazon.com> --------- Signed-off-by: SuZhou-Joe <suzhou@amazon.com>
- Loading branch information
1 parent
b1da07e
commit b4c0c27
Showing
11 changed files
with
365 additions
and
52 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
/* | ||
* Copyright OpenSearch Contributors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
import React, { useEffect, useRef } from 'react'; | ||
import { render } from '@testing-library/react'; | ||
import { coreMock, scopedHistoryMock } from '../../../../core/public/mocks'; | ||
import { renderImportSampleDataApp } from './application'; | ||
|
||
jest.mock('./components/home_app', () => ({ | ||
HomeApp: () => 'HomeApp', | ||
ImportSampleDataApp: () => 'ImportSampleDataApp', | ||
})); | ||
|
||
const coreStartMocks = coreMock.createStart(); | ||
|
||
const ComponentForRender = (props: { renderFn: typeof renderImportSampleDataApp }) => { | ||
const container = useRef<HTMLDivElement>(null); | ||
const historyMock = scopedHistoryMock.create(); | ||
historyMock.listen.mockReturnValueOnce(() => () => null); | ||
useEffect(() => { | ||
if (container.current) { | ||
const destroyFn = props.renderFn(container.current, coreStartMocks, historyMock); | ||
return () => { | ||
destroyFn.then((res) => res()); | ||
}; | ||
} | ||
}, [historyMock, props]); | ||
|
||
return <div ref={container} />; | ||
}; | ||
|
||
describe('renderImportSampleDataApp', () => { | ||
it('should render ImportSampleDataApp when calling renderImportSampleDataApp', async () => { | ||
const { container } = render(<ComponentForRender renderFn={renderImportSampleDataApp} />); | ||
expect(container).toMatchInlineSnapshot(` | ||
<div> | ||
<div> | ||
ImportSampleDataApp | ||
</div> | ||
</div> | ||
`); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
60 changes: 60 additions & 0 deletions
60
src/plugins/home/public/application/components/home_app.test.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
/* | ||
* Copyright OpenSearch Contributors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
import React from 'react'; | ||
import { render } from '@testing-library/react'; | ||
import { setServices } from '../opensearch_dashboards_services'; | ||
import { getMockedServices } from '../opensearch_dashboards_services.mock'; | ||
import { ImportSampleDataApp, HomeApp } from './home_app'; | ||
|
||
jest.mock('./legacy/home', () => ({ | ||
Home: () => <div>Home</div>, | ||
})); | ||
|
||
jest.mock('../load_tutorials', () => ({ | ||
getTutorial: () => {}, | ||
})); | ||
|
||
jest.mock('./tutorial_directory', () => ({ | ||
TutorialDirectory: (props: { withoutHomeBreadCrumb?: boolean }) => ( | ||
<div | ||
data-test-subj="tutorial_directory" | ||
data-without-home-bread-crumb={!!props.withoutHomeBreadCrumb} | ||
/> | ||
), | ||
})); | ||
|
||
describe('<HomeApp />', () => { | ||
let currentService: ReturnType<typeof getMockedServices>; | ||
beforeEach(() => { | ||
currentService = getMockedServices(); | ||
setServices(currentService); | ||
}); | ||
|
||
it('should not pass withoutHomeBreadCrumb to TutorialDirectory component', async () => { | ||
const originalHash = window.location.hash; | ||
const { findByTestId } = render(<HomeApp />); | ||
window.location.hash = '/tutorial_directory'; | ||
const tutorialRenderResult = await findByTestId('tutorial_directory'); | ||
expect(tutorialRenderResult.dataset.withoutHomeBreadCrumb).toEqual('false'); | ||
|
||
// revert to original hash | ||
window.location.hash = originalHash; | ||
}); | ||
}); | ||
|
||
describe('<ImportSampleDataApp />', () => { | ||
let currentService: ReturnType<typeof getMockedServices>; | ||
beforeEach(() => { | ||
currentService = getMockedServices(); | ||
setServices(currentService); | ||
}); | ||
|
||
it('should pass withoutHomeBreadCrumb to TutorialDirectory component', async () => { | ||
const { findByTestId } = render(<ImportSampleDataApp />); | ||
const tutorialRenderResult = await findByTestId('tutorial_directory'); | ||
expect(tutorialRenderResult.dataset.withoutHomeBreadCrumb).toEqual('true'); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
65 changes: 65 additions & 0 deletions
65
src/plugins/home/public/application/components/tutorial_directory.test.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
/* | ||
* Copyright OpenSearch Contributors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
import React from 'react'; | ||
import { render } from '@testing-library/react'; | ||
import { IntlProvider } from 'react-intl'; | ||
import { coreMock } from '../../../../../core/public/mocks'; | ||
import { setServices } from '../opensearch_dashboards_services'; | ||
import { getMockedServices } from '../opensearch_dashboards_services.mock'; | ||
|
||
const makeProps = () => { | ||
const coreMocks = coreMock.createStart(); | ||
return { | ||
addBasePath: coreMocks.http.basePath.prepend, | ||
openTab: 'foo', | ||
isCloudEnabled: false, | ||
}; | ||
}; | ||
|
||
describe('<TutorialDirectory />', () => { | ||
let currentService: ReturnType<typeof getMockedServices>; | ||
beforeEach(() => { | ||
currentService = getMockedServices(); | ||
setServices(currentService); | ||
}); | ||
it('should render home breadcrumbs when withoutHomeBreadCrumb is undefined', async () => { | ||
const finalProps = makeProps(); | ||
currentService.http.get.mockResolvedValueOnce([]); | ||
// @ts-ignore | ||
const { TutorialDirectory } = await import('./tutorial_directory'); | ||
render( | ||
<IntlProvider locale="en"> | ||
<TutorialDirectory {...finalProps} /> | ||
</IntlProvider> | ||
); | ||
expect(currentService.chrome.setBreadcrumbs).toBeCalledWith([ | ||
{ | ||
href: '#/', | ||
text: 'Home', | ||
}, | ||
{ | ||
text: 'Add data', | ||
}, | ||
]); | ||
}); | ||
|
||
it('should not render home breadcrumbs when withoutHomeBreadCrumb is true', async () => { | ||
const finalProps = makeProps(); | ||
currentService.http.get.mockResolvedValueOnce([]); | ||
// @ts-ignore | ||
const { TutorialDirectory } = await import('./tutorial_directory'); | ||
render( | ||
<IntlProvider locale="en"> | ||
<TutorialDirectory {...finalProps} withoutHomeBreadCrumb /> | ||
</IntlProvider> | ||
); | ||
expect(currentService.chrome.setBreadcrumbs).toBeCalledWith([ | ||
{ | ||
text: 'Add data', | ||
}, | ||
]); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
47 changes: 47 additions & 0 deletions
47
src/plugins/home/public/application/opensearch_dashboards_services.mock.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
/* | ||
* Copyright OpenSearch Contributors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
import { coreMock } from '../../../../core/public/mocks'; | ||
import { urlForwardingPluginMock } from '../../../url_forwarding/public/mocks'; | ||
import { homePluginMock } from '../mocks'; | ||
import { | ||
EnvironmentService, | ||
FeatureCatalogueRegistry, | ||
SectionTypeService, | ||
TutorialService, | ||
} from '../services'; | ||
import { telemetryPluginMock } from '../../../telemetry/public/mocks'; | ||
|
||
export const getMockedServices = () => { | ||
const coreMocks = coreMock.createStart(); | ||
const urlForwarding = urlForwardingPluginMock.createStartContract(); | ||
const homePlugin = homePluginMock.createSetupContract(); | ||
return { | ||
...coreMocks, | ||
...homePlugin, | ||
telemetry: telemetryPluginMock.createStartContract(), | ||
indexPatternService: jest.fn(), | ||
dataSource: { | ||
dataSourceEnabled: false, | ||
hideLocalCluster: false, | ||
noAuthenticationTypeEnabled: false, | ||
usernamePasswordAuthEnabled: false, | ||
awsSigV4AuthEnabled: false, | ||
}, | ||
opensearchDashboardsVersion: '', | ||
urlForwarding, | ||
savedObjectsClient: coreMocks.savedObjects.client, | ||
toastNotifications: coreMocks.notifications.toasts, | ||
banners: coreMocks.overlays.banners, | ||
trackUiMetric: jest.fn(), | ||
getBasePath: jest.fn(), | ||
addBasePath: jest.fn(), | ||
environmentService: new EnvironmentService(), | ||
tutorialService: new TutorialService(), | ||
homeConfig: homePlugin.config, | ||
featureCatalogue: new FeatureCatalogueRegistry(), | ||
sectionTypes: new SectionTypeService(), | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.