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}
/>