use renderInTestApp

Signed-off-by: Fredrik Adelöw <freben@gmail.com>
This commit is contained in:
Fredrik Adelöw
2023-09-14 21:22:11 +02:00
parent 8a6a66f621
commit ab6474579f
72 changed files with 2587 additions and 2982 deletions
@@ -13,10 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { render, waitFor } from '@testing-library/react';
import { screen, waitFor } from '@testing-library/react';
import { PagerDutyChangeEvent } from '../types';
import { TestApiRegistry, wrapInTestApp } from '@backstage/test-utils';
import { TestApiRegistry, renderInTestApp } from '@backstage/test-utils';
import { pagerDutyApiRef } from '../../api';
import { ApiProvider } from '@backstage/core-app-api';
import { ChangeEvents } from './ChangeEvents';
@@ -32,15 +33,15 @@ describe('Incidents', () => {
.fn()
.mockImplementationOnce(async () => ({ change_events: [] }));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<ChangeEvents serviceId="abc" refreshEvents={false} />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<ChangeEvents serviceId="abc" refreshEvents={false} />
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('No change events to display yet.')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(
screen.getByText('No change events to display yet.'),
).toBeInTheDocument();
});
it('Renders all change events', async () => {
@@ -76,19 +77,17 @@ describe('Incidents', () => {
},
] as PagerDutyChangeEvent[],
}));
const { getByText, getAllByTitle, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<ChangeEvents serviceId="abc" refreshEvents={false} />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<ChangeEvents serviceId="abc" refreshEvents={false} />
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('summary of event')).toBeInTheDocument();
expect(getByText('sum of EVENT')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('summary of event')).toBeInTheDocument();
expect(screen.getByText('sum of EVENT')).toBeInTheDocument();
// assert links, mailto and hrefs, date calculation
expect(getAllByTitle('View in PagerDuty').length).toEqual(2);
expect(screen.getAllByTitle('View in PagerDuty').length).toEqual(2);
});
it('Does not render a pagerduty link when html_url is not present in response', async () => {
@@ -123,19 +122,17 @@ describe('Incidents', () => {
},
] as PagerDutyChangeEvent[],
}));
const { getByText, getAllByTitle, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<ChangeEvents serviceId="abc" refreshEvents={false} />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<ChangeEvents serviceId="abc" refreshEvents={false} />
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('summary of event')).toBeInTheDocument();
expect(getByText('sum of EVENT')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('summary of event')).toBeInTheDocument();
expect(screen.getByText('sum of EVENT')).toBeInTheDocument();
// assert links, mailto and hrefs, date calculation
expect(getAllByTitle('View in PagerDuty').length).toEqual(1);
expect(screen.getAllByTitle('View in PagerDuty').length).toEqual(1);
});
it('Handle errors', async () => {
@@ -143,16 +140,16 @@ describe('Incidents', () => {
.fn()
.mockRejectedValueOnce(new Error('Error occurred'));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<ChangeEvents serviceId="abc" refreshEvents={false} />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<ChangeEvents serviceId="abc" refreshEvents={false} />
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
await waitFor(() => !screen.queryByTestId('progress'));
expect(
getByText('Error encountered while fetching information. Error occurred'),
screen.getByText(
'Error encountered while fetching information. Error occurred',
),
).toBeInTheDocument();
});
});
@@ -13,8 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { render, waitFor, fireEvent, act } from '@testing-library/react';
import { screen, waitFor, fireEvent, act } from '@testing-library/react';
import {
EntityPagerDutyCard,
isPluginApplicableToEntity,
@@ -22,7 +23,7 @@ import {
import { Entity } from '@backstage/catalog-model';
import { EntityProvider } from '@backstage/plugin-catalog-react';
import { NotFoundError } from '@backstage/errors';
import { TestApiRegistry, wrapInTestApp } from '@backstage/test-utils';
import { TestApiRegistry, renderInTestApp } from '@backstage/test-utils';
import { pagerDutyApiRef, UnauthorizedError, PagerDutyClient } from '../../api';
import { PagerDutyService, PagerDutyUser } from '../types';
@@ -136,20 +137,18 @@ describe('EntityPagerDutyCard', () => {
.fn()
.mockImplementationOnce(async () => ({ service }));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entity}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entity}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('Service Directory')).toBeInTheDocument();
expect(getByText('Create Incident')).toBeInTheDocument();
expect(getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(getByText('Empty escalation policy')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('Service Directory')).toBeInTheDocument();
expect(screen.getByText('Create Incident')).toBeInTheDocument();
expect(screen.getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(screen.getByText('Empty escalation policy')).toBeInTheDocument();
});
it('Handles custom error for missing token', async () => {
@@ -157,17 +156,17 @@ describe('EntityPagerDutyCard', () => {
.fn()
.mockRejectedValueOnce(new UnauthorizedError());
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entity}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entity}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('Missing or invalid PagerDuty Token')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(
screen.getByText('Missing or invalid PagerDuty Token'),
).toBeInTheDocument();
});
it('Handles custom NotFoundError', async () => {
@@ -175,36 +174,32 @@ describe('EntityPagerDutyCard', () => {
.fn()
.mockRejectedValueOnce(new NotFoundError());
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entity}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entity}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('PagerDuty Service Not Found')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('PagerDuty Service Not Found')).toBeInTheDocument();
});
it('handles general error', async () => {
mockPagerDutyApi.getServiceByPagerDutyEntity = jest
.fn()
.mockRejectedValueOnce(new Error('An error occurred'));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entity}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entity}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
await waitFor(() => !screen.queryByTestId('progress'));
expect(
getByText(
screen.getByText(
'Error encountered while fetching information. An error occurred',
),
).toBeInTheDocument();
@@ -215,23 +210,21 @@ describe('EntityPagerDutyCard', () => {
.fn()
.mockImplementationOnce(async () => ({ service }));
const { getByText, queryByTestId, getByRole } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entity}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entity}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('Service Directory')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('Service Directory')).toBeInTheDocument();
const triggerLink = getByText('Create Incident');
const triggerLink = screen.getByText('Create Incident');
await act(async () => {
fireEvent.click(triggerLink);
});
expect(getByRole('dialog')).toBeInTheDocument();
expect(screen.getByRole('dialog')).toBeInTheDocument();
});
describe('when entity has the pagerduty.com/service-id annotation', () => {
@@ -240,20 +233,18 @@ describe('EntityPagerDutyCard', () => {
.fn()
.mockImplementationOnce(async () => ({ service }));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entityWithServiceId}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entityWithServiceId}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('Service Directory')).toBeInTheDocument();
expect(getByText('Create Incident')).toBeInTheDocument();
expect(getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(getByText('Empty escalation policy')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('Service Directory')).toBeInTheDocument();
expect(screen.getByText('Create Incident')).toBeInTheDocument();
expect(screen.getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(screen.getByText('Empty escalation policy')).toBeInTheDocument();
});
it('Handles custom error for missing token', async () => {
@@ -261,18 +252,16 @@ describe('EntityPagerDutyCard', () => {
.fn()
.mockRejectedValueOnce(new UnauthorizedError());
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entityWithServiceId}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entityWithServiceId}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
await waitFor(() => !screen.queryByTestId('progress'));
expect(
getByText('Missing or invalid PagerDuty Token'),
screen.getByText('Missing or invalid PagerDuty Token'),
).toBeInTheDocument();
});
@@ -281,36 +270,34 @@ describe('EntityPagerDutyCard', () => {
.fn()
.mockRejectedValueOnce(new NotFoundError());
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entityWithServiceId}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entityWithServiceId}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('PagerDuty Service Not Found')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(
screen.getByText('PagerDuty Service Not Found'),
).toBeInTheDocument();
});
it('handles general error', async () => {
mockPagerDutyApi.getServiceByPagerDutyEntity = jest
.fn()
.mockRejectedValueOnce(new Error('An error occurred'));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entityWithServiceId}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entityWithServiceId}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
await waitFor(() => !screen.queryByTestId('progress'));
expect(
getByText(
screen.getByText(
'Error encountered while fetching information. An error occurred',
),
).toBeInTheDocument();
@@ -321,18 +308,16 @@ describe('EntityPagerDutyCard', () => {
.fn()
.mockImplementationOnce(async () => ({ service }));
const { queryByTestId, getByTitle } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entityWithServiceId}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entityWithServiceId}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
await waitFor(() => !screen.queryByTestId('progress'));
expect(
getByTitle('Must provide an integration-key to create incidents')
screen.getByTitle('Must provide an integration-key to create incidents')
.className,
).toMatch('disabled');
});
@@ -344,20 +329,18 @@ describe('EntityPagerDutyCard', () => {
.fn()
.mockImplementationOnce(async () => ({ service }));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entityWithAllAnnotations}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entityWithAllAnnotations}>
<EntityPagerDutyCard />
</EntityProvider>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('Service Directory')).toBeInTheDocument();
expect(getByText('Create Incident')).toBeInTheDocument();
expect(getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(getByText('Empty escalation policy')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('Service Directory')).toBeInTheDocument();
expect(screen.getByText('Create Incident')).toBeInTheDocument();
expect(screen.getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(screen.getByText('Empty escalation policy')).toBeInTheDocument();
});
});
@@ -367,20 +350,18 @@ describe('EntityPagerDutyCard', () => {
.fn()
.mockImplementationOnce(async () => ({ service }));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entityWithAllAnnotations}>
<EntityPagerDutyCard readOnly />
</EntityProvider>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entityWithAllAnnotations}>
<EntityPagerDutyCard readOnly />
</EntityProvider>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('Service Directory')).toBeInTheDocument();
expect(getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(getByText('Empty escalation policy')).toBeInTheDocument();
expect(() => getByText('Create Incident')).toThrow();
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('Service Directory')).toBeInTheDocument();
expect(screen.getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(screen.getByText('Empty escalation policy')).toBeInTheDocument();
expect(() => screen.getByText('Create Incident')).toThrow();
});
});
});
@@ -13,10 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { render, waitFor } from '@testing-library/react';
import { screen, waitFor } from '@testing-library/react';
import { EscalationPolicy } from './EscalationPolicy';
import { TestApiRegistry, wrapInTestApp } from '@backstage/test-utils';
import { TestApiRegistry, renderInTestApp } from '@backstage/test-utils';
import { PagerDutyUser } from '../types';
import { pagerDutyApiRef } from '../../api';
import { ApiProvider } from '@backstage/core-app-api';
@@ -32,16 +33,14 @@ describe('Escalation', () => {
.fn()
.mockImplementationOnce(async () => ({ oncalls: [] }));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EscalationPolicy policyId="456" />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EscalationPolicy policyId="456" />
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
await waitFor(() => !screen.queryByTestId('progress'));
expect(getByText('Empty escalation policy')).toBeInTheDocument();
expect(screen.getByText('Empty escalation policy')).toBeInTheDocument();
expect(mockPagerDutyApi.getOnCallByPolicyId).toHaveBeenCalledWith('456');
});
@@ -62,17 +61,15 @@ describe('Escalation', () => {
],
}));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EscalationPolicy policyId="abc" />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EscalationPolicy policyId="abc" />
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
await waitFor(() => !screen.queryByTestId('progress'));
expect(getByText('person1')).toBeInTheDocument();
expect(getByText('person1@example.com')).toBeInTheDocument();
expect(screen.getByText('person1')).toBeInTheDocument();
expect(screen.getByText('person1@example.com')).toBeInTheDocument();
expect(mockPagerDutyApi.getOnCallByPolicyId).toHaveBeenCalledWith('abc');
});
@@ -81,17 +78,17 @@ describe('Escalation', () => {
.fn()
.mockRejectedValueOnce(new Error('Error message'));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<EscalationPolicy policyId="abc" />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<EscalationPolicy policyId="abc" />
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
await waitFor(() => !screen.queryByTestId('progress'));
expect(
getByText('Error encountered while fetching information. Error message'),
screen.getByText(
'Error encountered while fetching information. Error message',
),
).toBeInTheDocument();
});
});
@@ -15,9 +15,9 @@
*/
import React from 'react';
import { render, screen, waitFor } from '@testing-library/react';
import { screen, waitFor } from '@testing-library/react';
import { Incidents } from './Incidents';
import { TestApiRegistry, wrapInTestApp } from '@backstage/test-utils';
import { TestApiRegistry, renderInTestApp } from '@backstage/test-utils';
import { pagerDutyApiRef } from '../../api';
import { PagerDutyIncident } from '../types';
import { ApiProvider } from '@backstage/core-app-api';
@@ -33,12 +33,10 @@ describe('Incidents', () => {
.fn()
.mockImplementationOnce(async () => ({ incidents: [] }));
render(
wrapInTestApp(
<ApiProvider apis={apis}>
<Incidents serviceId="abc" refreshIncidents={false} />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<Incidents serviceId="abc" refreshIncidents={false} />
</ApiProvider>,
);
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('Nice! No incidents found!')).toBeInTheDocument();
@@ -86,12 +84,10 @@ describe('Incidents', () => {
},
] as PagerDutyIncident[],
}));
render(
wrapInTestApp(
<ApiProvider apis={apis}>
<Incidents serviceId="abc" refreshIncidents={false} />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<Incidents serviceId="abc" refreshIncidents={false} />
</ApiProvider>,
);
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('title1')).toBeInTheDocument();
@@ -112,12 +108,10 @@ describe('Incidents', () => {
.fn()
.mockRejectedValueOnce(new Error('Error occurred'));
render(
wrapInTestApp(
<ApiProvider apis={apis}>
<Incidents serviceId="abc" refreshIncidents={false} />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<Incidents serviceId="abc" refreshIncidents={false} />
</ApiProvider>,
);
await waitFor(() => !screen.queryByTestId('progress'));
expect(
@@ -13,11 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { render, waitFor, fireEvent, act } from '@testing-library/react';
import { screen, waitFor, fireEvent, act } from '@testing-library/react';
import { PagerDutyCard } from '../PagerDutyCard';
import { NotFoundError } from '@backstage/errors';
import { TestApiRegistry, wrapInTestApp } from '@backstage/test-utils';
import { TestApiRegistry, renderInTestApp } from '@backstage/test-utils';
import { pagerDutyApiRef, UnauthorizedError, PagerDutyClient } from '../../api';
import { PagerDutyService, PagerDutyUser } from '../types';
@@ -61,18 +62,16 @@ describe('PagerDutyCard', () => {
.fn()
.mockImplementationOnce(async () => ({ service }));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard name="blah" integrationKey="abc123" />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard name="blah" integrationKey="abc123" />
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('Service Directory')).toBeInTheDocument();
expect(getByText('Create Incident')).toBeInTheDocument();
expect(getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(getByText('Empty escalation policy')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('Service Directory')).toBeInTheDocument();
expect(screen.getByText('Create Incident')).toBeInTheDocument();
expect(screen.getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(screen.getByText('Empty escalation policy')).toBeInTheDocument();
});
it('Handles custom error for missing token', async () => {
@@ -80,15 +79,15 @@ describe('PagerDutyCard', () => {
.fn()
.mockRejectedValueOnce(new UnauthorizedError());
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard name="blah" integrationKey="abc123" />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard name="blah" integrationKey="abc123" />
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('Missing or invalid PagerDuty Token')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(
screen.getByText('Missing or invalid PagerDuty Token'),
).toBeInTheDocument();
});
it('Handles custom NotFoundError', async () => {
@@ -96,32 +95,28 @@ describe('PagerDutyCard', () => {
.fn()
.mockRejectedValueOnce(new NotFoundError());
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard name="blah" integrationKey="abc123" />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard name="blah" integrationKey="abc123" />
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('PagerDuty Service Not Found')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('PagerDuty Service Not Found')).toBeInTheDocument();
});
it('handles general error', async () => {
mockPagerDutyApi.getServiceByPagerDutyEntity = jest
.fn()
.mockRejectedValueOnce(new Error('An error occurred'));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard name="blah" integrationKey="abc123" />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard name="blah" integrationKey="abc123" />
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
await waitFor(() => !screen.queryByTestId('progress'));
expect(
getByText(
screen.getByText(
'Error encountered while fetching information. An error occurred',
),
).toBeInTheDocument();
@@ -132,21 +127,19 @@ describe('PagerDutyCard', () => {
.fn()
.mockImplementationOnce(async () => ({ service }));
const { getByText, queryByTestId, getByRole } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard name="blah" integrationKey="abc123" />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard name="blah" integrationKey="abc123" />
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('Service Directory')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('Service Directory')).toBeInTheDocument();
const triggerLink = getByText('Create Incident');
const triggerLink = screen.getByText('Create Incident');
await act(async () => {
fireEvent.click(triggerLink);
});
expect(getByRole('dialog')).toBeInTheDocument();
expect(screen.getByRole('dialog')).toBeInTheDocument();
});
describe('when entity has the pagerduty.com/service-id annotation', () => {
@@ -155,18 +148,16 @@ describe('PagerDutyCard', () => {
.fn()
.mockImplementationOnce(async () => ({ service }));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard name="blah" integrationKey="abc123" />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard name="blah" integrationKey="abc123" />
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('Service Directory')).toBeInTheDocument();
expect(getByText('Create Incident')).toBeInTheDocument();
expect(getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(getByText('Empty escalation policy')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('Service Directory')).toBeInTheDocument();
expect(screen.getByText('Create Incident')).toBeInTheDocument();
expect(screen.getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(screen.getByText('Empty escalation policy')).toBeInTheDocument();
});
it('Handles custom error for missing token', async () => {
@@ -174,20 +165,18 @@ describe('PagerDutyCard', () => {
.fn()
.mockRejectedValueOnce(new UnauthorizedError());
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard
name="blah"
integrationKey="abc123"
serviceId="def123"
/>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard
name="blah"
integrationKey="abc123"
serviceId="def123"
/>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
await waitFor(() => !screen.queryByTestId('progress'));
expect(
getByText('Missing or invalid PagerDuty Token'),
screen.getByText('Missing or invalid PagerDuty Token'),
).toBeInTheDocument();
});
@@ -196,40 +185,38 @@ describe('PagerDutyCard', () => {
.fn()
.mockRejectedValueOnce(new NotFoundError());
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard
name="blah"
integrationKey="abc123"
serviceId="def123"
/>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard
name="blah"
integrationKey="abc123"
serviceId="def123"
/>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('PagerDuty Service Not Found')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(
screen.getByText('PagerDuty Service Not Found'),
).toBeInTheDocument();
});
it('handles general error', async () => {
mockPagerDutyApi.getServiceByPagerDutyEntity = jest
.fn()
.mockRejectedValueOnce(new Error('An error occurred'));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard
name="blah"
integrationKey="abc123"
serviceId="def123"
/>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard
name="blah"
integrationKey="abc123"
serviceId="def123"
/>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
await waitFor(() => !screen.queryByTestId('progress'));
expect(
getByText(
screen.getByText(
'Error encountered while fetching information. An error occurred',
),
).toBeInTheDocument();
@@ -240,16 +227,14 @@ describe('PagerDutyCard', () => {
.fn()
.mockImplementationOnce(async () => ({ service }));
const { queryByTestId, getByTitle } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard name="blah" serviceId="def123" />
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard name="blah" serviceId="def123" />
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
await waitFor(() => !screen.queryByTestId('progress'));
expect(
getByTitle('Must provide an integration-key to create incidents')
screen.getByTitle('Must provide an integration-key to create incidents')
.className,
).toMatch('disabled');
});
@@ -261,22 +246,20 @@ describe('PagerDutyCard', () => {
.fn()
.mockImplementationOnce(async () => ({ service }));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard
name="blah"
integrationKey="abc123"
serviceId="def123"
/>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard
name="blah"
integrationKey="abc123"
serviceId="def123"
/>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('Service Directory')).toBeInTheDocument();
expect(getByText('Create Incident')).toBeInTheDocument();
expect(getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(getByText('Empty escalation policy')).toBeInTheDocument();
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('Service Directory')).toBeInTheDocument();
expect(screen.getByText('Create Incident')).toBeInTheDocument();
expect(screen.getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(screen.getByText('Empty escalation policy')).toBeInTheDocument();
});
});
@@ -286,23 +269,21 @@ describe('PagerDutyCard', () => {
.fn()
.mockImplementationOnce(async () => ({ service }));
const { getByText, queryByTestId } = render(
wrapInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard
name="blah"
integrationKey="abc123"
serviceId="def123"
readOnly
/>
</ApiProvider>,
),
await renderInTestApp(
<ApiProvider apis={apis}>
<PagerDutyCard
name="blah"
integrationKey="abc123"
serviceId="def123"
readOnly
/>
</ApiProvider>,
);
await waitFor(() => !queryByTestId('progress'));
expect(getByText('Service Directory')).toBeInTheDocument();
expect(getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(getByText('Empty escalation policy')).toBeInTheDocument();
expect(() => getByText('Create Incident')).toThrow();
await waitFor(() => !screen.queryByTestId('progress'));
expect(screen.getByText('Service Directory')).toBeInTheDocument();
expect(screen.getByText('Nice! No incidents found!')).toBeInTheDocument();
expect(screen.getByText('Empty escalation policy')).toBeInTheDocument();
expect(() => screen.getByText('Create Incident')).toThrow();
});
});
});