src/frontend/packages/cloud-foundry/src/shared/services/current-user-permissions-and-cfchecker.service.spec.ts
import { TestBed } from '@angular/core/testing';
import { createBasicStoreModule, createEntityStoreState, TestStoreEntity } from '@stratosui/store/testing';
import { first, tap } from 'rxjs/operators';
import { PermissionConfig } from '../../../../core/src/core/permissions/current-user-permissions.config';
import { CurrentUserPermissionsService } from '../../../../core/src/core/permissions/current-user-permissions.service';
import { StratosScopeStrings } from '../../../../core/src/core/permissions/stratos-user-permissions.checker';
import { AppTestModule } from '../../../../core/test-framework/core-test.helper';
import { AppState } from '../../../../store/src/app-state';
import { EntityCatalogTestModule, TEST_CATALOGUE_ENTITIES } from '../../../../store/src/entity-catalog-test.module';
import { EntityCatalogEntityConfig } from '../../../../store/src/entity-catalog/entity-catalog.types';
import { endpointEntityType, stratosEntityFactory } from '../../../../store/src/helpers/stratos-entity-factory';
import { generateStratosEntities } from '../../../../store/src/stratos-entity-generator';
import { APIResource } from '../../../../store/src/types/api.types';
import { EndpointModel } from '../../../../store/src/types/endpoint.types';
import { BaseEntityValues } from '../../../../store/src/types/entity.types';
import { PaginationState } from '../../../../store/src/types/pagination.types';
import { CFFeatureFlagTypes, IFeatureFlag } from '../../cf-api.types';
import { cfEntityFactory } from '../../cf-entity-factory';
import { generateCFEntities } from '../../cf-entity-generator';
import { featureFlagEntityType } from '../../cf-entity-types';
import {
CfCurrentUserPermissions,
cfCurrentUserPermissionsService,
CfPermissionTypes,
CfScopeStrings,
} from '../../user-permissions/cf-user-permissions-checkers';
const ffSchema = cfEntityFactory(featureFlagEntityType);
describe('CurrentUserPermissionsService with CF checker', () => {
let service: CurrentUserPermissionsService;
function createStoreState(): Partial<AppState<BaseEntityValues>> {
// Data
const endpoints: EndpointModel[] = [
{
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb',
name: 'SCF',
cnsi_type: 'cf',
api_endpoint: {
Scheme: 'https',
Opaque: '',
User: null,
Host: 'api.10.84.93.10.nip.io:8443',
Path: '',
RawPath: '',
ForceQuery: false,
RawQuery: '',
Fragment: ''
},
authorization_endpoint: 'https://cf.uaa.10.84.93.10.nip.io:2793',
token_endpoint: 'https://cf.uaa.10.84.93.10.nip.io:2793',
doppler_logging_endpoint: 'wss://doppler.10.84.93.10.nip.io:4443',
skip_ssl_validation: true,
user: {
guid: '670f4618-525e-4784-a56e-a238a0daf63d',
name: 'nathan',
admin: false,
scopes: [
CfScopeStrings.CF_WRITE_SCOPE,
StratosScopeStrings.STRATOS_CHANGE_PASSWORD,
CfScopeStrings.CF_READ_SCOPE,
]
},
creator: {
name: 'admin',
admin: true,
system: false
},
metricsAvailable: false,
connectionStatus: 'connected',
system_shared_token: false,
sso_allowed: false
},
{
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87',
name: 'MainSCF',
cnsi_type: 'cf',
api_endpoint: {
Scheme: 'https',
Opaque: '',
User: null,
Host: 'api.10.84.93.55.nip.io:8443',
Path: '',
RawPath: '',
ForceQuery: false,
RawQuery: '',
Fragment: ''
},
authorization_endpoint: 'https://cf.uaa.10.84.93.55.nip.io:2793',
token_endpoint: 'https://cf.uaa.10.84.93.55.nip.io:2793',
doppler_logging_endpoint: 'wss://doppler.10.84.93.55.nip.io:4443',
skip_ssl_validation: true,
user: {
guid: '4389dfd6-6048-4149-8b26-5aa6893ac21d',
name: 'admin',
admin: true,
scopes: [
CfScopeStrings.CF_WRITE_SCOPE,
StratosScopeStrings.STRATOS_CHANGE_PASSWORD,
CfScopeStrings.CF_READ_SCOPE,
CfScopeStrings.CF_ADMIN_GROUP,
CfScopeStrings.CF_READ_ONLY_ADMIN_GROUP,
CfScopeStrings.CF_ADMIN_GLOBAL_AUDITOR_GROUP,
StratosScopeStrings.SCIM_READ
]
},
creator: {
name: 'admin',
admin: true,
system: false
},
metricsAvailable: false,
connectionStatus: 'connected',
system_shared_token: false,
sso_allowed: false
}
];
const featureFlags1: APIResource<IFeatureFlag>[] = [
{
entity: {
name: 'user_org_creation',
enabled: false,
error_message: null,
url: '/v2/config/feature_flags/user_org_creation',
cfGuid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb',
},
metadata: {
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-0',
created_at: '',
updated_at: '',
url: ''
}
},
{
entity: {
name: 'private_domain_creation',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/private_domain_creation',
cfGuid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb',
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-1'
},
metadata: {
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-1',
created_at: '',
updated_at: '',
url: ''
}
}, {
entity: {
name: 'app_bits_upload',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/app_bits_upload',
cfGuid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb',
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-2'
},
metadata: {
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-2',
created_at: '',
updated_at: '',
url: ''
}
}, {
entity: {
name: 'app_scaling',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/app_scaling',
cfGuid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb',
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-3'
},
metadata: {
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-3',
created_at: '',
updated_at: '',
url: ''
}
}, {
entity: {
name: 'route_creation',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/route_creation',
cfGuid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb',
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-4'
},
metadata: {
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-4',
created_at: '',
updated_at: '',
url: ''
}
}, {
entity: {
name: 'service_instance_creation',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/service_instance_creation',
cfGuid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb',
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-5'
},
metadata: {
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-5',
created_at: '',
updated_at: '',
url: ''
}
}, {
entity: {
name: 'diego_docker',
enabled: false,
error_message: null,
url: '/v2/config/feature_flags/diego_docker',
cfGuid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb',
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-6'
},
metadata: {
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-6',
created_at: '',
updated_at: '',
url: ''
}
}, {
entity: {
name: 'set_roles_by_username',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/set_roles_by_username',
cfGuid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb',
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-7'
},
metadata: {
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-7',
created_at: '',
updated_at: '',
url: ''
}
}, {
entity: {
name: 'unset_roles_by_username',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/unset_roles_by_username',
cfGuid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb',
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-8'
},
metadata: {
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-8',
created_at: '',
updated_at: '',
url: ''
}
}, {
entity: {
name: 'env_var_visibility',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/env_var_visibility',
cfGuid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb',
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-10'
},
metadata: {
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-10',
created_at: '',
updated_at: '',
url: ''
}
}, {
entity: {
name: 'space_scoped_private_broker_creation',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/space_scoped_private_broker_creation',
cfGuid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb',
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-11'
},
metadata: {
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-11',
created_at: '',
updated_at: '',
url: ''
}
}, {
entity: {
name: 'space_developer_env_var_visibility',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/space_developer_env_var_visibility',
cfGuid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb',
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-12'
},
metadata: {
guid: '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb-12',
created_at: '',
updated_at: '',
url: ''
}
}
];
const featureFlags2: APIResource<IFeatureFlag>[] = [
// {
// entity: {
// name: 'user_org_creation',
// enabled: false,
// error_message: null,
// url: '/v2/config/feature_flags/user_org_creation',
// cfGuid: 'c80420ca-204b-4879-bf69-b6b7a202ad87',
// guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-0'
// },
// metadata: {
// guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-0',
// created_at: '',
// updated_at: '',
// url: ''
// }
// },
{
entity: {
name: 'private_domain_creation',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/private_domain_creation',
cfGuid: 'c80420ca-204b-4879-bf69-b6b7a202ad87',
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-1'
},
metadata: {
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-1',
created_at: '',
updated_at: '',
url: ''
}
},
{
entity: {
name: 'app_bits_upload',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/app_bits_upload',
cfGuid: 'c80420ca-204b-4879-bf69-b6b7a202ad87',
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-2'
},
metadata: {
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-2',
created_at: '',
updated_at: '',
url: ''
}
},
{
entity: {
name: 'app_scaling',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/app_scaling',
cfGuid: 'c80420ca-204b-4879-bf69-b6b7a202ad87',
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-3'
},
metadata: {
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-3',
created_at: '',
updated_at: '',
url: ''
}
},
{
entity: {
name: 'route_creation',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/route_creation',
cfGuid: 'c80420ca-204b-4879-bf69-b6b7a202ad87',
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-4'
},
metadata: {
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-4',
created_at: '',
updated_at: '',
url: ''
}
},
{
entity: {
name: 'service_instance_creation',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/service_instance_creation',
cfGuid: 'c80420ca-204b-4879-bf69-b6b7a202ad87',
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-5'
},
metadata: {
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-5',
created_at: '',
updated_at: '',
url: ''
}
},
{
entity: {
name: 'diego_docker',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/diego_docker',
cfGuid: 'c80420ca-204b-4879-bf69-b6b7a202ad87',
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-6'
},
metadata: {
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-6',
created_at: '',
updated_at: '',
url: ''
}
},
{
entity: {
name: 'set_roles_by_username',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/set_roles_by_username',
cfGuid: 'c80420ca-204b-4879-bf69-b6b7a202ad87',
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-7'
},
metadata: {
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-7',
created_at: '',
updated_at: '',
url: ''
}
},
{
entity: {
name: 'unset_roles_by_username',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/unset_roles_by_username',
cfGuid: 'c80420ca-204b-4879-bf69-b6b7a202ad87',
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-8'
},
metadata: {
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-8',
created_at: '',
updated_at: '',
url: ''
}
},
{
entity: {
name: 'env_var_visibility',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/env_var_visibility',
cfGuid: 'c80420ca-204b-4879-bf69-b6b7a202ad87',
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-10'
},
metadata: {
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-10',
created_at: '',
updated_at: '',
url: ''
}
},
{
entity: {
name: 'space_scoped_private_broker_creation',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/space_scoped_private_broker_creation',
cfGuid: 'c80420ca-204b-4879-bf69-b6b7a202ad87',
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-11'
},
metadata: {
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-11',
created_at: '',
updated_at: '',
url: ''
}
},
{
entity: {
name: 'space_developer_env_var_visibility',
enabled: true,
error_message: null,
url: '/v2/config/feature_flags/space_developer_env_var_visibility',
cfGuid: 'c80420ca-204b-4879-bf69-b6b7a202ad87',
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-12'
},
metadata: {
guid: 'c80420ca-204b-4879-bf69-b6b7a202ad87-12',
created_at: '',
updated_at: '',
url: ''
}
}
];
// Pagination
const pagination: PaginationState = {
stratosEndpoint: {
'endpoint-list': {
currentPage: 1,
totalResults: 2,
pageCount: 1,
ids: {
1: endpoints.map(endpoint => endpoint.guid)
},
pageRequests: {
1: {
busy: false,
error: false,
message: ''
}
},
params: {
'results-per-page': 50,
'order-direction': 'desc',
'order-direction-field': 'name',
page: 1,
q: []
},
clientPagination: {
pageSize: 5,
currentPage: 1,
filter: {
string: '',
items: {}
},
totalResults: 2
},
maxedState: {},
isListPagination: true
}
},
cfFeatureFlag: {
'endpoint-0e934dc8-7ad4-40ff-b85c-53c1b61d2abb': {
pageCount: 1,
currentPage: 1,
totalResults: 13,
ids: {
1: featureFlags1.map(ff => ff.entity.guid)
},
pageRequests: {
1: {
busy: false,
error: false,
message: ''
}
},
params: {},
clientPagination: {
pageSize: 9,
currentPage: 1,
filter: {
string: '',
items: {}
},
totalResults: 13
},
maxedState: {},
isListPagination: false
},
'endpoint-c80420ca-204b-4879-bf69-b6b7a202ad87': {
pageCount: 1,
currentPage: 1,
totalResults: 13,
ids: {
1: featureFlags2.map(ff => ff.entity.guid)
},
pageRequests: {
1: {
busy: false,
error: false,
message: ''
}
},
params: {},
clientPagination: {
pageSize: 9,
currentPage: 1,
filter: {
string: '',
items: {}
},
totalResults: 13
},
maxedState: {},
isListPagination: false
}
},
};
// User roles
const initialState: Partial<AppState<BaseEntityValues>> = {
};
// Create request and requestData sections
const entityMap = new Map<EntityCatalogEntityConfig, Array<TestStoreEntity | string>>([
[
stratosEntityFactory(endpointEntityType),
endpoints.map(endpoint => ({
guid: endpoint.guid,
data: endpoint
}))
],
[
ffSchema,
[...featureFlags1, ...featureFlags2].map(featureFlag => ({
guid: featureFlag.entity.guid,
data: featureFlag
}))
]
]);
const requestAndRequestData = createEntityStoreState(entityMap);
return {
currentUserRoles: {
internal: {
isAdmin: false,
scopes: [
// CfScopeStrings.CF_ADMIN_GROUP,
// CfScopeStrings.CF_READ_ONLY_ADMIN_GROUP,
// CfScopeStrings.CF_ADMIN_GLOBAL_AUDITOR_GROUP,
// CfScopeStrings.CF_WRITE_SCOPE,
// CfScopeStrings.CF_READ_SCOPE,
StratosScopeStrings.STRATOS_CHANGE_PASSWORD,
StratosScopeStrings.SCIM_READ
],
},
endpoints: {
cf: {
'0e934dc8-7ad4-40ff-b85c-53c1b61d2abb': {
global: {
isAdmin: false,
isReadOnlyAdmin: false,
isGlobalAuditor: false,
canRead: true,
canWrite: true,
scopes: [
'cloud_controller.read',
'password.write',
'cloud_controller.write',
'openid',
'uaa.user'
]
},
spaces: {
'56eb5ecc-7c96-4bb1-bdcc-0c6c3d444dc6': {
orgId: 'abc',
isManager: true,
isAuditor: false,
isDeveloper: true
}
},
organizations: {
'd5e50b05-497f-4b3b-9658-a396a592a8ba': {
isManager: false,
isAuditor: false,
isBillingManager: false,
isUser: true,
spaceGuids: []
},
'c58e7cfd-c765-400a-a473-313fa572d5c4': {
isManager: false,
isAuditor: false,
isBillingManager: false,
isUser: true,
spaceGuids: []
}
},
state: {
initialised: true,
fetching: false,
error: null
}
},
'c80420ca-204b-4879-bf69-b6b7a202ad87': {
global: {
isAdmin: false,
isReadOnlyAdmin: false,
isGlobalAuditor: false,
canRead: true,
canWrite: true,
scopes: [
'openid',
'scim.read',
'cloud_controller.admin',
'uaa.user',
'routing.router_groups.read',
'cloud_controller.read',
'password.write',
'cloud_controller.write',
'doppler.firehose',
'scim.write'
]
},
spaces: {
'56eb5ecc-7c96-4bb1-bdcc-0c6c3d444dc6': {
isManager: true,
isAuditor: false,
isDeveloper: true,
orgId: 'abc'
},
'c6450a21-aa1a-4643-9437-035cc818ea72': {
isManager: true,
isAuditor: false,
isDeveloper: true,
orgId: 'abc'
},
'86577124-4b64-4ca1-9a78-d904c60505c4': {
isManager: true,
isAuditor: false,
isDeveloper: true,
orgId: 'abc'
}
},
organizations: {
'367a49c1-b5dc-44e6-a8cf-84b1f56426a7': {
isManager: true,
isAuditor: false,
isBillingManager: false,
isUser: true,
spaceGuids: []
},
'dccfedde-be2c-46a6-99cf-c1320ea8cb6d': {
isManager: true,
isAuditor: false,
isBillingManager: false,
isUser: true,
spaceGuids: []
},
'8a175cad-ff61-436b-8c6f-e5beb13edb5f': {
isManager: true,
isAuditor: false,
isBillingManager: false,
isUser: true,
spaceGuids: []
},
'd5246255-867b-4f62-9040-346f113f0b7d': {
isManager: true,
isAuditor: false,
isBillingManager: false,
isUser: true,
spaceGuids: []
}
},
state: {
initialised: true,
fetching: false,
error: null
}
},
READ_ONLY_ADMIN: {
global: {
isAdmin: false,
isReadOnlyAdmin: true,
isGlobalAuditor: false,
canRead: true,
canWrite: true,
scopes: [
'openid',
'scim.read',
'cloud_controller.admin',
'uaa.user',
'routing.router_groups.read',
'cloud_controller.read',
'password.write',
'cloud_controller.write',
'doppler.firehose',
'scim.write'
]
},
spaces: {
'56eb5ecc-7c96-4bb1-bdcc-0c6c3d444dc6': {
orgId: 'abc',
isManager: true,
isAuditor: false,
isDeveloper: true
},
'c6450a21-aa1a-4643-9437-035cc818ea72': {
orgId: 'abc',
isManager: true,
isAuditor: false,
isDeveloper: true
},
'86577124-4b64-4ca1-9a78-d904c60505c4': {
orgId: 'abc',
isManager: true,
isAuditor: false,
isDeveloper: true
}
},
organizations: {
'367a49c1-b5dc-44e6-a8cf-84b1f56426a7': {
isManager: true,
isAuditor: false,
isBillingManager: false,
isUser: true,
spaceGuids: []
},
'dccfedde-be2c-46a6-99cf-c1320ea8cb6d': {
isManager: true,
isAuditor: false,
isBillingManager: false,
isUser: true,
spaceGuids: []
},
'8a175cad-ff61-436b-8c6f-e5beb13edb5f': {
isManager: true,
isAuditor: false,
isBillingManager: false,
isUser: true,
spaceGuids: []
},
'd5246255-867b-4f62-9040-346f113f0b7d': {
isManager: true,
isAuditor: false,
isBillingManager: false,
isUser: true,
spaceGuids: []
}
},
state: {
initialised: true,
fetching: false,
error: null
}
},
READ_ONLY_USER: {
global: {
isAdmin: false,
isReadOnlyAdmin: false,
isGlobalAuditor: false,
canRead: true,
canWrite: false,
scopes: [
'openid',
'scim.read',
'cloud_controller.admin',
'uaa.user',
'routing.router_groups.read',
'cloud_controller.read',
'password.write',
'cloud_controller.write',
'doppler.firehose',
'scim.write'
]
},
spaces: {
'56eb5ecc-7c96-4bb1-bdcc-0c6c3d444dc6': {
isManager: true,
isAuditor: false,
isDeveloper: true,
orgId: 'abc'
},
'c6450a21-aa1a-4643-9437-035cc818ea72': {
isManager: true,
isAuditor: false,
isDeveloper: true,
orgId: 'abc'
},
'86577124-4b64-4ca1-9a78-d904c60505c4': {
isManager: true,
isAuditor: false,
isDeveloper: true,
orgId: 'abc'
}
},
organizations: {
'367a49c1-b5dc-44e6-a8cf-84b1f56426a7': {
isManager: true,
isAuditor: false,
isBillingManager: false,
isUser: true,
spaceGuids: []
},
'dccfedde-be2c-46a6-99cf-c1320ea8cb6d': {
isManager: true,
isAuditor: false,
isBillingManager: false,
isUser: true,
spaceGuids: []
},
'8a175cad-ff61-436b-8c6f-e5beb13edb5f': {
isManager: true,
isAuditor: false,
isBillingManager: false,
isUser: true,
spaceGuids: []
},
'd5246255-867b-4f62-9040-346f113f0b7d': {
isManager: true,
isAuditor: false,
isBillingManager: false,
isUser: true,
spaceGuids: []
}
},
state: {
initialised: true,
fetching: false,
error: null
}
}
},
},
state: {
initialised: true,
fetching: false,
error: null
}
},
requestData: {
...initialState.requestData,
...requestAndRequestData.requestData
},
pagination: {
...initialState.pagination,
...pagination
},
};
}
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
...cfCurrentUserPermissionsService
],
imports: [
{
ngModule: EntityCatalogTestModule,
providers: [
{
provide: TEST_CATALOGUE_ENTITIES, useValue: [
...generateStratosEntities(),
generateCFEntities().find(a => a.type === ffSchema.entityType)
]
}
]
},
createBasicStoreModule(createStoreState()),
AppTestModule,
],
});
service = TestBed.get(CurrentUserPermissionsService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
it('should allow create application', done => {
service.can(CfCurrentUserPermissions.APPLICATION_CREATE).pipe(
tap(can => {
expect(can).toBe(true);
done();
}),
first()
).subscribe();
});
it('should allow create application for single endpoint with access', done => {
service.can(CfCurrentUserPermissions.APPLICATION_CREATE, '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb').pipe(
tap(can => {
expect(can).toBe(true);
done();
}),
first()
).subscribe();
});
it('should allow create application for single endpoint with access and org/space', done => {
service.can(
CfCurrentUserPermissions.APPLICATION_CREATE,
'c80420ca-204b-4879-bf69-b6b7a202ad87',
'86577124-4b64-4ca1-9a78-d904c60505c4'
).pipe(
tap(can => {
expect(can).toBe(true);
done();
}),
first()
).subscribe();
});
it('should allow if feature flag', done => {
service.can(
[new PermissionConfig(CfPermissionTypes.FEATURE_FLAG, CFFeatureFlagTypes.private_domain_creation)]
).pipe(
tap(can => {
expect(can).toBe(true);
done();
}),
first()
).subscribe();
});
it('should allow if feature flag with cf', done => {
service.can(
[new PermissionConfig(CfPermissionTypes.FEATURE_FLAG, CFFeatureFlagTypes.private_domain_creation)],
'c80420ca-204b-4879-bf69-b6b7a202ad87'
).pipe(
tap(can => {
expect(can).toBe(false);
done();
}),
first()
).subscribe();
});
it('should not allow if no feature flag', done => {
service.can(
[new PermissionConfig(CfPermissionTypes.FEATURE_FLAG, CFFeatureFlagTypes.user_org_creation)],
'c80420ca-204b-4879-bf69-b6b7a202ad87'
).pipe(
tap(can => {
expect(can).toBe(false);
done();
}),
first()
).subscribe();
});
it('should allow if has endpoint scope', done => {
service.can(new PermissionConfig(CfPermissionTypes.ENDPOINT_SCOPE, StratosScopeStrings.SCIM_READ), 'c80420ca-204b-4879-bf69-b6b7a202ad87').pipe(
tap(can => {
expect(can).toBe(true);
done();
}),
first()
).subscribe();
});
it('should not allow if has endpoint scope', done => {
service.can(new PermissionConfig(CfPermissionTypes.ENDPOINT_SCOPE, StratosScopeStrings.SCIM_READ), '0e934dc8-7ad4-40ff-b85c-53c1b61d2abb').pipe(
tap(can => {
expect(can).toBe(false);
done();
}),
first()
).subscribe();
});
it('should not allow if read only admin', done => {
service.can(
CfCurrentUserPermissions.APPLICATION_CREATE,
'READ_ONLY_ADMIN',
'c6450a21-aa1a-4643-9437-035cc818ea72'
).pipe(
tap(can => {
expect(can).toBe(false);
done();
}),
first()
).subscribe();
});
it('should not allow if read only user', done => {
service.can(
CfCurrentUserPermissions.APPLICATION_CREATE,
'READ_ONLY_USER',
'c6450a21-aa1a-4643-9437-035cc818ea72'
).pipe(
tap(can => {
expect(can).toBe(false);
done();
}),
first()
).subscribe();
});
});