diff --git a/cypress/integration/origin-save.spec.js b/cypress/integration/origin-save.spec.js --- a/cypress/integration/origin-save.spec.js +++ b/cypress/integration/origin-save.spec.js @@ -132,6 +132,22 @@ }); }); + it('should validate project url with _ in username', function() { + const gitlabSubProjectUrl = 'https://gitlab.com/user_name/project.git'; + const originSaveUrl = this.Urls.origin_save_request('git', gitlabSubProjectUrl); + + stubSaveRequest({requestUrl: originSaveUrl, + saveRequestStatus: 'accepted', + originurl: gitlabSubProjectUrl, + saveTaskStatus: 'not yet scheduled'}); + + makeOriginSaveRequest('git', gitlabSubProjectUrl); + + cy.wait('@saveRequest').then(() => { + checkAlertVisible('success', saveCodeMsg['success']); + }); + }); + it('should display warning message when pending', function() { stubSaveRequest({requestUrl: this.originSaveUrl, saveRequestStatus: 'pending', diff --git a/swh/web/assets/src/utils/functions.js b/swh/web/assets/src/utils/functions.js --- a/swh/web/assets/src/utils/functions.js +++ b/swh/web/assets/src/utils/functions.js @@ -39,7 +39,7 @@ export function isGitRepoUrl(url, domain) { let endOfPattern = '\\/[\\w\\.-]+\\/?(?!=.git)(?:\\.git(?:\\/?|\\#[\\w\\.\\-_]+)?)?$'; - let pattern = `(?:git|https?|git@)(?:\\:\\/\\/)?${domain}[/|:][A-Za-z0-9-/]+?` + endOfPattern; + let pattern = `(?:git|https?|git@)(?:\\:\\/\\/)?${domain}[/|:][\\w\\.\\-\\/]+?` + endOfPattern; let re = new RegExp(pattern); return re.test(url); };