diff --git a/.changeset/wet-tips-yawn.md b/.changeset/wet-tips-yawn.md index 88a44e46fc..3ab8303b8f 100644 --- a/.changeset/wet-tips-yawn.md +++ b/.changeset/wet-tips-yawn.md @@ -3,4 +3,8 @@ '@backstage/plugin-scaffolder-backend': minor --- -Add field selection rendering of allowed Projects for BitbucketRepoPicker. Allows a user to define allowed projects via the ui:field RepoUrlPicker ui:options allowed Projects +Add field selection rendering of allowed Projects for BitbucketRepoPicker. Allows a user to define allowed projects via the ui:field RepoUrlPicker ui:options allowed Projects. + +Add comments about expected values for BitbucketRepoPicker: Projects and workspaces + +Update tests to cover null, empty list, and list values for allowed Bitbucket projects diff --git a/plugins/scaffolder-backend/sample-templates/bitbucket-demo/template.yaml b/plugins/scaffolder-backend/sample-templates/bitbucket-demo/template.yaml index 95854eaf84..58955582d2 100644 --- a/plugins/scaffolder-backend/sample-templates/bitbucket-demo/template.yaml +++ b/plugins/scaffolder-backend/sample-templates/bitbucket-demo/template.yaml @@ -20,15 +20,17 @@ spec: ui:options: allowedHosts: - bitbucket.org - allowedOwners: - - WORKSPACE1 - - WORKSPACE2 - allowedProjects: - - PROJECT1 - - PROJECT2 - allowedRepos: - - REPO1 - - REPO2 + # The rest of these options are optional. + # You can read more at: https://backstage.io/docs/reference/plugin-scaffolder.repourlpickerfieldextension + # allowedOwners: + # - WORKSPACE1 + # - WORKSPACE2 + # allowedProjects: + # - PROJECT1 + # - PROJECT2 + # allowedRepos: + # - REPO1 + # - REPO2 - title: Fill in some steps required: - name diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.test.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.test.tsx index 6fe93ce512..f799d68c2d 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.test.tsx @@ -57,21 +57,6 @@ describe('BitbucketRepoPicker', () => { expect(getAllByRole('textbox')).toHaveLength(1); }); - it('renders a select if there is a list of allowed projects', async () => { - const allowedProjects = ['project1', 'project2']; - const { findByText } = render( - , - ); - - expect(await findByText('project1')).toBeInTheDocument(); - expect(await findByText('project2')).toBeInTheDocument(); - }); - describe('workspace field', () => { it('calls onChange when the workspace changes', () => { const onChange = jest.fn(); @@ -108,5 +93,47 @@ describe('BitbucketRepoPicker', () => { expect(onChange).toHaveBeenCalledWith({ project: 'test-project' }); }); + + it('Does not render a select if the list of allowed projects does not exist', async () => { + const { getAllByRole } = render( + , + ); + + expect(getAllByRole('textbox')).toHaveLength(2); + expect(getAllByRole('textbox')[1]).toHaveValue(''); + }); + + it('Does not render a select if the list of allowed projects is empty', async () => { + const { getAllByRole } = render( + , + ); + + expect(getAllByRole('textbox')).toHaveLength(2); + expect(getAllByRole('textbox')[1]).toHaveValue(''); + }); + + it('Does render a select if there is a list of allowed projects', async () => { + const allowedProjects = ['project1', 'project2']; + const { findByText } = render( + , + ); + + expect(await findByText('project1')).toBeInTheDocument(); + expect(await findByText('project2')).toBeInTheDocument(); + }); }); }); diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.tsx index 75922a3efb..d070e3fee5 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.tsx @@ -21,6 +21,15 @@ import InputLabel from '@material-ui/core/InputLabel'; import { Select, SelectItem } from '@backstage/core-components'; import { RepoUrlPickerState } from './types'; +/** + * The underlying component that is rendered in the form for the `BitbucketRepoPicker` + * field extension. + * + * @public + * @param allowedOwners - Allowed workspaces for the Bitbucket cloud repository + * @param allowedProjects - Allowed projects for the Bitbucket cloud repository + * + */ export const BitbucketRepoPicker = (props: { allowedOwners?: string[]; allowedProjects?: string[];