diff --git a/tests/e2e/repo-migrate.test.e2e.ts b/tests/e2e/repo-migrate.test.e2e.ts index 5e67f89ed1..ca20e4f4c2 100644 --- a/tests/e2e/repo-migrate.test.e2e.ts +++ b/tests/e2e/repo-migrate.test.e2e.ts @@ -7,6 +7,34 @@ import {test, save_visual, test_context} from './utils_e2e.ts'; test.use({user: 'user2'}); +test('Migration Repo Name detection', async ({page}, workerInfo) => { + test.skip(workerInfo.project.name === 'Mobile Safari', 'Flaky actionability checks on Mobile Safari'); + + await page.goto('/repo/migrate?service_type=2'); + + const form = page.locator('form'); + + // Test trailing slashes are stripped + await form.getByRole('textbox', {name: 'Migrate / Clone from URL'}).fill('https://github.com/example/test/'); + await form.getByRole('textbox', {name: 'Migrate / Clone from URL'}).blur(); + await expect(form.getByRole('textbox', {name: 'Repository Name'})).toHaveValue('test'); + + // Test trailing .git is stripped + await page.reload(); + await form.getByRole('textbox', {name: 'Migrate / Clone from URL'}).fill('https://github.com/example/test.git'); + await form.getByRole('textbox', {name: 'Migrate / Clone from URL'}).blur(); + await expect(form.getByRole('textbox', {name: 'Repository Name'})).toHaveValue('test'); + + // Test trailing .git and trailing / together is stripped + await page.reload(); + await form.getByRole('textbox', {name: 'Migrate / Clone from URL'}).fill('https://github.com/example/test.git/'); + await form.getByRole('textbox', {name: 'Migrate / Clone from URL'}).blur(); + await expect(form.getByRole('textbox', {name: 'Repository Name'})).toHaveValue('test'); + + // Save screenshot only once + await save_visual(page); +}); + test('Migration Progress Page', async ({page, browser}, workerInfo) => { test.skip(workerInfo.project.name === 'Mobile Safari', 'Flaky actionability checks on Mobile Safari'); diff --git a/web_src/js/features/repo-migration.js b/web_src/js/features/repo-migration.js index 59e282e4e7..eb2245b2ff 100644 --- a/web_src/js/features/repo-migration.js +++ b/web_src/js/features/repo-migration.js @@ -29,7 +29,7 @@ export function initRepoMigration() { cloneAddr?.addEventListener('change', () => { const repoName = document.getElementById('repo_name'); if (cloneAddr.value && !repoName?.value) { // Only modify if repo_name input is blank - repoName.value = cloneAddr.value.match(/^(.*\/)?((.+?)(\.git)?)$/)[3]; + repoName.value = cloneAddr.value.match(/^(.*\/)?((.+?)(\.git)?\/?)$/)[3]; } }); }