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'); +});