import {OrganizationFixture} from 'sentry-fixture/organization'; import {initializeOrg} from 'sentry-test/initializeOrg'; import {render, screen} from 'sentry-test/reactTestingLibrary'; import PageFiltersStore from 'sentry/stores/pageFiltersStore'; import {normalizeUrl} from 'sentry/utils/withDomainRequired'; import ThresholdsList from 'sentry/views/releases/thresholdsList/'; describe('ReleaseThresholdsList', () => { const organization = OrganizationFixture({ slug: 'test-thresholds', features: ['releases-v2'], }); const {router, routerContext} = initializeOrg({ organization, }); let mockThresholdFetch; beforeEach(() => { mockThresholdFetch = MockApiClient.addMockResponse({ url: `/organizations/${organization.slug}/release-thresholds/`, method: 'GET', body: [], }); PageFiltersStore.init(); }); afterEach(() => { PageFiltersStore.reset(); MockApiClient.clearMockResponses(); }); it('redirects to releases if flag is not set', () => { const organization2 = OrganizationFixture({ slug: 'test-thresholds-no-flag', features: [], }); const {router: flaglessRouter, routerContext: flaglessRouterContext} = initializeOrg({ organization: organization2, }); const expectedRedirect = normalizeUrl( `/organizations/${organization2.slug}/releases/` ); render(, { context: flaglessRouterContext, organization: organization2, }); expect(flaglessRouter.replace).toHaveBeenCalledTimes(1); expect(flaglessRouter.replace).toHaveBeenCalledWith(expectedRedirect); }); it('fetches release thresholds for selected projects', async () => { const query = { project: [-1], }; PageFiltersStore.onInitializeUrlState( { projects: [], environments: [], datetime: {start: null, end: null, period: '1d', utc: null}, }, new Set() ); routerContext.context.location.pathname = normalizeUrl( `/organizations/${organization.slug}/release-thresholds/` ); render(, { context: routerContext, organization, }); expect(await screen.findByText('Thresholds')).toBeInTheDocument(); expect(mockThresholdFetch).toHaveBeenCalledWith( '/organizations/test-thresholds/release-thresholds/', expect.objectContaining({query}) ); expect(router.replace).not.toHaveBeenCalled(); }); it('filters fetch based on projects/environments selected', async () => { const expectedQuery = { project: [1, 2, 3], environment: ['foo'], }; PageFiltersStore.onInitializeUrlState( { projects: [1, 2, 3], environments: ['foo'], datetime: {start: null, end: null, period: '14d', utc: null}, }, new Set() ); routerContext.context.location.pathname = normalizeUrl( `/organizations/${organization.slug}/release-thresholds/` ); render(, {context: routerContext, organization}); expect(await screen.findByText('Thresholds')).toBeInTheDocument(); expect(mockThresholdFetch).toHaveBeenCalledWith( '/organizations/test-thresholds/release-thresholds/', expect.objectContaining({query: expectedQuery}) ); }); });