Merge pull request #4590 from andrewthauer/feat/catalog-import-namespace

feat: omit default namespace in catalog-import
This commit is contained in:
Andrew Thauer
2021-02-20 13:32:09 -05:00
committed by GitHub
4 changed files with 62 additions and 9 deletions
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-catalog-import': patch
---
This updates the `catalog-import` plugin to omit the default metadata namespace
field and also use the short form entity reference format for selected group owners.
@@ -230,7 +230,7 @@ export function defaultGenerateStepper(
errorHelperText="required value"
textFieldProps={{
label: 'Entity Owner',
placeholder: 'Group:default/my-group',
placeholder: 'my-group',
}}
rules={{ required: true }}
required
@@ -21,7 +21,10 @@ import { act, render, RenderResult } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import React from 'react';
import { AnalyzeResult, catalogImportApiRef } from '../../api';
import { StepPrepareCreatePullRequest } from './StepPrepareCreatePullRequest';
import {
generateEntities,
StepPrepareCreatePullRequest,
} from './StepPrepareCreatePullRequest';
describe('<StepPrepareCreatePullRequest />', () => {
const catalogImportApi: jest.Mocked<typeof catalogImportApiRef.T> = {
@@ -60,6 +63,7 @@ describe('<StepPrepareCreatePullRequest />', () => {
kind: 'Component',
metadata: {
name: 'my-component',
namespace: 'default',
},
spec: {
owner: 'my-owner',
@@ -282,6 +286,46 @@ spec:
renderFormFieldsFn.mock.calls[
renderFormFieldsFn.mock.calls.length - 1
][0],
).toMatchObject({ groups: ['Group:my-group'], groupsLoading: false });
).toMatchObject({ groups: ['my-group'], groupsLoading: false });
});
describe('generateEntities', () => {
it.each([[undefined], [null]])(
'should not include blank namespace for %s',
namespace => {
expect(
generateEntities(
[{ metadata: { namespace: namespace as any } }],
'my-component',
'group-1',
),
).toEqual([
expect.objectContaining({
metadata: expect.not.objectContaining({
namespace: 'default',
}),
}),
]);
},
);
it.each([['default'], ['my-namespace']])(
'should include explicit namespace %s',
namespace => {
expect(
generateEntities(
[{ metadata: { namespace } }],
'my-component',
'group-1',
),
).toEqual([
expect.objectContaining({
metadata: expect.objectContaining({
namespace,
}),
}),
]);
},
);
});
});
@@ -14,9 +14,12 @@
* limitations under the License.
*/
import { Entity, serializeEntityRef } from '@backstage/catalog-model';
import { Entity } from '@backstage/catalog-model';
import { useApi } from '@backstage/core';
import { catalogApiRef } from '@backstage/plugin-catalog-react';
import {
catalogApiRef,
formatEntityRefTitle,
} from '@backstage/plugin-catalog-react';
import { Box, FormHelperText, Grid, Typography } from '@material-ui/core';
import { makeStyles } from '@material-ui/core/styles';
import React, { useCallback, useState } from 'react';
@@ -66,7 +69,7 @@ type Props = {
) => React.ReactNode;
};
function generateEntities(
export function generateEntities(
entities: PartialEntity[],
componentName: string,
owner: string,
@@ -78,7 +81,6 @@ function generateEntities(
metadata: {
...e.metadata,
name: componentName,
namespace: e.metadata?.namespace ?? 'default',
},
spec: {
...e.spec,
@@ -107,8 +109,9 @@ export const StepPrepareCreatePullRequest = ({
filter: { kind: 'group' },
});
// TODO: defaultKind (=group), defaultNamespace (=same as entity)
return groupEntities.items.map(e => serializeEntityRef(e) as string).sort();
return groupEntities.items
.map(e => formatEntityRefTitle(e, { defaultKind: 'group' }))
.sort();
});
const handleResult = useCallback(