Skip to content
Snippets Groups Projects
Commit 4d43889b authored by Florent POITTEVIN's avatar Florent POITTEVIN
Browse files

feat: add cypress test for preservation space depending of roles

parent f7146916
No related branches found
No related tags found
No related merge requests found
Showing
with 293 additions and 39 deletions
......@@ -2,7 +2,6 @@
"projectId": "xt5fd6",
"requestTimeout": 10000,
"ignoreTestFiles": "*.js",
"baseUrl": "http://localhost:4200",
"chromeWebSecurity": false,
"defaultCommandTimeout": 10000
}
......@@ -8,7 +8,9 @@ describe("Admin Page", () => {
beforeEach(() => {
TestHelper.login(ApplicationRoleEnum.root);
cy.get(".avatar-wrapper").first().click();
cy.wait(1000); // MANDATORY FOR NOT RANDOM ERROR...
TestHelper.getTestData(DataTestEnum.linkMenuAdmin).click();
cy.wait(1000); // MANDATORY FOR NOT RANDOM ERROR...
TestHelper.waitModuleLoaded(ModuleLoadedEnum.adminModuleLoaded);
});
......
......@@ -9,6 +9,7 @@ describe("Deposit Page", () => {
beforeEach(() => {
TestHelper.login(ApplicationRoleEnum.root);
TestHelper.waitXhr("preingest/deposits?*", () => {
cy.wait(2000); // MANDATORY FOR NOT RANDOM ERROR...
TestHelper.getTestData(DataTestEnum.linkMenuDeposit).click();
}, {
expectedHttpCode: undefined,
......
......@@ -11,8 +11,54 @@ import {
import {TestHelper} from "./test-helper";
export class OrgunitHelper {
static createOrgUnit(role: RoleEnum | undefined): string {
// const createOrgUnit =
static orgUnitBaseNamePermanent: string = "[Cypress Permanent Test Data] Org Unit";
static orgUnitBaseNameTemporary: string = "[Cypress Temporary Test Data] Org Unit";
private static _generateOrgUnitName(role: RoleEnum | undefined, forPrerequisiteTest: boolean): string {
let orgUnitName = forPrerequisiteTest ? this.orgUnitBaseNamePermanent : this.orgUnitBaseNameTemporary;
let forRoleText = "";
if (isNotNullNorUndefined(role)) {
forRoleText = " for " + role;
} else {
forRoleText = " for " + "NOBODY";
}
orgUnitName = orgUnitName + forRoleText;
if (!forPrerequisiteTest) {
orgUnitName = orgUnitName + " " + Guid.MakeNew().ToString().toLowerCase();
}
return orgUnitName;
}
static createIfNotExistOrgUnitForPrerequisiteTest(role: RoleEnum | undefined): string {
const orgUnitName = this._generateOrgUnitName(role, true);
TestHelper.login(ApplicationRoleEnum.root);
// Go to admin page
cy.get(".avatar-wrapper").first().click();
TestHelper.getTestData(DataTestEnum.linkMenuAdmin).click();
TestHelper.waitModuleLoaded(ModuleLoadedEnum.adminModuleLoaded);
// Go to org unit list page
TestHelper.getTestData(DataTestEnum.adminTileOrganizationalUnit).click();
TestHelper.waitModuleLoaded(ModuleLoadedEnum.adminOrgUnitModuleLoaded);
TestHelper.getTestData(DataTestEnum.adminOrgUnitListSearchName).type(orgUnitName, {delay: 0, release: false});
cy.get("dlcm-shared-data-table").should("attr", "data-test-info-number-line").then((numberElement: number | any) => {
if (numberElement === "1") {
return;
} else if (numberElement === "0") {
this.createOrgUnit(role, true);
} else {
expect(+numberElement).to.be.lte(1);
}
});
return orgUnitName;
}
static createOrgUnit(role: RoleEnum | undefined, forPrerequisiteTest: boolean = false): string {
const orgUnitName = this._generateOrgUnitName(role, forPrerequisiteTest);
TestHelper.login(ApplicationRoleEnum.root);
// Go to admin page
......@@ -31,11 +77,6 @@ export class OrgunitHelper {
"admin/roles?*",
], () => TestHelper.getTestData(DataTestEnum.create).click());
let forRoleText = "";
if (isNotNullNorUndefined(role)) {
forRoleText = " for " + role;
}
const orgUnitName = "Org unit cypress" + forRoleText + " " + Guid.MakeNew().ToString().toLowerCase();
TestHelper.getTestData(DataTestEnum.adminOrgUnitName).type(orgUnitName);
TestHelper.getTestData(DataTestEnum.adminOrgUnitSubmissionPolicy)
......@@ -76,12 +117,12 @@ export class OrgunitHelper {
.last()
.click();
TestHelper.getTestData(role as any).click();
return orgUnitName;
}
TestHelper.waitXhr("admin/organizational-units/*", () => TestHelper.getTestData(DataTestEnum.save).click(), {
expectedHttpCode: HttpStatus.OK,
method: HttpVerbEnum.GET,
});
return orgUnitName;
}
}
import {RoleEnum} from "@shared/enums/role.enum";
import {ApplicationRoleEnum} from "@src/app/shared/enums/application-role.enum";
import {OrgunitHelper} from "./orgunit-helper";
import {TestHelper} from "./test-helper";
describe("Admin Page", () => {
beforeEach(() => {
OrgunitHelper.createOrgUnit(RoleEnum.MANAGER);
TestHelper.login(ApplicationRoleEnum.user);
});
it("Can see org unit", () => {
});
it("Can ask creation of org unit", () => {
});
it("Can edit org unit", () => {
});
it("Can display contributor", () => {
});
});
import {RoleEnum} from "@shared/enums/role.enum";
import {OrgunitHelper} from "../orgunit-helper";
import {PreservationSpaceCommonHelper} from "./preservation-space-common.helper";
describe("Preservation Space for Approver", () => {
let orgUnitName;
before(() => {
orgUnitName = OrgunitHelper.createIfNotExistOrgUnitForPrerequisiteTest(RoleEnum.APPROVER);
});
beforeEach(() => {
PreservationSpaceCommonHelper.goToPreservationSpaceMenu();
});
it("Can't edit org unit", () => {
PreservationSpaceCommonHelper.shouldNotEditOrgUnit(orgUnitName);
});
});
import {ApplicationRoleEnum} from "@shared/enums/application-role.enum";
import {DataTestEnum} from "@shared/enums/data-test.enum";
import {ModuleLoadedEnum} from "@shared/enums/module-loaded.enum";
import {TestHelper} from "../test-helper";
export class PreservationSpaceCommonHelper {
static goToPreservationSpaceMenu(): void {
TestHelper.login(ApplicationRoleEnum.user);
TestHelper.waitXhr("organizational-units?*", () => {
cy.wait(1000); // MANDATORY FOR NOT RANDOM ERROR...
TestHelper.getTestData(DataTestEnum.linkMenuPreservationSpace).click();
}, {
expectedHttpCode: undefined,
});
cy.wait(1000); // MANDATORY FOR NOT RANDOM ERROR...
TestHelper.waitModuleLoaded(ModuleLoadedEnum.preservationSpaceModuleLoaded);
TestHelper.waitModuleLoaded(ModuleLoadedEnum.preservationSpaceOrgUnitModuleLoaded);
}
static goToOrgUnitDetail(orgUnitName: string): void {
TestHelper.getTestData(DataTestEnum.preservationSpaceOrgUnitListSearchName).type(orgUnitName, {delay: 0, release: false});
cy.get("dlcm-shared-data-table").should("attr", "data-test-info-number-line").should("eq", "1");
TestHelper.waitXhrs(["organizational-units/*"],
() => cy.get("tbody").find("tr").first().click());
}
static shouldNotEditOrgUnit(orgUnitName: string): void {
PreservationSpaceCommonHelper.goToOrgUnitDetail(orgUnitName);
TestHelper.getTestData(DataTestEnum.preservationSpaceOrgUnitName).click({force: true});
TestHelper.getTestData(DataTestEnum.save).should("not.exist");
}
}
\ No newline at end of file
import {DataTestEnum} from "@shared/enums/data-test.enum";
import {HttpVerbEnum} from "@shared/enums/http-verb.enum";
import {HttpStatus} from "solidify-frontend";
import {TestHelper} from "../test-helper";
import {PreservationSpaceCommonHelper} from "./preservation-space-common.helper";
describe("Preservation Space for Common", () => {
beforeEach(() => {
PreservationSpaceCommonHelper.goToPreservationSpaceMenu();
});
it("Can see contributor", () => {
TestHelper.waitXhr("preingest/contributors?*", () => {
TestHelper.getTestData(DataTestEnum.preservationSpaceTabContributor).click();
});
});
it("Can ask creation of org unit", () => {
TestHelper.getTestData(DataTestEnum.preservationSpaceOrgUnitButtonAskCreationOrgUnit).click();
TestHelper.getTestData(DataTestEnum.preservationSpaceOrgUnitAskCreationName).type("Org unit test common");
TestHelper.getTestData(DataTestEnum.preservationSpaceOrgUnitAskCreationMessage).type("Org unit test message");
TestHelper.waitXhr("admin/notifications", () => {
TestHelper.getTestData(DataTestEnum.preservationSpaceOrgUnitAskCreationSubmit).click();
}, {
expectedHttpCode: HttpStatus.CREATED,
method: HttpVerbEnum.POST,
});
TestHelper.waitXhr("admin/notifications/sent?*", () => {
TestHelper.getTestData(DataTestEnum.preservationSpaceTabRequestSent).click();
});
});
});
import {RoleEnum} from "@shared/enums/role.enum";
import {OrgunitHelper} from "../orgunit-helper";
import {PreservationSpaceCommonHelper} from "./preservation-space-common.helper";
describe("Preservation Space for Creator", () => {
let orgUnitName;
before(() => {
orgUnitName = OrgunitHelper.createIfNotExistOrgUnitForPrerequisiteTest(RoleEnum.CREATOR);
});
beforeEach(() => {
PreservationSpaceCommonHelper.goToPreservationSpaceMenu();
});
it("Can't edit org unit", () => {
PreservationSpaceCommonHelper.shouldNotEditOrgUnit(orgUnitName);
});
});
import {DataTestEnum} from "@shared/enums/data-test.enum";
import {HttpVerbEnum} from "@shared/enums/http-verb.enum";
import {RoleEnum} from "@shared/enums/role.enum";
import {OrgunitHelper} from "../orgunit-helper";
import {TestHelper} from "../test-helper";
import {PreservationSpaceCommonHelper} from "./preservation-space-common.helper";
describe("Preservation Space for Manager", () => {
let orgUnitName;
before(() => {
orgUnitName = OrgunitHelper.createIfNotExistOrgUnitForPrerequisiteTest(RoleEnum.MANAGER);
});
beforeEach(() => {
PreservationSpaceCommonHelper.goToPreservationSpaceMenu();
});
it("Can see org unit and edit org unit", () => {
PreservationSpaceCommonHelper.goToOrgUnitDetail(orgUnitName);
TestHelper.getTestData(DataTestEnum.preservationSpaceOrgUnitName).click({force: true});
TestHelper.getTestData(DataTestEnum.preservationSpaceOrgUnitName).type(orgUnitName);
TestHelper.waitXhr("admin/organizational-units/*", () => {
TestHelper.getTestData(DataTestEnum.save).click();
}, {
// expectedHttpCode: HttpStatus.CREATED, // ERROR
method: HttpVerbEnum.PATCH,
});
});
it("Can see received request", () => {
});
});
import {DataTestEnum} from "@shared/enums/data-test.enum";
import {HttpVerbEnum} from "@shared/enums/http-verb.enum";
import {OrgunitHelper} from "../orgunit-helper";
import {TestHelper} from "../test-helper";
import {PreservationSpaceCommonHelper} from "./preservation-space-common.helper";
describe("Preservation Space for Not Member", () => {
let orgUnitName;
before(() => {
orgUnitName = OrgunitHelper.createIfNotExistOrgUnitForPrerequisiteTest(undefined);
});
beforeEach(() => {
PreservationSpaceCommonHelper.goToPreservationSpaceMenu();
});
it("Can ask to join org unit", () => {
PreservationSpaceCommonHelper.goToOrgUnitDetail(orgUnitName);
TestHelper.getTestData(DataTestEnum.preservationSpaceOrgUnitButtonAskJoinOrgUnit).click();
TestHelper.getTestData(DataTestEnum.preservationSpaceOrgUnitAskJoinRole).first().click().get("mat-option").first().click();
TestHelper.getTestData(DataTestEnum.preservationSpaceOrgUnitAskJoinMessage).type("Can I join");
TestHelper.waitXhr("admin/notifications", () => {
TestHelper.getTestData(DataTestEnum.preservationSpaceOrgUnitAskJoinSubmit).click();
}, {
// expectedHttpCode: HttpStatus.CREATED, // Should work but failed
method: HttpVerbEnum.POST,
});
});
it("Can't edit org unit", () => {
PreservationSpaceCommonHelper.shouldNotEditOrgUnit(orgUnitName);
});
});
import {RoleEnum} from "@shared/enums/role.enum";
import {OrgunitHelper} from "../orgunit-helper";
import {PreservationSpaceCommonHelper} from "./preservation-space-common.helper";
describe("Preservation Space for Steward", () => {
let orgUnitName;
before(() => {
orgUnitName = OrgunitHelper.createIfNotExistOrgUnitForPrerequisiteTest(RoleEnum.STEWARD);
});
beforeEach(() => {
PreservationSpaceCommonHelper.goToPreservationSpaceMenu();
});
it("Can't edit org unit", () => {
PreservationSpaceCommonHelper.shouldNotEditOrgUnit(orgUnitName);
});
});
import {RoleEnum} from "@shared/enums/role.enum";
import {OrgunitHelper} from "../orgunit-helper";
import {PreservationSpaceCommonHelper} from "./preservation-space-common.helper";
describe("Preservation Space for Visitor", () => {
let orgUnitName;
before(() => {
orgUnitName = OrgunitHelper.createIfNotExistOrgUnitForPrerequisiteTest(RoleEnum.VISITOR);
});
beforeEach(() => {
PreservationSpaceCommonHelper.goToPreservationSpaceMenu();
});
it("Can see org unit", () => {
});
it("Can't edit org unit", () => {
});
});
......@@ -34,7 +34,7 @@ export class TestHelper {
token = cypressEnvironment.tokenAdmin;
break;
case ApplicationRoleEnum.user:
token = cypressEnvironment.tokenAdmin;
token = cypressEnvironment.tokenUser;
break;
case ApplicationRoleEnum.guest:
default:
......
[0602/131250.462:ERROR:process_reader_win.cc(151)] SuspendThread: Accs refus. (0x5)
[0602/131250.463:ERROR:process_reader_win.cc(151)] SuspendThread: Accs refus. (0x5)
[0602/131250.463:ERROR:process_reader_win.cc(151)] SuspendThread: Accs refus. (0x5)
[0602/131250.463:ERROR:process_reader_win.cc(151)] SuspendThread: Accs refus. (0x5)
[0602/131250.464:ERROR:process_reader_win.cc(151)] SuspendThread: Accs refus. (0x5)
......@@ -111,6 +111,7 @@ export abstract class AbstractMainToolbarPresentational extends SharedAbstractPr
labelToTranslate: AppHelper.home,
isVisible: () => true,
icon: IconNameEnum.home,
dataTest: DataTestEnum.linkMenuHome,
},
{
click: (menu) => this.openOrder(),
......@@ -118,9 +119,10 @@ export abstract class AbstractMainToolbarPresentational extends SharedAbstractPr
labelToTranslate: AppHelper.order,
isVisible: () => PermissionUtil.isUserHavePermission(this.logged, ApplicationRolePermissionEnum.userPermission, this.userRoles),
icon: IconNameEnum.order,
// badgeCounter: () => "" + this.numberMyOrderReadyNew,
// badgeDescription: "Counter of new order ready in my order",
// badgeHidden: () => this.numberMyOrderReadyNew === 0,
badgeCounter: () => "" + this.numberMyOrderReadyNew,
badgeDescription: "Counter of new order ready in my order",
badgeHidden: () => this.numberMyOrderReadyNew === 0,
dataTest: DataTestEnum.linkMenuOrder,
},
{
click: (menu) => this.navigate(menu.path),
......@@ -139,6 +141,7 @@ export abstract class AbstractMainToolbarPresentational extends SharedAbstractPr
badgeCounter: () => "" + this.numberPendingRequestNotificationInbox,
badgeDescription: "Counter of pending request notification in inbox",
badgeHidden: () => this.numberPendingRequestNotificationInbox === 0,
dataTest: DataTestEnum.linkMenuPreservationSpace,
},
];
......
......@@ -13,6 +13,7 @@ import {
Store,
} from "@ngxs/store";
import {SharedAbstractListRoutable} from "@shared/components/routables/shared-abstract-list/shared-abstract-list.routable";
import {DataTestEnum} from "@shared/enums/data-test.enum";
import {FieldTypeEnum} from "@shared/enums/field-type.enum";
import {LocalStateEnum} from "@shared/enums/local-state.enum";
import {RouterExtService} from "@shared/services/router-ext.service";
......@@ -59,6 +60,7 @@ export class AdminOrgunitListRoutable extends SharedAbstractListRoutable<Organiz
order: OrderEnum.descending,
isFilterable: true,
isSortable: true,
dataTest: DataTestEnum.adminOrgUnitListSearchName,
},
{
field: "openingDate",
......
......@@ -7,6 +7,7 @@ import {
RouterModule,
Routes,
} from "@angular/router";
import {ModuleLoadedEnum} from "@shared/enums/module-loaded.enum";
import {
AdminRoutesEnum,
AppRoutesEnum,
......@@ -52,4 +53,7 @@ const routes: Routes = [
exports: [RouterModule],
})
export class AdminOrgunitRoutingModule {
constructor() {
window[ModuleLoadedEnum.adminOrgUnitModuleLoaded] = true;
}
}
......@@ -13,6 +13,7 @@ import {LocalStateModel} from "@app/shared/models/local-state.model";
import {Navigate} from "@ngxs/router-plugin";
import {Store} from "@ngxs/store";
import {Tab} from "@shared/components/containers/shared-tabs/shared-tabs.container";
import {DataTestEnum} from "@shared/enums/data-test.enum";
import {IconNameEnum} from "@shared/enums/icon-name.enum";
import {SessionStorageEnum} from "@shared/enums/session-storage.enum";
import {SessionStorageHelper} from "@shared/helpers/session-storage.helper";
......@@ -46,6 +47,7 @@ export class PreservationSpaceHomeRoutable extends SharedAbstractPresentational
titleToTranslate: MARK_AS_TRANSLATABLE("admin.organizationalUnit.home.title"),
suffixUrl: PreservationSpaceRoutesEnum.organizationalUnit,
route: () => [...this.rootUrl, PreservationSpaceRoutesEnum.organizationalUnit],
dataTest: DataTestEnum.preservationSpaceTabOrgUnit,
},
{
id: "CONTRIBUTOR",
......@@ -53,6 +55,7 @@ export class PreservationSpaceHomeRoutable extends SharedAbstractPresentational
titleToTranslate: MARK_AS_TRANSLATABLE("preservationSpace.contributor.home.title"),
suffixUrl: PreservationSpaceRoutesEnum.contributor,
route: () => [...this.rootUrl, PreservationSpaceRoutesEnum.contributor],
dataTest: DataTestEnum.preservationSpaceTabContributor,
},
{
id: "NOTIFICATION_RECEIVED",
......@@ -61,6 +64,7 @@ export class PreservationSpaceHomeRoutable extends SharedAbstractPresentational
suffixUrl: PreservationSpaceRoutesEnum.notificationInbox,
route: () => [...this.rootUrl, PreservationSpaceRoutesEnum.notificationInbox],
numberNew: () => SessionStorageHelper.getListItem(SessionStorageEnum.notificationInboxPending).length,
dataTest: DataTestEnum.preservationSpaceTabRequestReceived,
},
{
id: "NOTIFICATION_SENT",
......@@ -68,6 +72,7 @@ export class PreservationSpaceHomeRoutable extends SharedAbstractPresentational
titleToTranslate: MARK_AS_TRANSLATABLE("preservationSpace.notificationSent.home.title"),
suffixUrl: PreservationSpaceRoutesEnum.notificationSent,
route: () => [...this.rootUrl, PreservationSpaceRoutesEnum.notificationSent],
dataTest: DataTestEnum.preservationSpaceTabRequestSent,
},
];
......
......@@ -7,6 +7,7 @@
<mat-label>{{'sorganizationalUnit.modal.requestAccess.form.desiredRole' | translate}}</mat-label>
<mat-select [formControl]="fd"
[required]="formValidationHelper.hasRequiredField(fd)"
[dlcmDataTest]="dataTestEnum.preservationSpaceOrgUnitAskJoinRole"
>
<mat-option *ngFor="let role of (listRoleObs | async)"
[value]="role.resId"
......@@ -20,6 +21,7 @@
<mat-label>{{'organizationalUnit.modal.requestAccess.form.message' | translate }}</mat-label>
<textarea [formControl]="fd"
[solidifyValidation]="errors"
[dlcmDataTest]="dataTestEnum.preservationSpaceOrgUnitAskJoinMessage"
matInput
[required]="formValidationHelper.hasRequiredField(fd)"
></textarea>
......@@ -39,6 +41,7 @@
color="primary"
[dlcmButtonSpinner]="isLoadingObs | async"
[disabled]="form.invalid"
[dlcmDataTest]="dataTestEnum.preservationSpaceOrgUnitAskJoinSubmit"
solidifyShortCuts
(onEnter)="onSubmit()"
(click)="onSubmit()"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment