mirror of https://github.com/grafana/grafana
Dashboard Settings: Fix TimeZone dropdown doesn't change the timezone (#35680)
* Use redux action to update dashboard.timezone * Added unit test Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>pull/35769/head
parent
7a9d8e4230
commit
182b03aa8f
@ -0,0 +1,74 @@ |
|||||||
|
import React from 'react'; |
||||||
|
import { render, screen } from '@testing-library/react'; |
||||||
|
import userEvent from '@testing-library/user-event'; |
||||||
|
|
||||||
|
import { byRole, byText } from 'testing-library-selector'; |
||||||
|
import { Props, GeneralSettingsUnconnected as GeneralSettings } from './GeneralSettings'; |
||||||
|
import { DashboardModel } from '../../state'; |
||||||
|
|
||||||
|
jest.mock('@grafana/runtime', () => ({ |
||||||
|
...((jest.requireActual('@grafana/runtime') as unknown) as object), |
||||||
|
getBackendSrv: () => ({ |
||||||
|
search: jest.fn(() => [ |
||||||
|
{ title: 'A', id: 'A' }, |
||||||
|
{ title: 'B', id: 'B' }, |
||||||
|
]), |
||||||
|
}), |
||||||
|
})); |
||||||
|
|
||||||
|
jest.mock('app/core/services/context_srv', () => ({ |
||||||
|
contextSrv: { |
||||||
|
user: { orgId: 1 }, |
||||||
|
}, |
||||||
|
})); |
||||||
|
|
||||||
|
const setupTestContext = (options: Partial<Props>) => { |
||||||
|
const defaults: Props = { |
||||||
|
dashboard: ({ |
||||||
|
title: 'test dashboard title', |
||||||
|
description: 'test dashboard description', |
||||||
|
timepicker: { |
||||||
|
refresh_intervals: ['5s', '10s', '30s', '1m', '5m', '15m', '30m', '1h', '2h', '1d', '2d'], |
||||||
|
time_options: ['5m', '15m', '1h', '6h', '12h', '24h', '2d', '7d', '30d'], |
||||||
|
}, |
||||||
|
meta: { |
||||||
|
folderTitle: 'test', |
||||||
|
}, |
||||||
|
timezone: 'utc', |
||||||
|
} as unknown) as DashboardModel, |
||||||
|
updateTimeZone: jest.fn(), |
||||||
|
}; |
||||||
|
|
||||||
|
const props = { ...defaults, ...options }; |
||||||
|
const { rerender } = render(<GeneralSettings {...props} />); |
||||||
|
|
||||||
|
return { rerender, props }; |
||||||
|
}; |
||||||
|
|
||||||
|
const clickSelectOption = async (selectElement: HTMLElement, optionText: string): Promise<void> => { |
||||||
|
userEvent.click(byRole('textbox').get(selectElement)); |
||||||
|
userEvent.click(byText(optionText).get(selectElement)); |
||||||
|
}; |
||||||
|
|
||||||
|
describe('General Settings', () => { |
||||||
|
describe('when component is mounted with timezone', () => { |
||||||
|
it('should render correctly', () => { |
||||||
|
setupTestContext({}); |
||||||
|
screen.getByDisplayValue('test dashboard title'); |
||||||
|
screen.getByDisplayValue('test dashboard description'); |
||||||
|
expect(screen.getByLabelText('Time zone picker select container')).toHaveTextContent( |
||||||
|
'Coordinated Universal Time' |
||||||
|
); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
describe('when timezone is changed', () => { |
||||||
|
it('should call update function', async () => { |
||||||
|
const { props } = setupTestContext({}); |
||||||
|
userEvent.click(screen.getByLabelText('Time zone picker select container')); |
||||||
|
await clickSelectOption(screen.getByLabelText('Time zone picker select container'), 'Browser Time'); |
||||||
|
expect(props.updateTimeZone).toHaveBeenCalledWith('browser'); |
||||||
|
expect(props.dashboard.timezone).toBe('browser'); |
||||||
|
}); |
||||||
|
}); |
||||||
|
}); |
Loading…
Reference in new issue