import {OrganizationFixture} from 'sentry-fixture/organization';
import {RouterFixture} from 'sentry-fixture/routerFixture';
import {render, screen, waitFor} from 'sentry-test/reactTestingLibrary';
import * as OrgActions from 'sentry/actionCreators/organizations';
import ConfigStore from 'sentry/stores/configStore';
import type {Organization} from 'sentry/types/organization';
import SettingsIndex from 'sentry/views/settings/settingsIndex';
import {BreadcrumbProvider} from './components/settingsBreadcrumb/context';
describe('SettingsIndex', function () {
const props = {
router: RouterFixture(),
location: {} as any,
routes: [],
route: {},
params: {},
routeParams: {},
};
it('renders', function () {
render(
);
});
it('has loading when there is no organization', function () {
render(
);
expect(screen.getByTestId('loading-indicator')).toBeInTheDocument();
});
it('has different links for self-hosted users', function () {
ConfigStore.set('isSelfHosted', true);
render(
);
const formLink = screen.getByText('Community Forums');
expect(formLink).toBeInTheDocument();
expect(formLink).toHaveAttribute('href', 'https://forum.sentry.io/');
});
describe('Fetch org details for Sidebar', function () {
const organization = {
id: '44',
name: 'Org Index',
slug: 'org-index',
features: [],
} as unknown as Organization;
const spy = jest.spyOn(OrgActions, 'fetchOrganizationDetails');
let orgApi: jest.Mock;
beforeEach(function () {
ConfigStore.set('isSelfHosted', false);
MockApiClient.clearMockResponses();
orgApi = MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/`,
});
});
it('fetches org details for SidebarDropdown', async function () {
const {rerender} = render(
);
// org from index endpoint, no `access` info
rerender(
);
await waitFor(() => expect(orgApi).toHaveBeenCalledTimes(1));
expect(spy).toHaveBeenCalledWith(expect.anything(), organization.slug, {
setActive: true,
loadProjects: true,
});
});
it('does not fetch org details for SidebarDropdown', function () {
const {rerender} = render(
);
// org already has details
rerender(
);
expect(spy).not.toHaveBeenCalledWith();
expect(orgApi).not.toHaveBeenCalled();
});
});
});