mirror of https://github.com/grafana/grafana
parent
1fbdd02464
commit
865d1567fc
@ -0,0 +1,126 @@ |
||||
import React from 'react'; |
||||
import { shallow, ShallowWrapper } from 'enzyme'; |
||||
import { DashboardPage, Props, State } from './DashboardPage'; |
||||
import { DashboardModel } from '../state'; |
||||
import { setDashboardModel } from '../state/actions'; |
||||
import { DashboardRouteInfo, DashboardLoadingState } from 'app/types'; |
||||
|
||||
jest.mock('sass/_variables.scss', () => ({ |
||||
panelhorizontalpadding: 10, |
||||
panelVerticalPadding: 10, |
||||
})); |
||||
|
||||
jest.mock('app/features/dashboard/components/DashboardSettings/SettingsCtrl', () => ({ |
||||
})); |
||||
|
||||
function setup(propOverrides?: Partial<Props>): ShallowWrapper<Props, State, DashboardPage> { |
||||
const props: Props = { |
||||
urlUid: '11', |
||||
urlSlug: 'my-dash', |
||||
$scope: {}, |
||||
$injector: {}, |
||||
routeInfo: DashboardRouteInfo.Normal, |
||||
urlEdit: false, |
||||
urlFullscreen: false, |
||||
loadingState: DashboardLoadingState.Done, |
||||
isLoadingSlow: false, |
||||
initDashboard: jest.fn(), |
||||
updateLocation: jest.fn(), |
||||
notifyApp: jest.fn(), |
||||
dashboard: null, |
||||
setDashboardModel: setDashboardModel, |
||||
}; |
||||
|
||||
Object.assign(props, propOverrides); |
||||
return shallow(<DashboardPage {...props} />); |
||||
} |
||||
|
||||
describe('DashboardPage', () => { |
||||
let wrapper: ShallowWrapper<Props, State, DashboardPage>; |
||||
|
||||
beforeEach(() => { |
||||
wrapper = setup(); |
||||
}); |
||||
|
||||
describe('Given dashboard has not loaded yet', () => { |
||||
it('should render nothing', () => { |
||||
expect(wrapper).toMatchSnapshot(); |
||||
}); |
||||
}); |
||||
|
||||
describe('Given dashboard model', () => { |
||||
let dashboard: DashboardModel; |
||||
|
||||
beforeEach(() => { |
||||
dashboard = new DashboardModel({ |
||||
title: 'My dashboard', |
||||
panels: [ |
||||
{ |
||||
id: 1, |
||||
type: 'graph', |
||||
title: 'My graph', |
||||
gridPos: { x: 0, y: 0, w: 1, h: 1 } |
||||
} |
||||
] |
||||
}, { |
||||
canEdit: true, |
||||
canSave: true, |
||||
}); |
||||
wrapper.setProps({ dashboard, loadingState: DashboardLoadingState.Done }); |
||||
}); |
||||
|
||||
it('Should update title', () => { |
||||
expect(document.title).toBe('My dashboard - Grafana'); |
||||
}); |
||||
|
||||
it('After render dashboard', () => { |
||||
expect(wrapper).toMatchSnapshot(); |
||||
}); |
||||
|
||||
describe('Given user has scrolled down and goes into fullscreen edit', () => { |
||||
beforeEach(() => { |
||||
wrapper.setState({ scrollTop: 100 }); |
||||
wrapper.setProps({ |
||||
urlFullscreen: true, |
||||
urlEdit: true, |
||||
urlPanelId: '1', |
||||
}); |
||||
}); |
||||
|
||||
it('Should update model state to fullscreen & edit', () => { |
||||
expect(dashboard.meta.fullscreen).toBe(true); |
||||
expect(dashboard.meta.isEditing).toBe(true); |
||||
}); |
||||
|
||||
it('Should update component state to fullscreen and edit', () => { |
||||
const state = wrapper.state(); |
||||
expect(state.isEditing).toBe(true); |
||||
expect(state.isFullscreen).toBe(true); |
||||
expect(state.rememberScrollTop).toBe(100); |
||||
}); |
||||
|
||||
describe('Given user goes back to dashboard', () => { |
||||
beforeEach(() => { |
||||
wrapper.setState({ scrollTop: 0 }); |
||||
wrapper.setProps({ |
||||
urlFullscreen: false, |
||||
urlEdit: false, |
||||
urlPanelId: null, |
||||
}); |
||||
}); |
||||
|
||||
it('Should update model state normal state', () => { |
||||
expect(dashboard.meta.fullscreen).toBe(false); |
||||
expect(dashboard.meta.isEditing).toBe(false); |
||||
}); |
||||
|
||||
it('Should update component state to normal and restore scrollTop', () => { |
||||
const state = wrapper.state(); |
||||
expect(state.isEditing).toBe(false); |
||||
expect(state.isFullscreen).toBe(false); |
||||
expect(state.scrollTop).toBe(100); |
||||
}); |
||||
}); |
||||
}); |
||||
}); |
||||
}); |
||||
@ -0,0 +1,220 @@ |
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP |
||||
|
||||
exports[`DashboardPage Given dashboard has not loaded yet should render nothing 1`] = `""`; |
||||
|
||||
exports[`DashboardPage Given dashboard model After render dashboard 1`] = ` |
||||
<div |
||||
className="" |
||||
> |
||||
<Connect(DashNav) |
||||
$injector={Object {}} |
||||
dashboard={ |
||||
DashboardModel { |
||||
"annotations": Object { |
||||
"list": Array [ |
||||
Object { |
||||
"builtIn": 1, |
||||
"datasource": "-- Grafana --", |
||||
"enable": true, |
||||
"hide": true, |
||||
"iconColor": "rgba(0, 211, 255, 1)", |
||||
"name": "Annotations & Alerts", |
||||
"type": "dashboard", |
||||
}, |
||||
], |
||||
}, |
||||
"autoUpdate": undefined, |
||||
"description": undefined, |
||||
"editable": true, |
||||
"events": Emitter { |
||||
"emitter": EventEmitter { |
||||
"_events": Object {}, |
||||
"_eventsCount": 0, |
||||
}, |
||||
}, |
||||
"gnetId": null, |
||||
"graphTooltip": 0, |
||||
"id": null, |
||||
"links": Array [], |
||||
"meta": Object { |
||||
"canEdit": true, |
||||
"canMakeEditable": false, |
||||
"canSave": true, |
||||
"canShare": true, |
||||
"canStar": true, |
||||
"fullscreen": false, |
||||
"isEditing": false, |
||||
"showSettings": true, |
||||
}, |
||||
"originalTemplating": Array [], |
||||
"originalTime": Object { |
||||
"from": "now-6h", |
||||
"to": "now", |
||||
}, |
||||
"panels": Array [ |
||||
PanelModel { |
||||
"cachedPluginOptions": Object {}, |
||||
"datasource": null, |
||||
"events": Emitter { |
||||
"emitter": EventEmitter { |
||||
"_events": Object {}, |
||||
"_eventsCount": 0, |
||||
}, |
||||
}, |
||||
"gridPos": Object { |
||||
"h": 1, |
||||
"w": 1, |
||||
"x": 0, |
||||
"y": 0, |
||||
}, |
||||
"id": 1, |
||||
"targets": Array [ |
||||
Object { |
||||
"refId": "A", |
||||
}, |
||||
], |
||||
"title": "My graph", |
||||
"transparent": false, |
||||
"type": "graph", |
||||
}, |
||||
], |
||||
"refresh": undefined, |
||||
"revision": undefined, |
||||
"schemaVersion": 17, |
||||
"snapshot": undefined, |
||||
"style": "dark", |
||||
"tags": Array [], |
||||
"templating": Object { |
||||
"list": Array [], |
||||
}, |
||||
"time": Object { |
||||
"from": "now-6h", |
||||
"to": "now", |
||||
}, |
||||
"timepicker": Object {}, |
||||
"timezone": "", |
||||
"title": "My dashboard", |
||||
"uid": null, |
||||
"version": 0, |
||||
} |
||||
} |
||||
isEditing={false} |
||||
isFullscreen={false} |
||||
onAddPanel={[Function]} |
||||
/> |
||||
<div |
||||
className="scroll-canvas scroll-canvas--dashboard" |
||||
> |
||||
<CustomScrollbar |
||||
autoHeightMax="100%" |
||||
autoHeightMin="100%" |
||||
autoHide={false} |
||||
autoHideDuration={200} |
||||
autoHideTimeout={200} |
||||
customClassName="custom-scrollbars" |
||||
hideTracksWhenNotNeeded={false} |
||||
scrollTop={0} |
||||
setScrollTop={[Function]} |
||||
> |
||||
<div |
||||
className="dashboard-container" |
||||
> |
||||
<DashboardGrid |
||||
dashboard={ |
||||
DashboardModel { |
||||
"annotations": Object { |
||||
"list": Array [ |
||||
Object { |
||||
"builtIn": 1, |
||||
"datasource": "-- Grafana --", |
||||
"enable": true, |
||||
"hide": true, |
||||
"iconColor": "rgba(0, 211, 255, 1)", |
||||
"name": "Annotations & Alerts", |
||||
"type": "dashboard", |
||||
}, |
||||
], |
||||
}, |
||||
"autoUpdate": undefined, |
||||
"description": undefined, |
||||
"editable": true, |
||||
"events": Emitter { |
||||
"emitter": EventEmitter { |
||||
"_events": Object {}, |
||||
"_eventsCount": 0, |
||||
}, |
||||
}, |
||||
"gnetId": null, |
||||
"graphTooltip": 0, |
||||
"id": null, |
||||
"links": Array [], |
||||
"meta": Object { |
||||
"canEdit": true, |
||||
"canMakeEditable": false, |
||||
"canSave": true, |
||||
"canShare": true, |
||||
"canStar": true, |
||||
"fullscreen": false, |
||||
"isEditing": false, |
||||
"showSettings": true, |
||||
}, |
||||
"originalTemplating": Array [], |
||||
"originalTime": Object { |
||||
"from": "now-6h", |
||||
"to": "now", |
||||
}, |
||||
"panels": Array [ |
||||
PanelModel { |
||||
"cachedPluginOptions": Object {}, |
||||
"datasource": null, |
||||
"events": Emitter { |
||||
"emitter": EventEmitter { |
||||
"_events": Object {}, |
||||
"_eventsCount": 0, |
||||
}, |
||||
}, |
||||
"gridPos": Object { |
||||
"h": 1, |
||||
"w": 1, |
||||
"x": 0, |
||||
"y": 0, |
||||
}, |
||||
"id": 1, |
||||
"targets": Array [ |
||||
Object { |
||||
"refId": "A", |
||||
}, |
||||
], |
||||
"title": "My graph", |
||||
"transparent": false, |
||||
"type": "graph", |
||||
}, |
||||
], |
||||
"refresh": undefined, |
||||
"revision": undefined, |
||||
"schemaVersion": 17, |
||||
"snapshot": undefined, |
||||
"style": "dark", |
||||
"tags": Array [], |
||||
"templating": Object { |
||||
"list": Array [], |
||||
}, |
||||
"time": Object { |
||||
"from": "now-6h", |
||||
"to": "now", |
||||
}, |
||||
"timepicker": Object {}, |
||||
"timezone": "", |
||||
"title": "My dashboard", |
||||
"uid": null, |
||||
"version": 0, |
||||
} |
||||
} |
||||
isEditing={false} |
||||
isFullscreen={false} |
||||
/> |
||||
</div> |
||||
</CustomScrollbar> |
||||
</div> |
||||
</div> |
||||
`; |
||||
Loading…
Reference in new issue