Skip to content

Commit

Permalink
test: fix unit test after refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
edoardo committed Mar 5, 2025
1 parent ef1be5d commit 0442413
Show file tree
Hide file tree
Showing 2 changed files with 137 additions and 71 deletions.
135 changes: 64 additions & 71 deletions src/components/Item/AppItem/__tests__/Item.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,37 +3,13 @@ import React from 'react'
import { Provider } from 'react-redux'
import configureMockStore from 'redux-mock-store'
import { APP } from '../../../../modules/itemTypes.js'
import InstalledAppsProvider from '../../../InstalledAppsProvider.js'
import SystemSettingsProvider from '../../../SystemSettingsProvider.js'
import WindowDimensionsProvider from '../../../WindowDimensionsProvider.js'
import { Item } from '../../Item.js'

jest.mock('@dhis2/analytics', () => ({
useCachedDataQuery: () => ({
apps: [
{
key: 'app-widget',
name: 'Scorecard',
appType: 'DASHBOARD_WIDGET',
launchUrl: 'https://iframe/app/widget/scorecard',
},
{
key: 'app-widget-no-title',
name: 'Scorecard but hide the title',
launchUrl: 'https://iframe/app/widget/scorecard',
appType: 'DASHBOARD_WIDGET',
settings: {
dashboardWidget: {
hideTitle: true,
},
},
},
{
key: 'dashboard-plugin',
name: 'Dashboard plugin',
appType: 'APP',
pluginLaunchUrl: 'https://plugin/iframe/url',
},
],
currentUser: {
username: 'rainbowDash',
id: 'r3nb0d5h',
Expand Down Expand Up @@ -77,6 +53,7 @@ jest.mock('@dhis2/app-runtime/experimental', () => ({
},
}))

jest.mock('../../../InstalledAppsProvider')
jest.mock('../../../SystemSettingsProvider')
jest.mock(
'../../ItemHeader/DeleteItemButton.js',
Expand Down Expand Up @@ -122,11 +99,13 @@ test('renders a valid plugin AppItem in view mode', () => {
}
const { container } = render(
<Provider store={mockStore(store)}>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item item={pluginItem} dashboardMode={'view'} />
</WindowDimensionsProvider>
</SystemSettingsProvider>
<InstalledAppsProvider>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item item={pluginItem} dashboardMode={'view'} />
</WindowDimensionsProvider>
</SystemSettingsProvider>
</InstalledAppsProvider>
</Provider>
)
expect(container).toMatchSnapshot()
Expand All @@ -143,11 +122,13 @@ test('renders a valid plugin AppItem with filter in view mode', () => {

const { container } = render(
<Provider store={mockStore(store)}>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item item={pluginItem} dashboardMode={'view'} />
</WindowDimensionsProvider>
</SystemSettingsProvider>
<InstalledAppsProvider>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item item={pluginItem} dashboardMode={'view'} />
</WindowDimensionsProvider>
</SystemSettingsProvider>
</InstalledAppsProvider>
</Provider>
)
expect(container).toMatchSnapshot()
Expand All @@ -168,11 +149,13 @@ test('renders a valid plugin AppItem with filter in edit mode', () => {

const { container } = render(
<Provider store={mockStore(store)}>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item item={pluginItem} dashboardMode={'edit'} />
</WindowDimensionsProvider>
</SystemSettingsProvider>
<InstalledAppsProvider>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item item={pluginItem} dashboardMode={'edit'} />
</WindowDimensionsProvider>
</SystemSettingsProvider>
</InstalledAppsProvider>
</Provider>
)
expect(container).toMatchSnapshot()
Expand All @@ -187,14 +170,16 @@ test('renders a valid widget AppItem without title in view mode if specified in

const { container } = render(
<Provider store={mockStore(store)}>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item
item={widgetItemWithoutTitle}
dashboardMode={'view'}
/>
</WindowDimensionsProvider>
</SystemSettingsProvider>
<InstalledAppsProvider>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item
item={widgetItemWithoutTitle}
dashboardMode={'view'}
/>
</WindowDimensionsProvider>
</SystemSettingsProvider>
</InstalledAppsProvider>
</Provider>
)
expect(container).toMatchSnapshot()
Expand All @@ -212,14 +197,16 @@ test('renders a valid widget AppItem with title in edit mode irrespective of app

const { container } = render(
<Provider store={mockStore(store)}>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item
item={widgetItemWithoutTitle}
dashboardMode={'edit'}
/>
</WindowDimensionsProvider>
</SystemSettingsProvider>
<InstalledAppsProvider>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item
item={widgetItemWithoutTitle}
dashboardMode={'edit'}
/>
</WindowDimensionsProvider>
</SystemSettingsProvider>
</InstalledAppsProvider>
</Provider>
)
expect(container).toMatchSnapshot()
Expand All @@ -234,11 +221,13 @@ test('renders a valid widget AppItem', () => {
}
const { container } = render(
<Provider store={mockStore(store)}>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item item={widgetItem} dashboardMode={'view'} />
</WindowDimensionsProvider>
</SystemSettingsProvider>
<InstalledAppsProvider>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item item={widgetItem} dashboardMode={'view'} />
</WindowDimensionsProvider>
</SystemSettingsProvider>
</InstalledAppsProvider>
</Provider>
)
expect(container).toMatchSnapshot()
Expand All @@ -253,11 +242,13 @@ test('renders a valid widget AppItem when in slideshow', () => {
}
const { container } = render(
<Provider store={mockStore(store)}>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item item={widgetItem} dashboardMode={'view'} />
</WindowDimensionsProvider>
</SystemSettingsProvider>
<InstalledAppsProvider>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item item={widgetItem} dashboardMode={'view'} />
</WindowDimensionsProvider>
</SystemSettingsProvider>
</InstalledAppsProvider>
</Provider>
)
expect(container).toMatchSnapshot()
Expand All @@ -281,11 +272,13 @@ test('renders an invalid AppItem', () => {

const { container } = render(
<Provider store={mockStore(store)}>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item item={invalidItem} dashboardMode={'edit'} />
</WindowDimensionsProvider>
</SystemSettingsProvider>
<InstalledAppsProvider>
<SystemSettingsProvider>
<WindowDimensionsProvider>
<Item item={invalidItem} dashboardMode={'edit'} />
</WindowDimensionsProvider>
</SystemSettingsProvider>
</InstalledAppsProvider>
</Provider>
)
expect(container).toMatchSnapshot()
Expand Down
73 changes: 73 additions & 0 deletions src/components/__mocks__/InstalledAppsProvider.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import PropTypes from 'prop-types'
import React, { useContext, createContext } from 'react'

export const InstalledAppsCtx = createContext({
apps: [],
bundledApps: [],
})

//const DV_APP_KEY = 'data-visualizer'
//const LL_APP_KEY = 'line-listing'
//const MAPS_APP_KEY = 'maps'
//
//const findAppVersion = (apps, bundledApps, appKey) =>
// apps.find((app) => app.key === appKey)?.version ||
// bundledApps.find((app) => app.name === appKey)?.version ||
// '0.0.0'

const InstalledAppsProvider = ({ children }) => {
return (
<InstalledAppsCtx.Provider
value={{
apps: [
{
key: 'app-widget',
name: 'Scorecard',
appType: 'DASHBOARD_WIDGET',
launchUrl: 'https://iframe/app/widget/scorecard',
},
{
key: 'app-widget-no-title',
name: 'Scorecard but hide the title',
launchUrl: 'https://iframe/app/widget/scorecard',
appType: 'DASHBOARD_WIDGET',
settings: {
dashboardWidget: {
hideTitle: true,
},
},
},
{
key: 'dashboard-plugin',
name: 'Dashboard plugin',
appType: 'APP',
pluginLaunchUrl: 'https://plugin/iframe/url',
},
],
bundledApps: [],
}}
>
{children}
</InstalledAppsCtx.Provider>
)
}

InstalledAppsProvider.propTypes = {
children: PropTypes.node,
}

//const useInstalledAppVersion = (key) => {
// const { apps, bundledApps } = useContext(InstalledAppsCtx)
// return findAppVersion(apps, bundledApps, key)
//}

export default InstalledAppsProvider

export const useInstalledApps = () => {
const { apps } = useContext(InstalledAppsCtx)
return apps
}
//export const useInstalledDVVersion = () => useInstalledAppVersion(DV_APP_KEY)
//export const useInstalledLLVersion = () => useInstalledAppVersion(LL_APP_KEY)
//export const useInstalledMapsVersion = () =>
// useInstalledAppVersion(MAPS_APP_KEY)

0 comments on commit 0442413

Please sign in to comment.