import {browserHistory} from 'react-router'; import {mountWithTheme} from 'sentry-test/enzyme'; import {act} from 'sentry-test/reactTestingLibrary'; import {triggerPress} from 'sentry-test/utils'; import ProjectsStore from 'sentry/stores/projectsStore'; import ManageDashboards from 'sentry/views/dashboardsV2/manage'; const FEATURES = [ 'global-views', 'dashboards-basic', 'dashboards-edit', 'discover-query', ]; describe('Dashboards > Detail', function () { const mockUnauthorizedOrg = TestStubs.Organization({ features: ['global-views', 'dashboards-basic', 'discover-query'], }); const mockAuthorizedOrg = TestStubs.Organization({ features: FEATURES, }); beforeEach(function () { act(() => ProjectsStore.loadInitialData([TestStubs.Project()])); MockApiClient.addMockResponse({ url: '/organizations/org-slug/projects/', body: [], }); MockApiClient.addMockResponse({ url: '/organizations/org-slug/dashboards/', body: [], }); MockApiClient.addMockResponse({ url: '/organizations/org-slug/dashboards/?sort=name&per_page=9', body: [], }); }); afterEach(function () { MockApiClient.clearMockResponses(); }); it('denies access on missing feature', function () { const wrapper = mountWithTheme( ); const content = wrapper.find('PageContent'); expect(content.text()).toContain("You don't have access to this feature"); }); it('denies access on no projects', function () { act(() => ProjectsStore.loadInitialData([])); const wrapper = mountWithTheme( ); const content = wrapper.find('HelpMessage'); expect(content.text()).toContain('You need at least one project to use this view'); }); it('creates new dashboard', async function () { const org = TestStubs.Organization({features: FEATURES}); const wrapper = mountWithTheme( ); await tick(); wrapper.find('Button[data-test-id="dashboard-create"]').simulate('click'); await tick(); expect(browserHistory.push).toHaveBeenCalledWith({ pathname: '/organizations/org-slug/dashboards/new/', query: {}, }); }); it('can sort', async function () { const org = TestStubs.Organization({features: FEATURES}); const wrapper = mountWithTheme( ); await tick(); // Open sort menu await act(async () => { triggerPress(wrapper.find('CompactSelect Button')); await tick(); wrapper.update(); }); const dropdownItems = wrapper.find('MenuItemWrap'); expect(dropdownItems).toHaveLength(6); const expectedSorts = [ 'My Dashboards', 'Dashboard Name (A-Z)', 'Date Created (Newest)', 'Date Created (Oldest)', 'Most Popular', 'Recently Viewed', ]; expect(dropdownItems.children().map(element => element.text())).toEqual( expectedSorts ); dropdownItems.at(1).simulate('click'); await tick(); expect(browserHistory.push).toHaveBeenCalledWith( expect.objectContaining({query: {sort: 'title'}}) ); }); });