diff --git a/cvat-ui/src/reducers/notifications-reducer.ts b/cvat-ui/src/reducers/notifications-reducer.ts
index cf3caec3..3bac0237 100644
--- a/cvat-ui/src/reducers/notifications-reducer.ts
+++ b/cvat-ui/src/reducers/notifications-reducer.ts
@@ -460,6 +460,7 @@ export default function (state = defaultState, action: AnyAction): Notifications
creating: {
message: 'Could not create the project',
reason: action.payload.error.toString(),
+ className: 'cvat-notification-notice-create-project-failed',
},
},
},
@@ -478,6 +479,7 @@ export default function (state = defaultState, action: AnyAction): Notifications
'Could not update ' +
`project ${projectId}`,
reason: action.payload.error.toString(),
+ className: 'cvat-notification-notice-update-project-failed',
},
},
},
@@ -496,6 +498,7 @@ export default function (state = defaultState, action: AnyAction): Notifications
'Could not delete ' +
`project ${projectId}`,
reason: action.payload.error.toString(),
+ className: 'cvat-notification-notice-delete-project-failed',
},
},
},
diff --git a/tests/cypress/integration/actions_projects/registration_involved/base_actions_project_task_user.js b/tests/cypress/integration/actions_projects/registration_involved/base_actions_project_task_user.js
index ca3c5f64..c6ae3163 100644
--- a/tests/cypress/integration/actions_projects/registration_involved/base_actions_project_task_user.js
+++ b/tests/cypress/integration/actions_projects/registration_involved/base_actions_project_task_user.js
@@ -111,10 +111,17 @@ context('Base actions on the project', () => {
cy.openTask(taskName.firstTask);
cy.get('.cvat-constructor-viewer').should('not.exist');
});
- it('Logout first user, register second user, logout.', () => {
+ it('Logout first user, register second user, tries to create project and logout.', () => {
cy.logout();
cy.goToRegisterPage();
cy.userRegistration(firstName, lastName, userName, emailAddr, password);
+ cy.goToProjectsList();
+ // tries to create project
+ const failProjectName = `${randomString()}`;
+ cy.createProjects(failProjectName, labelName, attrName, textDefaultValue, null, 'fail');
+ cy.closeNotification('.cvat-notification-notice-create-project-failed');
+ cy.goToProjectsList();
+ cy.contains('.cvat-projects-project-item-title', failProjectName).should('not.exist');
cy.logout(userName);
});
it('Login first user. Assing project to second user. Logout.', () => {
@@ -124,9 +131,12 @@ context('Base actions on the project', () => {
cy.assignProjectToUser(userName);
cy.logout();
});
- it('Login second user. The project and first tasks available for that user. Logout.', () => {
+ it('Login second user. The project and first tasks available for that user. Tries to delete project. Logout.', () => {
cy.login(userName, password);
cy.goToProjectsList();
+ // tries to delete project
+ cy.deleteProject(projectName, projectID, 'fail');
+ cy.closeNotification('.cvat-notification-notice-delete-project-failed');
cy.openProject(projectName);
cy.goToTaskList();
cy.contains('strong', taskName.secondTask).should('not.exist');
diff --git a/tests/cypress/support/commands_projects.js b/tests/cypress/support/commands_projects.js
index 76be22fc..c92fba8c 100644
--- a/tests/cypress/support/commands_projects.js
+++ b/tests/cypress/support/commands_projects.js
@@ -9,26 +9,33 @@ Cypress.Commands.add('goToProjectsList', () => {
cy.url().should('include', '/projects');
});
-Cypress.Commands.add('createProjects', (projectName, labelName, attrName, textDefaultValue, multiAttrParams) => {
- cy.get('#cvat-create-project-button').click();
- cy.get('#name').type(projectName);
- cy.get('.cvat-constructor-viewer-new-item').click();
- cy.get('[placeholder="Label name"]').type(labelName);
- cy.get('.cvat-new-attribute-button').click();
- cy.get('[placeholder="Name"]').type(attrName);
- cy.get('.cvat-attribute-type-input').click();
- cy.get('.ant-select-item-option').contains('Text').click();
- cy.get('[placeholder="Default value"]').type(textDefaultValue);
- if (multiAttrParams) {
- cy.updateAttributes(multiAttrParams);
- }
- cy.contains('button', 'Done').click();
- cy.get('.cvat-create-project-content').within(() => {
- cy.contains('Submit').click();
- });
- cy.contains('The project has been created').should('exist');
- cy.goToProjectsList();
-});
+Cypress.Commands.add(
+ 'createProjects',
+ (projectName, labelName, attrName, textDefaultValue, multiAttrParams, expectedResult = 'success') => {
+ cy.get('#cvat-create-project-button').click();
+ cy.get('#name').type(projectName);
+ cy.get('.cvat-constructor-viewer-new-item').click();
+ cy.get('[placeholder="Label name"]').type(labelName);
+ cy.get('.cvat-new-attribute-button').click();
+ cy.get('[placeholder="Name"]').type(attrName);
+ cy.get('.cvat-attribute-type-input').click();
+ cy.get('.cvat-attribute-type-input-text').click();
+ cy.get('[placeholder="Default value"]').type(textDefaultValue);
+ if (multiAttrParams) {
+ cy.updateAttributes(multiAttrParams);
+ }
+ cy.contains('button', 'Done').click();
+ cy.get('.cvat-create-project-content').within(() => {
+ cy.contains('Submit').click();
+ });
+ if (expectedResult == 'success') {
+ cy.contains('The project has been created').should('exist');
+ } else if (expectedResult == 'fail') {
+ cy.contains('The project has been created').should('not.exist');
+ }
+ cy.goToProjectsList();
+ },
+);
Cypress.Commands.add('openProject', (projectName) => {
cy.contains(projectName).click({ force: true });
@@ -47,7 +54,7 @@ Cypress.Commands.add('getProjectID', (projectName) => {
});
});
-Cypress.Commands.add('deleteProject', (projectName, projectID) => {
+Cypress.Commands.add('deleteProject', (projectName, projectID, expectedResult = 'success') => {
cy.contains(projectName)
.parents('.cvat-projects-project-item-card')
.within(() => {
@@ -56,12 +63,16 @@ Cypress.Commands.add('deleteProject', (projectName, projectID) => {
});
});
cy.get('.cvat-project-actions-menu').contains('Delete').click();
- cy.get('.ant-modal-content')
+ cy.get('.cvat-modal-confirm-remove-project')
.should('contain', `The project ${projectID} will be deleted`)
.within(() => {
cy.contains('button', 'Delete').click();
});
- cy.get('.cvat-projects-project-item-card').should('have.css', 'opacity', '0.5');
+ if (expectedResult === 'success') {
+ cy.get('.cvat-projects-project-item-card').should('have.css', 'opacity', '0.5');
+ } else if (expectedResult === 'fail') {
+ cy.get('.cvat-projects-project-item-card').should('not.have.attr', 'style');
+ }
});
Cypress.Commands.add('assignProjectToUser', (user) => {
@@ -75,3 +86,8 @@ Cypress.Commands.add('assignProjectToUser', (user) => {
cy.get(`.ant-select-item-option[title="${user}"]`).click();
});
});
+
+Cypress.Commands.add('closeNotification', (className) => {
+ cy.get(className).find('span[aria-label="close"]').click();
+ cy.get(className).should('not.exist');
+});