diff --git a/tests/e2e-playwright/specs/spaces/createSpaceFromSelection.spec.ts b/tests/e2e-playwright/specs/spaces/createSpaceFromSelection.spec.ts new file mode 100644 index 00000000000..4889287c4c7 --- /dev/null +++ b/tests/e2e-playwright/specs/spaces/createSpaceFromSelection.spec.ts @@ -0,0 +1,199 @@ +import { test } from '@playwright/test' +import { config } from './../../../e2e/config.js' +import { + ActorsEnvironment, + UsersEnvironment, + FilesEnvironment, + SpacesEnvironment +} from '../../../e2e/support/environment' +import { setAccessAndRefreshToken } from '../../helpers/setAccessAndRefreshToken' +import * as ui from '../../steps/ui/index' +import * as api from '../../steps/api/api' + +test.describe('create Space shortcut', () => { + let actorsEnvironment: ActorsEnvironment + const usersEnvironment = new UsersEnvironment() + const filesEnvironment = new FilesEnvironment() + const spacesEnvironment = new SpacesEnvironment() + + test.beforeEach(async ({ browser }) => { + actorsEnvironment = new ActorsEnvironment({ + context: { + acceptDownloads: config.acceptDownloads, + reportDir: config.reportDir, + tracingReportDir: config.tracingReportDir, + reportHar: config.reportHar, + reportTracing: config.reportTracing, + reportVideo: config.reportVideo, + failOnUncaughtConsoleError: config.failOnUncaughtConsoleError + }, + browser: browser + }) + + await setAccessAndRefreshToken(usersEnvironment) + + // Given "Admin" creates following users using API + // | id | + // | Alice | + await api.userHasBeenCreated({ usersEnvironment, stepUser: 'Admin', userToBeCreated: 'Alice' }) + // And "Admin" assigns following roles to the users using API + // | id | role | + // | Alice | Space Admin | + await api.userHasAssignRolesToUsers({ + usersEnvironment, + stepUser: 'Admin', + targetUserId: 'Alice', + role: 'Space Admin' + }) + // And "Alice" logs in + await ui.logInUser({ usersEnvironment, actorsEnvironment, stepUser: 'Alice' }) + }) + + test.afterEach(async () => { + // And "Alice" logs out + await ui.logOutUser({ actorsEnvironment, stepUser: 'Alice' }) + await api.deleteUser({ usersEnvironment, stepUser: 'Admin', targetUser: 'Alice' }) + }) + + test('create Space from folder', async () => { + // And "Alice" creates the following folder in personal space using API + // | name | + // | spaceFolder | + // | spaceFolder/test | + await api.userHasCreatedFolders({ + usersEnvironment, + stepUser: 'Alice', + folderNames: ['spaceFolder', 'spaceFolder/test'] + }) + + // And "Alice" navigates to the personal space page + await ui.navigateToPersonalSpacePage({ actorsEnvironment, stepUser: 'Alice' }) + + // And "Alice" uploads the following resources + // | resource | to | + // | data.zip | spaceFolder | + // | lorem.txt | spaceFolder | + await ui.uploadResource({ + actorsEnvironment, + filesEnvironment, + stepUser: 'Alice', + resource: 'data.zip', + to: 'spaceFolder' + }) + await ui.uploadResource({ + actorsEnvironment, + filesEnvironment, + stepUser: 'Alice', + resource: 'lorem.zip', + to: 'spaceFolder' + }) + + // And "Alice" navigates to the personal space page + await ui.navigateToPersonalSpacePage({ actorsEnvironment, stepUser: 'Alice' }) + + // And "Alice" creates space "folderSpace" from folder "spaceFolder" using the context menu + await ui.userCreatesSpaceFromFolderUsingContexMenu({ + actorsEnvironment, + spacesEnvironment, + stepUser: 'Alice', + spaceName: 'folderSpace', + folderName: 'spaceFolder' + }) + + // And "Alice" navigates to the project space "folderSpace" + await ui.navigateToSpace({ actorsEnvironment, stepUser: 'Alice', space: 'folderSpace' }) + + // Then following resources should be displayed in the files list for user "Alice" + // | resource | + // | data.zip | + // | lorem.txt | + expect( + await ui.resourceExists({ + actorsEnvironment, + listType: 'files list', + stepUser: 'Alice', + resource: 'data.zip' + }) + ).toBe(true) + expect( + await ui.resourceExists({ + actorsEnvironment, + listType: 'files list', + stepUser: 'Alice', + resource: 'lorem.txt' + }) + ).toBe(true) + }) + + test('create space from resources', async () => { + // And "Alice" creates the following folder in personal space using API + // | name | + // | resourceFolder | + await api.userHasCreatedFolder({ + usersEnvironment, + stepUser: 'Alice', + folderName: 'resourceFolder' + }) + + // And "Alice" navigates to the personal space page + await ui.navigateToPersonalSpacePage({ actorsEnvironment, stepUser: 'Alice' }) + + // And "Alice" uploads the following resources + // | resource | to | + // | data.zip | resourceFolder | + // | lorem.txt | spaceFolder | + await ui.uploadResource({ + actorsEnvironment, + filesEnvironment, + stepUser: 'Alice', + resource: 'data.zip', + to: 'spaceFolder' + }) + await ui.uploadResource({ + actorsEnvironment, + filesEnvironment, + stepUser: 'Alice', + resource: 'lorem.zip', + to: '' + }) + + // And "Alice" navigates to the personal space page + await ui.navigateToPersonalSpacePage({ actorsEnvironment, stepUser: 'Alice' }) + + // And "Alice" creates space "resourceSpace" from resources using the context menu + // | resource | + // | resourceFolder | + // | lorem.txt | + await ui.userCreatesSpaceFromResourcesUsingContexMenu({ + actorsEnvironment, + spacesEnvironment, + stepUser: 'Alice', + spaceName: 'resourceSpace', + resources: ['resourceFolder', 'lorem.txt'] + }) + + // And "Alice" navigates to the project space "resourceSpace" + await ui.navigateToSpace({ actorsEnvironment, stepUser: 'Alice', space: 'resourceSpace' }) + + // Then following resources should be displayed in the files list for user "Alice" + // | resource | + // | resourceFolder | + // | lorem.txt | + expect( + await ui.resourceExists({ + actorsEnvironment, + listType: 'files list', + stepUser: 'Alice', + resource: 'resourceFolder' + }) + ).toBe(true) + expect( + await ui.resourceExists({ + actorsEnvironment, + listType: 'files list', + stepUser: 'Alice', + resource: 'lorem.txt' + }) + ).toBe(true) + }) +}) diff --git a/tests/e2e-playwright/steps/ui/resources.ts b/tests/e2e-playwright/steps/ui/resources.ts index 9a731f492d0..ac38ce15437 100644 --- a/tests/e2e-playwright/steps/ui/resources.ts +++ b/tests/e2e-playwright/steps/ui/resources.ts @@ -1,6 +1,10 @@ import { expect } from '@playwright/test' import { objects } from '../../../e2e/support' -import { ActorsEnvironment, FilesEnvironment } from '../../../e2e/support/environment' +import { + ActorsEnvironment, + FilesEnvironment, + SpacesEnvironment +} from '../../../e2e/support/environment' import { createResourceTypes, displayedResourceType, @@ -276,3 +280,50 @@ export async function getFilesList({ const resourceObject = new objects.applicationFiles.Resource({ page }) return await resourceObject.getAllFiles() } + +export async function userCreatesSpaceFromFolderUsingContexMenu({ + actorsEnvironment, + spacesEnvironment, + stepUser, + spaceName, + folderName +}: { + actorsEnvironment: ActorsEnvironment + spacesEnvironment: SpacesEnvironment + stepUser: string + spaceName: string + folderName: string +}): Promise { + const { page } = actorsEnvironment.getActor({ key: stepUser }) + const resourceObject = new objects.applicationFiles.Resource({ page }) + const space = await resourceObject.createSpaceFromFolder({ + folderName: folderName, + spaceName: spaceName + }) + spacesEnvironment.createSpace({ + key: space.name, + space: { name: space.name, id: space.id } + }) +} + +export async function userCreatesSpaceFromResourcesUsingContexMenu({ + actorsEnvironment, + spacesEnvironment, + stepUser, + spaceName, + resources +}: { + actorsEnvironment: ActorsEnvironment + spacesEnvironment: SpacesEnvironment + stepUser: string + spaceName: string + resources: string[] +}): Promise { + const { page } = actorsEnvironment.getActor({ key: stepUser }) + const resourceObject = new objects.applicationFiles.Resource({ page }) + const space = await resourceObject.createSpaceFromSelection({ resources, spaceName }) + spacesEnvironment.createSpace({ + key: space.name, + space: { name: space.name, id: space.id } + }) +} diff --git a/tests/e2e/cucumber/features/spaces/createSpaceFromSelection.feature b/tests/e2e/cucumber/features/spaces/createSpaceFromSelection.feature deleted file mode 100644 index 6b91497b2cb..00000000000 --- a/tests/e2e/cucumber/features/spaces/createSpaceFromSelection.feature +++ /dev/null @@ -1,55 +0,0 @@ -Feature: create Space shortcut - - Scenario: create Space from folder - Given "Admin" creates following users using API - | id | - | Alice | - And "Admin" assigns following roles to the users using API - | id | role | - | Alice | Space Admin | - And "Alice" logs in - And "Alice" creates the following folder in personal space using API - | name | - | spaceFolder | - | spaceFolder/test | - And "Alice" navigates to the personal space page - And "Alice" uploads the following resources - | resource | to | - | data.zip | spaceFolder | - | lorem.txt | spaceFolder | - And "Alice" navigates to the personal space page - And "Alice" creates space "folderSpace" from folder "spaceFolder" using the context menu - And "Alice" navigates to the project space "folderSpace" - Then following resources should be displayed in the files list for user "Alice" - | resource | - | data.zip | - | lorem.txt | - And "Alice" logs out - - Scenario: create space from resources - Given "Admin" creates following users using API - | id | - | Alice | - And "Admin" assigns following roles to the users using API - | id | role | - | Alice | Space Admin | - And "Alice" logs in - And "Alice" creates the following folder in personal space using API - | name | - | resourceFolder | - And "Alice" navigates to the personal space page - And "Alice" uploads the following resources - | resource | to | - | data.zip | resourceFolder | - | lorem.txt | | - And "Alice" navigates to the personal space page - And "Alice" creates space "resourceSpace" from resources using the context menu - | resource | - | resourceFolder | - | lorem.txt | - And "Alice" navigates to the project space "resourceSpace" - Then following resources should be displayed in the files list for user "Alice" - | resource | - | resourceFolder | - | lorem.txt | - And "Alice" logs out diff --git a/tests/e2e/support/objects/app-files/resource/actions.ts b/tests/e2e/support/objects/app-files/resource/actions.ts index ff6803c9d77..08cd6765139 100644 --- a/tests/e2e/support/objects/app-files/resource/actions.ts +++ b/tests/e2e/support/objects/app-files/resource/actions.ts @@ -230,7 +230,17 @@ export const createSpaceFromFolder = async ({ spaceName: string }): Promise => { await page.locator(util.format(resourceNameSelector, folderName)).click({ button: 'right' }) + await objects.a11y.Accessibility.assertNoSevereA11yViolations( + page, + ['tippyBox'], + 'contex menu tippy box' + ) await page.locator(createSpaceFromResourceAction).click() + await objects.a11y.Accessibility.assertNoSevereA11yViolations( + page, + ['ocModal'], + 'create space from folder modal' + ) await page.locator(resourceNameInput).fill(spaceName) const [response] = await Promise.all([ page.waitForResponse( @@ -299,8 +309,17 @@ export const createSpaceFromSelection = async ({ select: true }) await page.locator(util.format(resourceNameSelector, resources[0])).click({ button: 'right' }) - + await objects.a11y.Accessibility.assertNoSevereA11yViolations( + page, + ['tippyBox'], + 'contex menu tippy box' + ) await page.locator(createSpaceFromResourceAction).click() + await objects.a11y.Accessibility.assertNoSevereA11yViolations( + page, + ['ocModal'], + 'create space from folder modal' + ) await page.locator(resourceNameInput).fill(spaceName) const [response] = await Promise.all([ page.waitForResponse(