diff --git a/src/frontend/packages/cf-autoscaler/src/features/autoscaler-tab-extension/autoscaler-tab-extension.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/features/autoscaler-tab-extension/autoscaler-tab-extension.component.spec.ts index eff100853b..b96d66bdb5 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/autoscaler-tab-extension/autoscaler-tab-extension.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/autoscaler-tab-extension/autoscaler-tab-extension.component.spec.ts @@ -15,6 +15,9 @@ import { import { RunningInstancesComponent, } from '../../../../cloud-foundry/src/shared/components/running-instances/running-instances.component'; +import { + cfCurrentUserPermissionsService, +} from '../../../../cloud-foundry/src/user-permissions/cf-user-permissions-checkers'; import { ApplicationServiceMock } from '../../../../cloud-foundry/test-framework/application-service-helper'; import { CoreModule } from '../../../../core/src/core/core.module'; import { SharedModule } from '../../../../core/src/shared/shared.module'; @@ -48,7 +51,8 @@ describe('AutoscalerTabExtensionComponent', () => { providers: [ DatePipe, { provide: ApplicationService, useClass: ApplicationServiceMock }, - TabNavService + TabNavService, + ...cfCurrentUserPermissionsService ] }) .compileComponents(); diff --git a/src/frontend/packages/cf-autoscaler/src/features/autoscaler-tab-extension/autoscaler-tab-extension.component.ts b/src/frontend/packages/cf-autoscaler/src/features/autoscaler-tab-extension/autoscaler-tab-extension.component.ts index dfee79bace..9b3b56c9b2 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/autoscaler-tab-extension/autoscaler-tab-extension.component.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/autoscaler-tab-extension/autoscaler-tab-extension.component.ts @@ -2,15 +2,25 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; import { MatSnackBar, MatSnackBarRef, SimpleSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute } from '@angular/router'; import { Store } from '@ngrx/store'; -import { combineLatest, Observable, Subscription } from 'rxjs'; -import { distinctUntilChanged, filter, first, map, pairwise, publishReplay, refCount } from 'rxjs/operators'; +import { combineLatest, Observable, of, Subscription } from 'rxjs'; +import { distinctUntilChanged, filter, first, map, pairwise, publishReplay, refCount, switchMap } from 'rxjs/operators'; -import { applicationEntityType } from '../../../../cloud-foundry/src/cf-entity-types'; -import { createEntityRelationPaginationKey } from '../../../../cloud-foundry/src/entity-relations/entity-relations.types'; +import { cfEntityCatalog } from '../../../../cloud-foundry/src/cf-entity-catalog'; +import { + applicationEntityType, + organizationEntityType, + spaceEntityType, +} from '../../../../cloud-foundry/src/cf-entity-types'; +import { + createEntityRelationKey, + createEntityRelationPaginationKey, +} from '../../../../cloud-foundry/src/entity-relations/entity-relations.types'; import { ApplicationMonitorService } from '../../../../cloud-foundry/src/features/applications/application-monitor.service'; import { ApplicationService } from '../../../../cloud-foundry/src/features/applications/application.service'; import { getGuids } from '../../../../cloud-foundry/src/features/applications/application/application-base.component'; +import { CfCurrentUserPermissions } from '../../../../cloud-foundry/src/user-permissions/cf-user-permissions-checkers'; import { StratosTab, StratosTabType } from '../../../../core/src/core/extension/extension-service'; +import { CurrentUserPermissionsService } from '../../../../core/src/core/permissions/current-user-permissions.service'; import { safeUnsubscribe } from '../../../../core/src/core/utils.service'; import { ConfirmationDialogConfig } from '../../../../core/src/shared/components/confirmation-dialog.config'; import { ConfirmationDialogService } from '../../../../core/src/shared/components/confirmation-dialog.service'; @@ -52,9 +62,32 @@ import { appAutoscalerAppMetricEntityType, autoscalerEntityFactory } from '../.. link: 'autoscale', icon: 'meter', iconFont: 'stratos-icons', - hidden: (store: Store, esf: EntityServiceFactory, activatedRoute: ActivatedRoute) => { + hidden: (store: Store, esf: EntityServiceFactory, activatedRoute: ActivatedRoute, cups: CurrentUserPermissionsService) => { const endpointGuid = getGuids('cf')(activatedRoute) || window.location.pathname.split('/')[2]; - return isAutoscalerEnabled(endpointGuid, esf).pipe(map(enabled => !enabled)); + const appGuid = getGuids()(activatedRoute) || window.location.pathname.split('/')[3]; + const appEntService = cfEntityCatalog.application.store.getEntityService(appGuid, endpointGuid, { + includeRelations: [ + createEntityRelationKey(applicationEntityType, spaceEntityType), + createEntityRelationKey(spaceEntityType, organizationEntityType), + ], + populateMissing: true + }) + + const canEditApp$ = appEntService.waitForEntity$.pipe( + switchMap(app => cups.can( + CfCurrentUserPermissions.APPLICATION_EDIT, + endpointGuid, + app.entity.entity.space.entity.organization_guid, + app.entity.entity.space.metadata.guid + )), + ) + + const autoscalerEnabled = isAutoscalerEnabled(endpointGuid, esf); + + return canEditApp$.pipe( + switchMap(canEditSpace => canEditSpace ? autoscalerEnabled : of(false)), + map(can => !can) + ) } }) @Component({ @@ -130,7 +163,7 @@ export class AutoscalerTabExtensionComponent implements OnInit, OnDestroy { private paginationMonitorFactory: PaginationMonitorFactory, private appAutoscalerPolicySnackBar: MatSnackBar, private appAutoscalerScalingHistorySnackBar: MatSnackBar, - private confirmDialog: ConfirmationDialogService, + private confirmDialog: ConfirmationDialogService ) { } ngOnInit() { diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/build-tab.component.html b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/build-tab.component.html index a1ceaa6f53..de18350435 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/build-tab.component.html +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/build-tab.component.html @@ -149,12 +149,12 @@ - + Deployment Info - +
- - None - diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/build-tab.component.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/build-tab.component.ts index 57c88faeb4..6c07dbb615 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/build-tab.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/build-tab.component.ts @@ -1,12 +1,15 @@ import { Component, Inject, OnInit } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { Store } from '@ngrx/store'; -import { combineLatest as observableCombineLatest, Observable, of as observableOf } from 'rxjs'; -import { combineLatest, delay, distinct, filter, first, map, mergeMap, startWith, tap } from 'rxjs/operators'; +import { combineLatest as observableCombineLatest, Observable, of as observableOf, of } from 'rxjs'; +import { combineLatest, delay, distinct, filter, first, map, mergeMap, startWith, switchMap, tap } from 'rxjs/operators'; import { AppMetadataTypes } from '../../../../../../../../cloud-foundry/src/actions/app-metadata.actions'; import { UpdateExistingApplication } from '../../../../../../../../cloud-foundry/src/actions/application.actions'; import { CFAppState } from '../../../../../../../../cloud-foundry/src/cf-app-state'; +import { + CurrentUserPermissionsService, +} from '../../../../../../../../core/src/core/permissions/current-user-permissions.service'; import { getFullEndpointApiUrl } from '../../../../../../../../core/src/features/endpoints/endpoint-helpers'; import { ConfirmationDialogConfig } from '../../../../../../../../core/src/shared/components/confirmation-dialog.config'; import { ConfirmationDialogService } from '../../../../../../../../core/src/shared/components/confirmation-dialog.service'; @@ -58,6 +61,7 @@ const appRestageConfirmation = new ConfirmationDialogConfig( export class BuildTabComponent implements OnInit { public isBusyUpdating$: Observable<{ updating: boolean }>; public manageAppPermission = CfCurrentUserPermissions.APPLICATION_MANAGE; + constructor( public applicationService: ApplicationService, private scmService: GitSCMService, @@ -66,7 +70,7 @@ export class BuildTabComponent implements OnInit { private route: ActivatedRoute, private router: Router, private confirmDialog: ConfirmationDialogService, - + private cups: CurrentUserPermissionsService ) { } cardTwoFetching$: Observable; @@ -108,8 +112,17 @@ export class BuildTabComponent implements OnInit { }) ); - this.deploySource$ = this.applicationService.applicationStratProject$.pipe( - combineLatest(this.applicationService.application$) + const canSeeEnvVars$ = this.applicationService.appSpace$.pipe( + switchMap(space => this.cups.can( + CfCurrentUserPermissions.APPLICATION_VIEW_ENV_VARS, + this.applicationService.cfGuid, + space.metadata.guid) + ) + ) + + const deploySource$ = observableCombineLatest( + this.applicationService.applicationStratProject$, + this.applicationService.application$ ).pipe( map(([project, app]) => { if (!!project) { @@ -149,6 +162,10 @@ export class BuildTabComponent implements OnInit { } }), startWith({ type: 'loading' }) + ) + + this.deploySource$ = canSeeEnvVars$.pipe( + switchMap(canSeeEnvVars => canSeeEnvVars ? deploySource$ : of(null)), ); } diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.html b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.html index bf67158f11..4c5cd00b6f 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.html +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.html @@ -5,7 +5,8 @@
- +
@@ -14,23 +15,27 @@
- - - - - - - - - - + + + + + \ No newline at end of file diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.ts index c3524019b6..048e57ddac 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.ts @@ -1,13 +1,15 @@ -import { Component, ElementRef, Input, OnDestroy, OnInit, ViewChild, Renderer2 } from '@angular/core'; +import { Component, ElementRef, Input, OnDestroy, OnInit, Renderer2, ViewChild } from '@angular/core'; import { MatSnackBar, MatSnackBarRef, SimpleSnackBar } from '@angular/material/snack-bar'; -import { Observable, Subscription } from 'rxjs'; -import { first, map } from 'rxjs/operators'; +import { combineLatest, Observable, Subscription } from 'rxjs'; +import { first, map, switchMap } from 'rxjs/operators'; import { AppMetadataTypes } from '../../../../../../cloud-foundry/src/actions/app-metadata.actions'; import { ApplicationService } from '../../../../../../cloud-foundry/src/features/applications/application.service'; +import { CurrentUserPermissionsService } from '../../../../../../core/src/core/permissions/current-user-permissions.service'; import { ConfirmationDialogConfig } from '../../../../../../core/src/shared/components/confirmation-dialog.config'; import { ConfirmationDialogService } from '../../../../../../core/src/shared/components/confirmation-dialog.service'; import { StratosStatus } from '../../../../../../core/src/shared/shared.types'; +import { CfCurrentUserPermissions } from '../../../../user-permissions/cf-user-permissions-checkers'; const appInstanceScaleToZeroConfirmation = new ConfirmationDialogConfig('Set Instance count to 0', 'Are you sure you want to set the instance count to 0?', 'Confirm', true); @@ -28,14 +30,26 @@ export class CardAppInstancesComponent implements OnInit, OnDestroy { status$: Observable; + public canEditApp$: Observable; + constructor( public appService: ApplicationService, private renderer: Renderer2, private confirmDialog: ConfirmationDialogService, - private snackBar: MatSnackBar) { + private snackBar: MatSnackBar, + cups: CurrentUserPermissionsService + ) { this.status$ = this.appService.applicationState$.pipe( map(state => state.indicator) ); + this.canEditApp$ = combineLatest( + appService.appOrg$, + appService.appSpace$ + ).pipe( + switchMap(([org, space]) => + cups.can(CfCurrentUserPermissions.APPLICATION_EDIT, appService.cfGuid, org.metadata.guid, space.metadata.guid) + )) + } private currentCount = 0; diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-instance/cf-app-instances-config.service.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-instance/cf-app-instances-config.service.ts index 1559dfec06..69b0f82bd8 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-instance/cf-app-instances-config.service.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-instance/cf-app-instances-config.service.ts @@ -1,12 +1,15 @@ import { Injectable } from '@angular/core'; import { Router } from '@angular/router'; import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; +import { combineLatest as combineLatestObs, Observable } from 'rxjs'; import { combineLatest, map, switchMap } from 'rxjs/operators'; import { DeleteApplicationInstance } from '../../../../../../../cloud-foundry/src/actions/application.actions'; import { FetchApplicationMetricsAction } from '../../../../../../../cloud-foundry/src/actions/cf-metrics.actions'; import { CFAppState } from '../../../../../../../cloud-foundry/src/cf-app-state'; +import { + CurrentUserPermissionsService, +} from '../../../../../../../core/src/core/permissions/current-user-permissions.service'; import { UtilsService } from '../../../../../../../core/src/core/utils.service'; import { ConfirmationDialogConfig } from '../../../../../../../core/src/shared/components/confirmation-dialog.config'; import { ConfirmationDialogService } from '../../../../../../../core/src/shared/components/confirmation-dialog.service'; @@ -27,6 +30,7 @@ import { IMetricMatrixResult, IMetrics } from '../../../../../../../store/src/ty import { IMetricApplication } from '../../../../../../../store/src/types/metric.types'; import { ApplicationService } from '../../../../../features/applications/application.service'; import { CfCellHelper } from '../../../../../features/cloud-foundry/cf-cell.helpers'; +import { CfCurrentUserPermissions } from '../../../../../user-permissions/cf-user-permissions-checkers'; import { ListAppInstance } from './app-instance-types'; import { CfAppInstancesDataSource } from './cf-app-instances-data-source'; import { TableCellCfCellComponent } from './table-cell-cf-cell/table-cell-cf-cell.component'; @@ -158,7 +162,7 @@ export class CfAppInstancesConfigService implements IListConfig }, label: 'Terminate', description: ``, // Description depends on console user permission - + createVisible: () => this.canEditApp$ }; private listActionSsh: IListAction = { @@ -182,7 +186,8 @@ export class CfAppInstancesConfigService implements IListConfig space.entity.allow_ssh; }) ); - })) + })), + createVisible: () => this.canEditApp$ }; private singleActions = [ @@ -190,6 +195,8 @@ export class CfAppInstancesConfigService implements IListConfig this.listActionSsh, ]; + private canEditApp$: Observable; + constructor( private store: Store, private appService: ApplicationService, @@ -197,7 +204,8 @@ export class CfAppInstancesConfigService implements IListConfig private router: Router, private confirmDialog: ConfirmationDialogService, entityServiceFactory: EntityServiceFactory, - paginationMonitorFactory: PaginationMonitorFactory + paginationMonitorFactory: PaginationMonitorFactory, + cups: CurrentUserPermissionsService ) { const cellHelper = new CfCellHelper(store, paginationMonitorFactory); @@ -220,6 +228,15 @@ export class CfAppInstancesConfigService implements IListConfig this.appService.appGuid, this, ); + + this.canEditApp$ = combineLatestObs( + appService.appOrg$, + appService.appSpace$ + ).pipe( + switchMap(([org, space]) => + cups.can(CfCurrentUserPermissions.APPLICATION_EDIT, appService.cfGuid, org.metadata.guid, space.metadata.guid) + ) + ) } getGlobalActions = () => null; diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-route/cf-app-routes-list-config.service.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-route/cf-app-routes-list-config.service.ts index a631fac6ae..b69eb4ab15 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-route/cf-app-routes-list-config.service.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-route/cf-app-routes-list-config.service.ts @@ -1,7 +1,8 @@ import { DatePipe } from '@angular/common'; import { Injectable } from '@angular/core'; import { Store } from '@ngrx/store'; -import { take } from 'rxjs/operators'; +import { combineLatest } from 'rxjs'; +import { switchMap, take } from 'rxjs/operators'; import { CFAppState } from '../../../../../../../cloud-foundry/src/cf-app-state'; import { @@ -12,6 +13,7 @@ import { IGlobalListAction, IListConfig } from '../../../../../../../core/src/sh import { RouterNav } from '../../../../../../../store/src/actions/router.actions'; import { APIResource } from '../../../../../../../store/src/types/api.types'; import { ApplicationService } from '../../../../../features/applications/application.service'; +import { CfCurrentUserPermissions } from '../../../../../user-permissions/cf-user-permissions-checkers'; import { CfAppRoutesListConfigServiceBase } from './cf-app-routes-list-config-base'; @@ -23,11 +25,12 @@ export class CfAppRoutesListConfigService extends CfAppRoutesListConfigServiceBa appService: ApplicationService, confirmDialog: ConfirmationDialogService, datePipe: DatePipe, - currentUserPermissionsService: CurrentUserPermissionsService, + private currentUserPermissionsService: CurrentUserPermissionsService, ) { super(store, appService, confirmDialog, datePipe, currentUserPermissionsService, null, true); this.setupList(store, appService); + this.allowSelection = false; // Allow the multi action visibility to determine this } private setupList(store: Store, appService: ApplicationService) { @@ -51,7 +54,18 @@ export class CfAppRoutesListConfigService extends CfAppRoutesListConfigServiceBa }, icon: 'add', label: 'Add', - description: 'Add new route' + description: 'Add new route', + visible$: combineLatest( + appService.appOrg$, + appService.appSpace$ + ).pipe( + switchMap(([org, space]) => this.currentUserPermissionsService.can( + CfCurrentUserPermissions.ROUTE_CREATE, + appService.cfGuid, + org.metadata.guid, + space.metadata.guid + )) + ) }; this.getGlobalActions = () => [listActionAddRoute]; } diff --git a/src/frontend/packages/cloud-foundry/src/user-permissions/cf-user-permissions-checkers.ts b/src/frontend/packages/cloud-foundry/src/user-permissions/cf-user-permissions-checkers.ts index b38816caf9..5d4e9bc1be 100644 --- a/src/frontend/packages/cloud-foundry/src/user-permissions/cf-user-permissions-checkers.ts +++ b/src/frontend/packages/cloud-foundry/src/user-permissions/cf-user-permissions-checkers.ts @@ -396,7 +396,7 @@ export class CfUserPermissionsChecker extends BaseCurrentUserPermissionsChecker } private getAllEndpointGuids() { - return this.store.select(connectedEndpointsSelector).pipe( + return this.store.select(connectedEndpointsSelector()).pipe( map(endpoints => Object.values(endpoints).filter(e => e.cnsi_type === CF_ENDPOINT_TYPE).map(endpoint => endpoint.guid)) ); } diff --git a/src/frontend/packages/core/src/core/extension/extension-service.ts b/src/frontend/packages/core/src/core/extension/extension-service.ts index 82b7a305ff..c71151f5b7 100644 --- a/src/frontend/packages/core/src/core/extension/extension-service.ts +++ b/src/frontend/packages/core/src/core/extension/extension-service.ts @@ -1,4 +1,4 @@ -import { Injectable, NgModule, ModuleWithProviders } from '@angular/core'; +import { Injectable, ModuleWithProviders, NgModule } from '@angular/core'; import { ActivatedRoute, Route, Router } from '@angular/router'; import { Store } from '@ngrx/store'; import { Observable } from 'rxjs'; @@ -6,6 +6,7 @@ import { Observable } from 'rxjs'; import { AppState, GeneralEntityAppState } from '../../../../store/src/app-state'; import { EntityServiceFactory } from '../../../../store/src/entity-service-factory.service'; import { IPageSideNavTab } from '../../features/dashboard/page-side-nav/page-side-nav.component'; +import { CurrentUserPermissionsService } from '../permissions/current-user-permissions.service'; export const extensionsActionRouteKey = 'extensionsActionsKey'; @@ -23,7 +24,12 @@ export interface StratosTabMetadata { link: string; icon?: string; iconFont?: string; - hidden?: (store: Store, esf: EntityServiceFactory, activatedRoute: ActivatedRoute) => Observable; + hidden?: ( + store: Store, + esf: EntityServiceFactory, + activatedRoute: ActivatedRoute, + cups: CurrentUserPermissionsService + ) => Observable; } export interface StratosTabMetadataConfig extends StratosTabMetadata { @@ -97,7 +103,7 @@ function addExtensionTab(tab: StratosTabType, target: any, props: StratosTabMeta }); extensionMetadata.tabs[tab].push({ ...props - }); + }); } function addExtensionAction(action: StratosActionType, target: any, props: StratosActionMetadata) { diff --git a/src/frontend/packages/core/src/features/dashboard/page-side-nav/page-side-nav.component.ts b/src/frontend/packages/core/src/features/dashboard/page-side-nav/page-side-nav.component.ts index a91f4bd200..b74dbed831 100644 --- a/src/frontend/packages/core/src/features/dashboard/page-side-nav/page-side-nav.component.ts +++ b/src/frontend/packages/core/src/features/dashboard/page-side-nav/page-side-nav.component.ts @@ -4,12 +4,15 @@ import { Store } from '@ngrx/store'; import { Observable, of } from 'rxjs'; import { AppState } from '../../../../../store/src/app-state'; +import { EntityServiceFactory } from '../../../../../store/src/entity-service-factory.service'; import { selectIsMobile } from '../../../../../store/src/selectors/dashboard.selectors'; import { TabNavService } from '../../../../tab-nav.service'; -import { EntityServiceFactory } from '../../../../../store/src/entity-service-factory.service'; import { StratosTabMetadata } from '../../../core/extension/extension-service'; +import { CurrentUserPermissionsService } from '../../../core/permissions/current-user-permissions.service'; import { IBreadcrumb } from '../../../shared/components/breadcrumbs/breadcrumbs.types'; + + export interface IPageSideNavTab extends StratosTabMetadata { hidden$?: Observable; } @@ -28,7 +31,7 @@ export class PageSideNavComponent implements OnInit { } this.pTabs = tabs.map(tab => ({ ...tab, - hidden$: tab.hidden$ || (tab.hidden ? tab.hidden(this.store, this.esf, this.activatedRoute) : of(false)) + hidden$: tab.hidden$ || (tab.hidden ? tab.hidden(this.store, this.esf, this.activatedRoute, this.cups) : of(false)) })); } get tabs(): IPageSideNavTab[] { @@ -45,6 +48,7 @@ export class PageSideNavComponent implements OnInit { private store: Store, private esf: EntityServiceFactory, private activatedRoute: ActivatedRoute, + private cups: CurrentUserPermissionsService ) { this.isMobile$ = this.store.select(selectIsMobile); } diff --git a/src/test-e2e/application/application-view-e2e.spec.ts b/src/test-e2e/application/application-view-e2e.spec.ts index c2d51b6b78..e7467a6341 100644 --- a/src/test-e2e/application/application-view-e2e.spec.ts +++ b/src/test-e2e/application/application-view-e2e.spec.ts @@ -135,8 +135,7 @@ describe('Application View -', () => { }); it('Deployment Info', () => { - appSummary.cardDeployInfo.waitForTitle('Deployment Info'); - expect(appSummary.cardDeployInfo.getContent()).toBe('None'); + expect(appSummary.cardDeployInfo.isPresent()).toBeFalsy(); }); });