From 51febd7e4ef1bb85032e6b133039bc60026f1356 Mon Sep 17 00:00:00 2001 From: Elio Bischof Date: Tue, 11 Oct 2022 15:29:23 +0200 Subject: [PATCH] test(e2e): test authorizations (#4342) * add specs that cover the b2b demo * update cypress * test handling manager roles * use shared mocha contexts * use beforeEach instead of before * improve readability * improve application test * remove static waits * remove old awaitDesired * test owned project authorizations * simplify ensure.ts * test granted projects authz * disable prevSubject for shouldNotExist * await non-existence, then expect no error * update dependencies * fix tests from scratch * fix settings tests from scratch * Apply suggestions from code review Co-authored-by: Max Peintner * Implement code review suggestions * use spread operator * settings properties must match * add check settings object * revert spread operator Co-authored-by: Max Peintner --- CONTRIBUTING.md | 2 +- .../copy-to-clipboard.directive.ts | 2 +- .../member-create-dialog.component.html | 3 +- .../contributors/contributors.component.html | 2 + .../modules/info-row/info-row.component.html | 1 + .../members-table.component.html | 4 +- .../search-user-autocomplete.component.html | 3 +- .../modules/sidenav/sidenav.component.html | 1 + .../orgs/org-detail/org-detail.component.ts | 6 +- .../apps/app-create/app-create.component.html | 2 + .../app-secret-dialog.component.html | 3 +- .../redirect-uris.component.html | 2 +- .../e2e/applications/applications.cy.ts | 62 ++-- e2e/cypress/e2e/humans/humans.cy.ts | 41 +-- e2e/cypress/e2e/machines/machines.cy.ts | 42 ++- .../e2e/organization/organizations.cy.ts | 6 + e2e/cypress/e2e/permissions/permissions.cy.ts | 329 +++++++++++++----- e2e/cypress/e2e/projects/projects.cy.ts | 76 ++-- e2e/cypress/e2e/settings/oidc-settings.cy.ts | 2 +- .../e2e/settings/private-labeling.cy.ts | 4 +- e2e/cypress/support/api/apiauth.ts | 26 +- e2e/cypress/support/api/ensure.ts | 267 ++++++-------- e2e/cypress/support/api/grants.ts | 22 ++ e2e/cypress/support/api/members.ts | 76 ++++ e2e/cypress/support/api/oidc-settings.ts | 47 +-- e2e/cypress/support/api/orgs.ts | 30 ++ e2e/cypress/support/api/policies.ts | 11 +- e2e/cypress/support/api/projects.ts | 60 ++-- e2e/cypress/support/api/search.ts | 32 ++ e2e/cypress/support/api/types.ts | 14 + e2e/cypress/support/api/users.ts | 76 ++-- e2e/cypress/support/commands.ts | 100 ++++-- e2e/docker-compose.yaml | 2 +- e2e/package-lock.json | 57 +-- e2e/package.json | 15 +- 35 files changed, 883 insertions(+), 545 deletions(-) create mode 100644 e2e/cypress/e2e/organization/organizations.cy.ts create mode 100644 e2e/cypress/support/api/grants.ts create mode 100644 e2e/cypress/support/api/members.ts create mode 100644 e2e/cypress/support/api/orgs.ts create mode 100644 e2e/cypress/support/api/search.ts create mode 100644 e2e/cypress/support/api/types.ts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d7dcabf92..8fbc61bd2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -142,7 +142,7 @@ goreleaser build --id dev --snapshot --single-target --rm-dist --output .artifac > For speeding up rebuilds, you can reexecute only specific steps you think are necessary based on your changes. > Generating gRPC stubs: `DOCKER_BUILDKIT=1 docker build -f build/zitadel/Dockerfile . --target go-copy -o .` > Running unit tests: `DOCKER_BUILDKIT=1 docker build -f build/zitadel/Dockerfile . --target go-codecov` -> Generating the console: `DOCKER_BUILDKIT=1 docker build -f build/console/Dockerfile . -t zitadel-npm-console --target angular-export -o internal/api/ui/console/static/` +> Generating the console: `DOCKER_BUILDKIT=1 docker build -f build/console/Dockerfile . --target angular-export -o internal/api/ui/console/static/` > Build the binary: `goreleaser build --id dev --snapshot --single-target --rm-dist --output .artifacts/zitadel/zitadel --skip-before` You can now run and debug the binary in .artifacts/zitadel/zitadel using your favourite IDE, for example GoLand. diff --git a/console/src/app/directives/copy-to-clipboard/copy-to-clipboard.directive.ts b/console/src/app/directives/copy-to-clipboard/copy-to-clipboard.directive.ts index d0bcd9104..aa71d7966 100644 --- a/console/src/app/directives/copy-to-clipboard/copy-to-clipboard.directive.ts +++ b/console/src/app/directives/copy-to-clipboard/copy-to-clipboard.directive.ts @@ -7,7 +7,7 @@ export class CopyToClipboardDirective { @Input() valueToCopy: string = ''; @Output() copiedValue: EventEmitter = new EventEmitter(); - @HostListener('click', ['$event']) onMouseEnter($event: any): void { + @HostListener('click', ['$event']) onClick($event: any): void { $event.preventDefault(); $event.stopPropagation(); this.copytoclipboard(this.valueToCopy); diff --git a/console/src/app/modules/add-member-dialog/member-create-dialog.component.html b/console/src/app/modules/add-member-dialog/member-create-dialog.component.html index 243f18c67..3cfcefdea 100644 --- a/console/src/app/modules/add-member-dialog/member-create-dialog.component.html +++ b/console/src/app/modules/add-member-dialog/member-create-dialog.component.html @@ -44,7 +44,7 @@ >
- {{ role | roletransform }} + {{ role | roletransform }}
@@ -61,6 +61,7 @@ mat-raised-button class="ok-button" (click)="closeDialogWithSuccess()" + data-e2e="confirm-add-member-button" > {{ 'ACTIONS.ADD' | translate }} diff --git a/console/src/app/modules/contributors/contributors.component.html b/console/src/app/modules/contributors/contributors.component.html index 7a46edf0f..58d6f6355 100644 --- a/console/src/app/modules/contributors/contributors.component.html +++ b/console/src/app/modules/contributors/contributors.component.html @@ -10,6 +10,7 @@ class="contributor-avatar-circle" matTooltip="{{ member.displayName }} | {{ member.rolesList | roletransform }}" [ngStyle]="{ 'z-index': 20 - i }" + data-e2e="member-avatar" > add diff --git a/console/src/app/modules/info-row/info-row.component.html b/console/src/app/modules/info-row/info-row.component.html index fbba6c8b6..67c4f8630 100644 --- a/console/src/app/modules/info-row/info-row.component.html +++ b/console/src/app/modules/info-row/info-row.component.html @@ -41,6 +41,7 @@ cnslCopyToClipboard [valueToCopy]="login" (copiedValue)="copied = $event" + data-e2e="copy-loginname" > {{ login }} diff --git a/console/src/app/modules/members-table/members-table.component.html b/console/src/app/modules/members-table/members-table.component.html index 57b642dcf..65d75722e 100644 --- a/console/src/app/modules/members-table/members-table.component.html +++ b/console/src/app/modules/members-table/members-table.component.html @@ -93,6 +93,7 @@ (click)="$event.stopPropagation(); triggerDeleteMember(member)" mat-icon-button [disabled]="canDelete === false" + data-e2e="remove-member-button" > @@ -114,10 +115,11 @@ [removable]="canWrite" [selectable]="false" (removed)="removeRole(member, role)" + data-e2e="role" >
{{ role | roletransform }} - diff --git a/console/src/app/modules/search-user-autocomplete/search-user-autocomplete.component.html b/console/src/app/modules/search-user-autocomplete/search-user-autocomplete.component.html index 7f3b9d3e4..6d725ed13 100644 --- a/console/src/app/modules/search-user-autocomplete/search-user-autocomplete.component.html +++ b/console/src/app/modules/search-user-autocomplete/search-user-autocomplete.component.html @@ -65,6 +65,7 @@ [formControl]="myControl" placeholder="johndoe@domain.com" [matAutocomplete]="auto" + data-e2e="add-member-input" /> @@ -72,7 +73,7 @@ -
+
{{ setting.i18nKey | translate }} diff --git a/console/src/app/pages/orgs/org-detail/org-detail.component.ts b/console/src/app/pages/orgs/org-detail/org-detail.component.ts index d1464829e..532ba9b19 100644 --- a/console/src/app/pages/orgs/org-detail/org-detail.component.ts +++ b/console/src/app/pages/orgs/org-detail/org-detail.component.ts @@ -58,8 +58,10 @@ export class OrgDetailComponent implements OnInit, OnDestroy { breadcrumbService.setBreadcrumb([bread]); auth.activeOrgChanged.pipe(takeUntil(this.destroy$)).subscribe((org) => { - this.getData(); - this.loadMetadata(); + if (this.org && org) { + this.getData(); + this.loadMetadata(); + } }); } diff --git a/console/src/app/pages/projects/apps/app-create/app-create.component.html b/console/src/app/pages/projects/apps/app-create/app-create.component.html index 10a71d473..6a8091cc7 100644 --- a/console/src/app/pages/projects/apps/app-create/app-create.component.html +++ b/console/src/app/pages/projects/apps/app-create/app-create.component.html @@ -117,6 +117,7 @@ [urisList]="oidcAppRequest.toObject().redirectUrisList" [getValues]="requestRedirectValuesSubject$" title="{{ 'APP.OIDC.REDIRECT' | translate }}" + data-e2e="redirect-uris" > @@ -145,6 +146,7 @@ title="{{ 'APP.OIDC.POSTLOGOUTREDIRECT' | translate }}" [getValues]="requestRedirectValuesSubject$" [isNative]="appType?.value.oidcAppType === OIDCAppType.OIDC_APP_TYPE_NATIVE" + data-e2e="postlogout-uris" > diff --git a/console/src/app/pages/projects/apps/app-secret-dialog/app-secret-dialog.component.html b/console/src/app/pages/projects/apps/app-secret-dialog/app-secret-dialog.component.html index 396818a19..98973a8e2 100644 --- a/console/src/app/pages/projects/apps/app-secret-dialog/app-secret-dialog.component.html +++ b/console/src/app/pages/projects/apps/app-secret-dialog/app-secret-dialog.component.html @@ -4,7 +4,7 @@

{{ 'APP.OIDC.CLIENTSECRET_DESCRIPTION' | translate }}

- ClientId: {{ data.clientId }} + ClientId: {{ data.clientId }}