diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/AzureRepoPicker.test.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/AzureRepoPicker.test.tsx new file mode 100644 index 0000000000..ffcf2920c1 --- /dev/null +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/AzureRepoPicker.test.tsx @@ -0,0 +1,76 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import { AzureRepoPicker } from './AzureRepoPicker'; +import { render, fireEvent } from '@testing-library/react'; + +describe('AzureRepoPicker', () => { + it('renders the three input fields', async () => { + const { getAllByRole } = render( + , + ); + + const allInputs = getAllByRole('textbox'); + + expect(allInputs).toHaveLength(3); + }); + + describe('org field', () => { + it('calls onChange when the organisation changes', () => { + const onChange = jest.fn(); + const { getAllByRole } = render( + , + ); + + const orgInput = getAllByRole('textbox')[0]; + + fireEvent.change(orgInput, { target: { value: 'org' } }); + + expect(onChange).toHaveBeenCalledWith({ organization: 'org' }); + }); + }); + + describe('owner field', () => { + it('calls onChange when the owner changes', () => { + const onChange = jest.fn(); + const { getAllByRole } = render( + , + ); + + const ownerInput = getAllByRole('textbox')[1]; + + fireEvent.change(ownerInput, { target: { value: 'owner' } }); + + expect(onChange).toHaveBeenCalledWith({ owner: 'owner' }); + }); + }); + + describe('repoName field', () => { + it('calls onChange when the repoName changes', () => { + const onChange = jest.fn(); + const { getAllByRole } = render( + , + ); + + const repoNameInput = getAllByRole('textbox')[2]; + + fireEvent.change(repoNameInput, { target: { value: 'repoName' } }); + + expect(onChange).toHaveBeenCalledWith({ repoName: 'repoName' }); + }); + }); +}); diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/AzureRepoPicker.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/AzureRepoPicker.tsx index 1a61dad251..584cce7eed 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/AzureRepoPicker.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/AzureRepoPicker.tsx @@ -66,9 +66,9 @@ export const AzureRepoPicker = ({ required error={rawErrors?.length > 0 && !repoName} > - Repository + Repository onChange({ repoName: e.target.value })} value={repoName} /> diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.test.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.test.tsx new file mode 100644 index 0000000000..17fe656006 --- /dev/null +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.test.tsx @@ -0,0 +1,100 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import { BitbucketRepoPicker } from './BitbucketRepoPicker'; +import { render, fireEvent } from '@testing-library/react'; + +describe('BitbucketRepoPicker', () => { + it('renders workspace input when host is bitbucket.org', () => { + const state = { host: 'bitbucket.org', workspace: 'lolsWorkspace' }; + + const { getAllByRole } = render( + , + ); + + expect(getAllByRole('textbox')).toHaveLength(3); + expect(getAllByRole('textbox')[0]).toHaveValue('lolsWorkspace'); + }); + + it('hides the workspace input when the host is not bitbucket.org', () => { + const state = { + host: 'mycustom.domain.bitbucket.org', + }; + + const { getAllByRole } = render( + , + ); + + expect(getAllByRole('textbox')).toHaveLength(2); + }); + describe('workspace field', () => { + it('calls onChange when the workspace changes', () => { + const onChange = jest.fn(); + const { getAllByRole } = render( + , + ); + + const workspaceInput = getAllByRole('textbox')[0]; + + fireEvent.change(workspaceInput, { target: { value: 'test-workspace' } }); + + expect(onChange).toHaveBeenCalledWith({ workspace: 'test-workspace' }); + }); + }); + + describe('project field', () => { + it('calls onChange when the project changes', () => { + const onChange = jest.fn(); + const { getAllByRole } = render( + , + ); + + const projectInput = getAllByRole('textbox')[1]; + + fireEvent.change(projectInput, { target: { value: 'test-project' } }); + + expect(onChange).toHaveBeenCalledWith({ project: 'test-project' }); + }); + }); + + describe('repoName field', () => { + it('calls onChange when the repoName changes', () => { + const onChange = jest.fn(); + const { getAllByRole } = render( + , + ); + + const repoNameInput = getAllByRole('textbox')[2]; + + fireEvent.change(repoNameInput, { target: { value: 'test-repo' } }); + + expect(onChange).toHaveBeenCalledWith({ repoName: 'test-repo' }); + }); + }); +}); diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.tsx index 1240a4e15b..5b4f271d74 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/BitbucketRepoPicker.tsx @@ -69,9 +69,9 @@ export const BitbucketRepoPicker = ({ required error={rawErrors?.length > 0 && !repoName} > - Repository + Repository onChange({ repoName: e.target.value })} value={repoName} /> diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/GithubRepoPicker.test.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/GithubRepoPicker.test.tsx index 4a17016959..2c80c40c22 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/GithubRepoPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/GithubRepoPicker.test.tsx @@ -18,7 +18,7 @@ import React from 'react'; import { GithubRepoPicker } from './GithubRepoPicker'; import { render, fireEvent } from '@testing-library/react'; -describe('GitubRepoPicker', () => { +describe('GithubRepoPicker', () => { describe('owner field', () => { it('renders a select if there is a list of allowed owners', async () => { const allowedOwners = ['owner1', 'owner2']; diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/GithubRepoPicker.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/GithubRepoPicker.tsx index 22d13cdcdb..b59d089a19 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/GithubRepoPicker.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/GithubRepoPicker.tsx @@ -75,9 +75,9 @@ export const GithubRepoPicker = ({ required error={rawErrors?.length > 0 && !repoName} > - Repository + Repository onChange({ repoName: e.target.value })} value={repoName} /> diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/GitlabRepoPicker.test.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/GitlabRepoPicker.test.tsx new file mode 100644 index 0000000000..49a91c116e --- /dev/null +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/GitlabRepoPicker.test.tsx @@ -0,0 +1,107 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import { GitlabRepoPicker } from './GitlabRepoPicker'; +import { render, fireEvent } from '@testing-library/react'; + +describe('GitlabRepoPicker', () => { + describe('owner field', () => { + it('renders a select if there is a list of allowed owners', async () => { + const allowedOwners = ['owner1', 'owner2']; + const { findByText } = render( + , + ); + + expect(await findByText('owner1')).toBeInTheDocument(); + expect(await findByText('owner2')).toBeInTheDocument(); + }); + + it('calls onChange when the owner is changed to a different owner', async () => { + const onChange = jest.fn(); + const allowedOwners = ['owner1', 'owner2']; + const { getByRole } = render( + , + ); + + await fireEvent.change(getByRole('combobox'), { + target: { value: 'owner2' }, + }); + + expect(onChange).toHaveBeenCalledWith({ owner: 'owner2' }); + }); + + it('is disabled picked when only one allowed owner', () => { + const onChange = jest.fn(); + const allowedOwners = ['owner1']; + const { getByRole } = render( + , + ); + + expect(getByRole('combobox')).toBeDisabled(); + }); + + it('should display free text if no allowed owners are passed', async () => { + const onChange = jest.fn(); + const { getAllByRole } = render( + , + ); + const ownerField = getAllByRole('textbox')[0]; + fireEvent.change(ownerField, { target: { value: 'my-mock-owner' } }); + + expect(onChange).toHaveBeenCalledWith({ owner: 'my-mock-owner' }); + }); + }); + + describe('repo name', () => { + it('should render free text field for input of repo name', () => { + const onChange = jest.fn(); + const { getAllByRole } = render( + , + ); + + const repoNameField = getAllByRole('textbox')[1]; + fireEvent.change(repoNameField, { + target: { value: 'my-mock-repo-name' }, + }); + + expect(onChange).toHaveBeenCalledWith({ repoName: 'my-mock-repo-name' }); + }); + }); +}); diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/GitlabRepoPicker.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/GitlabRepoPicker.tsx index 0d0ad26ee1..0e4e7dcd8f 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/GitlabRepoPicker.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/GitlabRepoPicker.tsx @@ -77,9 +77,9 @@ export const GitlabRepoPicker = ({ required error={rawErrors?.length > 0 && !repoName} > - Repository + Repository onChange({ repoName: e.target.value })} value={repoName} />