Add EntityProcessingErrorsPanel tests

Signed-off-by: Johan Haals <johan.haals@gmail.com>
This commit is contained in:
Johan Haals
2021-10-04 17:35:19 +02:00
parent 5ec945f141
commit 7413797ecf
@@ -14,14 +14,24 @@
* limitations under the License.
*/
import { EntityProvider } from '@backstage/plugin-catalog-react';
import {
CatalogApi,
catalogApiRef,
EntityProvider,
} from '@backstage/plugin-catalog-react';
import { renderInTestApp } from '@backstage/test-utils';
import React from 'react';
import { EntityProcessingErrorsPanel } from './EntityProcessingErrorsPanel';
import { Entity } from '@backstage/catalog-model';
import { Entity, getEntityName } from '@backstage/catalog-model';
import { ApiProvider, ApiRegistry } from '@backstage/core-app-api';
describe('<EntityProcessErrors />', () => {
const catalogClient: jest.Mocked<CatalogApi> = {
getEntityAncestors: jest.fn(),
} as any;
const apis = ApiRegistry.with(catalogApiRef, catalogClient);
it('renders EntityProcessErrors if the entity has errors', async () => {
const entity: Entity = {
apiVersion: 'v1',
@@ -86,10 +96,16 @@ describe('<EntityProcessErrors />', () => {
},
};
catalogClient.getEntityAncestors.mockResolvedValue({
root: getEntityName(entity),
items: [{ entity, parents: [] }],
});
const { getByText, queryByText } = await renderInTestApp(
<EntityProvider entity={entity}>
<EntityProcessingErrorsPanel />
</EntityProvider>,
<ApiProvider apis={apis}>
<EntityProvider entity={entity}>
<EntityProcessingErrorsPanel />
</EntityProvider>
</ApiProvider>,
);
expect(
@@ -99,5 +115,110 @@ describe('<EntityProcessErrors />', () => {
).toBeInTheDocument();
expect(getByText('Error: Foo')).toBeInTheDocument();
expect(queryByText('Error: This should not be rendered')).toBeNull();
expect(
queryByText('The error below originates from'),
).not.toBeInTheDocument();
});
it('renders EntityProcessErrors if the parent entity has errors', async () => {
const entity: Entity = {
apiVersion: 'v1',
kind: 'Component',
metadata: {
name: 'software',
description: 'This is the description',
},
spec: {
owner: 'guest',
type: 'service',
lifecycle: 'production',
},
};
const parent: Entity = {
apiVersion: 'v1',
kind: 'Component',
metadata: {
name: 'parent',
description: 'This is the description',
},
spec: {
owner: 'guest',
type: 'service',
lifecycle: 'production',
},
status: {
items: [
{
type: 'backstage.io/catalog-processing',
level: 'error',
message:
'InputError: Policy check failed; caused by Error: Malformed envelope, /metadata/labels should be object',
error: {
name: 'InputError',
message:
'Policy check failed; caused by Error: Malformed envelope, /metadata/labels should be object',
cause: {
name: 'Error',
message:
'Malformed envelope, /metadata/labels should be object',
},
},
},
{
type: 'foo',
level: 'error',
message: 'InputError: This should not be rendered',
error: {
name: 'InputError',
message: 'Foo',
cause: {
name: 'Error',
message:
'Malformed envelope, /metadata/labels should be object',
},
},
},
{
type: 'backstage.io/catalog-processing',
level: 'error',
message: 'InputError: Foo',
error: {
name: 'InputError',
message: 'Foo',
cause: {
name: 'Error',
message:
'Malformed envelope, /metadata/labels should be object',
},
},
},
],
},
};
catalogClient.getEntityAncestors.mockResolvedValue({
root: getEntityName(entity),
items: [
{ entity, parents: [getEntityName(parent)] },
{ entity: parent, parents: [] },
],
});
const { getByText, queryByText } = await renderInTestApp(
<ApiProvider apis={apis}>
<EntityProvider entity={entity}>
<EntityProcessingErrorsPanel />
</EntityProvider>
</ApiProvider>,
);
expect(
getByText(
'Error: Policy check failed; caused by Error: Malformed envelope, /metadata/labels should be object',
),
).toBeInTheDocument();
expect(getByText('Error: Foo')).toBeInTheDocument();
expect(queryByText('Error: This should not be rendered')).toBeNull();
expect(queryByText('The error below originates from')).toBeInTheDocument();
});
});