Prevent a favorite project to be added twice

This commit is contained in:
Marcel van Remmerden 2022-03-27 05:31:20 +00:00
parent e2ec9b25ab
commit d4104f641d
2 changed files with 58 additions and 42 deletions

View File

@ -1559,46 +1559,52 @@ function addProject(link, target) {
if (GitLab.urlHasValidHost(link)) {
GitLab.parseUrl(link)
.then((object) => {
if (object.type && object.type !== 'projects') {
const projectWithNamespace = encodeURIComponent(link.split(`${store.host}/`)[1]);
GitLab.get(`projects/${projectWithNamespace}`)
.then((project) => {
const projects = store['favorite-projects'] || [];
projects.push({
id: project.id,
visibility: project.visibility,
web_url: project.web_url,
name: project.name,
title: project.name,
namespace: {
name: project.namespace.name,
},
parent_name: project.name_with_namespace,
parent_url: project.namespace.web_url,
name_with_namespace: project.name_with_namespace,
open_issues_count: project.open_issues_count,
last_activity_at: project.last_activity_at,
avatar_url: project.avatar_url,
star_count: project.star_count,
forks_count: project.forks_count,
if (
!store['favorite-projects'].filter((project) => project.web_url === object.web_url).length
) {
if (object.type && object.type !== 'projects') {
const projectWithNamespace = encodeURIComponent(link.split(`${store.host}/`)[1]);
GitLab.get(`projects/${projectWithNamespace}`)
.then((project) => {
const projects = store['favorite-projects'] || [];
projects.push({
id: project.id,
visibility: project.visibility,
web_url: project.web_url,
name: project.name,
title: project.name,
namespace: {
name: project.namespace.name,
},
parent_name: project.name_with_namespace,
parent_url: project.namespace.web_url,
name_with_namespace: project.name_with_namespace,
open_issues_count: project.open_issues_count,
last_activity_at: project.last_activity_at,
avatar_url: project.avatar_url,
star_count: project.star_count,
forks_count: project.forks_count,
});
store['favorite-projects'] = projects;
if (newTarget === '-settings-') {
openSettingsPage();
}
displayUsersProjects(projects);
})
.catch(() => {
displayAddError('project', newTarget);
});
store['favorite-projects'] = projects;
if (newTarget === '-settings-') {
openSettingsPage();
}
displayUsersProjects(projects);
})
.catch(() => {
displayAddError('project', newTarget);
});
} else {
const projects = store['favorite-projects'] || [];
projects.push(object);
store['favorite-projects'] = projects;
if (newTarget === '-settings-') {
openSettingsPage();
} else {
const projects = store['favorite-projects'] || [];
projects.push(object);
store['favorite-projects'] = projects;
if (newTarget === '-settings-') {
openSettingsPage();
}
displayUsersProjects(projects);
}
displayUsersProjects(projects);
} else {
displayAddError('project', newTarget, 'The same project was already added.');
}
})
.catch(() => {

View File

@ -97,12 +97,22 @@ describe('Favorite projects', function () {
assert.equal((await listFavoriteProjects(this.window)).length, 0);
});
// Skipped due to https://gitlab.com/mvanremmerden/gitdock/-/issues/110
it.skip('prevents adding a project twice', async function () {
it('prevents adding a project twice', async function () {
await newApp(this, {
loggedIn: true,
favoriteProjects: [EXAMPLE_PROJECT],
});
await openSettings(this.window);
await addProject(this.window, EXAMPLE_PROJECT.web_url);
await addProject(this.window, EXAMPLE_PROJECT.web_url);
await this.window.click('#add-project-dialog a');
await this.window.fill('#project-settings-link', EXAMPLE_PROJECT.web_url);
await this.window.click('#project-settings-add-button');
await this.window.waitForSelector('#add-project-settings-error');
const error = this.window.locator('#add-project-settings-error');
assert.equal(await error.innerText(), 'The same project was already added.');
await this.window.click('#detail-header');
await this.window.waitForTimeout(100);