From f26cda47e1176a1f713f23cf386b68c40918b2c3 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Thu, 1 Aug 2019 10:08:27 -0700 Subject: [PATCH 001/211] SHIBUI-1365 stubbing filter comparison --- .../filter-version-list.component.html | 10 +++++ .../filter-version-list.component.ts | 8 ++++ .../configuration/configuration.module.ts | 4 +- .../metadata-comparison.component.html | 16 ++++++++ .../metadata-comparison.component.ts | 39 ++++++++++++++++--- .../container/metadata-options.component.html | 1 - .../metadata/configuration/reducer/index.ts | 6 +++ .../boolean-radio.component.html | 2 +- 8 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 ui/src/app/metadata/configuration/component/filter-version-list.component.html create mode 100644 ui/src/app/metadata/configuration/component/filter-version-list.component.ts diff --git a/ui/src/app/metadata/configuration/component/filter-version-list.component.html b/ui/src/app/metadata/configuration/component/filter-version-list.component.html new file mode 100644 index 000000000..57fa90864 --- /dev/null +++ b/ui/src/app/metadata/configuration/component/filter-version-list.component.html @@ -0,0 +1,10 @@ + +
+

No Filters

+

No filters have been added to this Metadata Provider

+
\ No newline at end of file diff --git a/ui/src/app/metadata/configuration/component/filter-version-list.component.ts b/ui/src/app/metadata/configuration/component/filter-version-list.component.ts new file mode 100644 index 000000000..1706cbcf5 --- /dev/null +++ b/ui/src/app/metadata/configuration/component/filter-version-list.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core'; +import { FilterListComponent } from '../../filter/component/filter-list.component'; + +@Component({ + selector: 'filter-version-list', + templateUrl: './filter-version-list.component.html' +}) +export class FilterVersionListComponent extends FilterListComponent { } diff --git a/ui/src/app/metadata/configuration/configuration.module.ts b/ui/src/app/metadata/configuration/configuration.module.ts index fa395529b..e2ec72d76 100644 --- a/ui/src/app/metadata/configuration/configuration.module.ts +++ b/ui/src/app/metadata/configuration/configuration.module.ts @@ -30,6 +30,7 @@ import { FilterConfigurationListComponent } from './component/filter-configurati import { FilterConfigurationListItemComponent } from './component/filter-configuration-list-item.component'; import { SharedModule } from '../../shared/shared.module'; import { FilterTargetPropertyComponent } from './component/filter-target-property.component'; +import { FilterVersionListComponent } from './component/filter-version-list.component'; @NgModule({ declarations: [ @@ -47,7 +48,8 @@ import { FilterTargetPropertyComponent } from './component/filter-target-propert MetadataComparisonComponent, FilterConfigurationListComponent, FilterConfigurationListItemComponent, - FilterTargetPropertyComponent + FilterTargetPropertyComponent, + FilterVersionListComponent ], entryComponents: [], imports: [ diff --git a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html index d5b533716..eb122c2f2 100644 --- a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html +++ b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html @@ -9,4 +9,20 @@ +
+
+

+ Filters +

+ +
+ +
\ No newline at end of file diff --git a/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts b/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts index 92019297d..8e02fe025 100644 --- a/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts +++ b/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts @@ -1,12 +1,14 @@ -import { Component, ChangeDetectionStrategy } from '@angular/core'; -import { Observable } from 'rxjs'; +import { Component, ChangeDetectionStrategy, OnDestroy } from '@angular/core'; +import { Observable, Subject } from 'rxjs'; import { Store } from '@ngrx/store'; import { ActivatedRoute } from '@angular/router'; -import { map } from 'rxjs/operators'; -import { ConfigurationState, getVersionConfigurations, getVersionConfigurationCount } from '../reducer'; +import { map, takeUntil, filter } from 'rxjs/operators'; +import { ConfigurationState, getVersionConfigurations, getVersionConfigurationCount, getConfigurationModel, getVersionsFilters } from '../reducer'; import { Metadata } from '../../domain/domain.type'; import { CompareVersionRequest } from '../action/compare.action'; import { MetadataConfiguration } from '../model/metadata-configuration'; +import { getAdditionalFilters } from '../../filter/reducer'; +import { LoadFilterRequest } from '../../filter/action/collection.action'; @Component({ selector: 'metadata-comparison', @@ -14,10 +16,17 @@ import { MetadataConfiguration } from '../model/metadata-configuration'; templateUrl: './metadata-comparison.component.html', styleUrls: [] }) -export class MetadataComparisonComponent { +export class MetadataComparisonComponent implements OnDestroy { + + private ngUnsubscribe: Subject = new Subject(); versions$: Observable; numVersions$: Observable; + filters$: Observable; + model$: Observable; + + id: string; + kind: string; constructor( private store: Store, @@ -30,5 +39,25 @@ export class MetadataComparisonComponent { this.versions$ = this.store.select(getVersionConfigurations); this.numVersions$ = this.store.select(getVersionConfigurationCount); + this.model$ = this.store.select(getConfigurationModel); + + this.model$ + .pipe( + takeUntil(this.ngUnsubscribe), + filter(model => !!model) + ) + .subscribe(p => this.setModel(p)); + + this.filters$ = this.store.select(getVersionsFilters); + } + + setModel(data: Metadata): void { + this.id = 'resourceId' in data ? data.resourceId : data.id; + this.kind = '@type' in data ? 'provider' : 'resolver'; + } + + ngOnDestroy(): void { + this.ngUnsubscribe.next(); + this.ngUnsubscribe.complete(); } } diff --git a/ui/src/app/metadata/configuration/container/metadata-options.component.html b/ui/src/app/metadata/configuration/container/metadata-options.component.html index d99166c11..972e0e4da 100644 --- a/ui/src/app/metadata/configuration/container/metadata-options.component.html +++ b/ui/src/app/metadata/configuration/container/metadata-options.component.html @@ -48,7 +48,6 @@

(onUpdateOrderDown)="updateOrderDown($event)" (onUpdateOrderUp)="updateOrderUp($event)" (onRemove)="removeFilter($event)" - (preview)="onPreview($event)" [filters]="filters$ | async"> + + + + +
+ +
+ +

No Filters

No filters have been added to this Metadata Provider

\ No newline at end of file diff --git a/ui/src/app/metadata/configuration/component/filter-version-list.component.ts b/ui/src/app/metadata/configuration/component/filter-version-list.component.ts index 1706cbcf5..0781b8293 100644 --- a/ui/src/app/metadata/configuration/component/filter-version-list.component.ts +++ b/ui/src/app/metadata/configuration/component/filter-version-list.component.ts @@ -1,8 +1,68 @@ import { Component } from '@angular/core'; -import { FilterListComponent } from '../../filter/component/filter-list.component'; + +const data = { + dates: ['2019-08-02T12:50:54.282', '2019-08-02T12:12:54.282'], + filters: [ + [ + { + id: '1', + name: 'Example Filter 1', + type: 'EntityAttributesFilter', + comparable: true + }, + { + id: '2', + name: 'Example Filter 2', + type: 'NameIdFilter', + comparable: true + } + ], + [ + { + id: '2', + name: 'Example Filter 2', + type: 'NameIdFilter', + comparable: true + }, + { + id: '1', + name: 'Example Filter 1', + type: 'EntityAttributesFilter', + comparable: true + } + ], + [ + { + id: '4', + name: 'Example Filter 4', + type: 'EntityAttributesFilter', + comparable: false + }, + { + id: '3', + name: 'Example Filter 3', + type: 'EntityAttributesFilter', + comparable: false + } + ] + ] +}; @Component({ selector: 'filter-version-list', templateUrl: './filter-version-list.component.html' }) -export class FilterVersionListComponent extends FilterListComponent { } +export class FilterVersionListComponent { + + filters = data; + selected: string; + + constructor() { + + } + + get width(): string { + const columns = this.filters.dates.length; + return `${Math.floor(100 / (columns + 1))}`; + } +} diff --git a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html index eb122c2f2..d3fdab712 100644 --- a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html +++ b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html @@ -14,15 +14,8 @@

Filters

- + - + \ No newline at end of file diff --git a/ui/src/theme/utility.scss b/ui/src/theme/utility.scss index 358b75b2c..0864a5447 100644 --- a/ui/src/theme/utility.scss +++ b/ui/src/theme/utility.scss @@ -6,6 +6,10 @@ background: #FAFAFA !important; } +.bg-primary-light { + background: lighten($brand-primary, 75%); +} + .w-15 { width: 15%; } From 0896528f00455c039359216bc5ef6d1ab3aebf14 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Thu, 8 Aug 2019 09:33:48 -0700 Subject: [PATCH 003/211] updated mockup --- .../filter-version-list.component.html | 128 +++++++++++++----- .../filter-version-list.component.ts | 7 +- 2 files changed, 103 insertions(+), 32 deletions(-) diff --git a/ui/src/app/metadata/configuration/component/filter-version-list.component.html b/ui/src/app/metadata/configuration/component/filter-version-list.component.html index 95cb28700..4047f7483 100644 --- a/ui/src/app/metadata/configuration/component/filter-version-list.component.html +++ b/ui/src/app/metadata/configuration/component/filter-version-list.component.html @@ -1,42 +1,108 @@
- Order + Order + Option {{ date | date:'medium' }}
-
- -
-
- {{ i + 1 }} -
-
-
-

{{ filter.name }}

-

{{ filter.type }}

+ +
+ +
+
+ {{ i + 1 }} +
+
+
+

{{ filter.name }}

+

{{ filter.type }}

+
+
-
-
-
-
-
- -
+ +
+
+ +
+ + +
+ Type + EntityAttributesFilter + EntityAttributesFilter +
+
+ Name + Test Filter 1 + Renamed Filter +
+
+ Target Type + Entity ID + Entity ID +
+
+ Target Value + http://idp.unicon.net/idp/shibboleth + http://idp.unicon.net/idp/shibboleth +
+
+ Enabled? + false + true +
+
+ +
+

No Filters

diff --git a/ui/src/app/metadata/configuration/component/filter-version-list.component.ts b/ui/src/app/metadata/configuration/component/filter-version-list.component.ts index 0781b8293..2411aa872 100644 --- a/ui/src/app/metadata/configuration/component/filter-version-list.component.ts +++ b/ui/src/app/metadata/configuration/component/filter-version-list.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; const data = { - dates: ['2019-08-02T12:50:54.282', '2019-08-02T12:12:54.282'], + dates: ['2019-08-08T08:40:32.015', '2019-08-08T08:40:19.266'], filters: [ [ { @@ -56,11 +56,16 @@ export class FilterVersionListComponent { filters = data; selected: string; + comparing: string; constructor() { } + compare(id: string): void { + this.comparing = id; + } + get width(): string { const columns = this.filters.dates.length; return `${Math.floor(100 / (columns + 1))}`; From c850648b74ad0e5121c68f3fc5049bcd66ddd839 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Wed, 21 Aug 2019 14:07:19 -0400 Subject: [PATCH 004/211] Schema validation verification WIP --- ...lerSchemaValidationIntegrationTests.groovy | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerSchemaValidationIntegrationTests.groovy diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerSchemaValidationIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerSchemaValidationIntegrationTests.groovy new file mode 100644 index 000000000..39e630223 --- /dev/null +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerSchemaValidationIntegrationTests.groovy @@ -0,0 +1,54 @@ +package edu.internet2.tier.shibboleth.admin.ui.controller + +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.boot.test.web.client.TestRestTemplate +import org.springframework.http.HttpEntity +import org.springframework.http.HttpHeaders +import org.springframework.test.context.ActiveProfiles +import spock.lang.Specification + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(["no-auth", "dev"]) +class EntityDescriptorControllerSchemaValidationIntegrationTests extends Specification { + + @Autowired + private TestRestTemplate restTemplate + + static RESOURCE_URI = '/api/EntityDescriptor' + + def 'POST /EntityDescriptor with invalid payload according to schema validation'() { + given: + def postedJsonBody = """ + { + "serviceProviderName": "SP", + "entityId": "ED", + "organization": null, + "serviceEnabled": true, + "createdDate": null, + "modifiedDate": null, + "organization": null, + "contacts": null, + "mdui": null, + "serviceProviderSsoDescriptor": null, + "logoutEndpoints": null, + "securityInfo": null, + "assertionConsumerServices": null, + "relyingPartyOverrides": null, + "attributeRelease": null, + "current": false + } + """ + + when: + def result = this.restTemplate.postForEntity(RESOURCE_URI, createRequestHttpEntityFor { postedJsonBody }, Map) + + then: + result.statusCodeValue == 400 + result.body.errorMessage.count('Type mistmatch for null') > 0 + } + + private static HttpEntity createRequestHttpEntityFor(Closure jsonBodySupplier) { + new HttpEntity(jsonBodySupplier(), ['Content-Type': 'application/json'] as HttpHeaders) + } +} From bdf8e93330f4341f5420035dda6e3f0f95ae31ee Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Thu, 22 Aug 2019 09:26:24 -0400 Subject: [PATCH 005/211] 1414: MetadataResolvers JSON schema validation WIP --- ...orSchemaValidatingControllerAdvice.groovy} | 20 +--- .../LowLevelJsonSchemaValidator.groovy | 58 ++++++++++ ...verSchemaValidatingControllerAdvice.groovy | 41 +++++++ ...lerSchemaValidationIntegrationTests.groovy | 100 ++++++++++++++++++ 4 files changed, 204 insertions(+), 15 deletions(-) rename backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/{RelyingPartyOverridesJsonSchemaValidatingControllerAdvice.groovy => EntityDescriptorSchemaValidatingControllerAdvice.groovy} (70%) create mode 100644 backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy create mode 100644 backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataResolverSchemaValidatingControllerAdvice.groovy create mode 100644 backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerSchemaValidationIntegrationTests.groovy diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/RelyingPartyOverridesJsonSchemaValidatingControllerAdvice.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/EntityDescriptorSchemaValidatingControllerAdvice.groovy similarity index 70% rename from backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/RelyingPartyOverridesJsonSchemaValidatingControllerAdvice.groovy rename to backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/EntityDescriptorSchemaValidatingControllerAdvice.groovy index 620d2252c..f25950256 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/RelyingPartyOverridesJsonSchemaValidatingControllerAdvice.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/EntityDescriptorSchemaValidatingControllerAdvice.groovy @@ -2,7 +2,6 @@ package edu.internet2.tier.shibboleth.admin.ui.jsonschema import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.EntityDescriptorRepresentation -import mjson.Json import org.springframework.beans.factory.annotation.Autowired import org.springframework.core.MethodParameter import org.springframework.http.HttpInputMessage @@ -14,6 +13,7 @@ import javax.annotation.PostConstruct import java.lang.reflect.Type import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocationLookup.metadataSourcesSchema +import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.LowLevelJsonSchemaValidator.validatePayloadAgainstSchema /** * Controller advice implementation for validating relying party overrides payload coming from UI layer @@ -22,7 +22,7 @@ import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocati * @author Dmitriy Kopylenko */ @ControllerAdvice -class RelyingPartyOverridesJsonSchemaValidatingControllerAdvice extends RequestBodyAdviceAdapter { +class EntityDescriptorSchemaValidatingControllerAdvice extends RequestBodyAdviceAdapter { @Autowired JsonSchemaResourceLocationRegistry jsonSchemaResourceLocationRegistry @@ -38,22 +38,12 @@ class RelyingPartyOverridesJsonSchemaValidatingControllerAdvice extends RequestB HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class> converterType) throws IOException { - def bytes = inputMessage.body.bytes - def schema = Json.schema(this.jsonSchemaLocation.uri) - - def stream = new ByteArrayInputStream(bytes) - def validationResult = schema.validate(Json.read(stream.getText())) - if (!validationResult.at('ok')) { - throw new JsonSchemaValidationFailedException(validationResult.at('errors').asList()) - } - return [ - getBody: { new ByteArrayInputStream(bytes) }, - getHeaders: { inputMessage.headers } - ] as HttpInputMessage + + return validatePayloadAgainstSchema(inputMessage, this.jsonSchemaLocation.uri) } @PostConstruct void init() { - this.jsonSchemaLocation = metadataSourcesSchema(this.jsonSchemaResourceLocationRegistry); + this.jsonSchemaLocation = metadataSourcesSchema(this.jsonSchemaResourceLocationRegistry) } } diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy new file mode 100644 index 000000000..b80c1f5d6 --- /dev/null +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy @@ -0,0 +1,58 @@ +package edu.internet2.tier.shibboleth.admin.ui.jsonschema + +import mjson.Json +import org.springframework.http.HttpInputMessage + +import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocationLookup.dynamicHttpMetadataProviderSchema +import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocationLookup.filesystemMetadataProviderSchema +import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocationLookup.localDynamicMetadataProviderSchema + +/** + * Currently uses mjson library. + */ +class LowLevelJsonSchemaValidator { + + static HttpInputMessage validatePayloadAgainstSchema(HttpInputMessage inputMessage, URI schemaUri) { + def json = extractJsonPayload(inputMessage) + def schema = Json.schema(schemaUri) + doValidate(schema, json) + } + + static HttpInputMessage validateMetadataResolverTypePayloadAgainstSchema(HttpInputMessage inputMessage, + JsonSchemaResourceLocationRegistry schemaRegistry) { + def json = extractJsonPayload(inputMessage) + def schemaUri = null + switch (json.asMap()['@type']) { + case 'LocalDynamicMetadataResolver': + schemaUri = localDynamicMetadataProviderSchema(schemaRegistry).uri + break + case 'DynamicHttpMetadataResolver': + schemaUri = dynamicHttpMetadataProviderSchema(schemaRegistry).uri + break + case 'FilesystemMetadataResolver': + schemaUri = filesystemMetadataProviderSchema(schemaRegistry).uri + break + default: + break + } + if(!schemaUri) { + return inputMessage + } + doValidate(Json.schema(schemaUri), json) + } + + private static Json extractJsonPayload(HttpInputMessage inputMessage) { + Json.read(new ByteArrayInputStream(inputMessage.body.bytes).getText()) + } + + private static HttpInputMessage doValidate(Json.Schema schema, Json json) { + def validationResult = schema.validate(json) + if (!validationResult.at('ok')) { + throw new JsonSchemaValidationFailedException(validationResult.at('errors').asList()) + } + return [ + getBody : { new ByteArrayInputStream(bytes) }, + getHeaders: { inputMessage.headers } + ] as HttpInputMessage + } +} diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataResolverSchemaValidatingControllerAdvice.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataResolverSchemaValidatingControllerAdvice.groovy new file mode 100644 index 000000000..6ecbef95a --- /dev/null +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataResolverSchemaValidatingControllerAdvice.groovy @@ -0,0 +1,41 @@ +package edu.internet2.tier.shibboleth.admin.ui.jsonschema + + +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.core.MethodParameter +import org.springframework.http.HttpInputMessage +import org.springframework.http.converter.HttpMessageConverter +import org.springframework.web.bind.annotation.ControllerAdvice +import org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdviceAdapter + +import java.lang.reflect.Type + +import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.LowLevelJsonSchemaValidator.validateMetadataResolverTypePayloadAgainstSchema + +/** + * Controller advice implementation for validating metadata resolvers payload coming from UI layer + * against pre-defined JSON schema for their respected types. Choosing of the appropriate schema based on incoming + * resolver types is delegated to @{LowLevelJsonSchemaValidator}. + * + * @author Dmitriy Kopylenko + */ +@ControllerAdvice +class MetadataResolverSchemaValidatingControllerAdvice extends RequestBodyAdviceAdapter { + + @Autowired + JsonSchemaResourceLocationRegistry jsonSchemaResourceLocationRegistry + + @Override + boolean supports(MethodParameter methodParameter, Type targetType, Class> converterType) { + targetType.typeName == MetadataResolver.typeName + } + + @Override + HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, + Type targetType, Class> converterType) + throws IOException { + + validateMetadataResolverTypePayloadAgainstSchema(inputMessage, jsonSchemaResourceLocationRegistry) + } +} diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerSchemaValidationIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerSchemaValidationIntegrationTests.groovy new file mode 100644 index 000000000..1f96de134 --- /dev/null +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerSchemaValidationIntegrationTests.groovy @@ -0,0 +1,100 @@ +package edu.internet2.tier.shibboleth.admin.ui.controller + +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.boot.test.web.client.TestRestTemplate +import org.springframework.http.HttpEntity +import org.springframework.http.HttpHeaders +import org.springframework.test.context.ActiveProfiles +import spock.lang.Specification + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(["no-auth", "dev"]) +class MetadataResolverControllerSchemaValidationIntegrationTests extends Specification { + + @Autowired + private TestRestTemplate restTemplate + + static RESOURCE_URI = '/api/MetadataResolvers' + + def 'POST for LocalDynamicMetadataResolver with invalid payload according to schema validation'() { + given: + def postedJsonBody = """ + { + "createdDate" : null, + "modifiedDate" : null, + "createdBy" : null, + "modifiedBy" : null, + "name" : null, + "requireValidMetadata" : true, + "failFastInitialization" : true, + "sortKey" : null, + "criterionPredicateRegistryRef" : null, + "useDefaultPredicateRegistry" : true, + "satisfyAnyPredicates" : false, + "metadataFilters" : [ { + "createdDate" : null, + "modifiedDate" : null, + "createdBy" : null, + "modifiedBy" : null, + "name" : "EntityAttributes", + "filterEnabled" : false, + "version" : 463855403, + "entityAttributesFilterTarget" : { + "createdDate" : null, + "modifiedDate" : null, + "createdBy" : null, + "modifiedBy" : null, + "entityAttributesFilterTargetType" : "ENTITY", + "value" : [ "CedewbJJET" ], + "audId" : null + }, + "attributeRelease" : [ "9ktPyjjiCn" ], + "relyingPartyOverrides" : { + "signAssertion" : false, + "dontSignResponse" : true, + "turnOffEncryption" : true, + "useSha" : false, + "ignoreAuthenticationMethod" : false, + "omitNotBefore" : true, + "responderId" : null, + "nameIdFormats" : [ ], + "authenticationMethods" : [ ] + }, + "audId" : null, + "@type" : "EntityAttributes" + }, { + "createdDate" : null, + "modifiedDate" : null, + "createdBy" : null, + "modifiedBy" : null, + "name" : "EntityRoleWhiteList", + "filterEnabled" : false, + "version" : 0, + "removeRolelessEntityDescriptors" : true, + "removeEmptyEntitiesDescriptors" : true, + "retainedRoles" : [ "role1", "role2" ], + "audId" : null, + "@type" : "EntityRoleWhiteList" + } ], + "version" : 0, + "sourceDirectory" : "dir", + "sourceManagerRef" : null, + "sourceKeyGeneratorRef" : null, + "audId" : null, + "@type" : "LocalDynamicMetadataResolver" + } + """ + + when: + def result = this.restTemplate.postForEntity(RESOURCE_URI, createRequestHttpEntityFor { postedJsonBody }, Map) + + then: + result.statusCodeValue == 400 + result.body.errorMessage.count('Type mistmatch for null') > 0 + } + + private static HttpEntity createRequestHttpEntityFor(Closure jsonBodySupplier) { + new HttpEntity(jsonBodySupplier(), ['Content-Type': 'application/json'] as HttpHeaders) + } +} From ffffc0b70822bee27f71804f6e9d52d28c204a33 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Fri, 23 Aug 2019 10:26:42 -0400 Subject: [PATCH 006/211] Metadata Resolvers schema validation --- .../LowLevelJsonSchemaValidator.groovy | 28 ++++++++----- .../DynamicHttpMetadataResolver.java | 2 + .../DynamicMetadataResolverAttributes.java | 2 +- ...SamlMetadataResolverConstructorHelper.java | 2 +- ...dynamic-http-metadata-provider.schema.json | 6 +-- ...ocal-dynamic-metadata-provider.schema.json | 4 +- ...lerSchemaValidationIntegrationTests.groovy | 42 ++++++++++++++++--- ...ResolversControllerIntegrationTests.groovy | 12 +++++- .../admin/ui/util/TestObjectGenerator.groovy | 1 + 9 files changed, 75 insertions(+), 24 deletions(-) diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy index b80c1f5d6..a793f0fbd 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy @@ -13,14 +13,16 @@ import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocati class LowLevelJsonSchemaValidator { static HttpInputMessage validatePayloadAgainstSchema(HttpInputMessage inputMessage, URI schemaUri) { - def json = extractJsonPayload(inputMessage) + def origInput = [inputMessage.body.bytes, inputMessage.headers] + def json = extractJsonPayload(origInput) def schema = Json.schema(schemaUri) - doValidate(schema, json) + doValidate(origInput, schema, json) } static HttpInputMessage validateMetadataResolverTypePayloadAgainstSchema(HttpInputMessage inputMessage, JsonSchemaResourceLocationRegistry schemaRegistry) { - def json = extractJsonPayload(inputMessage) + def origInput = [inputMessage.body.bytes, inputMessage.headers] + def json = extractJsonPayload(origInput) def schemaUri = null switch (json.asMap()['@type']) { case 'LocalDynamicMetadataResolver': @@ -36,23 +38,27 @@ class LowLevelJsonSchemaValidator { break } if(!schemaUri) { - return inputMessage + return newInputMessage(origInput) } - doValidate(Json.schema(schemaUri), json) + doValidate(origInput, Json.schema(schemaUri), json) } - private static Json extractJsonPayload(HttpInputMessage inputMessage) { - Json.read(new ByteArrayInputStream(inputMessage.body.bytes).getText()) + private static Json extractJsonPayload(List origInput) { + Json.read(new ByteArrayInputStream(origInput[0]).getText()) } - private static HttpInputMessage doValidate(Json.Schema schema, Json json) { + private static HttpInputMessage doValidate(List origInput, Json.Schema schema, Json json) { def validationResult = schema.validate(json) if (!validationResult.at('ok')) { throw new JsonSchemaValidationFailedException(validationResult.at('errors').asList()) } - return [ - getBody : { new ByteArrayInputStream(bytes) }, - getHeaders: { inputMessage.headers } + newInputMessage(origInput) + } + + private static newInputMessage(origInput) { + [ + getBody : { new ByteArrayInputStream(origInput[0]) }, + getHeaders: { origInput[1] } ] as HttpInputMessage } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/DynamicHttpMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/DynamicHttpMetadataResolver.java index 732078747..d22d9c6df 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/DynamicHttpMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/DynamicHttpMetadataResolver.java @@ -36,6 +36,8 @@ public class DynamicHttpMetadataResolver extends MetadataResolver { private Integer maxConnectionsPerRoute = 100; + private String metadataURL; + @ElementCollection @OrderColumn private List supportedContentTypes; diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/DynamicMetadataResolverAttributes.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/DynamicMetadataResolverAttributes.java index 564f2871e..d817284ba 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/DynamicMetadataResolverAttributes.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/DynamicMetadataResolverAttributes.java @@ -20,7 +20,7 @@ public class DynamicMetadataResolverAttributes { private String taskTimerRef; - private Double refreshDelayFactor = 0.75; + private Float refreshDelayFactor = 0.75F; private String minCacheDuration = "PT10M"; diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java index d52e47448..862624b05 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java @@ -57,7 +57,7 @@ public static void updateOpenSamlMetadataResolverFromDynamicMetadataResolverAttr } if (attributes.getRefreshDelayFactor() != null) { - dynamicMetadataResolver.setRefreshDelayFactor(attributes.getRefreshDelayFactor().floatValue()); + dynamicMetadataResolver.setRefreshDelayFactor(attributes.getRefreshDelayFactor()); } if (attributes.getRemoveIdleEntityData() != null) { diff --git a/backend/src/main/resources/dynamic-http-metadata-provider.schema.json b/backend/src/main/resources/dynamic-http-metadata-provider.schema.json index f7106c6e5..cc0696e87 100644 --- a/backend/src/main/resources/dynamic-http-metadata-provider.schema.json +++ b/backend/src/main/resources/dynamic-http-metadata-provider.schema.json @@ -147,7 +147,7 @@ "refreshDelayFactor": { "title": "label.refresh-delay-factor", "description": "tooltip.refresh-delay-factor", - "type": "string", + "type": "number", "widget": { "id": "string", "help": "message.real-number" @@ -578,7 +578,7 @@ "metadataFilters": { "title": "", "description": "", - "type": "object", + "type": "array", "properties": { "RequiredValidUntil": { "title": "label.required-valid-until", @@ -703,4 +703,4 @@ } } } -} \ No newline at end of file +} diff --git a/backend/src/main/resources/local-dynamic-metadata-provider.schema.json b/backend/src/main/resources/local-dynamic-metadata-provider.schema.json index f39904f36..72d846023 100644 --- a/backend/src/main/resources/local-dynamic-metadata-provider.schema.json +++ b/backend/src/main/resources/local-dynamic-metadata-provider.schema.json @@ -61,7 +61,7 @@ "refreshDelayFactor": { "title": "label.refresh-delay-factor", "description": "tooltip.refresh-delay-factor", - "type": "string", + "type": "number", "widget": { "id": "string", "help": "message.real-number" @@ -188,4 +188,4 @@ } } } -} \ No newline at end of file +} diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerSchemaValidationIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerSchemaValidationIntegrationTests.groovy index 1f96de134..016b63cb7 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerSchemaValidationIntegrationTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerSchemaValidationIntegrationTests.groovy @@ -17,6 +17,16 @@ class MetadataResolverControllerSchemaValidationIntegrationTests extends Specifi static RESOURCE_URI = '/api/MetadataResolvers' + private HTTP_POST = { body -> + this.restTemplate.postForEntity(RESOURCE_URI, createRequestHttpEntityFor(body), Map) + } + + private static checkJsonValidationIsPerformed = { + assert it.statusCodeValue == 400 + assert it.body.errorMessage.count('Type mistmatch for null') > 0 + true + } + def 'POST for LocalDynamicMetadataResolver with invalid payload according to schema validation'() { given: def postedJsonBody = """ @@ -87,14 +97,36 @@ class MetadataResolverControllerSchemaValidationIntegrationTests extends Specifi """ when: - def result = this.restTemplate.postForEntity(RESOURCE_URI, createRequestHttpEntityFor { postedJsonBody }, Map) + def result = HTTP_POST(postedJsonBody) + + then: + checkJsonValidationIsPerformed(result) + + } + + def 'POST for DynamicHttpMetadataResolver with invalid payload according to schema validation'() { + given: + def postedJsonBody = """ + { + "name" : null, + "xmlId": "123", + "metadataURL": "http://metadata", + "metadataRequestURLConstructionScheme": {"@type": "MetadataQueryProtocol", "content": "scheme"}, + "@type" : "DynamicHttpMetadataResolver" + } + """ + + when: + def result = HTTP_POST(postedJsonBody) then: - result.statusCodeValue == 400 - result.body.errorMessage.count('Type mistmatch for null') > 0 + checkJsonValidationIsPerformed(result) + } - private static HttpEntity createRequestHttpEntityFor(Closure jsonBodySupplier) { - new HttpEntity(jsonBodySupplier(), ['Content-Type': 'application/json'] as HttpHeaders) + private static HttpEntity createRequestHttpEntityFor(String jsonBody) { + new HttpEntity(jsonBody, ['Content-Type': 'application/json'] as HttpHeaders) } + + } diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy index d22902e30..84c2c72ed 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy @@ -8,6 +8,7 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFil import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.DynamicHttpMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FileBackedHttpMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.LocalDynamicMetadataResolver +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataQueryProtocolScheme import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.OpenSamlChainingMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator @@ -27,6 +28,7 @@ import org.springframework.test.context.ActiveProfiles import spock.lang.Specification import spock.lang.Unroll +import static com.fasterxml.jackson.annotation.JsonInclude.Include.* import static org.springframework.http.HttpMethod.PUT /** @@ -59,6 +61,7 @@ class MetadataResolversControllerIntegrationTests extends Specification { generator = new TestObjectGenerator(attributeUtility, customPropertiesConfiguration) mapper = new ObjectMapper() mapper.enable(SerializationFeature.INDENT_OUTPUT) + mapper.setSerializationInclusion(NON_NULL) mapper.registerModule(new JavaTimeModule()) } @@ -254,7 +257,14 @@ class MetadataResolversControllerIntegrationTests extends Specification { def "PUT concrete MetadataResolver with version conflict -> /api/MetadataResolvers/{resourceId}"() { given: 'One resolver is available in data store' def resolver = new DynamicHttpMetadataResolver().with { - it.name = 'Test DynamicHttpMetadataResolver' + it.name = 'DynamicHTTP' + it.xmlId = 'DynamicHTTP' + it.metadataURL = 'http://metadata' + it.metadataRequestURLConstructionScheme = new MetadataQueryProtocolScheme().with { + it.transformRef = 'transformRef' + it.content = 'content' + it + } it } def resolverResourceId = resolver.resourceId diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy index 982722ebd..cc1403bee 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy @@ -535,6 +535,7 @@ class TestObjectGenerator { new DynamicHttpMetadataResolver().with { it.name = 'DynamicHTTP' it.xmlId = 'DynamicHTTP' + it.metadataURL = 'http://metadata' it.dynamicMetadataResolverAttributes = new DynamicMetadataResolverAttributes().with { it } From 0d48d4c0c4289cf713806747a6a66580372a66d3 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Fri, 23 Aug 2019 11:07:48 -0400 Subject: [PATCH 007/211] Test for filesystem resolver validation --- ...lerSchemaValidationIntegrationTests.groovy | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerSchemaValidationIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerSchemaValidationIntegrationTests.groovy index 016b63cb7..d26b90cb5 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerSchemaValidationIntegrationTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerSchemaValidationIntegrationTests.groovy @@ -124,6 +124,25 @@ class MetadataResolverControllerSchemaValidationIntegrationTests extends Specifi } + def 'POST for FilesystemMetadataResolver with invalid payload according to schema validation'() { + given: + def postedJsonBody = """ + { + "name" : null, + "xmlId": "123", + "metadataFile": "%{shib.home}/metadata.xml", + "@type" : "FilesystemMetadataResolver" + } + """ + + when: + def result = HTTP_POST(postedJsonBody) + + then: + checkJsonValidationIsPerformed(result) + + } + private static HttpEntity createRequestHttpEntityFor(String jsonBody) { new HttpEntity(jsonBody, ['Content-Type': 'application/json'] as HttpHeaders) } From 27518515dc108431b46839a119d0cb80370ff76b Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Fri, 23 Aug 2019 11:28:36 -0400 Subject: [PATCH 008/211] WIP --- .../ui/jsonschema/LowLevelJsonSchemaValidator.groovy | 8 +++++++- ...adataResolversSchemaValidatingControllerAdvice.groovy} | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) rename backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/{MetadataResolverSchemaValidatingControllerAdvice.groovy => MetadataResolversSchemaValidatingControllerAdvice.groovy} (94%) diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy index a793f0fbd..bea82ba26 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy @@ -21,6 +21,7 @@ class LowLevelJsonSchemaValidator { static HttpInputMessage validateMetadataResolverTypePayloadAgainstSchema(HttpInputMessage inputMessage, JsonSchemaResourceLocationRegistry schemaRegistry) { + def origInput = [inputMessage.body.bytes, inputMessage.headers] def json = extractJsonPayload(origInput) def schemaUri = null @@ -37,12 +38,17 @@ class LowLevelJsonSchemaValidator { default: break } - if(!schemaUri) { + if (!schemaUri) { return newInputMessage(origInput) } doValidate(origInput, Json.schema(schemaUri), json) } + static HttpInputMessage validateMetadataFilterTypePayloadAgainstSchema(HttpInputMessage inputMessage, + JsonSchemaResourceLocationRegistry schemaRegistry) { + null + } + private static Json extractJsonPayload(List origInput) { Json.read(new ByteArrayInputStream(origInput[0]).getText()) } diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataResolverSchemaValidatingControllerAdvice.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataResolversSchemaValidatingControllerAdvice.groovy similarity index 94% rename from backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataResolverSchemaValidatingControllerAdvice.groovy rename to backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataResolversSchemaValidatingControllerAdvice.groovy index 6ecbef95a..1c051a9c0 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataResolverSchemaValidatingControllerAdvice.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataResolversSchemaValidatingControllerAdvice.groovy @@ -21,7 +21,7 @@ import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.LowLevelJsonSche * @author Dmitriy Kopylenko */ @ControllerAdvice -class MetadataResolverSchemaValidatingControllerAdvice extends RequestBodyAdviceAdapter { +class MetadataResolversSchemaValidatingControllerAdvice extends RequestBodyAdviceAdapter { @Autowired JsonSchemaResourceLocationRegistry jsonSchemaResourceLocationRegistry From bcced870a6e64976ec9d4207427f3da413424636 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Fri, 23 Aug 2019 11:29:01 -0400 Subject: [PATCH 009/211] WIP --- .../admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy | 5 ----- 1 file changed, 5 deletions(-) diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy index bea82ba26..dd46760a5 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy @@ -44,11 +44,6 @@ class LowLevelJsonSchemaValidator { doValidate(origInput, Json.schema(schemaUri), json) } - static HttpInputMessage validateMetadataFilterTypePayloadAgainstSchema(HttpInputMessage inputMessage, - JsonSchemaResourceLocationRegistry schemaRegistry) { - null - } - private static Json extractJsonPayload(List origInput) { Json.read(new ByteArrayInputStream(origInput[0]).getText()) } From e4fdcc36b57869d01a6f9a7b5ca642e29f11b8dd Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Wed, 11 Sep 2019 15:39:04 -0400 Subject: [PATCH 010/211] SHIBUI-1478 --- .../LowLevelJsonSchemaValidator.groovy | 21 +++++ ...ersSchemaValidatingControllerAdvice.groovy | 42 ++++++++++ ...lerSchemaValidationIntegrationTests.groovy | 78 +++++++++++++++++++ 3 files changed, 141 insertions(+) create mode 100644 backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataFiltersSchemaValidatingControllerAdvice.groovy create mode 100644 backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerSchemaValidationIntegrationTests.groovy diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy index dd46760a5..ada854ac9 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy @@ -4,11 +4,14 @@ import mjson.Json import org.springframework.http.HttpInputMessage import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocationLookup.dynamicHttpMetadataProviderSchema +import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocationLookup.entityAttributesFiltersSchema import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocationLookup.filesystemMetadataProviderSchema import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocationLookup.localDynamicMetadataProviderSchema /** * Currently uses mjson library. + * + * @author Dmitriy Kopylenko */ class LowLevelJsonSchemaValidator { @@ -44,6 +47,24 @@ class LowLevelJsonSchemaValidator { doValidate(origInput, Json.schema(schemaUri), json) } + static HttpInputMessage validateMetadataFilterTypePayloadAgainstSchema(HttpInputMessage inputMessage, + JsonSchemaResourceLocationRegistry schemaRegistry) { + def origInput = [inputMessage.body.bytes, inputMessage.headers] + def json = extractJsonPayload(origInput) + def schemaUri = null + switch (json.asMap()['@type']) { + case 'EntityAttributes': + schemaUri = entityAttributesFiltersSchema(schemaRegistry).uri + break + default: + break + } + if (!schemaUri) { + return newInputMessage(origInput) + } + doValidate(origInput, Json.schema(schemaUri), json) + } + private static Json extractJsonPayload(List origInput) { Json.read(new ByteArrayInputStream(origInput[0]).getText()) } diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataFiltersSchemaValidatingControllerAdvice.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataFiltersSchemaValidatingControllerAdvice.groovy new file mode 100644 index 000000000..08f32f17d --- /dev/null +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataFiltersSchemaValidatingControllerAdvice.groovy @@ -0,0 +1,42 @@ +package edu.internet2.tier.shibboleth.admin.ui.jsonschema + +import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.core.MethodParameter +import org.springframework.http.HttpInputMessage +import org.springframework.http.converter.HttpMessageConverter +import org.springframework.web.bind.annotation.ControllerAdvice +import org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdviceAdapter + +import java.lang.reflect.Type + +import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.LowLevelJsonSchemaValidator.validateMetadataFilterTypePayloadAgainstSchema +import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.LowLevelJsonSchemaValidator.validateMetadataResolverTypePayloadAgainstSchema + +/** + * Controller advice implementation for validating metadata filters payload coming from UI layer + * against pre-defined JSON schema for their respected types. Choosing of the appropriate schema based on incoming + * resolver types is delegated to @{LowLevelJsonSchemaValidator}. + * + * @author Dmitriy Kopylenko + */ +@ControllerAdvice +class MetadataFiltersSchemaValidatingControllerAdvice extends RequestBodyAdviceAdapter { + + @Autowired + JsonSchemaResourceLocationRegistry jsonSchemaResourceLocationRegistry + + @Override + boolean supports(MethodParameter methodParameter, Type targetType, Class> converterType) { + targetType.typeName == MetadataFilter.typeName + } + + @Override + HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, + Type targetType, Class> converterType) + throws IOException { + + validateMetadataFilterTypePayloadAgainstSchema(inputMessage, jsonSchemaResourceLocationRegistry) + } +} diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerSchemaValidationIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerSchemaValidationIntegrationTests.groovy new file mode 100644 index 000000000..47c09cd93 --- /dev/null +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerSchemaValidationIntegrationTests.groovy @@ -0,0 +1,78 @@ +package edu.internet2.tier.shibboleth.admin.ui.controller + +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FileBackedHttpMetadataResolver +import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.boot.test.web.client.TestRestTemplate +import org.springframework.http.HttpEntity +import org.springframework.http.HttpHeaders +import org.springframework.test.context.ActiveProfiles +import spock.lang.Specification + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(["no-auth", "dev"]) +class MetadataFiltersControllerSchemaValidationIntegrationTests extends Specification { + + @Autowired + private TestRestTemplate restTemplate + + @Autowired + MetadataResolverRepository metadataResolverRepository + + static RESOURCE_URI = '/api/MetadataResolvers/%s/Filters' + + private HTTP_POST = { body, resourceId -> + this.restTemplate.postForEntity(resourceUriFor(RESOURCE_URI, resourceId), createRequestHttpEntityFor(body), Map) + } + + private static checkJsonValidationIsPerformed = { + assert it.statusCodeValue == 400 + assert it.body.errorMessage.count('Type mistmatch for null') > 0 + assert it.body.errorMessage.count('Type mistmatch for "not-a-boolean"') > 0 + true + } + + def 'POST for EntityAttributesFilter with invalid payload according to schema validation'() { + given: + def resolver = metadataResolverRepository.save(new FileBackedHttpMetadataResolver(name: 'fbmr', backingFile: '/tmp/metadata.xml')) + def postedJsonBody = """ + { + "name" : "EntityAttributes", + "filterEnabled" : "not-a-boolean", + "entityAttributesFilterTarget" : { + "entityAttributesFilterTargetType" : "ENTITY", + "value" : [ "CedewbJJET" ] + }, + "attributeRelease" : [ "9ktPyjjiCn" ], + "relyingPartyOverrides" : { + "signAssertion" : false, + "dontSignResponse" : true, + "turnOffEncryption" : true, + "useSha" : false, + "ignoreAuthenticationMethod" : false, + "omitNotBefore" : true, + "responderId" : null, + "nameIdFormats" : [ ], + "authenticationMethods" : [ ] + }, + "@type" : "EntityAttributes" + } + """ + + when: + def result = HTTP_POST(postedJsonBody, resolver.resourceId) + + then: + checkJsonValidationIsPerformed(result) + + } + + private static HttpEntity createRequestHttpEntityFor(String jsonBody) { + new HttpEntity(jsonBody, ['Content-Type': 'application/json'] as HttpHeaders) + } + + private static resourceUriFor(String uriTemplate, String resourceId) { + String.format(uriTemplate, resourceId) + } +} From 91d6abb731f3bf3c8894aa383da9fe1980aceb30 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Wed, 11 Sep 2019 16:30:30 -0400 Subject: [PATCH 011/211] SHIBUI-1478 --- .../LowLevelJsonSchemaValidator.groovy | 4 +++ ...lerSchemaValidationIntegrationTests.groovy | 26 ++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy index ada854ac9..bcf25b4d9 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/LowLevelJsonSchemaValidator.groovy @@ -7,6 +7,7 @@ import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocati import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocationLookup.entityAttributesFiltersSchema import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocationLookup.filesystemMetadataProviderSchema import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocationLookup.localDynamicMetadataProviderSchema +import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.JsonSchemaLocationLookup.nameIdFormatFilterSchema /** * Currently uses mjson library. @@ -56,6 +57,9 @@ class LowLevelJsonSchemaValidator { case 'EntityAttributes': schemaUri = entityAttributesFiltersSchema(schemaRegistry).uri break + case 'NameIDFormat': + schemaUri = nameIdFormatFilterSchema(schemaRegistry).uri + break default: break } diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerSchemaValidationIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerSchemaValidationIntegrationTests.groovy index 47c09cd93..32169b063 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerSchemaValidationIntegrationTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerSchemaValidationIntegrationTests.groovy @@ -1,5 +1,6 @@ package edu.internet2.tier.shibboleth.admin.ui.controller +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.DynamicHttpMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FileBackedHttpMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository import org.springframework.beans.factory.annotation.Autowired @@ -35,7 +36,7 @@ class MetadataFiltersControllerSchemaValidationIntegrationTests extends Specific def 'POST for EntityAttributesFilter with invalid payload according to schema validation'() { given: - def resolver = metadataResolverRepository.save(new FileBackedHttpMetadataResolver(name: 'fbmr', backingFile: '/tmp/metadata.xml')) + def resolver = metadataResolverRepository.save(new DynamicHttpMetadataResolver(name: 'dmr')) def postedJsonBody = """ { "name" : "EntityAttributes", @@ -68,6 +69,29 @@ class MetadataFiltersControllerSchemaValidationIntegrationTests extends Specific } + def 'POST for NameIdFormatFilter with invalid payload according to schema validation'() { + given: + def resolver = metadataResolverRepository.save(new FileBackedHttpMetadataResolver(name: 'fbmr', backingFile: '/tmp/metadata.xml')) + def postedJsonBody = """ + { + "name" : null, + "filterEnabled" : "not-a-boolean", + "removeExistingFormats" : false, + "formats" : [ "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" ], + "nameIdFormatFilterTarget" : { + "nameIdFormatFilterTargetType" : "ENTITY", + "value" : [ "https://sp1.example.org" ] + }, + "@type" : "NameIDFormat" + }""" + + when: + def result = HTTP_POST(postedJsonBody, resolver.resourceId) + + then: + checkJsonValidationIsPerformed(result) + } + private static HttpEntity createRequestHttpEntityFor(String jsonBody) { new HttpEntity(jsonBody, ['Content-Type': 'application/json'] as HttpHeaders) } From 5f2dbeb4900d4d4dbdae74ba28d3c379a5ccf4ff Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Wed, 11 Sep 2019 16:39:48 -0400 Subject: [PATCH 012/211] Cleanup --- .../MetadataFiltersSchemaValidatingControllerAdvice.groovy | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataFiltersSchemaValidatingControllerAdvice.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataFiltersSchemaValidatingControllerAdvice.groovy index 08f32f17d..160a63360 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataFiltersSchemaValidatingControllerAdvice.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataFiltersSchemaValidatingControllerAdvice.groovy @@ -12,7 +12,6 @@ import org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdviceAd import java.lang.reflect.Type import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.LowLevelJsonSchemaValidator.validateMetadataFilterTypePayloadAgainstSchema -import static edu.internet2.tier.shibboleth.admin.ui.jsonschema.LowLevelJsonSchemaValidator.validateMetadataResolverTypePayloadAgainstSchema /** * Controller advice implementation for validating metadata filters payload coming from UI layer From 1f1ec429ccb84bd46592edb6903f536abda99298 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Wed, 11 Sep 2019 16:40:19 -0400 Subject: [PATCH 013/211] Cleanup --- .../MetadataFiltersSchemaValidatingControllerAdvice.groovy | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataFiltersSchemaValidatingControllerAdvice.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataFiltersSchemaValidatingControllerAdvice.groovy index 160a63360..3608da194 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataFiltersSchemaValidatingControllerAdvice.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/jsonschema/MetadataFiltersSchemaValidatingControllerAdvice.groovy @@ -1,7 +1,6 @@ package edu.internet2.tier.shibboleth.admin.ui.jsonschema import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter -import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver import org.springframework.beans.factory.annotation.Autowired import org.springframework.core.MethodParameter import org.springframework.http.HttpInputMessage From 1052fd988ad0876188cc248107c44bdd61323822 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Fri, 13 Sep 2019 13:17:41 -0700 Subject: [PATCH 014/211] SHIBUI-1364 Adding version comparison --- .../filter-version-list.component.ts | 53 ++----------------- .../metadata/configuration/model/history.ts | 2 +- .../model/metadata-configuration.ts | 7 ++- .../metadata/configuration/model/version.ts | 7 +++ 4 files changed, 18 insertions(+), 51 deletions(-) diff --git a/ui/src/app/metadata/configuration/component/filter-version-list.component.ts b/ui/src/app/metadata/configuration/component/filter-version-list.component.ts index 2411aa872..034e20a41 100644 --- a/ui/src/app/metadata/configuration/component/filter-version-list.component.ts +++ b/ui/src/app/metadata/configuration/component/filter-version-list.component.ts @@ -1,52 +1,7 @@ -import { Component } from '@angular/core'; +import { Component, Input } from '@angular/core'; +import { FilterConfiguration } from '../model/metadata-configuration'; + -const data = { - dates: ['2019-08-08T08:40:32.015', '2019-08-08T08:40:19.266'], - filters: [ - [ - { - id: '1', - name: 'Example Filter 1', - type: 'EntityAttributesFilter', - comparable: true - }, - { - id: '2', - name: 'Example Filter 2', - type: 'NameIdFilter', - comparable: true - } - ], - [ - { - id: '2', - name: 'Example Filter 2', - type: 'NameIdFilter', - comparable: true - }, - { - id: '1', - name: 'Example Filter 1', - type: 'EntityAttributesFilter', - comparable: true - } - ], - [ - { - id: '4', - name: 'Example Filter 4', - type: 'EntityAttributesFilter', - comparable: false - }, - { - id: '3', - name: 'Example Filter 3', - type: 'EntityAttributesFilter', - comparable: false - } - ] - ] -}; @Component({ selector: 'filter-version-list', @@ -54,7 +9,7 @@ const data = { }) export class FilterVersionListComponent { - filters = data; + @Input() filters: FilterConfiguration; selected: string; comparing: string; diff --git a/ui/src/app/metadata/configuration/model/history.ts b/ui/src/app/metadata/configuration/model/history.ts index 2fec132da..180502423 100644 --- a/ui/src/app/metadata/configuration/model/history.ts +++ b/ui/src/app/metadata/configuration/model/history.ts @@ -1,4 +1,4 @@ -import { MetadataVersion } from './version'; +import { MetadataVersion, FilterVersion } from './version'; export interface MetadataHistory { versions: MetadataVersion[]; diff --git a/ui/src/app/metadata/configuration/model/metadata-configuration.ts b/ui/src/app/metadata/configuration/model/metadata-configuration.ts index 13886d1a3..4a4114642 100644 --- a/ui/src/app/metadata/configuration/model/metadata-configuration.ts +++ b/ui/src/app/metadata/configuration/model/metadata-configuration.ts @@ -1,7 +1,12 @@ import { Section } from './section'; -import { Metadata } from '../../domain/domain.type'; +import { FilterVersion } from './version'; export interface MetadataConfiguration { sections: Section[]; dates: String[]; } + +export interface FilterConfiguration { + dates: ['2019-08-08T08:40:32.015', '2019-08-08T08:40:19.266']; + filters: FilterVersion[]; +} diff --git a/ui/src/app/metadata/configuration/model/version.ts b/ui/src/app/metadata/configuration/model/version.ts index 0eb7cb815..5d1e1dac5 100644 --- a/ui/src/app/metadata/configuration/model/version.ts +++ b/ui/src/app/metadata/configuration/model/version.ts @@ -3,3 +3,10 @@ export interface MetadataVersion { date: string; creator: string; } + +export interface FilterVersion { + id: string; + name: string; + type: string; + comparable: boolean; +} From dbcdcdf2e999887efaae2f0c6ff8f784e1c8a991 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Tue, 17 Sep 2019 15:21:06 -0700 Subject: [PATCH 015/211] Implemented data retrieval for comparison --- .../configuration/action/compare.action.ts | 2 - .../configuration/action/filter.action.ts | 62 +++++++++ .../filter-version-list.component.html | 121 +++++------------- .../filter-version-list.component.ts | 30 +++-- .../configuration/configuration.module.ts | 2 + .../metadata-comparison.component.html | 15 ++- .../metadata-comparison.component.ts | 16 ++- .../configuration/effect/filter.effect.ts | 63 +++++++++ .../metadata/configuration/model/compare.ts | 7 + .../model/metadata-configuration.ts | 2 +- .../configuration/reducer/compare.reducer.ts | 5 +- .../configuration/reducer/filter.reducer.ts | 56 ++++++++ .../metadata/configuration/reducer/index.ts | 92 +++++++++++-- 13 files changed, 357 insertions(+), 116 deletions(-) create mode 100644 ui/src/app/metadata/configuration/action/filter.action.ts create mode 100644 ui/src/app/metadata/configuration/effect/filter.effect.ts create mode 100644 ui/src/app/metadata/configuration/model/compare.ts create mode 100644 ui/src/app/metadata/configuration/reducer/filter.reducer.ts diff --git a/ui/src/app/metadata/configuration/action/compare.action.ts b/ui/src/app/metadata/configuration/action/compare.action.ts index be687d142..da012bea7 100644 --- a/ui/src/app/metadata/configuration/action/compare.action.ts +++ b/ui/src/app/metadata/configuration/action/compare.action.ts @@ -1,6 +1,4 @@ import { Action } from '@ngrx/store'; -import { MetadataHistory } from '../model/history'; -import { MetadataVersion } from '../model/version'; import { Metadata } from '../../domain/domain.type'; export enum CompareActionTypes { diff --git a/ui/src/app/metadata/configuration/action/filter.action.ts b/ui/src/app/metadata/configuration/action/filter.action.ts new file mode 100644 index 000000000..6567fd0e2 --- /dev/null +++ b/ui/src/app/metadata/configuration/action/filter.action.ts @@ -0,0 +1,62 @@ +import { Action } from '@ngrx/store'; +import { Metadata } from '../../domain/domain.type'; +import { FormDefinition } from '../../../wizard/model/form-definition'; +import { FilterComparison } from '../model/compare'; +import { Schema } from '../model/schema'; + +export enum FilterCompareActionTypes { + LOAD_SCHEMA_REQUEST = '[Filter Compare Version] Compare Version Request', + LOAD_SCHEMA_SUCCESS = '[Filter Compare Version] Compare Version Success', + LOAD_SCHEMA_ERROR = '[Filter Compare Version] Compare Version Error', + SET_SCHEMA = '[Filter Compare Version] Set Schema', + SET_DEFINITION = '[Filter Compare Version] Set Definition', + COMPARE_FILTERS = '[Filter Compare Version] Compare Filters', + CLEAR = '[Filter Compare Version] Clear Filter Comparison' +} + +export class LoadFilterSchemaRequest implements Action { + readonly type = FilterCompareActionTypes.LOAD_SCHEMA_REQUEST; + + constructor(public payload: string) { } +} + +export class LoadFilterSchemaSuccess implements Action { + readonly type = FilterCompareActionTypes.LOAD_SCHEMA_SUCCESS; + + constructor(public payload: Schema) { } +} + +export class LoadFilterSchemaError implements Action { + readonly type = FilterCompareActionTypes.LOAD_SCHEMA_ERROR; + + constructor(public payload: any) { } +} + +export class SetFilterComparisonSchema implements Action { + readonly type = FilterCompareActionTypes.SET_SCHEMA; + constructor(public payload: any) { } +} + +export class SetFilterComparisonDefinition implements Action { + readonly type = FilterCompareActionTypes.SET_DEFINITION; + constructor(public payload: FormDefinition) { } +} + +export class ClearFilterComparison implements Action { + readonly type = FilterCompareActionTypes.CLEAR; +} + +export class CompareFilterVersions implements Action { + readonly type = FilterCompareActionTypes.COMPARE_FILTERS; + + constructor(public payload: FilterComparison) { } +} + +export type FilterCompareActionsUnion = + | LoadFilterSchemaRequest + | LoadFilterSchemaSuccess + | LoadFilterSchemaError + | SetFilterComparisonSchema + | SetFilterComparisonDefinition + | CompareFilterVersions + | ClearFilterComparison; diff --git a/ui/src/app/metadata/configuration/component/filter-version-list.component.html b/ui/src/app/metadata/configuration/component/filter-version-list.component.html index 4047f7483..e9efacb1e 100644 --- a/ui/src/app/metadata/configuration/component/filter-version-list.component.html +++ b/ui/src/app/metadata/configuration/component/filter-version-list.component.html @@ -3,106 +3,47 @@ Order Option - {{ date | date:'medium' }} + {{ date | date:DATE_FORMAT }}
- -
- -
-
- {{ i + 1 }} -
-
+
+ +
+
+ {{ i + 1 }} +
+
+
-
+
-

{{ filter.name }}

-

{{ filter.type }}

+

{{ filter.name }}

+

{{ filter['@type'] }}

-
- -
-
- -
-
- -
- Type - EntityAttributesFilter - EntityAttributesFilter -
-
- Name - Test Filter 1 - Renamed Filter -
-
- Target Type - Entity ID - Entity ID -
-
- Target Value - http://idp.unicon.net/idp/shibboleth - http://idp.unicon.net/idp/shibboleth -
-
- Enabled? - false - true -
-
- -
-
+ +
+ +
+
+ +

No Filters

diff --git a/ui/src/app/metadata/configuration/component/filter-version-list.component.ts b/ui/src/app/metadata/configuration/component/filter-version-list.component.ts index 034e20a41..7f0d9e445 100644 --- a/ui/src/app/metadata/configuration/component/filter-version-list.component.ts +++ b/ui/src/app/metadata/configuration/component/filter-version-list.component.ts @@ -1,7 +1,8 @@ -import { Component, Input } from '@angular/core'; -import { FilterConfiguration } from '../model/metadata-configuration'; - - +import { Component, Input, Output, EventEmitter } from '@angular/core'; +import { FilterConfiguration, MetadataConfiguration } from '../model/metadata-configuration'; +import { CONFIG_DATE_FORMAT } from '../configuration.values'; +import { Observable, Subject } from 'rxjs'; +import { FilterComparison } from '../model/compare'; @Component({ selector: 'filter-version-list', @@ -9,16 +10,29 @@ import { FilterConfiguration } from '../model/metadata-configuration'; }) export class FilterVersionListComponent { + private selectFiltersSubject: Subject = new Subject(); + @Input() filters: FilterConfiguration; + @Output() compare: EventEmitter = new EventEmitter(); + selected: string; comparing: string; + selectedFilters$: Observable; - constructor() { + DATE_FORMAT = CONFIG_DATE_FORMAT; - } + constructor() {} + + compareSelected() { + const reduced = this.filters.filters.reduce((acc, l) => acc.concat(l), []); + const filtered = reduced.filter(f => f && f.resourceId === this.selected); + const type = filtered[0]['@type']; - compare(id: string): void { - this.comparing = id; + this.compare.emit({ + modelId: this.selected, + modelType: type, + models: filtered + }); } get width(): string { diff --git a/ui/src/app/metadata/configuration/configuration.module.ts b/ui/src/app/metadata/configuration/configuration.module.ts index 19f967fd1..338c39ccb 100644 --- a/ui/src/app/metadata/configuration/configuration.module.ts +++ b/ui/src/app/metadata/configuration/configuration.module.ts @@ -45,6 +45,7 @@ import { RestoreEditStepComponent } from './container/restore-edit-step.componen import { IndexResolver } from './service/index-resolver.service'; import { FilterVersionListComponent } from './component/filter-version-list.component'; +import { FilterCompareVersionEffects } from './effect/filter.effect'; @NgModule({ declarations: [ @@ -111,6 +112,7 @@ export class MetadataConfigurationModule { MetadataHistoryEffects, CompareVersionEffects, RestoreEffects, + FilterCompareVersionEffects, VersionEffects ]) ], diff --git a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html index fd990d79e..b8795788f 100644 --- a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html +++ b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html @@ -25,7 +25,20 @@

- + +
+

+ Metadata Filters +

+
+ + + + +

diff --git a/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts b/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts index 78fc1bcf6..ba10aa145 100644 --- a/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts +++ b/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts @@ -1,13 +1,14 @@ import { Component, ChangeDetectionStrategy, OnDestroy } from '@angular/core'; -import { Observable, BehaviorSubject, Subscription, combineLatest } from 'rxjs'; +import { Observable, BehaviorSubject, Subscription } from 'rxjs'; import { Store } from '@ngrx/store'; import { ActivatedRoute } from '@angular/router'; import { map, withLatestFrom } from 'rxjs/operators'; import { ConfigurationState, getComparisonConfigurationCount } from '../reducer'; import { CompareVersionRequest, ClearVersions, ViewChanged } from '../action/compare.action'; -import { MetadataConfiguration } from '../model/metadata-configuration'; +import { MetadataConfiguration, FilterConfiguration } from '../model/metadata-configuration'; import * as fromReducer from '../reducer'; - +import { CompareFilterVersions } from '../action/filter.action'; +import { FilterComparison } from '../model/compare'; @Component({ selector: 'metadata-comparison', @@ -25,7 +26,8 @@ export class MetadataComparisonComponent implements OnDestroy { loading$: Observable = this.store.select(fromReducer.getComparisonLoading); limited$: Observable = this.store.select(fromReducer.getViewChangedOnly); sub: Subscription; - + filters$: Observable = this.store.select(fromReducer.getComparisonFilterConfiguration); + filterCompare$: Observable = this.store.select(fromReducer.getLimitedFilterComparisonConfiguration); constructor( private store: Store, @@ -45,6 +47,12 @@ export class MetadataComparisonComponent implements OnDestroy { withLatestFrom(this.limited$), map(([compare, limit]) => new ViewChanged(!limit)) ).subscribe(this.store); + + this.filterCompare$.subscribe(console.log); + } + + compareFilters (comparison: FilterComparison) { + this.store.dispatch(new CompareFilterVersions(comparison)); } ngOnDestroy(): void { diff --git a/ui/src/app/metadata/configuration/effect/filter.effect.ts b/ui/src/app/metadata/configuration/effect/filter.effect.ts new file mode 100644 index 000000000..215ac755e --- /dev/null +++ b/ui/src/app/metadata/configuration/effect/filter.effect.ts @@ -0,0 +1,63 @@ +import { Injectable } from '@angular/core'; +import { Effect, Actions, ofType } from '@ngrx/effects'; +import { + LoadFilterSchemaRequest, + CompareFilterVersions, + SetFilterComparisonDefinition, + LoadFilterSchemaSuccess, + LoadFilterSchemaError, + SetFilterComparisonSchema +} from '../action/filter.action'; +import { Store } from '@ngrx/store'; +import { State } from '../reducer'; +import { FilterCompareActionTypes } from '../action/filter.action'; +import { MetadataConfigurationService } from '../service/configuration.service'; +import { switchMap, map, catchError } from 'rxjs/operators'; +import { of } from 'rxjs'; + +@Injectable() +export class FilterCompareVersionEffects { + + @Effect() + setDefinition$ = this.actions$.pipe( + ofType(FilterCompareActionTypes.COMPARE_FILTERS), + map(action => action.payload), + map(comparison => { + const def = this.configService.getDefinition(comparison.modelType); + return new SetFilterComparisonDefinition(def); + }) + ); + + @Effect() + loadSchemaOnDefinitionSet$ = this.actions$.pipe( + ofType(FilterCompareActionTypes.SET_DEFINITION), + map(action => action.payload), + map(def => new LoadFilterSchemaRequest(def.schema)) + ); + + @Effect() + loadSchemaData$ = this.actions$.pipe( + ofType(FilterCompareActionTypes.LOAD_SCHEMA_REQUEST), + switchMap(action => + this.configService + .loadSchema(action.payload) + .pipe( + map(schema => new LoadFilterSchemaSuccess(schema)), + catchError(error => of(new LoadFilterSchemaError(error))) + ) + ) + ); + + @Effect() + loadSchemaSuccess$ = this.actions$.pipe( + ofType(FilterCompareActionTypes.LOAD_SCHEMA_SUCCESS), + map(action => action.payload), + map(schema => new SetFilterComparisonSchema(schema)) + ); + + constructor( + private configService: MetadataConfigurationService, + private store: Store, + private actions$: Actions + ) {} +} diff --git a/ui/src/app/metadata/configuration/model/compare.ts b/ui/src/app/metadata/configuration/model/compare.ts new file mode 100644 index 000000000..3e423ec99 --- /dev/null +++ b/ui/src/app/metadata/configuration/model/compare.ts @@ -0,0 +1,7 @@ +import { Metadata } from '../../domain/domain.type'; + +export interface FilterComparison { + modelId: string; + modelType: string; + models: Metadata[]; +} diff --git a/ui/src/app/metadata/configuration/model/metadata-configuration.ts b/ui/src/app/metadata/configuration/model/metadata-configuration.ts index 4a4114642..10cf85eed 100644 --- a/ui/src/app/metadata/configuration/model/metadata-configuration.ts +++ b/ui/src/app/metadata/configuration/model/metadata-configuration.ts @@ -7,6 +7,6 @@ export interface MetadataConfiguration { } export interface FilterConfiguration { - dates: ['2019-08-08T08:40:32.015', '2019-08-08T08:40:19.266']; + dates: string[]; filters: FilterVersion[]; } diff --git a/ui/src/app/metadata/configuration/reducer/compare.reducer.ts b/ui/src/app/metadata/configuration/reducer/compare.reducer.ts index 84eec1558..ea0ef1598 100644 --- a/ui/src/app/metadata/configuration/reducer/compare.reducer.ts +++ b/ui/src/app/metadata/configuration/reducer/compare.reducer.ts @@ -6,13 +6,15 @@ export interface State { loaded: boolean; loading: boolean; compareChangedOnly: boolean; + filter: string; } export const initialState: State = { models: [], loaded: false, loading: false, - compareChangedOnly: false + compareChangedOnly: false, + filter: null }; export function reducer(state = initialState, action: CompareActionsUnion): State { @@ -53,3 +55,4 @@ export const getVersionModels = (state: State) => state.models; export const getVersionModelsLoaded = (state: State) => state.loaded; export const getComparisonLoading = (state: State) => state.loading; export const getViewChangedOnly = (state: State) => state.compareChangedOnly; +export const getFilterId = (state: State) => state.filter; diff --git a/ui/src/app/metadata/configuration/reducer/filter.reducer.ts b/ui/src/app/metadata/configuration/reducer/filter.reducer.ts new file mode 100644 index 000000000..4aa230bde --- /dev/null +++ b/ui/src/app/metadata/configuration/reducer/filter.reducer.ts @@ -0,0 +1,56 @@ +import { FilterCompareActionTypes, FilterCompareActionsUnion } from '../action/filter.action'; +import { Metadata } from '../../domain/domain.type'; +import { FormDefinition } from '../../../wizard/model'; +import { Schema } from '../model/schema'; + +export interface State { + models: Metadata[]; + modelType: string; + modelId: string; + schema: Schema; + definition: FormDefinition; + loading: boolean; +} + +export const initialState: State = { + models: null, + modelType: null, + modelId: null, + schema: null, + definition: null, + loading: false +}; + +export function reducer(state = initialState, action: FilterCompareActionsUnion): State { + switch (action.type) { + case FilterCompareActionTypes.SET_SCHEMA: + return { + ...state, + schema: action.payload + }; + case FilterCompareActionTypes.SET_DEFINITION: + return { + ...state, + definition: action.payload + }; + case FilterCompareActionTypes.COMPARE_FILTERS: + return { + ...state, + ...action.payload + }; + case FilterCompareActionTypes.CLEAR: + return { + ...initialState + }; + default: { + return state; + } + } +} + +export const getModels = (state: State) => state.models; +export const getModelType = (state: State) => state.modelType; +export const getModelId = (state: State) => state.modelId; +export const getDefinition = (state: State) => state.definition; +export const getSchema = (state: State) => state.schema; +export const getLoading = (state: State) => state.loading; diff --git a/ui/src/app/metadata/configuration/reducer/index.ts b/ui/src/app/metadata/configuration/reducer/index.ts index 38087a034..285192aff 100644 --- a/ui/src/app/metadata/configuration/reducer/index.ts +++ b/ui/src/app/metadata/configuration/reducer/index.ts @@ -6,6 +6,7 @@ import * as fromHistory from './history.reducer'; import * as fromCompare from './compare.reducer'; import * as fromVersion from './version.reducer'; import * as fromRestore from './restore.reducer'; +import * as fromFilter from './filter.reducer'; import { WizardStep } from '../../../wizard/model'; import * as utils from '../../domain/utility/configuration'; @@ -24,6 +25,7 @@ export interface ConfigurationState { compare: fromCompare.State; version: fromVersion.State; restore: fromRestore.RestoreState; + filter: fromFilter.State; } export const reducers = { @@ -31,7 +33,8 @@ export const reducers = { history: fromHistory.reducer, compare: fromCompare.reducer, version: fromVersion.reducer, - restore: fromRestore.reducer + restore: fromRestore.reducer, + filter: fromFilter.reducer }; export interface State extends fromRoot.State { @@ -45,6 +48,7 @@ export const getHistoryStateFn = (state: ConfigurationState) => state.history; export const getCompareStateFn = (state: ConfigurationState) => state.compare; export const getVersionStateFn = (state: ConfigurationState) => state.version; export const getRestoreStateFn = (state: ConfigurationState) => state.restore; +export const getFilterStateFn = (state: ConfigurationState) => state.filter; export const getConfigurationState = createSelector(getState, getConfigurationStateFn); export const getConfigurationModelKind = createSelector(getConfigurationState, fromConfiguration.getModelKind); @@ -145,6 +149,14 @@ export const getConfigurationModelNameFn = export const getConfigurationModelTypeFn = (config: Metadata) => config ? ('@type' in config) ? config['@type'] : 'resolver' : null; +export const filterPluginTypes = ['RequiredValidUntil', 'SignatureValidation', 'EntityRoleWhiteList']; +export const isAdditionalFilter = (type) => filterPluginTypes.indexOf(type) === -1; + +export const getVersionModelFiltersFn = + (model, kind) => kind === 'provider' ? + model.metadataFilters.filter(filter => isAdditionalFilter(filter['@type'])) : + null; + // Version History export const getHistoryState = createSelector(getState, getHistoryStateFn); @@ -172,12 +184,14 @@ export const getSelectedIsCurrent = createSelector( getSelectedIsCurrentFn ); + // Version Comparison export const getCompareState = createSelector(getState, getCompareStateFn); export const getComparisonLoading = createSelector(getCompareState, fromCompare.getComparisonLoading); export const getComparisonModels = createSelector(getCompareState, fromCompare.getVersionModels); export const getComparisonModelsLoaded = createSelector(getCompareState, fromCompare.getVersionModelsLoaded); +export const getComparisonFilterId = createSelector(getCompareState, fromCompare.getFilterId); export const getComparisonConfigurations = createSelector( getComparisonModels, getConfigurationDefinition, @@ -224,17 +238,58 @@ export const getLimitedComparisonConfigurations = createSelector( getLimitedConfigurationsFn ); -// Version Restoration +export const getComparisonFilterListFn = (models) => models.map(m => getVersionModelFiltersFn(m, 'provider')); +export const getComparisonFilterList = createSelector(getComparisonModels, getComparisonFilterListFn); + +export const getComparisonDatesFn = (config) => config.map(m => m ? m.modifiedDate : null); +export const getComparisonDates = createSelector(getComparisonModels, getComparisonDatesFn); + +export const getComparisonFilterOrderedFn = (list) => + list.map(models => + models.map(filter => + ({ + ...filter, + comparable: list + .reduce((acc, v) => acc.concat(v), []) + .map(v => v.resourceId) + .some((id, index, coll) => { + return coll.indexOf(filter.resourceId) !== coll.lastIndexOf(filter.resourceId); + }) + }) +)); + +export const getComparisonFilterOrdered = createSelector(getComparisonFilterList, getComparisonFilterOrderedFn); + +export const getComparisonFilterConfiguration = createSelector( + getComparisonFilterOrdered, + getComparisonDates, + (filters, dates) => { + const rows = filters.reduce((num, version) => version.length > num ? version.length : num, 0); + const range = [...Array(rows).keys()]; + return { + dates, + filters: range.reduce((collection, index) => { + const val = filters.map(version => version[index]); + collection[index] = val; + return collection; + }, []) + }; + } +); -export const getRestoreState = createSelector(getState, getRestoreStateFn); +export const getComparisonSelectedFilters = createSelector( + getComparisonModels, + getComparisonDates, + getComparisonFilterId, + (models, dates, id) => ({ + dates, + sections: [] + }) +); -export const filterPluginTypes = ['RequiredValidUntil', 'SignatureValidation', 'EntityRoleWhiteList']; -export const isAdditionalFilter = (type) => filterPluginTypes.indexOf(type) === -1; +// Version Restoration -export const getVersionModelFiltersFn = - (model, kind) => kind === 'provider' ? - model.metadataFilters.filter(filter => isAdditionalFilter(filter['@type'])) : - null; +export const getRestoreState = createSelector(getState, getRestoreStateFn); export const getVersionState = createSelector(getState, getVersionStateFn); @@ -295,6 +350,25 @@ export const getRestorationModel = createSelector( }) ); +// Filter Comparison State + +export const getFilterState = createSelector(getState, getFilterStateFn); +export const getFilterComparisonDefinition = createSelector(getFilterState, fromFilter.getDefinition); +export const getFilterComparisonSchema = createSelector(getFilterState, fromFilter.getSchema); +export const getFilterComparisonModels = createSelector(getFilterState, fromFilter.getModels); +export const getFilterComparisonConfigurations = createSelector( + getFilterComparisonModels, + getFilterComparisonDefinition, + getFilterComparisonSchema, + getConfigurationSectionsFn +); + +export const getLimitedFilterComparisonConfiguration = createSelector( + getFilterComparisonConfigurations, + getViewChangedOnly, + getLimitedConfigurationsFn +); + // Mixed states export const getConfigurationModelFn = (kind, version, provider, resolver) => { From 446b6cd5e25c4b109b9a2c3d64eeee744566f3ee Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Tue, 17 Sep 2019 16:56:09 -0700 Subject: [PATCH 016/211] SHIBUI-1407 Added tests for comparison highlights. --- .../internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy b/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy index 51b35a461..ea1505cee 100644 --- a/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy +++ b/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy @@ -104,6 +104,8 @@ class SeleniumSIDETest extends Specification { 'SHIBUI-1385: Restore a metadata source version' | '/SHIBUI-1385-1.side' 'SHIBUI-1385: Restore a metadata provider version' | '/SHIBUI-1385-2.side' 'SHIBUI-1391: Regex Validation' | '/SHIBUI-1391.side' + 'SHIBUI-1407: Metadata source comparison highlights' | '/SHIBUI-1407-1.side' + 'SHIBUI-1407: Metadata provider comparison highlights' | '/SHIBUI-1407-2.side' } } From 332c12120e268e997ea03738197f947c022f4692 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Tue, 17 Sep 2019 16:58:06 -0700 Subject: [PATCH 017/211] SHIBUI-1407 Added two forgotten SIDE files. --- .../integration/resources/SHIBUI-1407-1.side | 2460 +++++++++++++++++ .../integration/resources/SHIBUI-1407-2.side | 959 +++++++ 2 files changed, 3419 insertions(+) create mode 100644 backend/src/integration/resources/SHIBUI-1407-1.side create mode 100644 backend/src/integration/resources/SHIBUI-1407-2.side diff --git a/backend/src/integration/resources/SHIBUI-1407-1.side b/backend/src/integration/resources/SHIBUI-1407-1.side new file mode 100644 index 000000000..e0880f4ca --- /dev/null +++ b/backend/src/integration/resources/SHIBUI-1407-1.side @@ -0,0 +1,2460 @@ +{ + "id": "1b31a551-eb09-4bd4-8db9-694bf1539a46", + "version": "2.0", + "name": "SHIBUI-1407-1", + "url": "http://localhost:10101", + "tests": [{ + "id": "841ade0e-83bd-4a4b-94f2-de6bd5c536b2", + "name": "SHIBUI-1407-1", + "commands": [{ + "id": "d6b23986-6d14-4b10-be7b-a7e6f576e3b2", + "comment": "", + "command": "open", + "target": "/login", + "targets": [], + "value": "" + }, { + "id": "f77ecd77-01c2-4463-944e-1a69600f5297", + "comment": "", + "command": "type", + "target": "name=username", + "targets": [ + ["name=username", "name"], + ["css=tr:nth-child(1) input", "css:finder"], + ["xpath=//input[@name='username']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "admin" + }, { + "id": "c9bf0a22-faa9-494c-b2ed-6c9653248551", + "comment": "", + "command": "type", + "target": "name=password", + "targets": [ + ["name=password", "name"], + ["css=tr:nth-child(2) input", "css:finder"], + ["xpath=//input[@name='password']", "xpath:attributes"], + ["xpath=//tr[2]/td[2]/input", "xpath:position"] + ], + "value": "adminpass" + }, { + "id": "7ab1d854-3582-4101-bd19-f94b8f438090", + "comment": "", + "command": "sendKeys", + "target": "name=password", + "targets": [ + ["name=password", "name"], + ["css=tr:nth-child(2) input", "css:finder"], + ["xpath=//input[@name='password']", "xpath:attributes"], + ["xpath=//tr[2]/td[2]/input", "xpath:position"] + ], + "value": "${KEY_ENTER}" + }, { + "id": "ad3811ad-f95b-4cca-a5d9-63a10063a652", + "comment": "", + "command": "click", + "target": "css=#addNewDropdown > translate-i18n", + "targets": [ + ["css=#addNewDropdown > translate-i18n", "css:finder"], + ["xpath=//button[@id='addNewDropdown']/translate-i18n", "xpath:idRelative"], + ["xpath=//translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Add New')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1caf8be6-a4d9-4b3b-ace1-0f76d3600d62", + "comment": "", + "command": "click", + "target": "linkText=Metadata Source", + "targets": [ + ["linkText=Metadata Source", "linkText"], + ["css=.dropdown-menu > .nav-link:nth-child(1)", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li/div/a", "xpath:idRelative"], + ["xpath=(//a[contains(@href, '')])[2]", "xpath:href"], + ["xpath=//div/a", "xpath:position"] + ], + "value": "" + }, { + "id": "295789cf-0603-4fd2-9971-c2ed21d2fc81", + "comment": "", + "command": "pause", + "target": "5000", + "targets": [], + "value": "" + }, { + "id": "218e51fd-49e6-400b-9d7f-61bcd8e0c074", + "comment": "", + "command": "click", + "target": "id=/serviceProviderName", + "targets": [ + ["id=/serviceProviderName", "id"], + ["name=field1", "name"], + ["css=#\\/serviceProviderName", "css:finder"], + ["xpath=//input[@id='/serviceProviderName']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "" + }, { + "id": "9ee43e46-ab9e-46b1-8eb2-9718fb98bda2", + "comment": "", + "command": "type", + "target": "id=/serviceProviderName", + "targets": [ + ["id=field1", "id"], + ["name=field1", "name"], + ["css=#field1", "css:finder"], + ["xpath=//input[@id='field1']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Test Provider" + }, { + "id": "7fe7298b-275c-4797-8d1b-f4547b63eb02", + "comment": "", + "command": "type", + "target": "id=/entityId", + "targets": [ + ["id=/entityId", "id"], + ["name=field2", "name"], + ["css=#\\/entityId", "css:finder"], + ["xpath=//input[@id='/entityId']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "test-1234" + }, { + "id": "8739ddfa-7812-46b3-bee7-b4bc73a3dd35", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[2]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "4d88e469-df2f-40ee-a557-b5eafbc24ef3", + "comment": "", + "command": "click", + "target": "id=/organization/name", + "targets": [ + ["id=/organization/name", "id"], + ["name=field5", "name"], + ["css=#\\/organization\\/name", "css:finder"], + ["xpath=//input[@id='/organization/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "" + }, { + "id": "e0168286-af90-4c0a-a0ba-0dd97d64849b", + "comment": "", + "command": "type", + "target": "id=/organization/name", + "targets": [ + ["id=field5", "id"], + ["name=field5", "name"], + ["css=#field5", "css:finder"], + ["xpath=//input[@id='field5']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Test Org" + }, { + "id": "8f6dcf95-41e4-446a-a7fb-a064d928e1bc", + "comment": "", + "command": "type", + "target": "id=/organization/displayName", + "targets": [ + ["id=/organization/displayName", "id"], + ["name=field6", "name"], + ["css=#\\/organization\\/displayName", "css:finder"], + ["xpath=//input[@id='/organization/displayName']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "Test Org Name" + }, { + "id": "7cc2068e-3fa3-4f1c-ac97-c63e78911b9e", + "comment": "", + "command": "type", + "target": "id=/organization/url", + "targets": [ + ["id=/organization/url", "id"], + ["name=field7", "name"], + ["css=#\\/organization\\/url", "css:finder"], + ["xpath=//input[@id='/organization/url']", "xpath:attributes"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "http://test.org" + }, { + "id": "1da05567-4f8d-4fd8-957a-bfddb2380bfb", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success", "css:finder"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "5379b245-cd77-43c1-b424-3b6595c74174", + "comment": "", + "command": "click", + "target": "id=/contacts/0/name", + "targets": [ + ["id=/contacts/0/name", "id"], + ["name=field10", "name"], + ["css=#\\/contacts\\/0\\/name", "css:finder"], + ["xpath=//input[@id='/contacts/0/name']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "b658cae2-ba5a-406b-a48c-87d110ff4ed0", + "comment": "", + "command": "type", + "target": "id=/contacts/0/name", + "targets": [ + ["id=field10", "id"], + ["name=field10", "name"], + ["css=#field10", "css:finder"], + ["xpath=//input[@id='field10']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "Test User" + }, { + "id": "3a2de62d-c1c1-43a7-a484-8a0d23bf301e", + "comment": "", + "command": "click", + "target": "id=/contacts/0/type", + "targets": [ + ["id=/contacts/0/type", "id"], + ["name=field11", "name"], + ["css=#\\/contacts\\/0\\/type", "css:finder"], + ["xpath=//select[@id='/contacts/0/type']", "xpath:attributes"], + ["xpath=//select", "xpath:position"] + ], + "value": "" + }, { + "id": "86e4e429-2a72-496a-add8-df2fc079d157", + "comment": "", + "command": "select", + "target": "id=/contacts/0/type", + "targets": [], + "value": "label=Technical" + }, { + "id": "95531b0b-c084-422d-bac9-60ee7e7a9f16", + "comment": "", + "command": "click", + "target": "id=/contacts/0/emailAddress", + "targets": [ + ["id=/contacts/0/emailAddress", "id"], + ["name=field12", "name"], + ["css=#\\/contacts\\/0\\/emailAddress", "css:finder"], + ["xpath=//input[@id='/contacts/0/emailAddress']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div[3]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "e5d6662e-38d4-479f-b76b-c0c05fcabe15", + "comment": "", + "command": "type", + "target": "id=/contacts/0/emailAddress", + "targets": [ + ["id=field12", "id"], + ["name=field12", "name"], + ["css=#field12", "css:finder"], + ["xpath=//input[@id='field12']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div[3]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "user@test.org" + }, { + "id": "b4e3ea55-b4c0-4585-99fe-ac1534efadd8", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success", "css:finder"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "234de758-df6d-47d7-af74-83aee3fa1e72", + "comment": "", + "command": "click", + "target": "id=/contacts/1/name", + "targets": [ + ["id=/contacts/1/name", "id"], + ["name=field14", "name"], + ["css=#\\/contacts\\/1\\/name", "css:finder"], + ["xpath=//input[@id='/contacts/1/name']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "02819e27-7aed-4a1a-867f-f8131c3897d8", + "comment": "", + "command": "type", + "target": "id=/contacts/1/name", + "targets": [ + ["id=field14", "id"], + ["name=field14", "name"], + ["css=#field14", "css:finder"], + ["xpath=//input[@id='field14']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "Test User 2" + }, { + "id": "1d478856-8742-4627-acbe-daed2bb83abe", + "comment": "", + "command": "click", + "target": "id=/contacts/1/type", + "targets": [ + ["css=#field15 > option:nth-child(2)", "css:finder"], + ["xpath=(//option[@value='1: support'])[2]", "xpath:attributes"], + ["xpath=//select[@id='field15']/option[2]", "xpath:idRelative"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div[2]/sf-form-element/div/sf-widget-chooser/select-component/div/select/option[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "9b4c76b4-3851-4aac-a9f5-67e20c36f174", + "comment": "", + "command": "select", + "target": "id=/contacts/1/type", + "targets": [ + ["id=/contacts/1/type", "id"], + ["name=field15", "name"], + ["css=#\\/contacts\\/1\\/type", "css:finder"], + ["xpath=//select[@id='/contacts/1/type']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div[2]/sf-form-element/div/sf-widget-chooser/select-component/div/select", "xpath:position"] + ], + "value": "label=Support" + }, { + "id": "5e3fddc1-786d-4040-8351-2f553e3c8811", + "comment": "", + "command": "click", + "target": "id=/contacts/1/emailAddress", + "targets": [ + ["id=/contacts/1/emailAddress", "id"], + ["name=field16", "name"], + ["css=#\\/contacts\\/1\\/emailAddress", "css:finder"], + ["xpath=//input[@id='/contacts/1/emailAddress']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div[3]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "700d8907-6a65-43d5-aebf-60a392379534", + "comment": "", + "command": "type", + "target": "id=/contacts/1/emailAddress", + "targets": [ + ["id=field16", "id"], + ["name=field16", "name"], + ["css=#field16", "css:finder"], + ["xpath=//input[@id='field16']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div[3]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "user2@test.org" + }, { + "id": "fdda1155-876f-46a4-ae4f-c3519ed34b62", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "f38b7fca-0c0c-4658-9df6-10a26881c6a5", + "comment": "", + "command": "click", + "target": "id=/mdui/displayName", + "targets": [ + ["id=/mdui/displayName", "id"], + ["name=field19", "name"], + ["css=#\\/mdui\\/displayName", "css:finder"], + ["xpath=//input[@id='/mdui/displayName']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "" + }, { + "id": "c03c4582-e1f1-449f-9a79-300d48ad69d8", + "comment": "", + "command": "type", + "target": "id=/mdui/displayName", + "targets": [ + ["id=field19", "id"], + ["name=field19", "name"], + ["css=#field19", "css:finder"], + ["xpath=//input[@id='field19']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Display Name" + }, { + "id": "5098507c-fa51-4c13-b9a3-381034e0fa52", + "comment": "", + "command": "type", + "target": "id=/mdui/informationUrl", + "targets": [ + ["id=/mdui/informationUrl", "id"], + ["name=field20", "name"], + ["css=#\\/mdui\\/informationUrl", "css:finder"], + ["xpath=//input[@id='/mdui/informationUrl']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "http://test.org/info" + }, { + "id": "d5de3699-5a18-4abe-a2ea-0a2b7565c525", + "comment": "", + "command": "type", + "target": "id=/mdui/description", + "targets": [ + ["id=/mdui/description", "id"], + ["name=field21", "name"], + ["css=#\\/mdui\\/description", "css:finder"], + ["xpath=//textarea[@id='/mdui/description']", "xpath:attributes"], + ["xpath=//textarea", "xpath:position"] + ], + "value": "This is a description." + }, { + "id": "115bb9a9-e991-4cf0-8bcb-363d9dc3c269", + "comment": "", + "command": "click", + "target": "id=/mdui/privacyStatementUrl", + "targets": [ + ["id=/mdui/privacyStatementUrl", "id"], + ["name=field22", "name"], + ["css=#\\/mdui\\/privacyStatementUrl", "css:finder"], + ["xpath=//input[@id='/mdui/privacyStatementUrl']", "xpath:attributes"], + ["xpath=//fieldset[2]/div/div/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "df623bef-a1fc-48ff-aa93-05e0da85ef51", + "comment": "", + "command": "type", + "target": "id=/mdui/privacyStatementUrl", + "targets": [ + ["id=field22", "id"], + ["name=field22", "name"], + ["css=#field22", "css:finder"], + ["xpath=//input[@id='field22']", "xpath:attributes"], + ["xpath=//fieldset[2]/div/div/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "http://test.org/privacy" + }, { + "id": "ed17408b-a763-4e5d-86cd-efe575df8d08", + "comment": "", + "command": "type", + "target": "id=/mdui/logoUrl", + "targets": [ + ["id=/mdui/logoUrl", "id"], + ["name=field23", "name"], + ["css=#\\/mdui\\/logoUrl", "css:finder"], + ["xpath=//input[@id='/mdui/logoUrl']", "xpath:attributes"], + ["xpath=//fieldset[2]/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "http://test.org/logo" + }, { + "id": "2946a968-7289-43e5-820d-b1aee442ce96", + "comment": "", + "command": "type", + "target": "id=/mdui/logoWidth", + "targets": [ + ["id=/mdui/logoWidth", "id"], + ["name=field24", "name"], + ["css=#\\/mdui\\/logoWidth", "css:finder"], + ["xpath=//input[@id='/mdui/logoWidth']", "xpath:attributes"], + ["xpath=//integer-component/div/input", "xpath:position"] + ], + "value": "200" + }, { + "id": "ceec5477-13d4-4ab4-944e-a2a34a9b4510", + "comment": "", + "command": "type", + "target": "id=/mdui/logoHeight", + "targets": [ + ["id=/mdui/logoHeight", "id"], + ["name=field25", "name"], + ["css=#\\/mdui\\/logoHeight", "css:finder"], + ["xpath=//input[@id='/mdui/logoHeight']", "xpath:attributes"], + ["xpath=//div[4]/sf-form-element/div/sf-widget-chooser/integer-component/div/input", "xpath:position"] + ], + "value": "300" + }, { + "id": "79c55e8f-286d-4c64-a1bc-1a19a7554f7a", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "88054c63-d468-4340-b4d3-c69fb6ed6f96", + "comment": "", + "command": "click", + "target": "id=/serviceProviderSsoDescriptor/protocolSupportEnum", + "targets": [ + ["css=option:nth-child(2)", "css:finder"], + ["xpath=//option[@value='1: SAML 2']", "xpath:attributes"], + ["xpath=//select[@id='field28']/option[2]", "xpath:idRelative"], + ["xpath=//option[2]", "xpath:position"], + ["xpath=//option[contains(.,'SAML 2')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c77b3648-fce1-46f9-aec9-ca88c90d4c92", + "comment": "", + "command": "select", + "target": "id=/serviceProviderSsoDescriptor/protocolSupportEnum", + "targets": [ + ["id=/serviceProviderSsoDescriptor/protocolSupportEnum", "id"], + ["name=field28", "name"], + ["css=#\\/serviceProviderSsoDescriptor\\/protocolSupportEnum", "css:finder"], + ["xpath=//select[@id='/serviceProviderSsoDescriptor/protocolSupportEnum']", "xpath:attributes"], + ["xpath=//select", "xpath:position"] + ], + "value": "label=SAML 2" + }, { + "id": "aec93dce-3142-4df3-b09d-735c70d1197b", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success", "css:finder"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "7f9c9fb7-602c-4f8e-b262-866c744130ce", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "a0102f51-f1d8-4c38-9170-482022ea7397", + "comment": "", + "command": "click", + "target": "css=#\\/serviceProviderSsoDescriptor\\/nameIdFormats\\/0-container .btn", + "targets": [ + ["css=#\\/serviceProviderSsoDescriptor\\/nameIdFormats\\/0-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/serviceProviderSsoDescriptor/nameIdFormats/0-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "209726b4-c0d8-4e9d-8886-88b9151f226c", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "9033e5ad-4255-4aa7-a878-c7beab69ee8e", + "comment": "", + "command": "click", + "target": "id=/serviceProviderSsoDescriptor/nameIdFormats/0__option--0", + "targets": [ + ["id=/serviceProviderSsoDescriptor/nameIdFormats/0__option--0", "id"], + ["css=#\\/serviceProviderSsoDescriptor\\/nameIdFormats\\/0__option--0", "css:finder"], + ["xpath=//li[@id='/serviceProviderSsoDescriptor/nameIdFormats/0__option--0']", "xpath:attributes"], + ["xpath=//ul[@id='/serviceProviderSsoDescriptor/nameIdFormats/0__listbox']/li", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li", "xpath:position"] + ], + "value": "" + }, { + "id": "c21b1d7a-9325-4d70-887d-387c7a042c08", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "466ac624-8139-47cf-8ef2-32d1c3d179a2", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "c1534880-c4e5-4fbd-b200-c28f9f556ab9", + "comment": "", + "command": "click", + "target": "css=#\\/serviceProviderSsoDescriptor\\/nameIdFormats\\/1-container .btn", + "targets": [ + ["css=#\\/serviceProviderSsoDescriptor\\/nameIdFormats\\/1-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[3]", "xpath:attributes"], + ["xpath=//div[@id='/serviceProviderSsoDescriptor/nameIdFormats/1-container']/div/div/button", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "a70176f9-e75e-47fc-b76a-42ae941fa64d", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "d07b2d83-3699-4f48-90e8-6fc883d3a02a", + "comment": "", + "command": "click", + "target": "id=/serviceProviderSsoDescriptor/nameIdFormats/1__option--1", + "targets": [ + ["id=/serviceProviderSsoDescriptor/nameIdFormats/1__option--1", "id"], + ["css=#\\/serviceProviderSsoDescriptor\\/nameIdFormats\\/1__option--1", "css:finder"], + ["xpath=//li[@id='/serviceProviderSsoDescriptor/nameIdFormats/1__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/serviceProviderSsoDescriptor/nameIdFormats/1__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "2c77ecbc-45cc-471c-9e39-f87ec06a9385", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success", "css:finder"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "a98f1890-298a-4167-a4d6-4ab173005068", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "97a98737-862d-4567-8b20-c5c991444ed0", + "comment": "", + "command": "click", + "target": "css=#\\/serviceProviderSsoDescriptor\\/nameIdFormats\\/2-container .btn", + "targets": [ + ["css=#\\/serviceProviderSsoDescriptor\\/nameIdFormats\\/2-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[4]", "xpath:attributes"], + ["xpath=//div[@id='/serviceProviderSsoDescriptor/nameIdFormats/2-container']/div/div/button", "xpath:idRelative"], + ["xpath=//li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "ff21b982-e428-45d7-af8e-410e67759446", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "686e004c-2b0f-4308-8622-b04bc05a50a9", + "comment": "", + "command": "click", + "target": "id=/serviceProviderSsoDescriptor/nameIdFormats/2__option--2", + "targets": [ + ["id=/serviceProviderSsoDescriptor/nameIdFormats/2__option--2", "id"], + ["css=#\\/serviceProviderSsoDescriptor\\/nameIdFormats\\/2__option--2", "css:finder"], + ["xpath=//li[@id='/serviceProviderSsoDescriptor/nameIdFormats/2__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/serviceProviderSsoDescriptor/nameIdFormats/2__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "104367d3-f250-4439-8721-32dcf9f25e0c", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success", "css:finder"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "ec3d16f9-c239-4e53-8626-11d8dc3dc43d", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "e2e8d5d4-8b6a-42d5-9fe7-abb8a84216e3", + "comment": "", + "command": "click", + "target": "css=#\\/serviceProviderSsoDescriptor\\/nameIdFormats\\/3-container .btn", + "targets": [ + ["css=#\\/serviceProviderSsoDescriptor\\/nameIdFormats\\/3-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[5]", "xpath:attributes"], + ["xpath=//div[@id='/serviceProviderSsoDescriptor/nameIdFormats/3-container']/div/div/button", "xpath:idRelative"], + ["xpath=//li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "6b1d77e3-b6e8-4217-9dc4-fe54b3f880ed", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "b6ac5230-772b-44bc-b9d1-6ae8a58e0368", + "comment": "", + "command": "click", + "target": "id=/serviceProviderSsoDescriptor/nameIdFormats/3__option--3", + "targets": [ + ["id=/serviceProviderSsoDescriptor/nameIdFormats/3__option--3", "id"], + ["css=#\\/serviceProviderSsoDescriptor\\/nameIdFormats\\/3__option--3", "css:finder"], + ["xpath=//li[@id='/serviceProviderSsoDescriptor/nameIdFormats/3__option--3']", "xpath:attributes"], + ["xpath=//ul[@id='/serviceProviderSsoDescriptor/nameIdFormats/3__listbox']/li[4]", "xpath:idRelative"], + ["xpath=//li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[4]", "xpath:position"] + ], + "value": "" + }, { + "id": "d135ef80-69d8-4cd1-b581-5e1973342082", + "comment": "", + "command": "click", + "target": "css=.btn-success > translate-i18n", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "23fd8856-32df-48ed-a198-a74e8ca71b10", + "comment": "", + "command": "type", + "target": "id=/serviceProviderSsoDescriptor/nameIdFormats/4", + "targets": [ + ["id=field34", "id"], + ["css=#field34", "css:finder"], + ["xpath=//input[@id='field34']", "xpath:attributes"], + ["xpath=//div[@id='field34-container']/div/input", "xpath:idRelative"], + ["xpath=//li[5]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/input", "xpath:position"] + ], + "value": "somethingElse" + }, { + "id": "4f61120b-7c6b-4f8e-8543-898298451a56", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "0de0345e-c9d2-4904-b797-a36965c5d82c", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success", "css:finder"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "62ade28b-19d4-4c54-b179-0d36312c578f", + "comment": "", + "command": "click", + "target": "id=/logoutEndpoints/0/url", + "targets": [ + ["id=/logoutEndpoints/0/url", "id"], + ["name=field38", "name"], + ["css=#\\/logoutEndpoints\\/0\\/url", "css:finder"], + ["xpath=//input[@id='/logoutEndpoints/0/url']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "" + }, { + "id": "517e5991-197d-42fd-86ff-4da5fd04949b", + "comment": "", + "command": "type", + "target": "id=/logoutEndpoints/0/url", + "targets": [ + ["id=field38", "id"], + ["name=field38", "name"], + ["css=#field38", "css:finder"], + ["xpath=//input[@id='field38']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "http://test.org/logout" + }, { + "id": "034f6a60-6b2d-42f1-adb4-515c8a750953", + "comment": "", + "command": "click", + "target": "id=/logoutEndpoints/0/bindingType", + "targets": [ + ["css=option:nth-child(2)", "css:finder"], + ["xpath=//option[@value='1: urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST']", "xpath:attributes"], + ["xpath=//select[@id='field39']/option[2]", "xpath:idRelative"], + ["xpath=//option[2]", "xpath:position"], + ["xpath=//option[contains(.,'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "6967d0bb-dbf7-4f57-9e55-6de71abd69c1", + "comment": "", + "command": "select", + "target": "id=/logoutEndpoints/0/bindingType", + "targets": [ + ["id=/logoutEndpoints/0/bindingType", "id"], + ["name=field39", "name"], + ["css=#\\/logoutEndpoints\\/0\\/bindingType", "css:finder"], + ["xpath=//select[@id='/logoutEndpoints/0/bindingType']", "xpath:attributes"], + ["xpath=//select", "xpath:position"] + ], + "value": "label=urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" + }, { + "id": "542f9b37-a63d-4acb-ba3e-2ac3706b6667", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "39dedb16-bcd2-496a-af85-7d20a129593b", + "comment": "", + "command": "click", + "target": "id=/logoutEndpoints/1/url", + "targets": [ + ["id=/logoutEndpoints/1/url", "id"], + ["name=field41", "name"], + ["css=#\\/logoutEndpoints\\/1\\/url", "css:finder"], + ["xpath=//input[@id='/logoutEndpoints/1/url']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "d25f708c-f72a-4fb7-88c1-a25a61d9f72a", + "comment": "", + "command": "type", + "target": "id=/logoutEndpoints/1/url", + "targets": [ + ["id=field41", "id"], + ["name=field41", "name"], + ["css=#field41", "css:finder"], + ["xpath=//input[@id='field41']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "http://test.org/logout2" + }, { + "id": "bee9600e-b6db-484a-9b87-d7c657911108", + "comment": "", + "command": "click", + "target": "id=/logoutEndpoints/1/bindingType", + "targets": [ + ["css=#field42 > option:nth-child(3)", "css:finder"], + ["xpath=(//option[@value='2: urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redir'])[2]", "xpath:attributes"], + ["xpath=//select[@id='field42']/option[3]", "xpath:idRelative"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div[2]/sf-form-element/div/sf-widget-chooser/select-component/div/select/option[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "e0e7ef9b-4ed1-4df2-b501-9cbb855baa7f", + "comment": "", + "command": "select", + "target": "id=/logoutEndpoints/1/bindingType", + "targets": [ + ["id=/logoutEndpoints/1/bindingType", "id"], + ["name=field42", "name"], + ["css=#\\/logoutEndpoints\\/1\\/bindingType", "css:finder"], + ["xpath=//select[@id='/logoutEndpoints/1/bindingType']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div[2]/sf-form-element/div/sf-widget-chooser/select-component/div/select", "xpath:position"] + ], + "value": "label=urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" + }, { + "id": "a47fdf43-1336-4fdb-a395-f14f0fe131de", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "6c794e94-9c64-4683-816a-380432f2ed79", + "comment": "", + "command": "click", + "target": "id=/securityInfo/x509CertificateAvailable.true", + "targets": [ + ["id=/securityInfo/x509CertificateAvailable.true", "id"], + ["css=#\\/securityInfo\\/x509CertificateAvailable\\.true", "css:finder"], + ["xpath=//input[@id='/securityInfo/x509CertificateAvailable.true']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "" + }, { + "id": "f0ade90e-2c31-4a77-b936-3b2a00388477", + "comment": "", + "command": "click", + "target": "id=/securityInfo/authenticationRequestsSigned.true", + "targets": [ + ["id=/securityInfo/authenticationRequestsSigned.true", "id"], + ["css=#\\/securityInfo\\/authenticationRequestsSigned\\.true", "css:finder"], + ["xpath=//input[@id='/securityInfo/authenticationRequestsSigned.true']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/boolean-radio/div/div/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "e26eda6f-1897-42e2-9ea9-671b1ff88874", + "comment": "", + "command": "click", + "target": "id=/securityInfo/wantAssertionsSigned.true", + "targets": [ + ["id=/securityInfo/wantAssertionsSigned.true", "id"], + ["css=#\\/securityInfo\\/wantAssertionsSigned\\.true", "css:finder"], + ["xpath=//input[@id='/securityInfo/wantAssertionsSigned.true']", "xpath:attributes"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/boolean-radio/div/div/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "3e11e54a-1b36-43ed-a8e5-d91f1fbed991", + "comment": "", + "command": "click", + "target": "id=/securityInfo/x509Certificates/0/name", + "targets": [ + ["id=/securityInfo/x509Certificates/0/name", "id"], + ["name=field50", "name"], + ["css=#\\/securityInfo\\/x509Certificates\\/0\\/name", "css:finder"], + ["xpath=//input[@id='/securityInfo/x509Certificates/0/name']", "xpath:attributes"], + ["xpath=//div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "5acb8e19-16a3-4139-a961-1b58c11c4681", + "comment": "", + "command": "type", + "target": "id=/securityInfo/x509Certificates/0/name", + "targets": [ + ["id=field50", "id"], + ["name=field50", "name"], + ["css=#field50", "css:finder"], + ["xpath=//input[@id='field50']", "xpath:attributes"], + ["xpath=//div/input", "xpath:position"] + ], + "value": "Cert 1 Name" + }, { + "id": "23ff8b87-ac6c-4f82-a779-aa91be11f49c", + "comment": "", + "command": "click", + "target": "id=/securityInfo/x509Certificates/0/type.0", + "targets": [ + ["id=/securityInfo/x509Certificates/0/type.0", "id"], + ["name=field55", "name"], + ["css=#\\/securityInfo\\/x509Certificates\\/0\\/type\\.0", "css:finder"], + ["xpath=//input[@id='/securityInfo/x509Certificates/0/type.0']", "xpath:attributes"], + ["xpath=//div/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "dd15088c-ddc9-42fd-8f8d-f73338be71b6", + "comment": "", + "command": "click", + "target": "id=/securityInfo/x509Certificates/0/value", + "targets": [ + ["id=/securityInfo/x509Certificates/0/value", "id"], + ["name=field52", "name"], + ["css=#\\/securityInfo\\/x509Certificates\\/0\\/value", "css:finder"], + ["xpath=//textarea[@id='/securityInfo/x509Certificates/0/value']", "xpath:attributes"], + ["xpath=//textarea", "xpath:position"] + ], + "value": "" + }, { + "id": "813bf709-6c73-41ac-837a-5be076fa43c7", + "comment": "", + "command": "type", + "target": "id=/securityInfo/x509Certificates/0/value", + "targets": [ + ["name=field52", "name"], + ["css=.text-widget", "css:finder"], + ["xpath=//textarea[@name='field52']", "xpath:attributes"], + ["xpath=//textarea", "xpath:position"] + ], + "value": "This is cert 1." + }, { + "id": "fcf4cc15-54f4-4add-a093-e7ba5f2dc556", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "cbe577f6-3d18-49d9-95ab-2e597e5308a6", + "comment": "", + "command": "click", + "target": "id=/securityInfo/x509Certificates/1/name", + "targets": [ + ["id=/securityInfo/x509Certificates/1/name", "id"], + ["name=field54", "name"], + ["css=#\\/securityInfo\\/x509Certificates\\/1\\/name", "css:finder"], + ["xpath=//input[@id='/securityInfo/x509Certificates/1/name']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "ae98e813-77f4-424e-9141-d48e6127d9b6", + "comment": "", + "command": "type", + "target": "id=/securityInfo/x509Certificates/1/name", + "targets": [ + ["id=field54", "id"], + ["name=field54", "name"], + ["css=#field54", "css:finder"], + ["xpath=//input[@id='field54']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "Cert 2 Name" + }, { + "id": "835ad053-0a10-4606-a148-c7ba36be316f", + "comment": "", + "command": "click", + "target": "id=/securityInfo/x509Certificates/1/type.1", + "targets": [ + ["id=/securityInfo/x509Certificates/1/type.1", "id"], + ["css=#\\/securityInfo\\/x509Certificates\\/1\\/type\\.1", "css:finder"], + ["xpath=//input[@id='/securityInfo/x509Certificates/1/type.1']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-radio-widget/div/div[2]/input", "xpath:position"] + ], + "value": "" + }, { + "id": "e272cafa-3aba-4aff-972e-b1d45e627b88", + "comment": "", + "command": "click", + "target": "id=/securityInfo/x509Certificates/1/value", + "targets": [ + ["id=/securityInfo/x509Certificates/1/value", "id"], + ["name=field56", "name"], + ["css=#\\/securityInfo\\/x509Certificates\\/1\\/value", "css:finder"], + ["xpath=//textarea[@id='/securityInfo/x509Certificates/1/value']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div[3]/sf-form-element/div/sf-widget-chooser/textarea-component/div/textarea", "xpath:position"] + ], + "value": "" + }, { + "id": "ae42d668-92ba-4cb8-9daf-a2a64ac18404", + "comment": "", + "command": "type", + "target": "id=/securityInfo/x509Certificates/1/value", + "targets": [ + ["name=field56", "name"], + ["css=.ng-untouched:nth-child(3)", "css:finder"], + ["xpath=//textarea[@name='field56']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div[3]/sf-form-element/div/sf-widget-chooser/textarea-component/div/textarea", "xpath:position"] + ], + "value": "This is cert 2." + }, { + "id": "4e64d71e-8e6f-4288-b277-3d3945f57c53", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "573c9f4c-c677-4175-96c5-3aaaf86e5ac1", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success", "css:finder"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "50c1a3a1-b51c-41f9-81ff-d3d2894861ad", + "comment": "", + "command": "click", + "target": "id=/assertionConsumerServices/0/locationUrl", + "targets": [ + ["id=/assertionConsumerServices/0/locationUrl", "id"], + ["name=field60", "name"], + ["css=#\\/assertionConsumerServices\\/0\\/locationUrl", "css:finder"], + ["xpath=//input[@id='/assertionConsumerServices/0/locationUrl']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "" + }, { + "id": "6ff4002a-1c57-4778-b402-f917efaa5194", + "comment": "", + "command": "type", + "target": "id=/assertionConsumerServices/0/locationUrl", + "targets": [ + ["id=field60", "id"], + ["name=field60", "name"], + ["css=#field60", "css:finder"], + ["xpath=//input[@id='field60']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "http://test.org/assert" + }, { + "id": "e81c5045-98c3-499c-bff5-2645efa4c55d", + "comment": "", + "command": "click", + "target": "id=/assertionConsumerServices/0/binding", + "targets": [ + ["css=option:nth-child(2)", "css:finder"], + ["xpath=//option[@value='1: urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST']", "xpath:attributes"], + ["xpath=//select[@id='field61']/option[2]", "xpath:idRelative"], + ["xpath=//option[2]", "xpath:position"], + ["xpath=//option[contains(.,'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "24c810c8-747a-4ae2-91e5-16685d589f21", + "comment": "", + "command": "select", + "target": "id=/assertionConsumerServices/0/binding", + "targets": [ + ["id=/assertionConsumerServices/0/binding", "id"], + ["name=field61", "name"], + ["css=#\\/assertionConsumerServices\\/0\\/binding", "css:finder"], + ["xpath=//select[@id='/assertionConsumerServices/0/binding']", "xpath:attributes"], + ["xpath=//select", "xpath:position"] + ], + "value": "label=urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" + }, { + "id": "c221b1f5-2961-4cbd-a545-1e34a09b8153", + "comment": "", + "command": "click", + "target": "css=.custom-control-label", + "targets": [ + ["css=.custom-control-label", "css:finder"], + ["xpath=//div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Mark as Default')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "cb058717-f20f-4a54-81e5-9a7dcf66ec0e", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "f9998203-830b-44d3-8392-45b737544177", + "comment": "", + "command": "click", + "target": "id=/assertionConsumerServices/1/locationUrl", + "targets": [ + ["id=/assertionConsumerServices/1/locationUrl", "id"], + ["name=field64", "name"], + ["css=#\\/assertionConsumerServices\\/1\\/locationUrl", "css:finder"], + ["xpath=//input[@id='/assertionConsumerServices/1/locationUrl']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "d5cbf5e8-7c5b-45f7-8645-dd9f9d39922e", + "comment": "", + "command": "type", + "target": "id=/assertionConsumerServices/1/locationUrl", + "targets": [ + ["id=field64", "id"], + ["name=field64", "name"], + ["css=#field64", "css:finder"], + ["xpath=//input[@id='field64']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "http://test.org/assert2" + }, { + "id": "74de4187-3d1e-4a4d-af8e-966f00649ab8", + "comment": "", + "command": "click", + "target": "id=/assertionConsumerServices/1/binding", + "targets": [ + ["css=#field65 > option:nth-child(3)", "css:finder"], + ["xpath=(//option[@value='2: urn:oasis:names:tc:SAML:1.0:profiles:browser-po'])[2]", "xpath:attributes"], + ["xpath=//select[@id='field65']/option[3]", "xpath:idRelative"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div[2]/sf-form-element/div/sf-widget-chooser/select-component/div/select/option[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "929c1047-f455-418b-b23e-a383d681f028", + "comment": "", + "command": "select", + "target": "id=/assertionConsumerServices/1/binding", + "targets": [ + ["id=/assertionConsumerServices/1/binding", "id"], + ["name=field65", "name"], + ["css=#\\/assertionConsumerServices\\/1\\/binding", "css:finder"], + ["xpath=//select[@id='/assertionConsumerServices/1/binding']", "xpath:attributes"], + ["xpath=//li[2]/div/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div[2]/sf-form-element/div/sf-widget-chooser/select-component/div/select", "xpath:position"] + ], + "value": "label=urn:oasis:names:tc:SAML:1.0:profiles:browser-post" + }, { + "id": "d113cc67-659a-48f0-a50c-98355a07b187", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "134bf1f3-1e86-49e7-91de-185e513b02be", + "comment": "", + "command": "click", + "target": "css=div:nth-child(1) > sf-form-element > .has-success .custom-control-label", + "targets": [ + ["css=div:nth-child(1) > sf-form-element > .has-success .custom-control-label", "css:finder"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Sign the Assertion?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "5cd1ae5f-678a-4be8-a03f-b290006e52fe", + "comment": "", + "command": "click", + "target": "css=div:nth-child(2) > sf-form-element .custom-control-label", + "targets": [ + ["css=div:nth-child(2) > sf-form-element .custom-control-label", "css:finder"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "5895d555-6ef5-4344-b177-00e905f9007c", + "comment": "", + "command": "click", + "target": "css=div:nth-child(3) > sf-form-element .custom-control-label", + "targets": [ + ["css=div:nth-child(3) > sf-form-element .custom-control-label", "css:finder"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Turn off Encryption of Response?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "8d834380-e312-494d-9b4b-c5b798cc9b15", + "comment": "", + "command": "click", + "target": "css=div:nth-child(4) .custom-control-label", + "targets": [ + ["css=div:nth-child(4) .custom-control-label", "css:finder"], + ["xpath=//div[4]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Use SHA1 Signing Algorithm?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "bcf532a9-ba5a-4ca1-a342-dde53bc4a592", + "comment": "", + "command": "click", + "target": "css=div:nth-child(5) .custom-control-label", + "targets": [ + ["css=div:nth-child(5) .custom-control-label", "css:finder"], + ["xpath=//div[5]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Ignore any SP-Requested Authentication Method?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "45f3df44-1c34-4649-aedb-14207e9ce999", + "comment": "", + "command": "click", + "target": "css=div:nth-child(6) .custom-control-label", + "targets": [ + ["css=div:nth-child(6) .custom-control-label", "css:finder"], + ["xpath=//div[6]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Omit Not Before Condition?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "7ccb7d88-b113-4ee9-8582-b3d781fa8846", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/responderId", + "targets": [ + ["id=/relyingPartyOverrides/responderId", "id"], + ["name=field121", "name"], + ["css=#\\/relyingPartyOverrides\\/responderId", "css:finder"], + ["xpath=//input[@id='/relyingPartyOverrides/responderId']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "afe1b839-3421-4816-bf69-c804add681ba", + "comment": "", + "command": "type", + "target": "id=/relyingPartyOverrides/responderId", + "targets": [ + ["id=field75", "id"], + ["name=field75", "name"], + ["css=#field75", "css:finder"], + ["xpath=//input[@id='field75']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "responder-id-123" + }, { + "id": "ba74d18d-0996-485f-8a9f-01a39428eb0c", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .btn", + "targets": [ + ["css=div:nth-child(8) .btn > translate-i18n", "css:finder"], + ["xpath=//div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "cbd5d310-00af-4f40-adb8-82d261f3f339", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "2a91666b-5453-4064-8923-c3384835b6fd", + "comment": "", + "command": "click", + "target": "css=.btn-outline-secondary", + "targets": [ + ["css=.btn-outline-secondary", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/0-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "77a8ca01-ba29-4240-8c85-df12c9729603", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "6e8718ef-e053-48d8-91e5-f5128e371f56", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/nameIdFormats/0__option--0", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/0__option--0", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/0__option--0", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/nameIdFormats/0__option--0']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/nameIdFormats/0__listbox']/li", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li", "xpath:position"] + ], + "value": "" + }, { + "id": "ec3afb37-30b4-4d07-93a6-dcf022605532", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(8) .d-flex > .btn", "css:finder"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "2297cceb-4407-498f-a3f2-db15bc3de26f", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "fd33610c-dbca-410d-b2a4-117a1b2b6a79", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/nameIdFormats\\/1-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/1-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[3]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/1-container']/div/div/button", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "2922852e-45b5-41b1-b7ae-10f6ef5980c6", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "3cd47415-5e57-4148-a40b-9571e6791f3f", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/nameIdFormats/1__option--1", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/1__option--1", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/1__option--1", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/nameIdFormats/1__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/nameIdFormats/1__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "8b340d1f-4944-4d10-a4cd-5e79be6804ef", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(8) .d-flex > .btn", "css:finder"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "ccc0e141-6b42-4fdb-ac4e-fe741826eec6", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "208b33cf-f983-4a82-9b1b-19cdf2a937fc", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/nameIdFormats\\/2-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/2-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[4]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/2-container']/div/div/button", "xpath:idRelative"], + ["xpath=//li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "76e5990c-7474-46db-9d8a-08b08fb058b7", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "b4beb2b3-8481-4431-9299-a39a4107f17f", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/nameIdFormats/2__option--2", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/2__option--2", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/2__option--2", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/nameIdFormats/2__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/nameIdFormats/2__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "d6e7a640-a578-415b-9c1b-b2313b62ad46", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(8) .d-flex > .btn", "css:finder"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "b1fb7e09-2778-4dd9-a52d-ac183d745486", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "788a5b63-a75f-4aeb-9a5d-17c41e8f718e", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/nameIdFormats\\/3-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/3-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[5]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/3-container']/div/div/button", "xpath:idRelative"], + ["xpath=//li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "c486b622-751b-49f0-bf51-d1919bea0cf4", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "c82d6951-13e2-4d32-9e19-eac52bfdc188", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/nameIdFormats/3__option--3", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/3__option--3", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/3__option--3", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/nameIdFormats/3__option--3']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/nameIdFormats/3__listbox']/li[4]", "xpath:idRelative"], + ["xpath=//li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[4]", "xpath:position"] + ], + "value": "" + }, { + "id": "4c15be93-75be-4673-b703-07a705300d0f", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .btn", + "targets": [ + ["css=div:nth-child(8) .btn > translate-i18n", "css:finder"], + ["xpath=//div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "1a1b509e-1768-4291-820d-26f4b73a9d71", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/nameIdFormats/4", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/4", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/4", "css:finder"], + ["xpath=//input[@id='/relyingPartyOverrides/nameIdFormats/4']", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/4-container']/div/input", "xpath:idRelative"], + ["xpath=//li[5]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "433d6e9d-9d03-4042-9ee0-6284570f8a3c", + "comment": "", + "command": "type", + "target": "id=/relyingPartyOverrides/nameIdFormats/4", + "targets": [ + ["id=field83", "id"], + ["css=#field83", "css:finder"], + ["xpath=//input[@id='field83']", "xpath:attributes"], + ["xpath=//div[@id='field83-container']/div/input", "xpath:idRelative"], + ["xpath=//li[5]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/input", "xpath:position"] + ], + "value": "somethingElse" + }, { + "id": "c8bb3bee-3d61-4324-a3aa-38b78232b969", + "comment": "", + "command": "click", + "target": "css=div:nth-child(9) .btn", + "targets": [], + "value": "" + }, { + "id": "0b950018-bd12-433a-b198-682d4ea55a90", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "cbf15c4c-35d9-4f80-ba3d-bfe960048cd1", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/authenticationMethods\\/0-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/0-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[7]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/authenticationMethods/0-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "ab11537e-9959-4800-90d8-38946c8b277b", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "6c62d514-0143-49d9-97b3-6b7cb443df9d", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/authenticationMethods/0__option--0", + "targets": [ + ["id=/relyingPartyOverrides/authenticationMethods/0__option--0", "id"], + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/0__option--0", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/authenticationMethods/0__option--0']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/authenticationMethods/0__listbox']/li", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li", "xpath:position"] + ], + "value": "" + }, { + "id": "ed769470-9c3f-4c23-bbed-85513dcea800", + "comment": "", + "command": "click", + "target": "css=div:nth-child(9) .btn", + "targets": [ + ["css=div:nth-child(9) .d-flex > .btn", "css:finder"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "411ea71f-99b7-4f99-a5ce-7037ff78b8af", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "2b063eb8-f2d6-4a59-85bb-b04c467d9874", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/authenticationMethods\\/1-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/1-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[8]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/authenticationMethods/1-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "3c59a5d7-9f48-4a5e-b6d1-0913c19adf2a", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "5a32d59b-1ac3-4cd0-a2d8-0e934f8182fd", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/authenticationMethods/1__option--1", + "targets": [ + ["id=/relyingPartyOverrides/authenticationMethods/1__option--1", "id"], + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/1__option--1", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/authenticationMethods/1__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/authenticationMethods/1__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "892ddc96-970b-4dde-9189-0dc9ed197dab", + "comment": "", + "command": "click", + "target": "css=div:nth-child(9) .btn", + "targets": [ + ["css=div:nth-child(9) .d-flex > .btn", "css:finder"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "64b99135-c3fb-416a-b584-0e1b4b411295", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "64e215d9-6e46-422f-882c-13b6fb102622", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/authenticationMethods\\/2-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/2-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[9]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/authenticationMethods/2-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "426b095e-3b0c-4cc3-ad1e-3956dc7bd256", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "6a7bce1a-34be-4d4c-b732-d2f198e8b8a1", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/authenticationMethods/2__option--2", + "targets": [ + ["id=/relyingPartyOverrides/authenticationMethods/2__option--2", "id"], + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/2__option--2", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/authenticationMethods/2__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/authenticationMethods/2__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "f0dd4b79-eab5-4d4b-af2e-07ca661f8288", + "comment": "", + "command": "click", + "target": "css=div:nth-child(9) .btn", + "targets": [ + ["css=div:nth-child(9) .btn > translate-i18n", "css:finder"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "dacd34b0-9e48-4838-b137-bf22dd027ed0", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/authenticationMethods/3", + "targets": [ + ["id=/relyingPartyOverrides/authenticationMethods/3", "id"], + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/3", "css:finder"], + ["xpath=//input[@id='/relyingPartyOverrides/authenticationMethods/3']", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/authenticationMethods/3-container']/div/input", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "cc9dd18b-ee87-4aa7-91f2-59f02834759b", + "comment": "", + "command": "type", + "target": "id=/relyingPartyOverrides/authenticationMethods/3", + "targets": [ + ["id=field87", "id"], + ["css=#field87", "css:finder"], + ["xpath=//input[@id='field87']", "xpath:attributes"], + ["xpath=//div[@id='field87-container']/div/input", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/input", "xpath:position"] + ], + "value": "otherThings" + }, { + "id": "7c85fe59-dc95-4328-a010-33d1a06a5ce5", + "comment": "", + "command": "click", + "target": "css=div:nth-child(10) .custom-control-label", + "targets": [ + ["css=div:nth-child(10) .custom-control-label", "css:finder"], + ["xpath=//div[10]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Force AuthN')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "204ea80c-4aac-497f-8956-6370967ba73e", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "553dd570-b1bb-43bb-a469-63ee08a09794", + "comment": "", + "command": "click", + "target": "css=.fa-check", + "targets": [ + ["css=.fa-check", "css:finder"], + ["xpath=//button[@id='/attributeRelease.checkall']/i", "xpath:idRelative"], + ["xpath=//td[2]/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "4adb7283-b1ad-4553-a934-afc54fa8b04f", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "14ca713a-313d-4cda-82ca-a0b814ce81dc", + "comment": "", + "command": "click", + "target": "css=.custom-control-label", + "targets": [ + ["css=.custom-control-label", "css:finder"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Enable this service?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "3baa7bd3-55c0-4d10-8aa3-c0daa63ec4d4", + "comment": "", + "command": "assertText", + "target": "css=.px-3 > summary-property:nth-child(2) > .mb-3 > .d-block:nth-child(2)", + "targets": [ + ["css=.px-3 > summary-property:nth-child(2) > .mb-3 > .d-block:nth-child(2)", "css:finder"], + ["xpath=//summary-property/div/span", "xpath:position"], + ["xpath=//span[contains(.,'test-1234')]", "xpath:innerText"] + ], + "value": "test-1234" + }, { + "id": "0d355ff0-0449-49a7-ae75-14d7c405b97c", + "comment": "", + "command": "assertText", + "target": "css=.px-3:nth-child(2) > summary-property:nth-child(2) tr:nth-child(2) > td:nth-child(1)", + "targets": [ + ["css=.px-3:nth-child(2) > summary-property:nth-child(2) tr:nth-child(2) > td:nth-child(1)", "css:finder"], + ["xpath=//div[2]/section[2]/summary-property/div/table/tbody/tr[2]/td", "xpath:position"], + ["xpath=//td[contains(.,'http://test.org/assert2')]", "xpath:innerText"] + ], + "value": "http://test.org/assert2" + }, { + "id": "e53030b6-f344-4361-981d-b8303a721c5d", + "comment": "", + "command": "assertText", + "target": "css=summary-property:nth-child(2) > .mb-3 > .list-unstyled > li:nth-child(5)", + "targets": [ + ["css=summary-property:nth-child(2) > .mb-3 > .list-unstyled > li:nth-child(5)", "css:finder"], + ["xpath=//li[5]", "xpath:position"], + ["xpath=//li[contains(.,'somethingElse')]", "xpath:innerText"] + ], + "value": "somethingElse" + }, { + "id": "18636780-2feb-458f-97be-cf4a625b22e1", + "comment": "", + "command": "assertText", + "target": "css=summary-property:nth-child(10) .d-block:nth-child(2)", + "targets": [ + ["css=summary-property:nth-child(10) .d-block:nth-child(2)", "css:finder"], + ["xpath=//summary-property[10]/div/span", "xpath:position"] + ], + "value": "true" + }, { + "id": "1406d7e4-907d-4359-8de8-a40206f0993e", + "comment": "", + "command": "click", + "target": "css=.save", + "targets": [ + ["css=.save", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "4e0fa4f5-817f-41fb-9885-60f37b699436", + "comment": "", + "command": "waitForElementVisible", + "target": "css=tr > .text-right", + "targets": [ + ["css=tr > .text-right", "css:finder"], + ["xpath=//td[5]", "xpath:position"], + ["xpath=//td[contains(.,'Enabled')]", "xpath:innerText"] + ], + "value": "10000" + }, { + "id": "ba9fb8e8-d332-45bd-accd-703284744136", + "comment": "", + "command": "assertText", + "target": "css=td:nth-child(1)", + "targets": [ + ["linkText=Test Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Test Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/resolver/ee3aedc4-b56a-46c4-b8db-09603dd5b473/configuration/options')]", "xpath:href"], + ["xpath=//td/a", "xpath:position"], + ["xpath=//a[contains(.,'Test Provider')]", "xpath:innerText"] + ], + "value": "Test Provider" + }, { + "id": "eff4c9fe-7daf-4082-a162-4a9dff323293", + "comment": "", + "command": "assertText", + "target": "css=td:nth-child(2)", + "targets": [ + ["css=td:nth-child(2)", "css:finder"], + ["xpath=//td[2]", "xpath:position"], + ["xpath=//td[contains(.,'test-1234')]", "xpath:innerText"] + ], + "value": "test-1234" + }, { + "id": "b2d9f789-fb94-459f-9947-5364cebc43d1", + "comment": "", + "command": "assertText", + "target": "css=td:nth-child(3)", + "targets": [ + ["css=td:nth-child(3)", "css:finder"], + ["xpath=//td[3]", "xpath:position"], + ["xpath=//td[contains(.,'root')]", "xpath:innerText"] + ], + "value": "admin" + }, { + "id": "87281e0a-322f-4d3a-9703-3e6966f26759", + "comment": "", + "command": "click", + "target": "id=search", + "targets": [ + ["id=search", "id"], + ["css=#search", "css:finder"], + ["xpath=//input[@id='search']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "" + }, { + "id": "fbcf1587-cb27-4deb-80c6-78b4d4aa2478", + "comment": "", + "command": "type", + "target": "id=search", + "targets": [ + ["id=search", "id"], + ["css=#search", "css:finder"], + ["xpath=//input[@id='search']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "test" + }, { + "id": "88007922-625c-4f00-a4c4-17fb77afb2da", + "comment": "", + "command": "sendKeys", + "target": "id=search", + "targets": [ + ["id=search", "id"], + ["css=#search", "css:finder"], + ["xpath=//input[@id='search']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "${KEY_ENTER}" + }, { + "id": "a69f4347-8e82-483d-8a8a-e78a894e7aaa", + "comment": "", + "command": "assertText", + "target": "css=td:nth-child(2)", + "targets": [ + ["css=td:nth-child(2)", "css:finder"], + ["xpath=//td[2]", "xpath:position"], + ["xpath=//td[contains(.,'test-1234')]", "xpath:innerText"] + ], + "value": "test-1234" + }, { + "id": "fcd2d18e-b804-42df-890f-092f3d2e06a4", + "comment": "", + "command": "type", + "target": "id=search", + "targets": [ + ["id=search", "id"], + ["css=#search", "css:finder"], + ["xpath=//input[@id='search']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "foo" + }, { + "id": "d71191f5-8afd-4d9d-b19b-9471bd4640b2", + "comment": "", + "command": "sendKeys", + "target": "id=search", + "targets": [ + ["id=search", "id"], + ["css=#search", "css:finder"], + ["xpath=//input[@id='search']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "${KEY_ENTER}" + }, { + "id": "6de4b65a-266e-4974-9729-cf70502bb8fd", + "comment": "", + "command": "assertElementNotPresent", + "target": "css=td:nth-child(2)", + "targets": [], + "value": "" + }, { + "id": "01da89d4-e043-4f99-9d98-dcb42b9b4777", + "comment": "", + "command": "click", + "target": "css=.btn-link", + "targets": [ + ["css=.btn-link", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Clear')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "188a56b6-5440-4ea7-ac25-481c6b2dddcf", + "comment": "", + "command": "click", + "target": "linkText=Test Provider", + "targets": [ + ["linkText=Test Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Test Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/resolver/4e54a9da-4481-4ef2-8296-5616257f4d02/configuration/options')]", "xpath:href"], + ["xpath=//td/a", "xpath:position"], + ["xpath=//a[contains(.,'Test Provider')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "8ab1e3bf-6de9-4660-b0e1-816fcb0e2261", + "comment": "", + "command": "waitForElementPresent", + "target": "css=.author", + "targets": [], + "value": "10000" + }, { + "id": "c9ea2708-7c12-43ce-b827-f0f34d2f2831", + "comment": "", + "command": "assertText", + "target": "css=.author", + "targets": [ + ["css=.author", "css:finder"], + ["xpath=//div[@id='header']/metadata-header/div/div/h5/span[2]", "xpath:idRelative"], + ["xpath=//span[2]", "xpath:position"], + ["xpath=//span[contains(.,'admin')]", "xpath:innerText"] + ], + "value": "admin" + }, { + "id": "16271513-203c-4528-870f-dcf73f4d81cb", + "comment": "", + "command": "assertText", + "target": "css=.d-block > primitive-property:nth-child(1) .d-block:nth-child(2)", + "targets": [ + ["css=.d-block > primitive-property:nth-child(1) .d-block:nth-child(2)", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section/div/div[2]/object-property/primitive-property/div/span[2]", "xpath:idRelative"], + ["xpath=//div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'test-1234')]", "xpath:innerText"] + ], + "value": "test-1234" + }, { + "id": "3f2c3eab-ecbf-45f3-bcdc-a5cad766b27c", + "comment": "", + "command": "assertText", + "target": "css=array-property:nth-child(5) .py-2:nth-child(2) > .d-flex:nth-child(3) > .text-truncate", + "targets": [ + ["css=array-property:nth-child(5) .py-2:nth-child(2) > .d-flex:nth-child(3) > .text-truncate", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section/div/div[2]/object-property/array-property/div/div[2]/div[3]/div[2]", "xpath:idRelative"], + ["xpath=//div[3]/div[2]", "xpath:position"] + ], + "value": "user@test.org" + }, { + "id": "467409c7-1007-4c45-80d2-0b4eea5199a0", + "comment": "", + "command": "assertText", + "target": "css=.mb-4:nth-child(2) primitive-property:nth-child(2) .d-block:nth-child(2)", + "targets": [ + ["css=.mb-4:nth-child(2) primitive-property:nth-child(2) .d-block:nth-child(2)", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section[2]/div/div[2]/object-property/object-property/primitive-property[2]/div/span[2]", "xpath:idRelative"], + ["xpath=//section[2]/div/div[2]/object-property/object-property/primitive-property[2]/div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'http://test.org/info')]", "xpath:innerText"] + ], + "value": "http://test.org/info" + }, { + "id": "eaaf9d59-1466-4736-924c-56c9b3f7522f", + "comment": "", + "command": "assertText", + "target": "css=array-property:nth-child(2) .text-truncate:nth-child(2)", + "targets": [ + ["css=array-property:nth-child(2) .text-truncate:nth-child(2)", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section[3]/div/div[2]/object-property/object-property/array-property/div/div/ul/li[2]", "xpath:idRelative"], + ["xpath=//div/div/ul/li[2]", "xpath:position"], + ["xpath=//li[contains(.,'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress')]", "xpath:innerText"] + ], + "value": "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" + }, { + "id": "2a23096f-d5cd-4727-af1b-130388117aa0", + "comment": "", + "command": "assertText", + "target": "css=.mb-4:nth-child(4) .py-2:nth-child(3) > .d-flex:nth-child(1) > .text-truncate", + "targets": [ + ["css=.mb-4:nth-child(4) .py-2:nth-child(3) > .d-flex:nth-child(1) > .text-truncate", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section[4]/div/div[2]/object-property/array-property/div/div[3]/div/div[2]", "xpath:idRelative"], + ["xpath=//section[4]/div/div[2]/object-property/array-property/div/div[3]/div/div[2]", "xpath:position"] + ], + "value": "http://test.org/logout2" + }, { + "id": "e1cba732-dd34-4c73-9d4c-89c440975dd8", + "comment": "", + "command": "runScript", + "target": "window.scrollTo(0,2060)", + "targets": [], + "value": "" + }, { + "id": "fe47ffd2-d2a0-4264-90fe-31b998f81ac2", + "comment": "", + "command": "assertText", + "target": "css=.mb-4:nth-child(5) primitive-property:nth-child(3) .d-block:nth-child(2)", + "targets": [ + ["css=.mb-4:nth-child(5) primitive-property:nth-child(3) .d-block:nth-child(2)", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section[5]/div/div[2]/object-property/object-property/primitive-property[3]/div/span[2]", "xpath:idRelative"], + ["xpath=//section[5]/div/div[2]/object-property/object-property/primitive-property[3]/div/span[2]", "xpath:position"] + ], + "value": "true" + }, { + "id": "7300785c-b83e-49b8-97a6-d66516f6c133", + "comment": "", + "command": "assertText", + "target": "css=.mb-4:nth-child(6) .py-2:nth-child(2) > .d-flex:nth-child(1) > .text-truncate", + "targets": [ + ["css=.mb-4:nth-child(6) .py-2:nth-child(2) > .d-flex:nth-child(1) > .text-truncate", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section[6]/div/div[2]/object-property/array-property/div/div[2]/div/div[2]", "xpath:idRelative"], + ["xpath=//section[6]/div/div[2]/object-property/array-property/div/div[2]/div/div[2]", "xpath:position"] + ], + "value": "http://test.org/assert" + }, { + "id": "951a21c9-4cd3-4989-8dc0-77760ca0dc95", + "comment": "", + "command": "assertText", + "target": "css=.mb-4:nth-child(7) primitive-property:nth-child(7) .d-block:nth-child(2)", + "targets": [ + ["css=.mb-4:nth-child(7) primitive-property:nth-child(7) .d-block:nth-child(2)", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section[7]/div/div[2]/object-property/object-property/primitive-property[7]/div/span[2]", "xpath:idRelative"], + ["xpath=//section[7]/div/div[2]/object-property/object-property/primitive-property[7]/div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'responder-id-123')]", "xpath:innerText"] + ], + "value": "responder-id-123" + }, { + "id": "e8b794fc-20e2-4317-8bdd-73eee8e94951", + "comment": "", + "command": "assertText", + "target": "css=.d-flex:nth-child(3) > .py-2 > span", + "targets": [ + ["css=.d-flex:nth-child(3) > .py-2 > span", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section[8]/div/div[2]/object-property/array-property/div/div/div[3]/div/span", "xpath:idRelative"], + ["xpath=//section[8]/div/div[2]/object-property/array-property/div/div/div[3]/div/span", "xpath:position"] + ], + "value": "True" + }, { + "id": "cf6660cb-2086-452f-a5e5-ad64db784d92", + "comment": "", + "command": "click", + "target": "css=.btn:nth-child(4) > translate-i18n", + "targets": [ + ["css=.btn:nth-child(4) > translate-i18n", "css:finder"], + ["xpath=//div[@id='header']/button/translate-i18n", "xpath:idRelative"], + ["xpath=//div/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Back to Top')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "6a183f25-1a9c-4774-a2cc-975a641ecef7", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1) > translate-i18n", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c0c0f9e1-af95-47b0-8aa8-ed141735d83b", + "comment": "", + "command": "click", + "target": "css=.breadcrumb-item > a", + "targets": [ + ["css=.breadcrumb-item > a", "css:finder"], + ["xpath=//a[contains(text(),'Dashboard')]", "xpath:link"], + ["xpath=(//a[contains(@href, '/dashboard')])[2]", "xpath:href"], + ["xpath=//ol/li/a", "xpath:position"] + ], + "value": "" + }, { + "id": "2536386b-315e-4b39-b9a7-badcfd0dfbb1", + "comment": "", + "command": "click", + "target": "linkText=Test Provider", + "targets": [ + ["linkText=Test Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Test Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/resolver/5916c370-370b-4fae-94c2-a9a9675ae95b/configuration/options')]", "xpath:href"], + ["xpath=//td/a", "xpath:position"], + ["xpath=//a[contains(.,'Test Provider')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "2c46cdcd-d5a5-47fe-aa7b-0120fd2fcfc9", + "comment": "", + "command": "click", + "target": "css=.mb-4:nth-child(1) .actions span", + "targets": [ + ["css=.mb-4:nth-child(1) .actions span", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section/div/div/div/button/span", "xpath:idRelative"], + ["xpath=//div/button/span", "xpath:position"], + ["xpath=//span[contains(.,'Edit')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "62348ea5-d2d9-426d-91ae-5e0f5871ad05", + "comment": "", + "command": "pause", + "target": "5000", + "targets": [], + "value": "" + }, { + "id": "99731068-2016-4a7f-8a38-febfb711d027", + "comment": "", + "command": "type", + "target": "id=/serviceProviderName", + "targets": [ + ["id=/serviceProviderName", "id"], + ["name=field93", "name"], + ["css=#\\/serviceProviderName", "css:finder"], + ["xpath=//input[@id='/serviceProviderName']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Service Provider v2" + }, { + "id": "c6484ff1-8bf2-4442-8f73-13c7af38634a", + "comment": "", + "command": "type", + "target": "id=/contacts/0/name", + "targets": [ + ["id=/contacts/0/name", "id"], + ["name=field102", "name"], + ["css=#\\/contacts\\/0\\/name", "css:finder"], + ["xpath=//input[@id='/contacts/0/name']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "Test User v2" + }, { + "id": "d424ae83-f36b-41b4-8e08-79c452577d89", + "comment": "", + "command": "click", + "target": "css=.btn-info", + "targets": [ + ["css=.btn-info", "css:finder"], + ["xpath=//div[2]/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c5985278-503e-4258-bba9-de7d2f157db0", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1)", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "fa45c230-dd8d-471d-9cf1-16c508d97ec4", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .custom-control-label", + "targets": [ + ["css=tr:nth-child(1) .custom-control-label", "css:finder"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Check to select')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "35063ee2-cc64-487d-8894-a3d638a27455", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(2) .custom-control-label", + "targets": [ + ["css=tr:nth-child(2) .custom-control-label", "css:finder"], + ["xpath=//tr[2]/td/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "69a5f7ac-6cf2-4eaf-98df-31e7dd034c44", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//history-list/button", "xpath:position"], + ["xpath=//button[contains(.,'Compare Selected(2)')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "978829e9-fa70-4548-9a55-0e2ffa0df9a4", + "comment": "", + "command": "pause", + "target": "5000", + "targets": [], + "value": "" + }, { + "id": "1c0b7514-92b7-4e07-b462-467113f4a8cd", + "comment": "", + "command": "assertText", + "target": "css=.d-block > primitive-property:nth-child(2) .d-block:nth-child(2)", + "targets": [ + ["css=.d-block > primitive-property:nth-child(2) .d-block:nth-child(2)", "css:finder"], + ["xpath=//primitive-property[2]/div/span[2]", "xpath:position"] + ], + "value": "Service Provider v2" + }, { + "id": "fc7c4e1e-03c7-4108-9a8d-f469e7679ae4", + "comment": "", + "command": "assertText", + "target": "css=.d-block > primitive-property:nth-child(2) .d-block:nth-child(3)", + "targets": [ + ["css=.d-block > primitive-property:nth-child(2) .d-block:nth-child(3)", "css:finder"], + ["xpath=//primitive-property[2]/div/span[3]", "xpath:position"], + ["xpath=//span[contains(.,'Test Provider')]", "xpath:innerText"] + ], + "value": "Test Provider" + }, { + "id": "138ad58b-f0a2-436b-a8b0-43484f4180e6", + "comment": "", + "command": "assertText", + "target": "css=.bg-diff > .py-2:nth-child(2) > .d-flex:nth-child(1) > .text-truncate:nth-child(3)", + "targets": [ + ["css=.bg-diff > .py-2:nth-child(2) > .d-flex:nth-child(1) > .text-truncate:nth-child(3)", "css:finder"], + ["xpath=//div[2]/div/div[2]", "xpath:position"] + ], + "value": "Test User v2" + }, { + "id": "17049c95-4724-4521-ac47-6b64bde822aa", + "comment": "", + "command": "assertText", + "target": "css=.py-2:nth-child(2) > .d-flex:nth-child(1) > .text-truncate:nth-child(4)", + "targets": [ + ["css=.py-2:nth-child(2) > .d-flex:nth-child(1) > .text-truncate:nth-child(4)", "css:finder"], + ["xpath=//div/div[3]", "xpath:position"] + ], + "value": "Test User" + }, { + "id": "17b17783-b35b-4724-805a-84c2f2727ae8", + "comment": "", + "command": "storeAttribute", + "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[1]/div/div[2]/object-property/primitive-property[2]/div/div@class", + "targets": [], + "value": "classes" + }, { + "id": "04c998e7-b872-406c-89e3-7d6fe43d8b7a", + "comment": "", + "command": "executeScript", + "target": "return ${classes}.includes('bg-diff')", + "targets": [], + "value": "isPresent" + }, { + "id": "13055b8e-31b9-4c84-ac03-1188b3a7ac95", + "comment": "", + "command": "assert", + "target": "isPresent", + "targets": [], + "value": "true" + }, { + "id": "7a1a8ab1-8586-45db-b16c-b8cf0dd02443", + "comment": "", + "command": "storeAttribute", + "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[1]/div/div[2]/object-property/object-property/primitive-property[1]/div/div@class", + "targets": [], + "value": "classes" + }, { + "id": "2a5d487f-08e5-45ea-8f12-b6dcaec0aead", + "comment": "", + "command": "executeScript", + "target": "return ${classes}.includes('bg-diff')", + "targets": [], + "value": "isPresent" + }, { + "id": "39c806ea-3cfc-4a7e-be7b-7af70cec8378", + "comment": "", + "command": "assert", + "target": "isPresent", + "targets": [], + "value": "false" + }, { + "id": "e9c047ad-fd1f-4ee8-bedb-3750f0c553e4", + "comment": "", + "command": "storeAttribute", + "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[1]/div/div[2]/object-property/array-property/div@class", + "targets": [], + "value": "classes" + }, { + "id": "46e07c88-a2a2-4aa3-8765-3ed026298099", + "comment": "", + "command": "executeScript", + "target": "return ${classes}.includes('bg-diff')", + "targets": [], + "value": "isPresent" + }, { + "id": "8bb04ae2-0655-4aa9-8506-251ea662373e", + "comment": "", + "command": "assert", + "target": "isPresent", + "targets": [], + "value": "true" + }, { + "id": "29fe2264-3c1c-4d39-9788-523064f29e07", + "comment": "", + "command": "click", + "target": "css=.fa-lg", + "targets": [ + ["css=.fa-lg", "css:finder"], + ["xpath=//div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "81ba2389-bcb4-4de8-bcd5-d7a17200aedc", + "comment": "", + "command": "storeAttribute", + "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[1]/div/div[2]/object-property/primitive-property/div/div@class", + "targets": [], + "value": "classes" + }, { + "id": "1adc48f9-224c-4690-a914-bac38c245576", + "comment": "", + "command": "executeScript", + "target": "return ${classes}.includes('bg-diff')", + "targets": [], + "value": "isPresent" + }, { + "id": "f16e7ef4-8a4b-4798-a02c-7031917a65f1", + "comment": "", + "command": "assert", + "target": "isPresent", + "targets": [], + "value": "true" + }, { + "id": "31ef48d0-3198-4ee1-8065-5bbf2b1349b8", + "comment": "", + "command": "storeAttribute", + "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[1]/div/div[2]/object-property/array-property/div@class", + "targets": [], + "value": "classes" + }, { + "id": "f61a8bae-7661-4c23-a12f-db9b09b42818", + "comment": "", + "command": "executeScript", + "target": "return ${classes}.includes('bg-diff')", + "targets": [], + "value": "isPresent" + }, { + "id": "8c36bf32-618e-4101-9b87-4a7032b710a8", + "comment": "", + "command": "assert", + "target": "isPresent", + "targets": [], + "value": "true" + }, { + "id": "1d80e2ba-e14d-460e-b575-0314025bcf42", + "comment": "", + "command": "assertText", + "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[2]/div/div[2]/div", + "targets": [], + "value": "No Changes" + }, { + "id": "4dc0b20f-380a-43a0-b79a-8ba7b7a24ecd", + "comment": "", + "command": "storeAttribute", + "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[2]/div/div[2]/div@class", + "targets": [], + "value": "classes" + }, { + "id": "a604f1d3-af29-4800-aded-5cd70c4cd81e", + "comment": "", + "command": "executeScript", + "target": "return ${classes}.includes('bg-diff')", + "targets": [], + "value": "isPresent" + }, { + "id": "6ba6e7e2-9037-4260-8131-5fb98774b602", + "comment": "", + "command": "assert", + "target": "isPresent", + "targets": [], + "value": "false" + }] + }], + "suites": [{ + "id": "d2caeac4-7520-4e3c-96b1-840610b6983c", + "name": "Default Suite", + "persistSession": false, + "parallel": false, + "timeout": 300, + "tests": ["841ade0e-83bd-4a4b-94f2-de6bd5c536b2"] + }], + "urls": ["http://localhost:10101/"], + "plugins": [] +} \ No newline at end of file diff --git a/backend/src/integration/resources/SHIBUI-1407-2.side b/backend/src/integration/resources/SHIBUI-1407-2.side new file mode 100644 index 000000000..ccab1411b --- /dev/null +++ b/backend/src/integration/resources/SHIBUI-1407-2.side @@ -0,0 +1,959 @@ +{ + "id": "6c70c319-3e73-4a13-8ee7-d9da5f802b83", + "version": "2.0", + "name": "SHIBUI-1407-2", + "url": "http://localhost:10101", + "tests": [{ + "id": "1e7a4ca4-b2e6-4e5a-8e38-823ae8a1e20d", + "name": "SHIBUI-1407-2", + "commands": [{ + "id": "29bb3186-81c8-4b3e-a9d9-5ff55d225878", + "comment": "", + "command": "open", + "target": "/login", + "targets": [], + "value": "" + }, { + "id": "302b949f-39b8-4060-813b-d827cf62dff4", + "comment": "", + "command": "type", + "target": "name=username", + "targets": [ + ["name=username", "name"], + ["css=tr:nth-child(1) input", "css:finder"], + ["xpath=//input[@name='username']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "admin" + }, { + "id": "a7910a51-e40e-4cdb-a72e-5f2cfd1b3656", + "comment": "", + "command": "type", + "target": "name=password", + "targets": [ + ["name=password", "name"], + ["css=tr:nth-child(2) input", "css:finder"], + ["xpath=//input[@name='password']", "xpath:attributes"], + ["xpath=//tr[2]/td[2]/input", "xpath:position"] + ], + "value": "adminpass" + }, { + "id": "6636b5f6-2b97-4be9-9fc7-44d6b48b8abf", + "comment": "", + "command": "sendKeys", + "target": "name=password", + "targets": [ + ["name=password", "name"], + ["css=tr:nth-child(2) input", "css:finder"], + ["xpath=//input[@name='password']", "xpath:attributes"], + ["xpath=//tr[2]/td[2]/input", "xpath:position"] + ], + "value": "${KEY_ENTER}" + }, { + "id": "e7a98419-36c7-4b0f-a99d-087144f6a417", + "comment": "", + "command": "click", + "target": "css=.fa-plus-circle", + "targets": [ + ["css=.fa-plus-circle", "css:finder"], + ["xpath=//button[@id='addNewDropdown']/i", "xpath:idRelative"], + ["xpath=//i", "xpath:position"] + ], + "value": "" + }, { + "id": "74fef022-3979-4bed-9226-b25114514976", + "comment": "", + "command": "click", + "target": "linkText=Metadata Provider", + "targets": [ + ["linkText=Metadata Provider", "linkText"], + ["css=.nav-link:nth-child(2)", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li/div/a[2]", "xpath:idRelative"], + ["xpath=(//a[contains(@href, '')])[3]", "xpath:href"], + ["xpath=//a[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "b49d6ed7-75ea-4be8-9a79-c7fd83287aa0", + "comment": "", + "command": "click", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field1", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "" + }, { + "id": "54dc29f7-bbe0-4c2b-a76e-e67a61f57a96", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field1", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Test Metadata Provider" + }, { + "id": "add874d5-e3b2-4412-8039-2b9d2619ed19", + "comment": "", + "command": "select", + "target": "id=/type", + "targets": [ + ["css=select-component > .widget", "css:finder"], + ["xpath=//select-component/div", "xpath:position"] + ], + "value": "label=FileBackedHttpMetadataProvider" + }, { + "id": "1cc352f4-0d71-4a3e-9399-1d9932816efc", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[2]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "d072327c-78b4-4bdb-8020-b825cd26592d", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/xmlId", + "targets": [], + "value": "10000" + }, { + "id": "86262eda-4a44-41b0-b7aa-fa46406e2601", + "comment": "", + "command": "type", + "target": "id=/xmlId", + "targets": [ + ["id=field7", "id"], + ["name=field7", "name"], + ["css=#field7", "css:finder"], + ["xpath=//input[@id='field7']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "123" + }, { + "id": "26cc765d-98c1-414c-97d8-4c7e5c6ab7e2", + "comment": "", + "command": "type", + "target": "id=/metadataURL", + "targets": [ + ["id=field8", "id"], + ["name=field8", "name"], + ["css=#field8", "css:finder"], + ["xpath=//input[@id='field8']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "https://idp.unicon.net/idp/shibboleth" + }, { + "id": "f0459917-b2a1-4e3c-8800-25273965129f", + "comment": "", + "command": "click", + "target": "id=/initializeFromBackupFile.false", + "targets": [ + ["id=/initializeFromBackupFile.false", "id"], + ["css=#\\/initializeFromBackupFile\\.false", "css:finder"], + ["xpath=//input[@id='/initializeFromBackupFile.false']", "xpath:attributes"], + ["xpath=//div[2]/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "5b37cf08-77b9-4091-94f9-c0d539c9010d", + "comment": "", + "command": "type", + "target": "id=/backingFile", + "targets": [ + ["id=/backingFile", "id"], + ["name=field10", "name"], + ["css=#\\/backingFile", "css:finder"], + ["xpath=//input[@id='/backingFile']", "xpath:attributes"], + ["xpath=//div[4]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "%{idp.home}/foo.txt" + }, { + "id": "e9924807-d5e2-4d54-94ba-d74d19f7d96a", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "203d0d3c-d866-422a-8b48-b50181db00e9", + "comment": "", + "command": "click", + "target": "css=.fa-caret-down", + "targets": [ + ["css=.fa-caret-down", "css:finder"], + ["xpath=//div[@id='/backupFileInitNextRefreshDelay-container']/div/div/button/i", "xpath:idRelative"], + ["xpath=//div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "8d3c5584-8a55-48cd-85d9-2022d9fde676", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "5fc6a348-0533-4d94-bb76-ebb891a0db8f", + "comment": "", + "command": "click", + "target": "id=/backupFileInitNextRefreshDelay__option--1", + "targets": [ + ["id=/backupFileInitNextRefreshDelay__option--1", "id"], + ["css=#\\/backupFileInitNextRefreshDelay__option--1", "css:finder"], + ["xpath=//li[@id='/backupFileInitNextRefreshDelay__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/backupFileInitNextRefreshDelay__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[2]", "xpath:position"], + ["xpath=//li[contains(.,'PT30S')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "bf041d41-5d58-4f69-8fcc-49ec79e5547d", + "comment": "", + "command": "click", + "target": "id=/requireValidMetadata.false", + "targets": [ + ["id=/requireValidMetadata.false", "id"], + ["css=#\\/requireValidMetadata\\.false", "css:finder"], + ["xpath=//input[@id='/requireValidMetadata.false']", "xpath:attributes"], + ["xpath=//div[6]/sf-form-element/div/sf-widget-chooser/boolean-radio/div/div[2]/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "fba85c75-e218-4deb-b5e1-888ff75b6a4e", + "comment": "", + "command": "click", + "target": "id=/failFastInitialization.false", + "targets": [ + ["id=/failFastInitialization.false", "id"], + ["css=#\\/failFastInitialization\\.false", "css:finder"], + ["xpath=//input[@id='/failFastInitialization.false']", "xpath:attributes"], + ["xpath=//div[7]/sf-form-element/div/sf-widget-chooser/boolean-radio/div/div[2]/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "375b8d6e-179b-4f14-8f00-d8a8cad29d7e", + "comment": "", + "command": "click", + "target": "id=/useDefaultPredicateRegistry.false", + "targets": [ + ["id=/useDefaultPredicateRegistry.false", "id"], + ["css=#\\/useDefaultPredicateRegistry\\.false", "css:finder"], + ["xpath=//input[@id='/useDefaultPredicateRegistry.false']", "xpath:attributes"], + ["xpath=//div[8]/sf-form-element/div/sf-widget-chooser/boolean-radio/div/div[2]/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "8b4bf341-62c0-491f-b775-d2faf55477bc", + "comment": "", + "command": "click", + "target": "id=/satisfyAnyPredicates.true", + "targets": [ + ["id=/satisfyAnyPredicates.true", "id"], + ["css=#\\/satisfyAnyPredicates\\.true", "css:finder"], + ["xpath=//input[@id='/satisfyAnyPredicates.true']", "xpath:attributes"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/boolean-radio/div/div/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "57ca153c-4121-4531-9ebe-3dfba20fa299", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "d2d7487c-e0d0-4777-bbcb-b78f14e1c70a", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "a188bc3e-fd98-4d49-ae35-a0b78a17607c", + "comment": "", + "command": "click", + "target": "css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay-container .btn", + "targets": [ + ["css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/reloadableMetadataResolverAttributes/minRefreshDelay-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c5ca7be2-6985-4e96-b0dc-6e00e3b42978", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "a159e056-c870-4e02-a7e9-4b3a60d83718", + "comment": "", + "command": "click", + "target": "id=/reloadableMetadataResolverAttributes/minRefreshDelay__option--1", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/minRefreshDelay__option--1", "id"], + ["css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay__option--1", "css:finder"], + ["xpath=//li[@id='/reloadableMetadataResolverAttributes/minRefreshDelay__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/reloadableMetadataResolverAttributes/minRefreshDelay__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[2]", "xpath:position"], + ["xpath=//li[contains(.,'PT30S')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "166847ab-46ab-4555-a61a-f3a06a4cef4e", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "7a72cf6a-c97a-49f6-83d0-cbe42f0fdb7d", + "comment": "", + "command": "click", + "target": "css=#\\/reloadableMetadataResolverAttributes\\/maxRefreshDelay-container .btn", + "targets": [ + ["css=#\\/reloadableMetadataResolverAttributes\\/maxRefreshDelay-container .fa", "css:finder"], + ["xpath=//div[@id='/reloadableMetadataResolverAttributes/maxRefreshDelay-container']/div/div/button/i", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "4c3da8ca-719a-4ce6-bb61-c1ee1e09358f", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "820397f5-aabb-46f5-a65a-56747ce29091", + "comment": "", + "command": "click", + "target": "id=/reloadableMetadataResolverAttributes/maxRefreshDelay__option--3", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/maxRefreshDelay__option--3", "id"], + ["css=#\\/reloadableMetadataResolverAttributes\\/maxRefreshDelay__option--3", "css:finder"], + ["xpath=//li[@id='/reloadableMetadataResolverAttributes/maxRefreshDelay__option--3']", "xpath:attributes"], + ["xpath=//ul[@id='/reloadableMetadataResolverAttributes/maxRefreshDelay__listbox']/li[4]", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[4]", "xpath:position"] + ], + "value": "" + }, { + "id": "b036a851-4ac9-43cb-8686-8e78ed940d72", + "comment": "", + "command": "type", + "target": "id=/reloadableMetadataResolverAttributes/refreshDelayFactor", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/refreshDelayFactor", "id"], + ["name=field20", "name"], + ["css=#\\/reloadableMetadataResolverAttributes\\/refreshDelayFactor", "css:finder"], + ["xpath=//input[@id='/reloadableMetadataResolverAttributes/refreshDelayFactor']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "0.5" + }, { + "id": "b48d48d8-2fec-4877-85ae-2f94f15e63eb", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "05de8997-f3d9-4503-b4fb-058b72cad03e", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "232da257-962f-4a4b-8213-038ef90c96c3", + "comment": "", + "command": "click", + "target": "css=.btn-outline-secondary", + "targets": [ + ["css=.btn-outline-secondary", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/metadataFilters/RequiredValidUntil/maxValidityInterval-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "293cf806-cec0-4b31-a7be-c77e938ac435", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "b8d999f1-0c59-4a9a-9991-91d222f52b8e", + "comment": "", + "command": "click", + "target": "id=/metadataFilters/RequiredValidUntil/maxValidityInterval__option--1", + "targets": [ + ["id=/metadataFilters/RequiredValidUntil/maxValidityInterval__option--1", "id"], + ["css=#\\/metadataFilters\\/RequiredValidUntil\\/maxValidityInterval__option--1", "css:finder"], + ["xpath=//li[@id='/metadataFilters/RequiredValidUntil/maxValidityInterval__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/metadataFilters/RequiredValidUntil/maxValidityInterval__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[2]", "xpath:position"], + ["xpath=//li[contains(.,'P14D')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "8af1abb5-2c7a-4a4c-a8f7-0eb287100dde", + "comment": "", + "command": "click", + "target": "id=/metadataFilters/SignatureValidation/requireSignedRoot", + "targets": [ + ["css=div:nth-child(1) > sf-form-element > .has-success .custom-control-label", "css:finder"], + ["xpath=//div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Require Signed Root')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "323a2a02-9111-4064-8bb0-a3da34330e54", + "comment": "", + "command": "type", + "target": "id=/metadataFilters/SignatureValidation/certificateFile", + "targets": [], + "value": "%{idp.home}/foo.txt" + }, { + "id": "a125e601-f306-441d-9c8c-e97b95817b46", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "74d696db-3f3b-4ff3-a180-34baceb469a2", + "comment": "", + "command": "select", + "target": "id=/metadataFilters/EntityRoleWhiteList/retainedRoles/0", + "targets": [], + "value": "label=SPSSODescriptor" + }, { + "id": "532bf2e5-13fc-48d7-b01b-ff16207a554d", + "comment": "", + "command": "click", + "target": "css=option:nth-child(2)", + "targets": [ + ["css=option:nth-child(2)", "css:finder"], + ["xpath=//option[@value='1: md:SPSSODescriptor']", "xpath:attributes"], + ["xpath=//select[@id='/metadataFilters/EntityRoleWhiteList/retainedRoles/0']/option[2]", "xpath:idRelative"], + ["xpath=//option[2]", "xpath:position"], + ["xpath=//option[contains(.,'SPSSODescriptor')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "12cf80c9-594c-4c4d-bf26-aa36ba636220", + "comment": "", + "command": "click", + "target": "css=.fa-plus", + "targets": [ + ["css=.fa-plus", "css:finder"], + ["xpath=//array-component/div/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "6cb9854b-293b-482d-8c07-4b7c638d79cb", + "comment": "", + "command": "click", + "target": "css=#\\/metadataFilters\\/EntityRoleWhiteList\\/retainedRoles\\/1 > option:nth-child(1)", + "targets": [ + ["css=#\\/metadataFilters\\/EntityRoleWhiteList\\/retainedRoles\\/1 > option:nth-child(1)", "css:finder"], + ["xpath=(//option[@value=''])[2]", "xpath:attributes"], + ["xpath=//select[@id='/metadataFilters/EntityRoleWhiteList/retainedRoles/1']/option", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/select-component/div/select/option", "xpath:position"] + ], + "value": "" + }, { + "id": "f366c86c-1420-4fb7-86c2-82c49d81208d", + "comment": "", + "command": "select", + "target": "id=/metadataFilters/EntityRoleWhiteList/retainedRoles/1", + "targets": [], + "value": "label=AttributeAuthorityDescriptor" + }, { + "id": "5dfac033-ecfd-42e8-aa6f-931d5acd4d89", + "comment": "", + "command": "click", + "target": "css=div:nth-child(2) > sf-form-element > .has-success > sf-widget-chooser > checkbox-component .custom-control-label", + "targets": [ + ["css=div:nth-child(2) > sf-form-element > .has-success > sf-widget-chooser > checkbox-component .custom-control-label", "css:finder"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Remove Roleless Entity Descriptors?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "9d5934f0-fe10-4539-9d71-80b454fc8612", + "comment": "", + "command": "click", + "target": "css=div:nth-child(3) > sf-form-element > .has-success > sf-widget-chooser > checkbox-component .custom-control-label", + "targets": [ + ["css=div:nth-child(3) > sf-form-element > .has-success > sf-widget-chooser > checkbox-component .custom-control-label", "css:finder"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Remove Empty Entities Descriptors?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "530234cd-ec70-48f2-9cc6-9e0d848c4b82", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "79b96f40-2677-438a-9564-62df0ea2c116", + "comment": "", + "command": "click", + "target": "css=.custom-control-label", + "targets": [], + "value": "" + }, { + "id": "52f5680c-c63d-411e-8332-52901f12ea3b", + "comment": "", + "command": "assertText", + "target": "css=.px-3:nth-child(1) > summary-property:nth-child(2) > .mb-3 > .d-block:nth-child(2)", + "targets": [ + ["css=.px-3:nth-child(1) > summary-property:nth-child(2) > .mb-3 > .d-block:nth-child(2)", "css:finder"], + ["xpath=//summary-property/div/span", "xpath:position"], + ["xpath=//span[contains(.,'Test Metadata Provider')]", "xpath:innerText"] + ], + "value": "Test Metadata Provider" + }, { + "id": "67ff44aa-1efd-4b13-a0e9-3648a09911dd", + "comment": "", + "command": "assertText", + "target": "css=.px-3:nth-child(2) > summary-property:nth-child(2) > .mb-3 > .d-block:nth-child(2)", + "targets": [ + ["css=.px-3:nth-child(2) > summary-property:nth-child(2) > .mb-3 > .d-block:nth-child(2)", "css:finder"], + ["xpath=//section[2]/summary-property/div/span", "xpath:position"], + ["xpath=//span[contains(.,'123')]", "xpath:innerText"] + ], + "value": "123" + }, { + "id": "f5197d46-41a7-4ef2-ac40-19f80c953929", + "comment": "", + "command": "click", + "target": "css=.save", + "targets": [ + ["css=.save", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "1067b0b4-8aff-4972-b6f5-e4479eca9150", + "comment": "", + "command": "waitForElementPresent", + "target": "css=.badge-success", + "targets": [ + ["css=.badge > span", "css:finder"], + ["xpath=//span/span", "xpath:position"] + ], + "value": "10000" + }, { + "id": "f48dd1b5-607a-485b-b1d5-03301f99b9ce", + "comment": "", + "command": "assertText", + "target": "linkText=Test Metadata Provider", + "targets": [ + ["linkText=Test Metadata Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Test Metadata Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/4cc9924f-fd9e-4ef3-bf57-3b24eec9f27f/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Test Metadata Provider')]", "xpath:innerText"] + ], + "value": "Test Metadata Provider" + }, { + "id": "5eccd4e9-a451-4ec8-a9e1-1e1f8e771677", + "comment": "", + "command": "assertText", + "target": "css=td:nth-child(3)", + "targets": [ + ["css=td:nth-child(3)", "css:finder"], + ["xpath=//td[3]", "xpath:position"], + ["xpath=//td[contains(.,'FileBackedHttpMetadataResolver')]", "xpath:innerText"] + ], + "value": "FileBackedHttpMetadataResolver" + }, { + "id": "c768c2c1-09d4-46fe-8007-42fb4b3f4aaa", + "comment": "", + "command": "assertText", + "target": "css=td:nth-child(4)", + "targets": [ + ["css=td:nth-child(4)", "css:finder"], + ["xpath=//td[4]", "xpath:position"], + ["xpath=//td[contains(.,'admin')]", "xpath:innerText"] + ], + "value": "admin" + }, { + "id": "8283ffc5-d46c-4a07-b95e-1534dfd34c02", + "comment": "", + "command": "click", + "target": "linkText=Test Metadata Provider", + "targets": [ + ["linkText=Test Metadata Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Test Metadata Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/ae086029-5871-4951-bcf0-8903d7a1a1f7/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Test Metadata Provider')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "67578648-0800-4716-8c0c-27741770249a", + "comment": "", + "command": "click", + "target": "css=.mb-4:nth-child(1) .actions span", + "targets": [ + ["css=.mb-4:nth-child(1) .actions span", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section/div/div/div/button/span", "xpath:idRelative"], + ["xpath=//div/button/span", "xpath:position"], + ["xpath=//span[contains(.,'Edit')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "5636ef67-71fb-4bca-ba58-7ecf926c7bf0", + "comment": "", + "command": "pause", + "target": "5000", + "targets": [], + "value": "" + }, { + "id": "7d641e58-47ce-4d20-908c-e0002ff73cfa", + "comment": "", + "command": "type", + "target": "id=/xmlId", + "targets": [ + ["id=/xmlId", "id"], + ["name=field38", "name"], + ["css=#\\/xmlId", "css:finder"], + ["xpath=//input[@id='/xmlId']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "123 version 2" + }, { + "id": "b78c81e9-41ac-41db-837a-0db6bd4f77eb", + "comment": "", + "command": "pause", + "target": "5000", + "targets": [], + "value": "" + }, { + "id": "247b04c1-e690-42bc-ae15-dfbedb44d2e9", + "comment": "", + "command": "click", + "target": "id=/satisfyAnyPredicates.false", + "targets": [ + ["id=/satisfyAnyPredicates.false", "id"], + ["css=#\\/satisfyAnyPredicates\\.false", "css:finder"], + ["xpath=//input[@id='/satisfyAnyPredicates.false']", "xpath:attributes"], + ["xpath=//div[10]/sf-form-element/div/sf-widget-chooser/boolean-radio/div/div[2]/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "5aacc6b8-b509-4405-8755-c60fa3619e67", + "comment": "", + "command": "click", + "target": "css=.btn-info", + "targets": [ + ["css=.btn-info", "css:finder"], + ["xpath=//div[2]/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "eb08417b-b8f0-46dc-9e32-e8daf3bc205d", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "cf005a45-74ae-4f7a-a53c-ed59d63f7114", + "comment": "", + "command": "click", + "target": "linkText=Test Metadata Provider", + "targets": [ + ["linkText=Test Metadata Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Test Metadata Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/ae086029-5871-4951-bcf0-8903d7a1a1f7/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Test Metadata Provider')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "ea880e6a-498a-427a-bc08-8058137d62e0", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1)", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c223e329-733c-41eb-9e85-c6f69a840179", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .custom-control-label", + "targets": [ + ["css=tr:nth-child(1) .custom-control-label", "css:finder"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Check to select')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "9b764399-76cc-44e7-8d72-5a3383387a5f", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(2) .custom-control-label", + "targets": [ + ["css=tr:nth-child(2) .custom-control-label", "css:finder"], + ["xpath=//tr[2]/td/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "32ef784f-ccf0-4fd7-afff-40f0ba877dad", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//history-list/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Compare Selected')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "ce328b6a-f6ee-45e9-975c-5a5608f373dc", + "comment": "", + "command": "waitForElementVisible", + "target": "css=.d-block > primitive-property:nth-child(2) .d-block:nth-child(2)", + "targets": [], + "value": "10000" + }, { + "id": "68103f0e-e3f1-419b-903d-5d8c30bc6700", + "comment": "", + "command": "assertText", + "target": "css=.d-block > primitive-property:nth-child(4) .d-block:nth-child(2)", + "targets": [ + ["css=.d-block > primitive-property:nth-child(4) .d-block:nth-child(2)", "css:finder"], + ["xpath=//primitive-property[4]/div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'123 version 2')]", "xpath:innerText"] + ], + "value": "123 version 2" + }, { + "id": "a13198b9-7827-47e2-ade3-143b981d34ee", + "comment": "", + "command": "assertText", + "target": "css=.d-block > primitive-property:nth-child(4) .d-block:nth-child(3)", + "targets": [ + ["css=.d-block > primitive-property:nth-child(4) .d-block:nth-child(3)", "css:finder"], + ["xpath=//primitive-property[4]/div/span[3]", "xpath:position"] + ], + "value": "123" + }, { + "id": "3d83741c-299e-4fcb-9ce6-4b7291c423a4", + "comment": "", + "command": "assertText", + "target": "css=.d-block > primitive-property:nth-child(12) .d-block:nth-child(2)", + "targets": [ + ["css=.d-block > primitive-property:nth-child(12) .d-block:nth-child(2)", "css:finder"], + ["xpath=//primitive-property[12]/div/span[2]", "xpath:position"] + ], + "value": "false" + }, { + "id": "190cc157-d427-4046-aff2-180392395ad3", + "comment": "", + "command": "assertText", + "target": "css=.d-block > primitive-property:nth-child(12) .d-block:nth-child(3)", + "targets": [ + ["css=.d-block > primitive-property:nth-child(12) .d-block:nth-child(3)", "css:finder"], + ["xpath=//primitive-property[12]/div/span[3]", "xpath:position"] + ], + "value": "true" + }, { + "id": "aa3e1818-24e5-420b-838e-0eb7d6b6d4e3", + "comment": "", + "command": "storeAttribute", + "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[1]/div/div[2]/object-property/primitive-property[4]/div/div@class", + "targets": [], + "value": "classes" + }, { + "id": "73040151-5482-4c64-8f58-bfe3195082aa", + "comment": "", + "command": "executeScript", + "target": "return ${classes}.includes('bg-diff')", + "targets": [], + "value": "isDiff" + }, { + "id": "5be09118-213d-40a6-8425-6748a055170a", + "comment": "", + "command": "assert", + "target": "isDiff", + "targets": [], + "value": "true" + }, { + "id": "48cf0e77-ab88-4c9c-8952-7bbe102a0be2", + "comment": "", + "command": "storeAttribute", + "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[1]/div/div[2]/object-property/primitive-property[7]/div/div@class", + "targets": [], + "value": "classes" + }, { + "id": "ab3585c9-5ff3-4cd5-82bb-53647dcb99b1", + "comment": "", + "command": "executeScript", + "target": "return ${classes}.includes('bg-diff')", + "targets": [], + "value": "isDiff" + }, { + "id": "ecda8070-e6d7-4efc-b079-31907ca96b2c", + "comment": "", + "command": "assert", + "target": "isDiff", + "targets": [], + "value": "false" + }, { + "id": "d7e53d38-a2c1-4ae7-a481-2726000eb556", + "comment": "", + "command": "storeAttribute", + "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[1]/div/div[2]/object-property/primitive-property[12]/div/div@class", + "targets": [], + "value": "classes" + }, { + "id": "6bf2a489-e766-443c-9e79-b6b6903c75fe", + "comment": "", + "command": "executeScript", + "target": "return ${classes}.includes('bg-diff')", + "targets": [], + "value": "isDiff" + }, { + "id": "2ae7548e-0956-4508-bb74-90c9b67d3e44", + "comment": "", + "command": "assert", + "target": "isDiff", + "targets": [], + "value": "true" + }, { + "id": "28eb98c2-85e2-4336-973e-7949e0e8f784", + "comment": "", + "command": "click", + "target": "css=.fa-lg", + "targets": [ + ["css=.fa-lg", "css:finder"], + ["xpath=//div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "a457a558-7771-420c-a3a8-5afac051efca", + "comment": "", + "command": "storeAttribute", + "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[1]/div/div[2]/object-property/primitive-property[1]/div/div@class", + "targets": [], + "value": "classes" + }, { + "id": "95b67f45-1ad2-44ef-b744-16ca8357b6cf", + "comment": "", + "command": "executeScript", + "target": "return ${classes}.includes('bg-diff')", + "targets": [], + "value": "isDiff" + }, { + "id": "9d7770df-b023-447f-9c7b-c274039a9fd9", + "comment": "", + "command": "assert", + "target": "isDiff", + "targets": [], + "value": "true" + }, { + "id": "8f43bfb4-fc38-4c74-ab8d-8065b9c9565a", + "comment": "", + "command": "storeAttribute", + "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[1]/div/div[2]/object-property/primitive-property[2]/div/div@class", + "targets": [], + "value": "classes" + }, { + "id": "833fd312-01ed-4f76-aea3-ad3957ae698b", + "comment": "", + "command": "executeScript", + "target": "return ${classes}.includes('bg-diff')", + "targets": [], + "value": "isDiff" + }, { + "id": "8ecf9087-e08f-4530-9974-760c84379664", + "comment": "", + "command": "assert", + "target": "isDiff", + "targets": [], + "value": "true" + }, { + "id": "f82d1c60-acc3-40b8-90eb-3c7435b2dd52", + "comment": "", + "command": "assertText", + "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[2]/div/div[2]", + "targets": [], + "value": "No Changes" + }, { + "id": "9cad9b4c-982d-474f-9a6a-cd3e559a50b9", + "comment": "", + "command": "storeAttribute", + "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[2]/div/div[2]@class", + "targets": [], + "value": "classes" + }, { + "id": "6eb4e560-76f6-490f-a3b4-a5333962f2c6", + "comment": "", + "command": "executeScript", + "target": "return ${classes}.includes('bg-diff')", + "targets": [], + "value": "isDiff" + }, { + "id": "a10d2948-5e23-41ba-8c3d-716ac959c108", + "comment": "", + "command": "assert", + "target": "isDiff", + "targets": [], + "value": "false" + }] + }], + "suites": [{ + "id": "894bbaf7-9978-4d30-b4e3-3c4263e084aa", + "name": "Default Suite", + "persistSession": false, + "parallel": false, + "timeout": 300, + "tests": ["1e7a4ca4-b2e6-4e5a-8e38-823ae8a1e20d"] + }], + "urls": ["http://localhost:10101/"], + "plugins": [] +} \ No newline at end of file From d49b9e77128b46f16acdbe77d4bcbb2126f9a750 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Wed, 18 Sep 2019 11:05:32 -0700 Subject: [PATCH 018/211] SHIBUI-1407 More selenium test fixes. --- .../src/integration/resources/SHIBUI-1334-1.side | 14 ++++---------- .../src/integration/resources/SHIBUI-1407-1.side | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/backend/src/integration/resources/SHIBUI-1334-1.side b/backend/src/integration/resources/SHIBUI-1334-1.side index 7ffb79675..664dcaad0 100644 --- a/backend/src/integration/resources/SHIBUI-1334-1.side +++ b/backend/src/integration/resources/SHIBUI-1334-1.side @@ -2155,16 +2155,10 @@ }, { "id": "762e5039-7e5b-4a90-9db5-887b4ee8b625", "comment": "", - "command": "waitForElementEditable", - "target": "id=/serviceProviderName", - "targets": [ - ["id=/serviceProviderName", "id"], - ["name=field93", "name"], - ["css=#\\/serviceProviderName", "css:finder"], - ["xpath=//input[@id='/serviceProviderName']", "xpath:attributes"], - ["xpath=//input", "xpath:position"] - ], - "value": "10000" + "command": "pause", + "target": "5000", + "targets": [], + "value": "" }, { "id": "99731068-2016-4a7f-8a38-febfb711d027", "comment": "", diff --git a/backend/src/integration/resources/SHIBUI-1407-1.side b/backend/src/integration/resources/SHIBUI-1407-1.side index e0880f4ca..374834ff5 100644 --- a/backend/src/integration/resources/SHIBUI-1407-1.side +++ b/backend/src/integration/resources/SHIBUI-1407-1.side @@ -2140,6 +2140,13 @@ ["xpath=//ol/li/a", "xpath:position"] ], "value": "" + }, { + "id": "1a194216-9305-4151-a8d8-42a586ae8e47", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" }, { "id": "2536386b-315e-4b39-b9a7-badcfd0dfbb1", "comment": "", @@ -2154,6 +2161,13 @@ ["xpath=//a[contains(.,'Test Provider')]", "xpath:innerText"] ], "value": "" + }, { + "id": "b5140c25-a360-42d2-b2c4-b90143b0d8b5", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" }, { "id": "2c46cdcd-d5a5-47fe-aa7b-0120fd2fcfc9", "comment": "", From 0799a9abfd852d5ce76ef75920e97ee35f6eebdc Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Thu, 19 Sep 2019 08:51:51 -0700 Subject: [PATCH 019/211] SHIBUI-1364 Implemented toggle to view filter changes --- .../container/metadata-comparison.component.html | 16 ++++++++++++++-- .../container/metadata-comparison.component.ts | 9 ++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html index b8795788f..effbefb0a 100644 --- a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html +++ b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html @@ -28,16 +28,28 @@

- Metadata Filters + Metadata Filter

- + + +
+ +
+ +
+

diff --git a/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts b/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts index ba10aa145..e8a905b0d 100644 --- a/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts +++ b/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts @@ -7,7 +7,7 @@ import { ConfigurationState, getComparisonConfigurationCount } from '../reducer' import { CompareVersionRequest, ClearVersions, ViewChanged } from '../action/compare.action'; import { MetadataConfiguration, FilterConfiguration } from '../model/metadata-configuration'; import * as fromReducer from '../reducer'; -import { CompareFilterVersions } from '../action/filter.action'; +import { CompareFilterVersions, ClearFilterComparison } from '../action/filter.action'; import { FilterComparison } from '../model/compare'; @Component({ @@ -47,16 +47,19 @@ export class MetadataComparisonComponent implements OnDestroy { withLatestFrom(this.limited$), map(([compare, limit]) => new ViewChanged(!limit)) ).subscribe(this.store); - - this.filterCompare$.subscribe(console.log); } compareFilters (comparison: FilterComparison) { this.store.dispatch(new CompareFilterVersions(comparison)); } + resetCompareFilters () { + this.store.dispatch(new ClearFilterComparison()); + } + ngOnDestroy(): void { this.sub.unsubscribe(); this.store.dispatch(new ClearVersions()); + this.resetCompareFilters(); } } From 9432f2c22b8ee31c9db77ee1a41bf6f33fe03a15 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Thu, 19 Sep 2019 10:05:46 -0700 Subject: [PATCH 020/211] SHIBUI-1364 Tests for filter version list --- .../filter-version-list.component.spec.ts | 85 +++++++++++++++++ .../metadata/configuration/model/version.ts | 2 +- .../reducer/filter.reducer.spec.ts | 93 +++++++++++++++++++ 3 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 ui/src/app/metadata/configuration/component/filter-version-list.component.spec.ts create mode 100644 ui/src/app/metadata/configuration/reducer/filter.reducer.spec.ts diff --git a/ui/src/app/metadata/configuration/component/filter-version-list.component.spec.ts b/ui/src/app/metadata/configuration/component/filter-version-list.component.spec.ts new file mode 100644 index 000000000..8cb39402d --- /dev/null +++ b/ui/src/app/metadata/configuration/component/filter-version-list.component.spec.ts @@ -0,0 +1,85 @@ +import { Component, ViewChild } from '@angular/core'; +import { TestBed, ComponentFixture } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; + +import { MockI18nModule } from '../../../../testing/i18n.stub'; +import { FilterVersionListComponent } from './filter-version-list.component'; +import { FilterComparison } from '../model/compare'; +import { FilterConfiguration } from '../model/metadata-configuration'; + +export const TestData = { + dates: ['abc', '123'], + filters: [ + { + resourceId: 'foo', + name: 'Test 1', + type: 'EntityAttributesFilter', + comparable: false + }, + { + resourceId: 'bar', + name: 'Test 2', + type: 'EntityAttributesFilter', + comparable: false + } + ] +}; + +@Component({ + template: ` + + + ` +}) +class TestHostComponent { + @ViewChild(FilterVersionListComponent) + public componentUnderTest: FilterVersionListComponent; + + filters: FilterConfiguration = TestData; + + compare(versions: FilterComparison): void { } +} + +describe('Filter Version List Component', () => { + let fixture: ComponentFixture; + let instance: TestHostComponent; + let list: FilterVersionListComponent; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [], + imports: [ + MockI18nModule, + RouterTestingModule + ], + declarations: [ + FilterVersionListComponent, + TestHostComponent + ], + }); + + fixture = TestBed.createComponent(TestHostComponent); + instance = fixture.componentInstance; + list = instance.componentUnderTest; + fixture.detectChanges(); + }); + + it('should compile', () => { + expect(list).toBeDefined(); + }); + + /* + describe('compareSelected', () => { + it('should emit an event with the selected filter data', () => { + list.selected = 'foo'; + fixture.detectChanges(); + spyOn(instance, 'compare'); + list.compareSelected(); + fixture.detectChanges(); + expect(instance.compare).toHaveBeenCalled(); + }); + }); + */ +}); diff --git a/ui/src/app/metadata/configuration/model/version.ts b/ui/src/app/metadata/configuration/model/version.ts index 5d1e1dac5..bba3c7ced 100644 --- a/ui/src/app/metadata/configuration/model/version.ts +++ b/ui/src/app/metadata/configuration/model/version.ts @@ -5,7 +5,7 @@ export interface MetadataVersion { } export interface FilterVersion { - id: string; + resourceId: string; name: string; type: string; comparable: boolean; diff --git a/ui/src/app/metadata/configuration/reducer/filter.reducer.spec.ts b/ui/src/app/metadata/configuration/reducer/filter.reducer.spec.ts new file mode 100644 index 000000000..228c705f1 --- /dev/null +++ b/ui/src/app/metadata/configuration/reducer/filter.reducer.spec.ts @@ -0,0 +1,93 @@ +import { reducer } from './filter.reducer'; +import * as fromFilterCompare from './filter.reducer'; +import { + SetFilterComparisonSchema, + ClearFilterComparison, + SetFilterComparisonDefinition, + CompareFilterVersions +} from '../action/filter.action'; +import { NameIDFilterConfiguration } from '../../filter/model/nameid-configuration.filter'; +import { Metadata } from '../../domain/domain.type'; + +describe('Filter Comparison Reducer', () => { + const initialState: fromFilterCompare.State = { ...fromFilterCompare.initialState }; + + describe('undefined action', () => { + it('should return the default state', () => { + const result = reducer(undefined, {} as any); + + expect(result).toEqual(initialState); + }); + }); + + describe('SET_SCHEMA action', () => { + it('should add the provided schema to the state', () => { + const schema = {type: 'object', properties: { foo: { type: 'string' } }}; + const action = new SetFilterComparisonSchema(schema); + const result = reducer(initialState, action); + expect(result.schema).toEqual(schema); + }); + }); + + describe('SET_DEFINITION action', () => { + it('should add the provided definition to the state', () => { + const definition = NameIDFilterConfiguration; + const action = new SetFilterComparisonDefinition(definition); + const result = reducer(initialState, action); + expect(result.definition).toEqual(definition); + }); + }); + + describe('COMPARE_FILTERS action', () => { + it('should add model information to the state', () => { + const request = { + modelId: 'foo', + modelType: 'EntityAttributesFilter', + models: [{}, {}] as Metadata[] + }; + const action = new CompareFilterVersions(request); + const result = reducer(initialState, action); + expect(result.modelId).toEqual(request.modelId); + expect(result.modelType).toEqual(request.modelType); + expect(result.models).toEqual(request.models); + }); + }); + + describe('CLEAR action', () => { + it('should reset to the initial state', () => { + const action = new ClearFilterComparison(); + const result = reducer(initialState, action); + expect(result).toEqual(initialState); + }); + }); + + describe('selector functions', () => { + describe('getModel', () => { + it('should retrieve the model from state', () => { + const models = [{}, {}] as Metadata[]; + expect(fromFilterCompare.getModelId({ ...initialState, modelId: 'foo' })).toBe('foo'); + expect(fromFilterCompare.getModelType({ ...initialState, modelType: 'foo' })).toBe('foo'); + expect(fromFilterCompare.getModels({ ...initialState, models })).toBe(models); + }); + }); + describe('getLoading', () => { + it('should retrieve the loading state', () => { + expect(fromFilterCompare.getLoading({ ...initialState, loading: true })).toBe(true); + }); + }); + + describe('getSchema', () => { + it('should retrieve the schema from state', () => { + const schema = {}; + expect(fromFilterCompare.getSchema({ ...initialState, schema })).toBe(schema); + }); + }); + + describe('getDefinition', () => { + it('should retrieve the definition from state', () => { + const definition = NameIDFilterConfiguration; + expect(fromFilterCompare.getDefinition({ ...initialState, definition })).toBe(NameIDFilterConfiguration); + }); + }); + }); +}); From 40e74e49772bc3ea9c0675127591d56a27f4bf41 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Fri, 20 Sep 2019 09:49:24 -0700 Subject: [PATCH 021/211] Added popover to long fields --- .../component/property/primitive-property.component.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ui/src/app/metadata/configuration/component/property/primitive-property.component.html b/ui/src/app/metadata/configuration/component/property/primitive-property.component.html index 5e582350d..58e114311 100644 --- a/ui/src/app/metadata/configuration/component/property/primitive-property.component.html +++ b/ui/src/app/metadata/configuration/component/property/primitive-property.component.html @@ -8,8 +8,12 @@ [translate]="property.name" [ngStyle]="{'width': width}">{{ property.name }} {{ v ? v : (v === false) ? v : '-' }}
\ No newline at end of file From 044180bcac5ca0d3d90f6f5ea13c532a5582b7fa Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Fri, 20 Sep 2019 11:50:56 -0700 Subject: [PATCH 022/211] SHIBUI-1407 Added some missing pauses around custom dropdowns. --- .../integration/resources/SHIBUI-1391.side | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/backend/src/integration/resources/SHIBUI-1391.side b/backend/src/integration/resources/SHIBUI-1391.side index 54e9abafe..6122eb93e 100644 --- a/backend/src/integration/resources/SHIBUI-1391.side +++ b/backend/src/integration/resources/SHIBUI-1391.side @@ -254,7 +254,7 @@ "id": "44e705a1-f284-4303-a0b6-c4bc9896c78d", "comment": "", "command": "pause", - "target": "1000", + "target": "500", "targets": [], "value": "" }, { @@ -270,6 +270,13 @@ ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] ], "value": "" + }, { + "id": "207eaafc-845d-456d-b4b8-9182312a109e", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" }, { "id": "9ee7065a-823e-4b4a-b212-0582eeaf7a00", "comment": "", @@ -284,6 +291,13 @@ ["xpath=//li[contains(.,'PT0S')]", "xpath:innerText"] ], "value": "" + }, { + "id": "eafdda4f-8a61-4976-b3a6-447d9cc1681a", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" }, { "id": "618cc5f1-417b-4bc6-9388-3238f2304904", "comment": "", @@ -296,6 +310,13 @@ ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] ], "value": "" + }, { + "id": "b7b4b979-81d9-4df9-84d7-1c7cab785bcf", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" }, { "id": "a89f1b4d-10bd-48f7-9b97-865710cfe01f", "comment": "", From 0445081c11fced367b4a97ae34a80811bd0c7f73 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Fri, 20 Sep 2019 15:05:17 -0400 Subject: [PATCH 023/211] SHIBUI-1499 --- ...lerVersionEndpointsIntegrationTests.groovy | 28 +++++++++++++++++++ .../filters/NameIdFormatFilterTarget.java | 2 ++ 2 files changed, 30 insertions(+) diff --git a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy index 2c02ee4b4..8e23362e7 100644 --- a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy +++ b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy @@ -3,6 +3,8 @@ package edu.internet2.tier.shibboleth.admin.ui.controller import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilterTarget import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityRoleWhiteListFilter +import edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilter +import edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilterTarget import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.DynamicHttpMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FileBackedHttpMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FilesystemMetadataResolver @@ -15,6 +17,8 @@ import org.springframework.boot.test.web.client.TestRestTemplate import org.springframework.test.context.ActiveProfiles import spock.lang.Specification +import static edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilterTarget.NameIdFormatFilterTargetType.ENTITY + /** * @author Dmitriy Kopylenko */ @@ -154,6 +158,30 @@ class MetadataResolverControllerVersionEndpointsIntegrationTests extends Specifi (mrv1.getBody() as MetadataResolver).modifiedDate < (mrv2.getBody() as MetadataResolver).modifiedDate } + def "SHIBUI-1499"() { + MetadataResolver mr = new FileBackedHttpMetadataResolver(name: 'shibui-1499') + mr = repository.save(mr) + + when: 'add a name id filter' + def filter = new NameIdFormatFilter(name: 'nameIDFilter').with { + it.nameIdFormatFilterTarget = new NameIdFormatFilterTarget().with { + it.nameIdFormatFilterTargetType = ENTITY + it.value = ['https://testme/sp'] + it + } + it + } + mr.addFilter(filter) + mr = repository.save(mr) + + def allVersions = getAllMetadataResolverVersions(mr.resourceId, List) + def mrv1 = getMetadataResolverForVersion(mr.resourceId, allVersions.body[0].id, MetadataResolver) + def mrv2 = getMetadataResolverForVersion(mr.resourceId, allVersions.body[1].id, MetadataResolver) + + then: + noExceptionThrown() + } + private getAllMetadataResolverVersions(String resourceId, responseType) { this.restTemplate.getForEntity(resourceUriFor(ALL_VERSIONS_URI, resourceId), responseType) } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/NameIdFormatFilterTarget.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/NameIdFormatFilterTarget.java index c8fd10c90..eef906500 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/NameIdFormatFilterTarget.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/NameIdFormatFilterTarget.java @@ -1,5 +1,6 @@ package edu.internet2.tier.shibboleth.admin.ui.domain.filters; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import edu.internet2.tier.shibboleth.admin.ui.domain.AbstractAuditable; import lombok.EqualsAndHashCode; import lombok.ToString; @@ -17,6 +18,7 @@ @ToString @Audited @AuditOverride(forClass = AbstractAuditable.class) +@JsonIgnoreProperties({"handler", "hibernateLazyInitializer"}) public class NameIdFormatFilterTarget extends AbstractAuditable { public enum NameIdFormatFilterTargetType { From 33eb651b7c445c0c903193e6f7cfb7597421cb73 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Fri, 20 Sep 2019 12:22:07 -0700 Subject: [PATCH 024/211] SHIBUI-1407 Added a fix for a weird dropdown issue when running 1391 in Firefox. --- .../integration/resources/SHIBUI-1391.side | 45 +++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/backend/src/integration/resources/SHIBUI-1391.side b/backend/src/integration/resources/SHIBUI-1391.side index 6122eb93e..37a0957aa 100644 --- a/backend/src/integration/resources/SHIBUI-1391.side +++ b/backend/src/integration/resources/SHIBUI-1391.side @@ -258,7 +258,7 @@ "targets": [], "value": "" }, { - "id": "824b4515-ae14-436e-a56f-d631ea9e1edc", + "id": "347b93b2-2fc6-43fb-b674-f3ef40d0adab", "comment": "", "command": "click", "target": "css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay-container .btn", @@ -271,14 +271,51 @@ ], "value": "" }, { - "id": "207eaafc-845d-456d-b4b8-9182312a109e", + "id": "f78882a2-fd36-444f-b502-045b5ffb26e1", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "07b46683-5914-4795-9f2a-b8f5316858d7", + "comment": "", + "command": "click", + "target": "css=.section-body", + "targets": [ + ["css=.section-body", "css:finder"], + ["xpath=//section/div[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "ab04d081-59ad-4dab-8af4-ff313def82c0", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "239b5688-ecdd-4530-ba5c-379ea7490f04", + "comment": "", + "command": "click", + "target": "css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay-container .btn", + "targets": [ + ["css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/reloadableMetadataResolverAttributes/minRefreshDelay-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "0997ef36-5d8d-45e7-b2a8-86b4c884e847", "comment": "", "command": "pause", "target": "500", "targets": [], "value": "" }, { - "id": "9ee7065a-823e-4b4a-b212-0582eeaf7a00", + "id": "d5bc189f-eb4f-4378-9507-c82d98d8ecb4", "comment": "", "command": "click", "target": "id=/reloadableMetadataResolverAttributes/minRefreshDelay__option--0", @@ -292,7 +329,7 @@ ], "value": "" }, { - "id": "eafdda4f-8a61-4976-b3a6-447d9cc1681a", + "id": "207eaafc-845d-456d-b4b8-9182312a109e", "comment": "", "command": "pause", "target": "500", From 7f8f64778499d7f567cd4506318aefc8d44ed189 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Mon, 23 Sep 2019 14:12:13 -0700 Subject: [PATCH 025/211] SHIBUI-1364 Implemented filter comparison --- .../main/resources/i18n/messages.properties | 1 + .../filter-version-list.component.html | 2 +- .../filter-version-list.component.spec.ts | 43 ++++++++----------- .../filter-version-list.component.ts | 4 +- .../primitive-property.component.spec.ts | 3 +- .../metadata/configuration/model/compare.ts | 3 +- .../model/metadata-configuration.ts | 2 +- .../reducer/filter.reducer.spec.ts | 6 +-- .../configuration/reducer/filter.reducer.ts | 5 ++- 9 files changed, 33 insertions(+), 36 deletions(-) diff --git a/backend/src/main/resources/i18n/messages.properties b/backend/src/main/resources/i18n/messages.properties index ff6eb36d2..87b0e707d 100644 --- a/backend/src/main/resources/i18n/messages.properties +++ b/backend/src/main/resources/i18n/messages.properties @@ -280,6 +280,7 @@ label.filter-enable=Enable this Filter? label.search-criteria=Search Criteria label.metadata-filter=Metadata Filter label.metadata-filter-type=Metadata Filter Type +label.filter-versions=Filter Versions label.http-connection-attributes=HTTP Connection Attributes label.http-security-attributes=HTTP Security Attributes diff --git a/ui/src/app/metadata/configuration/component/filter-version-list.component.html b/ui/src/app/metadata/configuration/component/filter-version-list.component.html index e9efacb1e..0ca03398d 100644 --- a/ui/src/app/metadata/configuration/component/filter-version-list.component.html +++ b/ui/src/app/metadata/configuration/component/filter-version-list.component.html @@ -1,4 +1,4 @@ - +
Order Option diff --git a/ui/src/app/metadata/configuration/component/filter-version-list.component.spec.ts b/ui/src/app/metadata/configuration/component/filter-version-list.component.spec.ts index 8cb39402d..c555ea9fc 100644 --- a/ui/src/app/metadata/configuration/component/filter-version-list.component.spec.ts +++ b/ui/src/app/metadata/configuration/component/filter-version-list.component.spec.ts @@ -7,37 +7,34 @@ import { FilterVersionListComponent } from './filter-version-list.component'; import { FilterComparison } from '../model/compare'; import { FilterConfiguration } from '../model/metadata-configuration'; -export const TestData = { - dates: ['abc', '123'], +export const TestData: FilterConfiguration = { + dates: ['2019-09-23T20:54:31.081Z', '2019-10-23T20:54:31.081Z'], filters: [ - { - resourceId: 'foo', - name: 'Test 1', - type: 'EntityAttributesFilter', - comparable: false - }, - { - resourceId: 'bar', - name: 'Test 2', - type: 'EntityAttributesFilter', - comparable: false - } + [ + { + resourceId: 'foo', + name: 'Test 1', + type: 'EntityAttributesFilter', + comparable: false + }, + { + resourceId: 'bar', + name: 'Test 2', + type: 'EntityAttributesFilter', + comparable: false + } + ] ] }; @Component({ - template: ` - - - ` + template: `` }) class TestHostComponent { @ViewChild(FilterVersionListComponent) public componentUnderTest: FilterVersionListComponent; - filters: FilterConfiguration = TestData; + filters = TestData; compare(versions: FilterComparison): void { } } @@ -70,16 +67,14 @@ describe('Filter Version List Component', () => { expect(list).toBeDefined(); }); - /* describe('compareSelected', () => { it('should emit an event with the selected filter data', () => { + spyOn(instance, 'compare'); list.selected = 'foo'; fixture.detectChanges(); - spyOn(instance, 'compare'); list.compareSelected(); fixture.detectChanges(); expect(instance.compare).toHaveBeenCalled(); }); }); - */ }); diff --git a/ui/src/app/metadata/configuration/component/filter-version-list.component.ts b/ui/src/app/metadata/configuration/component/filter-version-list.component.ts index 7f0d9e445..2d2865d00 100644 --- a/ui/src/app/metadata/configuration/component/filter-version-list.component.ts +++ b/ui/src/app/metadata/configuration/component/filter-version-list.component.ts @@ -1,7 +1,7 @@ import { Component, Input, Output, EventEmitter } from '@angular/core'; import { FilterConfiguration, MetadataConfiguration } from '../model/metadata-configuration'; import { CONFIG_DATE_FORMAT } from '../configuration.values'; -import { Observable, Subject } from 'rxjs'; +import { Observable } from 'rxjs'; import { FilterComparison } from '../model/compare'; @Component({ @@ -10,8 +10,6 @@ import { FilterComparison } from '../model/compare'; }) export class FilterVersionListComponent { - private selectFiltersSubject: Subject = new Subject(); - @Input() filters: FilterConfiguration; @Output() compare: EventEmitter = new EventEmitter(); diff --git a/ui/src/app/metadata/configuration/component/property/primitive-property.component.spec.ts b/ui/src/app/metadata/configuration/component/property/primitive-property.component.spec.ts index dbc3eed4f..bf893396e 100644 --- a/ui/src/app/metadata/configuration/component/property/primitive-property.component.spec.ts +++ b/ui/src/app/metadata/configuration/component/property/primitive-property.component.spec.ts @@ -2,7 +2,7 @@ import { Component, ViewChild, Input } from '@angular/core'; import { TestBed, async, ComponentFixture } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; -import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgbDropdownModule, NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap'; import { Property } from '../../../domain/model/property'; import { MockI18nModule } from '../../../../../testing/i18n.stub'; import { PrimitivePropertyComponent } from './primitive-property.component'; @@ -39,6 +39,7 @@ describe('Primitive Property Component', () => { TestBed.configureTestingModule({ imports: [ NgbDropdownModule, + NgbPopoverModule, MockI18nModule, RouterTestingModule ], diff --git a/ui/src/app/metadata/configuration/model/compare.ts b/ui/src/app/metadata/configuration/model/compare.ts index 3e423ec99..28038806a 100644 --- a/ui/src/app/metadata/configuration/model/compare.ts +++ b/ui/src/app/metadata/configuration/model/compare.ts @@ -1,7 +1,8 @@ import { Metadata } from '../../domain/domain.type'; +import { FilterVersion } from './version'; export interface FilterComparison { modelId: string; modelType: string; - models: Metadata[]; + models: FilterVersion[]; } diff --git a/ui/src/app/metadata/configuration/model/metadata-configuration.ts b/ui/src/app/metadata/configuration/model/metadata-configuration.ts index 10cf85eed..57316cdde 100644 --- a/ui/src/app/metadata/configuration/model/metadata-configuration.ts +++ b/ui/src/app/metadata/configuration/model/metadata-configuration.ts @@ -8,5 +8,5 @@ export interface MetadataConfiguration { export interface FilterConfiguration { dates: string[]; - filters: FilterVersion[]; + filters: FilterVersion[][]; } diff --git a/ui/src/app/metadata/configuration/reducer/filter.reducer.spec.ts b/ui/src/app/metadata/configuration/reducer/filter.reducer.spec.ts index 228c705f1..ed9685cac 100644 --- a/ui/src/app/metadata/configuration/reducer/filter.reducer.spec.ts +++ b/ui/src/app/metadata/configuration/reducer/filter.reducer.spec.ts @@ -7,7 +7,7 @@ import { CompareFilterVersions } from '../action/filter.action'; import { NameIDFilterConfiguration } from '../../filter/model/nameid-configuration.filter'; -import { Metadata } from '../../domain/domain.type'; +import { FilterVersion } from '../model/version'; describe('Filter Comparison Reducer', () => { const initialState: fromFilterCompare.State = { ...fromFilterCompare.initialState }; @@ -43,7 +43,7 @@ describe('Filter Comparison Reducer', () => { const request = { modelId: 'foo', modelType: 'EntityAttributesFilter', - models: [{}, {}] as Metadata[] + models: [{}, {}] as FilterVersion[] }; const action = new CompareFilterVersions(request); const result = reducer(initialState, action); @@ -64,7 +64,7 @@ describe('Filter Comparison Reducer', () => { describe('selector functions', () => { describe('getModel', () => { it('should retrieve the model from state', () => { - const models = [{}, {}] as Metadata[]; + const models = [{}, {}] as FilterVersion[]; expect(fromFilterCompare.getModelId({ ...initialState, modelId: 'foo' })).toBe('foo'); expect(fromFilterCompare.getModelType({ ...initialState, modelType: 'foo' })).toBe('foo'); expect(fromFilterCompare.getModels({ ...initialState, models })).toBe(models); diff --git a/ui/src/app/metadata/configuration/reducer/filter.reducer.ts b/ui/src/app/metadata/configuration/reducer/filter.reducer.ts index 4aa230bde..445038ab8 100644 --- a/ui/src/app/metadata/configuration/reducer/filter.reducer.ts +++ b/ui/src/app/metadata/configuration/reducer/filter.reducer.ts @@ -2,13 +2,14 @@ import { FilterCompareActionTypes, FilterCompareActionsUnion } from '../action/f import { Metadata } from '../../domain/domain.type'; import { FormDefinition } from '../../../wizard/model'; import { Schema } from '../model/schema'; +import { FilterVersion } from '../model/version'; export interface State { - models: Metadata[]; + models: FilterVersion[]; modelType: string; modelId: string; schema: Schema; - definition: FormDefinition; + definition: FormDefinition; loading: boolean; } From 1f3cf5394b0077539e62fccf8e9c98d9bfdddc15 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Tue, 24 Sep 2019 08:57:15 -0700 Subject: [PATCH 026/211] SHIBUI-1478 Updating schema --- ...dynamic-http-metadata-provider.schema.json | 35 +++++++--- .../file-system-metadata-provider.schema.json | 11 ++-- ...ocal-dynamic-metadata-provider.schema.json | 9 +-- .../model/dynamic-http.provider.form.ts | 8 +-- ui/src/app/schema-form/registry.ts | 2 + ui/src/app/schema-form/schema-form.module.ts | 2 + .../widget/number/float.component.html | 25 ++++++++ .../widget/number/float.component.ts | 21 ++++++ .../provider/filebacked-http.schema.json | 64 +++++++++++-------- 9 files changed, 128 insertions(+), 49 deletions(-) create mode 100644 ui/src/app/schema-form/widget/number/float.component.html create mode 100644 ui/src/app/schema-form/widget/number/float.component.ts diff --git a/backend/src/main/resources/dynamic-http-metadata-provider.schema.json b/backend/src/main/resources/dynamic-http-metadata-provider.schema.json index cc0696e87..a5898dbdb 100644 --- a/backend/src/main/resources/dynamic-http-metadata-provider.schema.json +++ b/backend/src/main/resources/dynamic-http-metadata-provider.schema.json @@ -149,12 +149,13 @@ "description": "tooltip.refresh-delay-factor", "type": "number", "widget": { - "id": "string", - "help": "message.real-number" + "id": "float", + "help": "message.real-number", + "step": 0.01 }, "placeholder": "label.real-number", - "default": "", - "pattern": "^(?:([0]*(\\.[0-9]+)?|[0]*\\.[0-9]*[1-9][0-9]*)|)$" + "minimum": 0.01, + "maximum": 1 }, "minCacheDuration": { "title": "label.min-cache-duration", @@ -579,14 +580,20 @@ "title": "", "description": "", "type": "array", - "properties": { - "RequiredValidUntil": { + "additionalItems": true, + "items": [ + { "title": "label.required-valid-until", "type": "object", "widget": { "id": "fieldset" }, "properties": { + "@type": { + "type": "string", + "default": "RequiredValidUntil", + "widget": "hidden" + }, "maxValidityInterval": { "title": "label.max-validity-interval", "description": "tooltip.max-validity-interval", @@ -611,13 +618,18 @@ } } }, - "SignatureValidation": { + { "title": "label.signature-validation-filter", "type": "object", "widget": { "id": "fieldset" }, "properties": { + "@type": { + "type": "string", + "default": "SignatureValidation", + "widget": "hidden" + }, "requireSignedRoot": { "title": "label.require-signed-root", "description": "tooltip.require-signed-root", @@ -654,13 +666,18 @@ } ] }, - "EntityRoleWhiteList": { + { "title": "label.entity-role-whitelist", "type": "object", "widget": { "id": "fieldset" }, "properties": { + "@type": { + "type": "string", + "default": "EntityRoleWhiteList", + "widget": "hidden" + }, "retainedRoles": { "title": "label.retained-roles", "description": "tooltip.retained-roles", @@ -700,7 +717,7 @@ } } } - } + ] } } } diff --git a/backend/src/main/resources/file-system-metadata-provider.schema.json b/backend/src/main/resources/file-system-metadata-provider.schema.json index af2f8af0a..834e602f2 100644 --- a/backend/src/main/resources/file-system-metadata-provider.schema.json +++ b/backend/src/main/resources/file-system-metadata-provider.schema.json @@ -128,14 +128,15 @@ "refreshDelayFactor": { "title": "label.refresh-delay-factor", "description": "tooltip.refresh-delay-factor", - "type": "string", + "type": "number", "widget": { - "id": "string", - "help": "message.real-number" + "id": "float", + "help": "message.real-number", + "step": 0.01 }, "placeholder": "label.real-number", - "default": "", - "pattern": "^(?:([0]*(\\.[0-9]+)?|[0]*\\.[0-9]*[1-9][0-9]*)|)$" + "minimum": 0.01, + "maximum": 1 } } } diff --git a/backend/src/main/resources/local-dynamic-metadata-provider.schema.json b/backend/src/main/resources/local-dynamic-metadata-provider.schema.json index 72d846023..d2b8a89da 100644 --- a/backend/src/main/resources/local-dynamic-metadata-provider.schema.json +++ b/backend/src/main/resources/local-dynamic-metadata-provider.schema.json @@ -63,12 +63,13 @@ "description": "tooltip.refresh-delay-factor", "type": "number", "widget": { - "id": "string", - "help": "message.real-number" + "id": "float", + "help": "message.real-number", + "step": 0.01 }, "placeholder": "label.real-number", - "default": "", - "pattern": "^(?:([0]*(\\.[0-9]+)?|[0]*\\.[0-9]*[1-9][0-9]*)|)$" + "minimum": 0.01, + "maximum": 1 }, "minCacheDuration": { "title": "label.min-cache-duration", diff --git a/ui/src/app/metadata/provider/model/dynamic-http.provider.form.ts b/ui/src/app/metadata/provider/model/dynamic-http.provider.form.ts index 9ef3bf2bb..80de5ab17 100644 --- a/ui/src/app/metadata/provider/model/dynamic-http.provider.form.ts +++ b/ui/src/app/metadata/provider/model/dynamic-http.provider.form.ts @@ -97,9 +97,7 @@ export const DynamicHttpMetadataProviderWizard: Wizard + + {{schema.description}} + +
diff --git a/ui/src/app/schema-form/widget/number/float.component.ts b/ui/src/app/schema-form/widget/number/float.component.ts new file mode 100644 index 000000000..3278829ba --- /dev/null +++ b/ui/src/app/schema-form/widget/number/float.component.ts @@ -0,0 +1,21 @@ +import { + Component, +} from '@angular/core'; +import { IntegerWidget } from 'ngx-schema-form'; +import { SchemaService } from '../../service/schema.service'; + +@Component({ + selector: 'float-component', + templateUrl: `./float.component.html` +}) +export class CustomFloatComponent extends IntegerWidget { + constructor( + private widgetService: SchemaService + ) { + super(); + } + + get required(): boolean { + return this.widgetService.isRequired(this.formProperty); + } +} diff --git a/ui/src/assets/schema/provider/filebacked-http.schema.json b/ui/src/assets/schema/provider/filebacked-http.schema.json index 0422ffbd2..b093095a9 100644 --- a/ui/src/assets/schema/provider/filebacked-http.schema.json +++ b/ui/src/assets/schema/provider/filebacked-http.schema.json @@ -498,31 +498,36 @@ "refreshDelayFactor": { "title": "label.refresh-delay-factor", "description": "tooltip.refresh-delay-factor", - "type": "string", + "type": "number", "widget": { - "id": "string", - "help": "message.real-number" + "id": "float", + "help": "message.real-number", + "step": 0.01 }, "placeholder": "label.real-number", - "minimum": 0, - "maximum": 1, - "default": "", - "pattern": "^(?:([0]*(\\.[0-9]+)?|[0]*\\.[0-9]*[1-9][0-9]*)|)$" + "minimum": 0.01, + "maximum": 1 } } }, "metadataFilters": { "title": "", "description": "", - "type": "object", - "properties": { - "RequiredValidUntil": { + "type": "array", + "additionalItems": true, + "items": [ + { "title": "label.required-valid-until", "type": "object", "widget": { "id": "fieldset" }, "properties": { + "@type": { + "type": "string", + "default": "RequiredValidUntil", + "widget": "hidden" + }, "maxValidityInterval": { "title": "label.max-validity-interval", "description": "tooltip.max-validity-interval", @@ -532,10 +537,14 @@ "id": "datalist", "data": [ "PT0S", - "P14D", - "P7D", - "P1D", - "PT12H" + "PT30S", + "PT1M", + "PT10M", + "PT30M", + "PT1H", + "PT4H", + "PT12H", + "PT24H" ] }, "default": null, @@ -543,13 +552,18 @@ } } }, - "SignatureValidation": { + { "title": "label.signature-validation-filter", "type": "object", "widget": { "id": "fieldset" }, "properties": { + "@type": { + "type": "string", + "default": "SignatureValidation", + "widget": "hidden" + }, "requireSignedRoot": { "title": "label.require-signed-root", "description": "tooltip.require-signed-root", @@ -559,8 +573,7 @@ "certificateFile": { "title": "label.certificate-file", "description": "tooltip.certificate-file", - "type": "string", - "widget": "textline" + "type": "string" } }, "anyOf": [ @@ -570,10 +583,6 @@ "enum": [ true ] - }, - "certificateFile": { - "minLength": 1, - "type": "string" } }, "required": [ @@ -591,13 +600,18 @@ } ] }, - "EntityRoleWhiteList": { + { "title": "label.entity-role-whitelist", "type": "object", "widget": { "id": "fieldset" }, "properties": { + "@type": { + "type": "string", + "default": "EntityRoleWhiteList", + "widget": "hidden" + }, "retainedRoles": { "title": "label.retained-roles", "description": "tooltip.retained-roles", @@ -610,13 +624,13 @@ "oneOf": [ { "enum": [ - "md:SPSSODescriptor" + "SPSSODescriptor" ], "description": "value.spdescriptor" }, { "enum": [ - "md:AttributeAuthorityDescriptor" + "AttributeAuthorityDescriptor" ], "description": "value.attr-auth-descriptor" } @@ -637,7 +651,7 @@ } } } - } + ] } } } \ No newline at end of file From 2649e8dfed851d6903ce8f5d8bd6cf601eddf8df Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Tue, 24 Sep 2019 09:32:33 -0700 Subject: [PATCH 027/211] SHIBUI-1502 Removed empty changes --- .../metadata-configuration.component.html | 7 +----- .../metadata-comparison.component.ts | 2 -- .../metadata/configuration/reducer/index.ts | 24 +++++++++++++------ 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/ui/src/app/metadata/configuration/component/metadata-configuration.component.html b/ui/src/app/metadata/configuration/component/metadata-configuration.component.html index e0685e743..daa0951a5 100644 --- a/ui/src/app/metadata/configuration/component/metadata-configuration.component.html +++ b/ui/src/app/metadata/configuration/component/metadata-configuration.component.html @@ -1,6 +1,6 @@
-
+

(preview)="onPreview($event)"> - -
- No Changes -
-

diff --git a/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts b/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts index 06f821633..e080558e1 100644 --- a/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts +++ b/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts @@ -39,8 +39,6 @@ export class MetadataComparisonComponent implements OnDestroy { this.numVersions$ = this.store.select(getComparisonConfigurationCount); this.type$ = this.store.select(fromReducer.getConfigurationModelType); - this.versions$.subscribe(console.log); - this.sub = this.limiter.pipe( withLatestFrom(this.limited$), map(([compare, limit]) => new ViewChanged(!limit)) diff --git a/ui/src/app/metadata/configuration/reducer/index.ts b/ui/src/app/metadata/configuration/reducer/index.ts index 38087a034..2b67b7a7a 100644 --- a/ui/src/app/metadata/configuration/reducer/index.ts +++ b/ui/src/app/metadata/configuration/reducer/index.ts @@ -145,6 +145,14 @@ export const getConfigurationModelNameFn = export const getConfigurationModelTypeFn = (config: Metadata) => config ? ('@type' in config) ? config['@type'] : 'resolver' : null; +export const filterPluginTypes = ['RequiredValidUntil', 'SignatureValidation', 'EntityRoleWhiteList']; +export const isAdditionalFilter = (type) => filterPluginTypes.indexOf(type) === -1; + +export const getVersionModelFiltersFn = + (model, kind) => kind === 'provider' ? + model.metadataFilters.filter(filter => isAdditionalFilter(filter['@type'])) : + null; + // Version History export const getHistoryState = createSelector(getState, getHistoryStateFn); @@ -178,8 +186,16 @@ export const getCompareState = createSelector(getState, getCompareStateFn); export const getComparisonLoading = createSelector(getCompareState, fromCompare.getComparisonLoading); export const getComparisonModels = createSelector(getCompareState, fromCompare.getVersionModels); export const getComparisonModelsLoaded = createSelector(getCompareState, fromCompare.getVersionModelsLoaded); + +export const getComparisonModelsFilteredFn = (models) => models.map((model) => ({ + ...model, + metadataFilters: getVersionModelFiltersFn(model, model.type) +})); + +export const getComparisonModelsFiltered = createSelector(getComparisonModels, getComparisonModelsFilteredFn); + export const getComparisonConfigurations = createSelector( - getComparisonModels, + getComparisonModelsFiltered, getConfigurationDefinition, getConfigurationSchema, getConfigurationSectionsFn @@ -228,13 +244,7 @@ export const getLimitedComparisonConfigurations = createSelector( export const getRestoreState = createSelector(getState, getRestoreStateFn); -export const filterPluginTypes = ['RequiredValidUntil', 'SignatureValidation', 'EntityRoleWhiteList']; -export const isAdditionalFilter = (type) => filterPluginTypes.indexOf(type) === -1; -export const getVersionModelFiltersFn = - (model, kind) => kind === 'provider' ? - model.metadataFilters.filter(filter => isAdditionalFilter(filter['@type'])) : - null; export const getVersionState = createSelector(getState, getVersionStateFn); From 4cabaf7667e15ddff1b4bc3aa2a81b394b328465 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Tue, 24 Sep 2019 09:53:02 -0700 Subject: [PATCH 028/211] SHIBUI-1502 added zero state --- .../metadata-configuration.component.html | 77 ++++++++++--------- .../metadata-configuration.component.ts | 11 ++- 2 files changed, 50 insertions(+), 38 deletions(-) diff --git a/ui/src/app/metadata/configuration/component/metadata-configuration.component.html b/ui/src/app/metadata/configuration/component/metadata-configuration.component.html index daa0951a5..4c57ca75a 100644 --- a/ui/src/app/metadata/configuration/component/metadata-configuration.component.html +++ b/ui/src/app/metadata/configuration/component/metadata-configuration.component.html @@ -1,39 +1,46 @@ -
-
-
-
-

- - 0{{ i + 1 }} - - {{ section.label | translate }} -

-
- -
-
-
- -
- Option - - Value - {{ date | date:DATE_FORMAT }} - +
+ +
+
+
+

+ + 0{{ i + 1 }} + + {{ section.label | translate }} +

+
+
- - - +
+
+ +
+ Option + + Value + {{ date | date:DATE_FORMAT }} + +
+ + +
+
+
+
+ + -
+
\ No newline at end of file diff --git a/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts b/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts index 1b04ba636..e2d75c4da 100644 --- a/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts +++ b/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts @@ -1,4 +1,4 @@ -import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter } from '@angular/core'; +import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter, OnChanges } from '@angular/core'; import { Router, ActivatedRoute } from '@angular/router'; import { MetadataConfiguration } from '../model/metadata-configuration'; import { Metadata } from '../../domain/domain.type'; @@ -6,11 +6,10 @@ import { CONFIG_DATE_FORMAT } from '../configuration.values'; @Component({ selector: 'metadata-configuration', - changeDetection: ChangeDetectionStrategy.OnPush, templateUrl: './metadata-configuration.component.html', styleUrls: ['./metadata-configuration.component.scss'] }) -export class MetadataConfigurationComponent { +export class MetadataConfigurationComponent implements OnChanges { @Input() configuration: MetadataConfiguration; @Input() definition: any; @Input() entity: Metadata; @@ -19,6 +18,8 @@ export class MetadataConfigurationComponent { @Output() preview: EventEmitter = new EventEmitter(); + zero = false; + DATE_FORMAT = CONFIG_DATE_FORMAT; constructor( @@ -26,6 +27,10 @@ export class MetadataConfigurationComponent { private activatedRoute: ActivatedRoute ) {} + ngOnChanges(): void { + this.zero = this.configuration.sections.some(s => !s.properties.length); + } + edit(id: string): void { this.router.navigate(['../', 'edit', id], { relativeTo: this.activatedRoute.parent }); } From 81bfaeccb2b18157a9d9245b51dc8d53446c2846 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Wed, 25 Sep 2019 10:52:02 -0700 Subject: [PATCH 029/211] SHIBUI-1478 Updated schemas for UI --- ...dynamic-http-metadata-provider.schema.json | 24 +- .../file-system-metadata-provider.schema.json | 4 +- ...ebacked-http-metadata-provider.schema.json | 653 ++++++++++++++++++ ...ocal-dynamic-metadata-provider.schema.json | 4 +- .../provider/filebacked-http.schema.json | 32 +- 5 files changed, 677 insertions(+), 40 deletions(-) create mode 100644 backend/src/main/resources/filebacked-http-metadata-provider.schema.json diff --git a/backend/src/main/resources/dynamic-http-metadata-provider.schema.json b/backend/src/main/resources/dynamic-http-metadata-provider.schema.json index a5898dbdb..28758fee6 100644 --- a/backend/src/main/resources/dynamic-http-metadata-provider.schema.json +++ b/backend/src/main/resources/dynamic-http-metadata-provider.schema.json @@ -4,7 +4,6 @@ "name", "@type", "xmlId", - "metadataURL", "metadataRequestURLConstructionScheme" ], "properties": { @@ -154,8 +153,8 @@ "step": 0.01 }, "placeholder": "label.real-number", - "minimum": 0.01, - "maximum": 1 + "minimum": 0.001, + "maximum": 0.999 }, "minCacheDuration": { "title": "label.min-cache-duration", @@ -577,23 +576,20 @@ } }, "metadataFilters": { + "$id": "metadataFilters", "title": "", "description": "", "type": "array", "additionalItems": true, "items": [ { + "$id": "RequiredValidUntil", "title": "label.required-valid-until", "type": "object", "widget": { "id": "fieldset" }, "properties": { - "@type": { - "type": "string", - "default": "RequiredValidUntil", - "widget": "hidden" - }, "maxValidityInterval": { "title": "label.max-validity-interval", "description": "tooltip.max-validity-interval", @@ -619,17 +615,13 @@ } }, { + "$id": "SignatureValidation", "title": "label.signature-validation-filter", "type": "object", "widget": { "id": "fieldset" }, "properties": { - "@type": { - "type": "string", - "default": "SignatureValidation", - "widget": "hidden" - }, "requireSignedRoot": { "title": "label.require-signed-root", "description": "tooltip.require-signed-root", @@ -667,17 +659,13 @@ ] }, { + "$id": "EntityRoleWhiteList", "title": "label.entity-role-whitelist", "type": "object", "widget": { "id": "fieldset" }, "properties": { - "@type": { - "type": "string", - "default": "EntityRoleWhiteList", - "widget": "hidden" - }, "retainedRoles": { "title": "label.retained-roles", "description": "tooltip.retained-roles", diff --git a/backend/src/main/resources/file-system-metadata-provider.schema.json b/backend/src/main/resources/file-system-metadata-provider.schema.json index 834e602f2..f6037c79b 100644 --- a/backend/src/main/resources/file-system-metadata-provider.schema.json +++ b/backend/src/main/resources/file-system-metadata-provider.schema.json @@ -135,8 +135,8 @@ "step": 0.01 }, "placeholder": "label.real-number", - "minimum": 0.01, - "maximum": 1 + "minimum": 0.001, + "maximum": 0.999 } } } diff --git a/backend/src/main/resources/filebacked-http-metadata-provider.schema.json b/backend/src/main/resources/filebacked-http-metadata-provider.schema.json new file mode 100644 index 000000000..505fe6ebd --- /dev/null +++ b/backend/src/main/resources/filebacked-http-metadata-provider.schema.json @@ -0,0 +1,653 @@ +{ + "type": "object", + "order": [ + "name", + "@type", + "enabled", + "xmlId", + "metadataURL", + "initializeFromBackupFile", + "backingFile", + "backupFileInitNextRefreshDelay", + "requireValidMetadata", + "failFastInitialization", + "useDefaultPredicateRegistry", + "satisfyAnyPredicates", + "httpMetadataResolverAttributes", + "reloadableMetadataResolverAttributes", + "metadataFilters" + ], + "required": [ + "name", + "@type", + "xmlId", + "metadataURL", + "backingFile", + "backupFileInitNextRefreshDelay" + ], + "properties": { + "name": { + "title": "label.metadata-provider-name-dashboard-display-only", + "description": "tooltip.metadata-provider-name-dashboard-display-only", + "type": "string", + "widget": { + "id": "string", + "help": "message.must-be-unique" + } + }, + "@type": { + "title": "label.metadata-provider-type", + "description": "tooltip.metadata-provider-type", + "placeholder": "label.select-metadata-type", + "type": "string", + "readOnly": true, + "widget": { + "id": "select", + "disabled": true + }, + "oneOf": [ + { + "enum": [ + "FileBackedHttpMetadataResolver" + ], + "description": "value.file-backed-http-metadata-provider" + } + ] + }, + "enabled": { + "title": "label.enable-service", + "description": "tooltip.enable-service", + "type": "boolean", + "default": false + }, + "xmlId": { + "title": "label.xml-id", + "description": "tooltip.xml-id", + "type": "string", + "default": "", + "minLength": 1 + }, + "metadataURL": { + "title": "label.metadata-url", + "description": "tooltip.metadata-url", + "type": "string", + "default": "", + "minLength": 1 + }, + "initializeFromBackupFile": { + "title": "label.init-from-backup", + "description": "tooltip.init-from-backup", + "type": "boolean", + "widget": { + "id": "boolean-radio" + }, + "oneOf": [ + { + "enum": [ + true + ], + "description": "value.true" + }, + { + "enum": [ + false + ], + "description": "value.false" + } + ], + "default": true + }, + "backingFile": { + "title": "label.backing-file", + "description": "tooltip.backing-file", + "type": "string", + "default": "" + }, + "backupFileInitNextRefreshDelay": { + "title": "label.backup-file-init-refresh-delay", + "description": "tooltip.backup-file-init-refresh-delay", + "type": "string", + "widget": { + "id": "datalist", + "data": [ + "PT0S", + "PT30S", + "PT1M", + "PT10M", + "PT30M", + "PT1H", + "PT4H", + "PT12H", + "PT24H" + ] + }, + "default": null, + "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" + }, + "requireValidMetadata": { + "title": "label.require-valid-metadata", + "description": "tooltip.require-valid-metadata", + "type": "boolean", + "widget": { + "id": "boolean-radio" + }, + "oneOf": [ + { + "enum": [ + true + ], + "description": "value.true" + }, + { + "enum": [ + false + ], + "description": "value.false" + } + ], + "default": true + }, + "failFastInitialization": { + "title": "label.fail-fast-init", + "description": "tooltip.fail-fast-init", + "type": "boolean", + "widget": { + "id": "boolean-radio" + }, + "oneOf": [ + { + "enum": [ + true + ], + "description": "value.true" + }, + { + "enum": [ + false + ], + "description": "value.false" + } + ], + "default": true + }, + "useDefaultPredicateRegistry": { + "title": "label.use-default-predicate-reg", + "description": "tooltip.use-default-predicate-reg", + "type": "boolean", + "widget": { + "id": "boolean-radio" + }, + "oneOf": [ + { + "enum": [ + true + ], + "description": "value.true" + }, + { + "enum": [ + false + ], + "description": "value.false" + } + ], + "default": true + }, + "satisfyAnyPredicates": { + "$id": "satisfyAnyPredicates", + "title": "label.satisfy-any-predicates", + "description": "tooltip.satisfy-any-predicates", + "type": "boolean", + "widget": { + "id": "boolean-radio" + }, + "oneOf": [ + { + "enum": [ + true + ], + "description": "value.true" + }, + { + "enum": [ + false + ], + "description": "value.false" + } + ], + "default": false + }, + "httpMetadataResolverAttributes": { + "$id": "httpMetadataResolverAttributes", + "order": [], + "type": "object", + "fieldsets": [ + { + "title": "label.http-connection-attributes", + "type": "section", + "fields": [ + "connectionRequestTimeout", + "connectionTimeout", + "socketTimeout" + ] + }, + { + "title": "label.http-security-attributes", + "type": "section", + "class": "col-12", + "fields": [ + "disregardTLSCertificate" + ] + }, + { + "title": "label.http-proxy-attributes", + "type": "section", + "class": "col-12", + "fields": [ + "proxyHost", + "proxyPort", + "proxyUser", + "proxyPassword" + ] + }, + { + "title": "label.http-caching-attributes", + "type": "section", + "class": "col-12", + "fields": [ + "httpCaching", + "httpCacheDirectory", + "httpMaxCacheEntries", + "httpMaxCacheEntrySize" + ] + }, + { + "title": "", + "type": "hidden", + "class": "col-12", + "fields": [ + "tlsTrustEngineRef", + "httpClientSecurityParametersRef", + "httpClientRef" + ] + } + ], + "properties": { + "httpClientRef": { + "type": "string", + "title": "", + "description": "", + "placeholder": "", + "widget": "hidden" + }, + "connectionRequestTimeout": { + "type": "string", + "title": "label.connection-request-timeout", + "description": "tooltip.connection-request-timeout", + "placeholder": "label.duration", + "widget": { + "id": "datalist", + "data": [ + "PT0S", + "PT30S", + "PT1M", + "PT10M", + "PT30M", + "PT1H", + "PT4H", + "PT12H", + "PT24H" + ] + }, + "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" + }, + "connectionTimeout": { + "type": "string", + "title": "label.connection-timeout", + "description": "tooltip.connection-timeout", + "placeholder": "label.duration", + "widget": { + "id": "datalist", + "data": [ + "PT0S", + "PT30S", + "PT1M", + "PT10M", + "PT30M", + "PT1H", + "PT4H", + "PT12H", + "PT24H" + ] + }, + "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" + }, + "socketTimeout": { + "type": "string", + "title": "label.socket-timeout", + "description": "tooltip.socket-timeout", + "placeholder": "label.duration", + "widget": { + "id": "datalist", + "data": [ + "PT0S", + "PT30S", + "PT1M", + "PT10M", + "PT30M", + "PT1H", + "PT4H", + "PT12H", + "PT24H" + ] + }, + "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" + }, + "disregardTLSCertificate": { + "type": "boolean", + "title": "label.disregard-tls-cert", + "description": "tooltip.disregard-tls-cert", + "widget": { + "id": "boolean-radio" + }, + "oneOf": [ + { + "enum": [ + true + ], + "description": "True" + }, + { + "enum": [ + false + ], + "description": "False" + } + ] + }, + "tlsTrustEngineRef": { + "type": "string", + "title": "", + "description": "", + "placeholder": "", + "widget": "hidden" + }, + "httpClientSecurityParametersRef": { + "type": "string", + "title": "", + "description": "", + "placeholder": "", + "widget": "hidden" + }, + "proxyHost": { + "type": "string", + "title": "label.proxy-host", + "description": "tooltip.proxy-host", + "placeholder": "" + }, + "proxyPort": { + "type": "string", + "title": "label.proxy-port", + "description": "tooltip.proxy-port", + "placeholder": "" + }, + "proxyUser": { + "type": "string", + "title": "label.proxy-user", + "description": "tooltip.proxy-user", + "placeholder": "" + }, + "proxyPassword": { + "type": "string", + "title": "label.proxy-password", + "description": "tooltip.proxy-password", + "placeholder": "" + }, + "httpCaching": { + "type": "string", + "title": "label.http-caching", + "description": "tooltip.http-caching", + "placeholder": "label.select-caching-type", + "widget": { + "id": "select" + }, + "oneOf": [ + { + "enum": [ + "none" + ], + "description": "value.none" + }, + { + "enum": [ + "file" + ], + "description": "value.file" + }, + { + "enum": [ + "memory" + ], + "description": "value.memory" + } + ] + }, + "httpCacheDirectory": { + "type": "string", + "title": "label.http-caching-directory", + "description": "tooltip.http-caching-directory", + "placeholder": "" + }, + "httpMaxCacheEntries": { + "type": "integer", + "title": "label.http-max-cache-entries", + "description": "tooltip.http-max-cache-entries", + "placeholder": "", + "minimum": 0 + }, + "httpMaxCacheEntrySize": { + "type": "integer", + "title": "label.max-cache-entry-size", + "description": "tooltip.max-cache-entry-size", + "placeholder": "", + "minimum": 0 + } + } + }, + "reloadableMetadataResolverAttributes": { + "$id": "reloadableMetadataResolverAttributes", + "type": "object", + "properties": { + "minRefreshDelay": { + "title": "label.min-refresh-delay", + "description": "tooltip.min-refresh-delay", + "type": "string", + "placeholder": "label.duration", + "widget": { + "id": "datalist", + "data": [ + "PT0S", + "PT30S", + "PT1M", + "PT10M", + "PT30M", + "PT1H", + "PT4H", + "PT12H", + "PT24H" + ] + }, + "default": null, + "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" + }, + "maxRefreshDelay": { + "title": "label.max-refresh-delay", + "description": "tooltip.max-refresh-delay", + "type": "string", + "placeholder": "label.duration", + "widget": { + "id": "datalist", + "data": [ + "PT0S", + "PT30S", + "PT1M", + "PT10M", + "PT30M", + "PT1H", + "PT4H", + "PT12H", + "PT24H" + ] + }, + "default": null, + "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" + }, + "refreshDelayFactor": { + "title": "label.refresh-delay-factor", + "description": "tooltip.refresh-delay-factor", + "type": "number", + "widget": { + "id": "float", + "help": "message.real-number", + "step": 0.01 + }, + "placeholder": "label.real-number", + "minimum": 0.001, + "maximum": 0.999 + } + } + }, + "metadataFilters": { + "$id": "metadataFilters", + "title": "", + "description": "", + "type": "array", + "additionalItems": true, + "items": [ + { + "$id": "RequiredValidUntil", + "title": "label.required-valid-until", + "type": "object", + "widget": { + "id": "fieldset" + }, + "properties": { + "maxValidityInterval": { + "title": "label.max-validity-interval", + "description": "tooltip.max-validity-interval", + "type": "string", + "placeholder": "label.duration", + "widget": { + "id": "datalist", + "data": [ + "PT0S", + "PT30S", + "PT1M", + "PT10M", + "PT30M", + "PT1H", + "PT4H", + "PT12H", + "PT24H" + ] + }, + "default": null, + "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$" + } + } + }, + { + "$id": "SignatureValidation", + "title": "label.signature-validation-filter", + "type": "object", + "widget": { + "id": "fieldset" + }, + "properties": { + "requireSignedRoot": { + "title": "label.require-signed-root", + "description": "tooltip.require-signed-root", + "type": "boolean", + "default": true + }, + "certificateFile": { + "title": "label.certificate-file", + "description": "tooltip.certificate-file", + "type": "string" + } + }, + "anyOf": [ + { + "properties": { + "requireSignedRoot": { + "enum": [ + true + ] + } + }, + "required": [ + "certificateFile" + ] + }, + { + "properties": { + "requireSignedRoot": { + "enum": [ + false + ] + } + } + } + ] + }, + { + "$id": "EntityRoleWhiteList", + "title": "label.entity-role-whitelist", + "type": "object", + "widget": { + "id": "fieldset" + }, + "properties": { + "retainedRoles": { + "title": "label.retained-roles", + "description": "tooltip.retained-roles", + "type": "array", + "items": { + "widget": { + "id": "select" + }, + "type": "string", + "oneOf": [ + { + "enum": [ + "SPSSODescriptor" + ], + "description": "value.spdescriptor" + }, + { + "enum": [ + "AttributeAuthorityDescriptor" + ], + "description": "value.attr-auth-descriptor" + } + ] + } + }, + "removeRolelessEntityDescriptors": { + "title": "label.remove-roleless-entity-descriptors", + "description": "tooltip.remove-roleless-entity-descriptors", + "type": "boolean", + "default": true + }, + "removeEmptyEntitiesDescriptors": { + "title": "label.remove-empty-entities-descriptors", + "description": "tooltip.remove-empty-entities-descriptors", + "type": "boolean", + "default": true + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/backend/src/main/resources/local-dynamic-metadata-provider.schema.json b/backend/src/main/resources/local-dynamic-metadata-provider.schema.json index d2b8a89da..c7cfeb360 100644 --- a/backend/src/main/resources/local-dynamic-metadata-provider.schema.json +++ b/backend/src/main/resources/local-dynamic-metadata-provider.schema.json @@ -68,8 +68,8 @@ "step": 0.01 }, "placeholder": "label.real-number", - "minimum": 0.01, - "maximum": 1 + "minimum": 0.001, + "maximum": 0.999 }, "minCacheDuration": { "title": "label.min-cache-duration", diff --git a/ui/src/assets/schema/provider/filebacked-http.schema.json b/ui/src/assets/schema/provider/filebacked-http.schema.json index b093095a9..505fe6ebd 100644 --- a/ui/src/assets/schema/provider/filebacked-http.schema.json +++ b/ui/src/assets/schema/provider/filebacked-http.schema.json @@ -3,6 +3,7 @@ "order": [ "name", "@type", + "enabled", "xmlId", "metadataURL", "initializeFromBackupFile", @@ -11,7 +12,10 @@ "requireValidMetadata", "failFastInitialization", "useDefaultPredicateRegistry", - "satisfyAnyPredicates" + "satisfyAnyPredicates", + "httpMetadataResolverAttributes", + "reloadableMetadataResolverAttributes", + "metadataFilters" ], "required": [ "name", @@ -190,6 +194,7 @@ "default": true }, "satisfyAnyPredicates": { + "$id": "satisfyAnyPredicates", "title": "label.satisfy-any-predicates", "description": "tooltip.satisfy-any-predicates", "type": "boolean", @@ -213,6 +218,7 @@ "default": false }, "httpMetadataResolverAttributes": { + "$id": "httpMetadataResolverAttributes", "order": [], "type": "object", "fieldsets": [ @@ -449,6 +455,7 @@ } }, "reloadableMetadataResolverAttributes": { + "$id": "reloadableMetadataResolverAttributes", "type": "object", "properties": { "minRefreshDelay": { @@ -505,29 +512,26 @@ "step": 0.01 }, "placeholder": "label.real-number", - "minimum": 0.01, - "maximum": 1 + "minimum": 0.001, + "maximum": 0.999 } } }, "metadataFilters": { + "$id": "metadataFilters", "title": "", "description": "", "type": "array", "additionalItems": true, "items": [ { + "$id": "RequiredValidUntil", "title": "label.required-valid-until", "type": "object", "widget": { "id": "fieldset" }, "properties": { - "@type": { - "type": "string", - "default": "RequiredValidUntil", - "widget": "hidden" - }, "maxValidityInterval": { "title": "label.max-validity-interval", "description": "tooltip.max-validity-interval", @@ -553,17 +557,13 @@ } }, { + "$id": "SignatureValidation", "title": "label.signature-validation-filter", "type": "object", "widget": { "id": "fieldset" }, "properties": { - "@type": { - "type": "string", - "default": "SignatureValidation", - "widget": "hidden" - }, "requireSignedRoot": { "title": "label.require-signed-root", "description": "tooltip.require-signed-root", @@ -601,17 +601,13 @@ ] }, { + "$id": "EntityRoleWhiteList", "title": "label.entity-role-whitelist", "type": "object", "widget": { "id": "fieldset" }, "properties": { - "@type": { - "type": "string", - "default": "EntityRoleWhiteList", - "widget": "hidden" - }, "retainedRoles": { "title": "label.retained-roles", "description": "tooltip.retained-roles", From 85f6d2dc3c8e921e2b333090230477ea440c5679 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Wed, 25 Sep 2019 10:53:36 -0700 Subject: [PATCH 030/211] SHIBUI-1478 Updated UI to support new schemas --- .../metadata/configuration/reducer/index.ts | 11 +++- .../model/dynamic-http.provider.form.ts | 12 +---- .../model/file-backed-http.provider.form.ts | 13 ++--- .../model/file-system.provider.form.ts | 10 ---- .../model/local-dynamic.provider.form.ts | 10 ---- .../app/metadata/provider/model/utilities.ts | 25 +++++++++ .../widget/number/float.component.html | 8 +-- .../widget/number/float.component.ts | 51 ++++++++++++++++++- ui/src/app/wizard/model/form-definition.ts | 1 + ui/src/app/wizard/reducer/index.ts | 6 ++- 10 files changed, 99 insertions(+), 48 deletions(-) create mode 100644 ui/src/app/metadata/provider/model/utilities.ts diff --git a/ui/src/app/metadata/configuration/reducer/index.ts b/ui/src/app/metadata/configuration/reducer/index.ts index 38087a034..2a46f79e5 100644 --- a/ui/src/app/metadata/configuration/reducer/index.ts +++ b/ui/src/app/metadata/configuration/reducer/index.ts @@ -51,9 +51,18 @@ export const getConfigurationModelKind = createSelector(getConfigurationState, f export const getConfigurationModelId = createSelector(getConfigurationState, fromConfiguration.getModelId); export const getConfigurationDefinition = createSelector(getConfigurationState, fromConfiguration.getDefinition); -export const getConfigurationSchema = createSelector(getConfigurationState, fromConfiguration.getSchema); +export const getSchema = createSelector(getConfigurationState, fromConfiguration.getSchema); export const getConfigurationXml = createSelector(getConfigurationState, fromConfiguration.getXml); +export const processSchemaFn = (definition, schema) => { + return definition && schema ? + definition.schemaPreprocessor ? + definition.schemaPreprocessor(schema) : schema + : schema; +}; + +export const getConfigurationSchema = createSelector(getConfigurationDefinition, getSchema, processSchemaFn); + export const assignValueToProperties = (models, properties, definition: any): any[] => { return properties.map(prop => { const differences = models.some((model, index, array) => { diff --git a/ui/src/app/metadata/provider/model/dynamic-http.provider.form.ts b/ui/src/app/metadata/provider/model/dynamic-http.provider.form.ts index 80de5ab17..2096ac38b 100644 --- a/ui/src/app/metadata/provider/model/dynamic-http.provider.form.ts +++ b/ui/src/app/metadata/provider/model/dynamic-http.provider.form.ts @@ -1,21 +1,13 @@ import { Wizard } from '../../../wizard/model'; import { DynamicHttpMetadataProvider } from '../../domain/model/providers/dynamic-http-metadata-provider'; import { BaseMetadataProviderEditor } from './base.provider.form'; +import { metadataFilterProcessor } from './utilities'; export const DynamicHttpMetadataProviderWizard: Wizard = { ...BaseMetadataProviderEditor, label: 'DynamicHttpMetadataProvider', type: 'DynamicHttpMetadataResolver', - formatter: (changes: DynamicHttpMetadataProvider) => { - let base = BaseMetadataProviderEditor.formatter(changes); - if (base.dynamicMetadataResolverAttributes) { - if (base.dynamicMetadataResolverAttributes.refreshDelayFactor) { - base.dynamicMetadataResolverAttributes.refreshDelayFactor = - base.dynamicMetadataResolverAttributes.refreshDelayFactor.toString(); - } - } - return base; - }, + schemaPreprocessor: metadataFilterProcessor, getValidators(namesList: string[] = [], xmlIdList: string[] = []): any { const validators = BaseMetadataProviderEditor.getValidators(namesList, xmlIdList); diff --git a/ui/src/app/metadata/provider/model/file-backed-http.provider.form.ts b/ui/src/app/metadata/provider/model/file-backed-http.provider.form.ts index d3e4d9995..15064bd64 100644 --- a/ui/src/app/metadata/provider/model/file-backed-http.provider.form.ts +++ b/ui/src/app/metadata/provider/model/file-backed-http.provider.form.ts @@ -3,20 +3,13 @@ import { FileBackedHttpMetadataProvider } from '../../domain/model/providers/fil import { BaseMetadataProviderEditor } from './base.provider.form'; import { UriValidator } from '../../../shared/validation/uri.validator'; +import { metadataFilterProcessor } from './utilities'; + export const FileBackedHttpMetadataProviderWizard: Wizard = { ...BaseMetadataProviderEditor, label: 'FileBackedHttpMetadataProvider', type: 'FileBackedHttpMetadataResolver', - formatter: (changes: FileBackedHttpMetadataProvider) => { - let base = BaseMetadataProviderEditor.formatter(changes); - if (base.reloadableMetadataResolverAttributes) { - if (base.reloadableMetadataResolverAttributes.refreshDelayFactor) { - base.reloadableMetadataResolverAttributes.refreshDelayFactor = - base.reloadableMetadataResolverAttributes.refreshDelayFactor.toString(); - } - } - return base; - }, + schemaPreprocessor: metadataFilterProcessor, getValidators(namesList: string[] = [], xmlIdList: string[] = []): any { const validators = BaseMetadataProviderEditor.getValidators(namesList, xmlIdList); validators['/metadataURL'] = (value, property, form) => { diff --git a/ui/src/app/metadata/provider/model/file-system.provider.form.ts b/ui/src/app/metadata/provider/model/file-system.provider.form.ts index fcf780ac5..9fcf7fb6d 100644 --- a/ui/src/app/metadata/provider/model/file-system.provider.form.ts +++ b/ui/src/app/metadata/provider/model/file-system.provider.form.ts @@ -6,16 +6,6 @@ export const FileSystemMetadataProviderWizard: Wizard { - let base = BaseMetadataProviderEditor.formatter(changes); - if (base.reloadableMetadataResolverAttributes) { - if (base.reloadableMetadataResolverAttributes.refreshDelayFactor) { - base.reloadableMetadataResolverAttributes.refreshDelayFactor = - base.reloadableMetadataResolverAttributes.refreshDelayFactor.toString(); - } - } - return base; - }, schema: '/api/ui/MetadataResolver/FilesystemMetadataResolver', steps: [ { diff --git a/ui/src/app/metadata/provider/model/local-dynamic.provider.form.ts b/ui/src/app/metadata/provider/model/local-dynamic.provider.form.ts index c53562873..c79bc487d 100644 --- a/ui/src/app/metadata/provider/model/local-dynamic.provider.form.ts +++ b/ui/src/app/metadata/provider/model/local-dynamic.provider.form.ts @@ -7,16 +7,6 @@ export const LocalDynamicMetadataProviderWizard: Wizard { - let base = BaseMetadataProviderEditor.formatter(changes); - if (base.dynamicMetadataResolverAttributes) { - if (base.dynamicMetadataResolverAttributes.refreshDelayFactor) { - base.dynamicMetadataResolverAttributes.refreshDelayFactor = - base.dynamicMetadataResolverAttributes.refreshDelayFactor.toString(); - } - } - return base; - }, schema: '/api/ui/MetadataResolver/LocalDynamicMetadataResolver', steps: [ { diff --git a/ui/src/app/metadata/provider/model/utilities.ts b/ui/src/app/metadata/provider/model/utilities.ts new file mode 100644 index 000000000..aea90bc21 --- /dev/null +++ b/ui/src/app/metadata/provider/model/utilities.ts @@ -0,0 +1,25 @@ +export const metadataFilterProcessor = (schema) => { + console.log(schema); + if (!schema) { + return null; + } + if (!schema.properties || !schema.properties.metadataFilters) { + return schema; + } + const filters = schema.properties.metadataFilters; + const processed = ({ + ...schema, + properties: { + ...schema.properties, + metadataFilters: { + type: 'object', + properties: filters.items.reduce((collection, filterType) => ({ + ...collection, + [filterType.$id]: filterType + }), {}) + } + } + }); + console.log(processed); + return processed; +}; diff --git a/ui/src/app/schema-form/widget/number/float.component.html b/ui/src/app/schema-form/widget/number/float.component.html index c1c78d34c..56e15bc69 100644 --- a/ui/src/app/schema-form/widget/number/float.component.html +++ b/ui/src/app/schema-form/widget/number/float.component.html @@ -9,17 +9,17 @@ {{schema.description}} -
diff --git a/ui/src/app/schema-form/widget/number/float.component.ts b/ui/src/app/schema-form/widget/number/float.component.ts index 3278829ba..4a465a6ef 100644 --- a/ui/src/app/schema-form/widget/number/float.component.ts +++ b/ui/src/app/schema-form/widget/number/float.component.ts @@ -1,5 +1,5 @@ import { - Component, + Component, AfterViewInit, ViewChild, ElementRef, } from '@angular/core'; import { IntegerWidget } from 'ngx-schema-form'; import { SchemaService } from '../../service/schema.service'; @@ -8,14 +8,61 @@ import { SchemaService } from '../../service/schema.service'; selector: 'float-component', templateUrl: `./float.component.html` }) -export class CustomFloatComponent extends IntegerWidget { +export class CustomFloatComponent extends IntegerWidget implements AfterViewInit { + private _displayValue: string; + @ViewChild('input') element: ElementRef; + constructor( private widgetService: SchemaService ) { super(); } + ngAfterViewInit() { + super.ngAfterViewInit(); + const control = this.control; + this.formProperty.valueChanges.subscribe((newValue) => { + if (typeof this._displayValue !== 'undefined') { + // Ignore the model value, use the display value instead + if (control.value !== this._displayValue) { + control.setValue(this._displayValue, { emitEvent: false }); + } + } else { + if (control.value !== newValue) { + control.setValue(newValue, { emitEvent: false }); + } + } + }); + this.formProperty.errorsChanges.subscribe((errors) => { + control.setErrors(errors, { emitEvent: true }); + const messages = (errors || []) + .filter(e => { + return e.path && e.path.slice(1) === this.formProperty.path; + }) + .map(e => e.message); + this.errorMessages = messages.filter((m, i) => messages.indexOf(m) === i); + }); + control.valueChanges.subscribe((newValue) => { + const native = (this.element.nativeElement); + this._displayValue = newValue; + this.formProperty.setValue(newValue, false); + if (newValue === '' && native.validity.badInput) { + this.formProperty.extendErrors([{ + code: 'INVALID_NUMBER', + path: `#${this.formProperty.path}`, + message: 'Invalid number', + }]); + } + }); + } + get required(): boolean { return this.widgetService.isRequired(this.formProperty); } + + get minimum(): number { + return this.required ? + this.schema.minimum : + this.formProperty.value === null ? null : this.schema.minimum; + } } diff --git a/ui/src/app/wizard/model/form-definition.ts b/ui/src/app/wizard/model/form-definition.ts index bde8e10ad..5e3cbb6ea 100644 --- a/ui/src/app/wizard/model/form-definition.ts +++ b/ui/src/app/wizard/model/form-definition.ts @@ -10,4 +10,5 @@ export interface FormDefinition { parser(changes: Partial, schema?: any); formatter(changes: Partial, schema?: any); getValidators?(...args: any[]): { [key: string]: any }; + schemaPreprocessor?(schema: any): any; } diff --git a/ui/src/app/wizard/reducer/index.ts b/ui/src/app/wizard/reducer/index.ts index d85d930be..027ac1673 100644 --- a/ui/src/app/wizard/reducer/index.ts +++ b/ui/src/app/wizard/reducer/index.ts @@ -128,8 +128,12 @@ export const getLockedStatus = createSelector(getState, fromWizard.getLocked); export const getSchemaLockedFn = (step, locked) => step ? step.locked ? locked : false : false; export const getLocked = createSelector(getCurrent, getLockedStatus, getSchemaLockedFn); +export const getSchemaProcessedFn = (schema, definition) => + definition.schemaPreprocessor ? definition.schemaPreprocessor(schema) : schema; + export const getSchemaObject = createSelector(getState, fromWizard.getSchema); -export const getParsedSchema = createSelector(getSchemaObject, getLocked, getSchemaParseFn); +export const getProcessedSchema = createSelector(getSchemaObject, getWizardDefinition, getSchemaProcessedFn); +export const getParsedSchema = createSelector(getProcessedSchema, getLocked, getSchemaParseFn); export const getSchema = createSelector(getParsedSchema, getCurrent, getSplitSchema); From 471e88dc735e0a8e3d2355be66c39bd93f8a12ef Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Wed, 25 Sep 2019 14:03:39 -0400 Subject: [PATCH 031/211] Got rid of metadataUrl property --- .../admin/ui/domain/resolvers/DynamicHttpMetadataResolver.java | 2 -- .../ui/domain/resolvers/FileBackedHttpMetadataResolver.java | 2 -- 2 files changed, 4 deletions(-) diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/DynamicHttpMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/DynamicHttpMetadataResolver.java index d22d9c6df..732078747 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/DynamicHttpMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/DynamicHttpMetadataResolver.java @@ -36,8 +36,6 @@ public class DynamicHttpMetadataResolver extends MetadataResolver { private Integer maxConnectionsPerRoute = 100; - private String metadataURL; - @ElementCollection @OrderColumn private List supportedContentTypes; diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/FileBackedHttpMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/FileBackedHttpMetadataResolver.java index 17fe28ab9..27c4217e5 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/FileBackedHttpMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/FileBackedHttpMetadataResolver.java @@ -21,8 +21,6 @@ public FileBackedHttpMetadataResolver() { type = "FileBackedHttpMetadataResolver"; } - private String metadataURL; - private String backingFile; private Boolean initializeFromBackupFile = true; From a68d3c6c5ac696b9670d4dd1303fee81825423ba Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Wed, 25 Sep 2019 15:14:10 -0400 Subject: [PATCH 032/211] Compile fix --- .../ui/domain/resolvers/FileBackedHttpMetadataResolver.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/FileBackedHttpMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/FileBackedHttpMetadataResolver.java index 27c4217e5..17fe28ab9 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/FileBackedHttpMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/FileBackedHttpMetadataResolver.java @@ -21,6 +21,8 @@ public FileBackedHttpMetadataResolver() { type = "FileBackedHttpMetadataResolver"; } + private String metadataURL; + private String backingFile; private Boolean initializeFromBackupFile = true; From 98b369f40011f163e5f3478c724a6c10cd8fc922 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Wed, 25 Sep 2019 13:11:25 -0700 Subject: [PATCH 033/211] SHIBUI-1364 Provider version testing WIP. --- .../admin/ui/SeleniumSIDETest.groovy | 39 +- .../integration/resources/SHIBUI-1364-1.side | 2176 +++++++++++++++++ 2 files changed, 2196 insertions(+), 19 deletions(-) create mode 100644 backend/src/integration/resources/SHIBUI-1364-1.side diff --git a/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy b/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy index ea1505cee..989d6a0e5 100644 --- a/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy +++ b/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy @@ -87,25 +87,26 @@ class SeleniumSIDETest extends Specification { where: name | file - 'SHIBUI-1281: Metadata Source Dashboard' | '/SHIBUI-1281.side' - 'SHIBUI-1311: Metadata Provider Dashboard' | '/SHIBUI-1311.side' - 'SHIBUI-950: Metadata Source from XML w/ digest' | '/SHIBUI-950.side' - 'SHIBUI-1352: Create LocalDynamic provider' | '/SHIBUI-1352-1.side' - 'SHIBUI-1352: Create FileSystem provider' | '/SHIBUI-1352-2.side' - 'SHIBUI-1333: Verify metadata source configuration' | '/SHIBUI-1333.side' - 'SHIBUI-1334: Verify metadata source versioning' | '/SHIBUI-1334-1.side' - 'SHIBUI-1334: Verify metadata provider versioning' | '/SHIBUI-1334-2.side' - 'SHIBUI-1335: Verify File Backed HTTP Metadata Provider Filters' | '/SHIBUI-1335-1.side' - 'SHIBUI-1335: Verify Filesystem Metadata Provider Filters' | '/SHIBUI-1335-2.side' - 'SHIBUI-1335: Verify Local Dynamic Metadata Provider Filters' | '/SHIBUI-1335-3.side' - 'SHIBUI-1335: Verify Dynamic HTTP Metadata Provider Filters' | '/SHIBUI-1335-4.side' - 'SHIBUI-1392: Verify provider with script filter is persistable' | '/SHIBUI-1392.side' - 'SHIBUI-1361: Verify dates display in proper format' | '/SHIBUI-1361.side' - 'SHIBUI-1385: Restore a metadata source version' | '/SHIBUI-1385-1.side' - 'SHIBUI-1385: Restore a metadata provider version' | '/SHIBUI-1385-2.side' - 'SHIBUI-1391: Regex Validation' | '/SHIBUI-1391.side' - 'SHIBUI-1407: Metadata source comparison highlights' | '/SHIBUI-1407-1.side' - 'SHIBUI-1407: Metadata provider comparison highlights' | '/SHIBUI-1407-2.side' +// 'SHIBUI-1281: Metadata Source Dashboard' | '/SHIBUI-1281.side' +// 'SHIBUI-1311: Metadata Provider Dashboard' | '/SHIBUI-1311.side' +// 'SHIBUI-950: Metadata Source from XML w/ digest' | '/SHIBUI-950.side' +// 'SHIBUI-1352: Create LocalDynamic provider' | '/SHIBUI-1352-1.side' +// 'SHIBUI-1352: Create FileSystem provider' | '/SHIBUI-1352-2.side' +// 'SHIBUI-1333: Verify metadata source configuration' | '/SHIBUI-1333.side' +// 'SHIBUI-1334: Verify metadata source versioning' | '/SHIBUI-1334-1.side' +// 'SHIBUI-1334: Verify metadata provider versioning' | '/SHIBUI-1334-2.side' +// 'SHIBUI-1335: Verify File Backed HTTP Metadata Provider Filters' | '/SHIBUI-1335-1.side' +// 'SHIBUI-1335: Verify Filesystem Metadata Provider Filters' | '/SHIBUI-1335-2.side' +// 'SHIBUI-1335: Verify Local Dynamic Metadata Provider Filters' | '/SHIBUI-1335-3.side' +// 'SHIBUI-1335: Verify Dynamic HTTP Metadata Provider Filters' | '/SHIBUI-1335-4.side' +// 'SHIBUI-1392: Verify provider with script filter is persistable' | '/SHIBUI-1392.side' +// 'SHIBUI-1361: Verify dates display in proper format' | '/SHIBUI-1361.side' +// 'SHIBUI-1385: Restore a metadata source version' | '/SHIBUI-1385-1.side' +// 'SHIBUI-1385: Restore a metadata provider version' | '/SHIBUI-1385-2.side' +// 'SHIBUI-1391: Regex Validation' | '/SHIBUI-1391.side' +// 'SHIBUI-1407: Metadata source comparison highlights' | '/SHIBUI-1407-1.side' +// 'SHIBUI-1407: Metadata provider comparison highlights' | '/SHIBUI-1407-2.side' + 'SHIBUI-1364: Compare FBHTTPMP with filters' | '/SHIBUI-1364-1.side' } } diff --git a/backend/src/integration/resources/SHIBUI-1364-1.side b/backend/src/integration/resources/SHIBUI-1364-1.side new file mode 100644 index 000000000..2f8a435f8 --- /dev/null +++ b/backend/src/integration/resources/SHIBUI-1364-1.side @@ -0,0 +1,2176 @@ +{ + "id": "57bde36d-15e6-4364-b117-4fb36e1e4941", + "version": "2.0", + "name": "SHIBUI-1364-1", + "url": "http://localhost:10101", + "tests": [{ + "id": "d87336f9-5279-422f-bf4d-73403f34fc85", + "name": "SHIBUI-1364-1", + "commands": [{ + "id": "2f6aa07a-6a16-439f-8c16-9822163c7b61", + "comment": "", + "command": "open", + "target": "/login", + "targets": [], + "value": "" + }, { + "id": "f1c7d7be-3f12-43f3-8646-ba7294416beb", + "comment": "", + "command": "type", + "target": "name=username", + "targets": [ + ["name=username", "name"], + ["css=tr:nth-child(1) input", "css:finder"], + ["xpath=//input[@name='username']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "admin" + }, { + "id": "f293afde-ce8a-4b85-9a19-fb77f21df988", + "comment": "", + "command": "type", + "target": "name=password", + "targets": [ + ["name=password", "name"], + ["css=tr:nth-child(2) input", "css:finder"], + ["xpath=//input[@name='password']", "xpath:attributes"], + ["xpath=//tr[2]/td[2]/input", "xpath:position"] + ], + "value": "adminpass" + }, { + "id": "358c31ea-fab8-4709-9b25-d9e5e82e123c", + "comment": "", + "command": "click", + "target": "name=submit", + "targets": [ + ["name=submit", "name"], + ["css=td:nth-child(1) > input", "css:finder"], + ["xpath=//input[@name='submit']", "xpath:attributes"], + ["xpath=//tr[3]/td/input", "xpath:position"] + ], + "value": "" + }, { + "id": "fdea3214-f0e0-4f13-9d5d-e07ef92d71f1", + "comment": "", + "command": "click", + "target": "css=#addNewDropdown", + "targets": [ + ["css=#addNewDropdown > translate-i18n", "css:finder"], + ["xpath=//button[@id='addNewDropdown']/translate-i18n", "xpath:idRelative"], + ["xpath=//translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Add New')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "2c40ac99-5e92-4c1c-923a-5a6100cadf43", + "comment": "", + "command": "click", + "target": "linkText=Metadata Provider", + "targets": [ + ["linkText=Metadata Provider", "linkText"], + ["css=.nav-link:nth-child(2)", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li/div/a[2]", "xpath:idRelative"], + ["xpath=(//a[contains(@href, '')])[3]", "xpath:href"], + ["xpath=//a[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "7a42de04-995f-45aa-ba3f-095900a564ec", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/name", + "targets": [], + "value": "10000" + }, { + "id": "b2725ef6-b394-4f87-a2a5-031be085cedb", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field4", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "File Backed HTTP Metadata Provider" + }, { + "id": "ca36b018-a4df-43d1-9fbd-973d6653d3e0", + "comment": "", + "command": "select", + "target": "id=/type", + "targets": [ + ["id=/type", "id"], + ["name=field2", "name"], + ["css=#\\/type", "css:finder"], + ["xpath=//select[@id='/type']", "xpath:attributes"], + ["xpath=//select", "xpath:position"] + ], + "value": "label=FileBackedHttpMetadataProvider" + }, { + "id": "e5d1d696-3029-4f9d-ad53-2e60b4789935", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[2]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "352f066f-c2af-4735-81b1-5440ba7a3432", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/xmlId", + "targets": [], + "value": "10000" + }, { + "id": "e7462621-f4e4-4512-b200-20afa5685fc6", + "comment": "", + "command": "type", + "target": "id=/xmlId", + "targets": [ + ["id=/xmlId", "id"], + ["name=field7", "name"], + ["css=#\\/xmlId", "css:finder"], + ["xpath=//input[@id='/xmlId']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "12345" + }, { + "id": "7bfaa2a7-c66d-4e36-b1f4-1de30b02ebd0", + "comment": "", + "command": "type", + "target": "id=/metadataURL", + "targets": [ + ["id=/metadataURL", "id"], + ["name=field8", "name"], + ["css=#\\/metadataURL", "css:finder"], + ["xpath=//input[@id='/metadataURL']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "https://idp.unicon.net/idp/shibboleth" + }, { + "id": "047e1ea4-e28c-4b1b-86fc-ff19a3c0efcc", + "comment": "", + "command": "click", + "target": "id=/initializeFromBackupFile.false", + "targets": [ + ["id=/initializeFromBackupFile.false", "id"], + ["css=#\\/initializeFromBackupFile\\.false", "css:finder"], + ["xpath=//input[@id='/initializeFromBackupFile.false']", "xpath:attributes"], + ["xpath=//div[2]/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "34124b74-7b90-424a-9219-1f0bfbf06b70", + "comment": "", + "command": "type", + "target": "id=/backingFile", + "targets": [ + ["id=/backingFile", "id"], + ["name=field10", "name"], + ["css=#\\/backingFile", "css:finder"], + ["xpath=//input[@id='/backingFile']", "xpath:attributes"], + ["xpath=//div[4]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "%{idp.home}/foo.txt" + }, { + "id": "91a96cbd-57f4-4dc2-8f75-eb3e96526ae7", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "0668032d-608b-4a01-9ac8-e4e2ac058294", + "comment": "", + "command": "click", + "target": "css=.btn-outline-secondary", + "targets": [ + ["css=.btn-outline-secondary", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/backupFileInitNextRefreshDelay-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "19657c78-782d-4046-abce-64093bd17fa7", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "35dfa0f8-c0f2-4356-a6b0-18b5dc35337b", + "comment": "", + "command": "click", + "target": "id=/backupFileInitNextRefreshDelay__option--1", + "targets": [ + ["id=/backupFileInitNextRefreshDelay__option--1", "id"], + ["css=#\\/backupFileInitNextRefreshDelay__option--1", "css:finder"], + ["xpath=//li[@id='/backupFileInitNextRefreshDelay__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/backupFileInitNextRefreshDelay__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[2]", "xpath:position"], + ["xpath=//li[contains(.,'PT30S')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "b4d0a551-3bc1-466f-b204-ec7164af44ec", + "comment": "", + "command": "click", + "target": "id=/failFastInitialization.false", + "targets": [ + ["id=/failFastInitialization.false", "id"], + ["css=#\\/failFastInitialization\\.false", "css:finder"], + ["xpath=//input[@id='/failFastInitialization.false']", "xpath:attributes"], + ["xpath=//div[7]/sf-form-element/div/sf-widget-chooser/boolean-radio/div/div[2]/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "bef80dbb-25a6-4381-8b0e-331faaeb4392", + "comment": "", + "command": "click", + "target": "id=/satisfyAnyPredicates.true", + "targets": [ + ["id=/satisfyAnyPredicates.true", "id"], + ["css=#\\/satisfyAnyPredicates\\.true", "css:finder"], + ["xpath=//input[@id='/satisfyAnyPredicates.true']", "xpath:attributes"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/boolean-radio/div/div/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "d0af8425-5f4c-4037-a549-52553b828179", + "comment": "", + "command": "pause", + "target": "1000", + "targets": [], + "value": "" + }, { + "id": "9fe532ee-4ce6-4ff8-ab6c-ea92eb527ded", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "44e705a1-f284-4303-a0b6-c4bc9896c78d", + "comment": "", + "command": "pause", + "target": "1000", + "targets": [], + "value": "" + }, { + "id": "91c42709-f202-48eb-bd7f-389ec454b86b", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "824b4515-ae14-436e-a56f-d631ea9e1edc", + "comment": "", + "command": "click", + "target": "css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay-container .btn", + "targets": [ + ["css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/reloadableMetadataResolverAttributes/minRefreshDelay-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "12ba0481-b236-495c-b2a3-a665c5eec502", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "9ee7065a-823e-4b4a-b212-0582eeaf7a00", + "comment": "", + "command": "click", + "target": "id=/reloadableMetadataResolverAttributes/minRefreshDelay__option--0", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/minRefreshDelay__option--0", "id"], + ["css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay__option--0", "css:finder"], + ["xpath=//li[@id='/reloadableMetadataResolverAttributes/minRefreshDelay__option--0']", "xpath:attributes"], + ["xpath=//ul[@id='/reloadableMetadataResolverAttributes/minRefreshDelay__listbox']/li", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li", "xpath:position"], + ["xpath=//li[contains(.,'PT0S')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1e063a3c-c3c9-4ab6-9e7b-a7fb4d785288", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "618cc5f1-417b-4bc6-9388-3238f2304904", + "comment": "", + "command": "click", + "target": "css=#\\/reloadableMetadataResolverAttributes\\/maxRefreshDelay-container .btn", + "targets": [ + ["css=#\\/reloadableMetadataResolverAttributes\\/maxRefreshDelay-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[3]", "xpath:attributes"], + ["xpath=//div[@id='/reloadableMetadataResolverAttributes/maxRefreshDelay-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "0b129e41-adb3-47ef-a2b4-34899ca6d8fb", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "a89f1b4d-10bd-48f7-9b97-865710cfe01f", + "comment": "", + "command": "click", + "target": "id=/reloadableMetadataResolverAttributes/maxRefreshDelay__option--2", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/maxRefreshDelay__option--2", "id"], + ["css=#\\/reloadableMetadataResolverAttributes\\/maxRefreshDelay__option--2", "css:finder"], + ["xpath=//li[@id='/reloadableMetadataResolverAttributes/maxRefreshDelay__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/reloadableMetadataResolverAttributes/maxRefreshDelay__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "143b781c-56ae-48c6-a7f5-8c93953f6095", + "comment": "", + "command": "click", + "target": "id=/reloadableMetadataResolverAttributes/refreshDelayFactor", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/refreshDelayFactor", "id"], + ["name=field20", "name"], + ["css=#\\/reloadableMetadataResolverAttributes\\/refreshDelayFactor", "css:finder"], + ["xpath=//input[@id='/reloadableMetadataResolverAttributes/refreshDelayFactor']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "dcd01c7a-f733-4977-9cc2-e9084903e079", + "comment": "", + "command": "type", + "target": "id=/reloadableMetadataResolverAttributes/refreshDelayFactor", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/refreshDelayFactor", "id"], + ["name=field20", "name"], + ["css=#\\/reloadableMetadataResolverAttributes\\/refreshDelayFactor", "css:finder"], + ["xpath=//input[@id='/reloadableMetadataResolverAttributes/refreshDelayFactor']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "0.5" + }, { + "id": "b7522094-c53a-4e79-8c7c-e38a3b2615f4", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "faf43746-1293-437f-a1ce-63145f5d6135", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "363af92e-0327-47b9-918c-1560adab40cc", + "comment": "", + "command": "click", + "target": "css=.btn-outline-secondary", + "targets": [ + ["css=.btn-outline-secondary", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/metadataFilters/RequiredValidUntil/maxValidityInterval-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "a14576bb-2d15-4e51-89c6-b8289311e58a", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "a4470d6f-04a7-4c4b-8c1e-70cff2f35e8a", + "comment": "", + "command": "click", + "target": "id=/metadataFilters/RequiredValidUntil/maxValidityInterval__option--1", + "targets": [ + ["id=/metadataFilters/RequiredValidUntil/maxValidityInterval__option--1", "id"], + ["css=#\\/metadataFilters\\/RequiredValidUntil\\/maxValidityInterval__option--1", "css:finder"], + ["xpath=//li[@id='/metadataFilters/RequiredValidUntil/maxValidityInterval__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/metadataFilters/RequiredValidUntil/maxValidityInterval__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[2]", "xpath:position"], + ["xpath=//li[contains(.,'P14D')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "4530c1b4-8f27-4272-9633-c792a3a54f90", + "comment": "", + "command": "click", + "target": "id=/metadataFilters/SignatureValidation/requireSignedRoot", + "targets": [ + ["css=#\\/metadataFilters\\/SignatureValidation\\/requireSignedRoot\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/metadataFilters/SignatureValidation/requireSignedRoot.parent']/label", "xpath:idRelative"], + ["xpath=//div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Require Signed Root')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "10cd8cee-fc6a-4e5b-a11b-a7b0a9338f5d", + "comment": "", + "command": "type", + "target": "id=/metadataFilters/SignatureValidation/certificateFile", + "targets": [ + ["id=/metadataFilters/SignatureValidation/certificateFile", "id"], + ["name=field27", "name"], + ["css=#\\/metadataFilters\\/SignatureValidation\\/certificateFile", "css:finder"], + ["xpath=//input[@id='/metadataFilters/SignatureValidation/certificateFile']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "%{idp.home}/foo2.txt" + }, { + "id": "a3ce889f-0607-4071-bd39-25b169c30114", + "comment": "", + "command": "click", + "target": "css=div:nth-child(3) > sf-form-element .bg-light", + "targets": [ + ["css=div:nth-child(3) > sf-form-element .bg-light", "css:finder"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/fieldset-object/div/div/fieldset/div", "xpath:position"] + ], + "value": "" + }, { + "id": "f205ec23-b433-44bb-af80-e72330b4c7a3", + "comment": "", + "command": "click", + "target": "css=.fa-plus", + "targets": [ + ["css=.fa-plus", "css:finder"], + ["xpath=//array-component/div/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "4dae6914-ae68-45e2-b332-cc4c1ac71e43", + "comment": "", + "command": "select", + "target": "id=/metadataFilters/EntityRoleWhiteList/retainedRoles/0", + "targets": [], + "value": "label=SPSSODescriptor" + }, { + "id": "4b257d69-1948-4c5f-a88d-b1bfa8f2ba72", + "comment": "", + "command": "click", + "target": "css=option:nth-child(2)", + "targets": [ + ["css=option:nth-child(2)", "css:finder"], + ["xpath=//option[@value='1: md:SPSSODescriptor']", "xpath:attributes"], + ["xpath=//select[@id='/metadataFilters/EntityRoleWhiteList/retainedRoles/0']/option[2]", "xpath:idRelative"], + ["xpath=//option[2]", "xpath:position"], + ["xpath=//option[contains(.,'SPSSODescriptor')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d47fc8b5-4062-4813-90a8-cdc91b777f1d", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "442c5b8d-f108-488e-8779-06171f5081f6", + "comment": "", + "command": "select", + "target": "id=/metadataFilters/EntityRoleWhiteList/retainedRoles/1", + "targets": [], + "value": "label=AttributeAuthorityDescriptor" + }, { + "id": "42eddc22-9eed-41d1-aaee-2d4a1d933fa9", + "comment": "", + "command": "click", + "target": "css=#\\/metadataFilters\\/EntityRoleWhiteList\\/retainedRoles\\/1 > option:nth-child(3)", + "targets": [ + ["css=#\\/metadataFilters\\/EntityRoleWhiteList\\/retainedRoles\\/1 > option:nth-child(3)", "css:finder"], + ["xpath=(//option[@value='2: md:AttributeAuthorityDescriptor'])[2]", "xpath:attributes"], + ["xpath=//select[@id='/metadataFilters/EntityRoleWhiteList/retainedRoles/1']/option[3]", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/select-component/div/select/option[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "4ebbc08c-ee24-43d8-8c2d-b639a625189c", + "comment": "", + "command": "click", + "target": "css=#\\/metadataFilters\\/EntityRoleWhiteList\\/removeRolelessEntityDescriptors\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/metadataFilters\\/EntityRoleWhiteList\\/removeRolelessEntityDescriptors\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/metadataFilters/EntityRoleWhiteList/removeRolelessEntityDescriptors.parent']/label", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Remove Roleless Entity Descriptors?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1c23c527-46e7-4fe6-8f60-37833af073c8", + "comment": "", + "command": "click", + "target": "css=#\\/metadataFilters\\/EntityRoleWhiteList\\/removeEmptyEntitiesDescriptors\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/metadataFilters\\/EntityRoleWhiteList\\/removeEmptyEntitiesDescriptors\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/metadataFilters/EntityRoleWhiteList/removeEmptyEntitiesDescriptors.parent']/label", "xpath:idRelative"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Remove Empty Entities Descriptors?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "ee3d0257-56e2-402d-8fef-c21c8e62b9fe", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "7cd861ea-d86c-4faa-a07b-c1508811b506", + "comment": "", + "command": "click", + "target": "css=.custom-control-label", + "targets": [ + ["css=.custom-control-label", "css:finder"], + ["xpath=//div[@id='/enabled.parent']/label", "xpath:idRelative"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Enable this service?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "0c112a41-8feb-42da-a58b-8fc04e9a3bf6", + "comment": "", + "command": "click", + "target": "css=.save", + "targets": [ + ["css=.save", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "12673aa7-fc4e-4877-9842-a9d88dbc2d97", + "comment": "", + "command": "click", + "target": "linkText=File Backed HTTP Metadata Provider", + "targets": [ + ["linkText=File Backed HTTP Metadata Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'File Backed HTTP Metadata Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/da22a0b7-40d7-418c-bbe9-7ba4c37d3905/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'File Backed HTTP Metadata Provider')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "daa2d46a-d238-4a48-aca7-0f34c9b93d5f", + "comment": "", + "command": "click", + "target": "css=.btn:nth-child(2) > translate-i18n", + "targets": [ + ["css=.btn:nth-child(2) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/button/translate-i18n", "xpath:idRelative"], + ["xpath=//div/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Filters')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d86e9a98-a0a1-4696-b454-1bca1d01f9d0", + "comment": "", + "command": "click", + "target": "css=#filters .actions span", + "targets": [ + ["css=#filters .actions span", "css:finder"], + ["xpath=//div[@id='filters']/div/div/a/span", "xpath:idRelative"], + ["xpath=//div/a/span", "xpath:position"], + ["xpath=//span[contains(.,'Add Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "dc41b26d-b101-4ead-866f-482df0bfee04", + "comment": "", + "command": "select", + "target": "name=type", + "targets": [], + "value": "label=EntityAttributes" + }, { + "id": "49fe7508-4f42-4eae-a47d-85a0983efb64", + "comment": "", + "command": "click", + "target": "css=option:nth-child(2)", + "targets": [ + ["css=option:nth-child(2)", "css:finder"], + ["xpath=//option[@value='EntityAttributes']", "xpath:attributes"], + ["xpath=//option[2]", "xpath:position"], + ["xpath=//option[contains(.,'EntityAttributes')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "8a52ad88-b583-41b7-92a6-bdb185b03a06", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/name", + "targets": [], + "value": "10000" + }, { + "id": "b1c779b1-d3ed-47cc-bc88-e5c280161c32", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field37", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Entity Attributes Filter" + }, { + "id": "9ac14c43-206b-4a60-8e58-c4ce64efa2c8", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "a10a6faf-90cd-4713-8ea3-60c768ed935e", + "comment": "", + "command": "click", + "target": "id=/entityAttributesFilterTarget.valuedd", + "targets": [ + ["id=/entityAttributesFilterTarget.valuedd", "id"], + ["css=#\\/entityAttributesFilterTarget\\.valuedd", "css:finder"], + ["xpath=//button[@id='/entityAttributesFilterTarget.valuedd']", "xpath:attributes"], + ["xpath=//fieldset/div/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1f54a508-0b40-4dc0-b6e0-706971fb19bf", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "1f2b93b8-23ae-4a9c-b015-96ca890ae150", + "comment": "", + "command": "click", + "target": "linkText=Regex", + "targets": [ + ["linkText=Regex", "linkText"], + ["css=.dropdown-item:nth-child(2)", "css:finder"], + ["xpath=//a[contains(text(),'Regex')]", "xpath:link"], + ["xpath=(//a[contains(@href, '#')])[2]", "xpath:href"], + ["xpath=//div/div/a[2]", "xpath:position"], + ["xpath=//a[contains(.,'Regex')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "b2a41370-db61-4bae-a5f7-a8c5e852e15e", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "5c2ed93d-3630-408c-bb89-0b2baffb73c0", + "comment": "", + "command": "click", + "target": "id=/entityAttributesFilterTarget.target", + "targets": [ + ["id=/entityAttributesFilterTarget.target", "id"], + ["name=script", "name"], + ["css=#\\/entityAttributesFilterTarget\\.target", "css:finder"], + ["xpath=//input[@id='/entityAttributesFilterTarget.target']", "xpath:attributes"], + ["xpath=//div/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "6dec176f-0c5a-4982-867e-087342c90987", + "comment": "", + "command": "sendKeys", + "target": "id=/entityAttributesFilterTarget.target", + "targets": [], + "value": "/foo.*/" + }, { + "id": "f4e6e8a5-0040-4aac-a0f9-9b49abbd9568", + "comment": "", + "command": "click", + "target": "css=#\\/filterEnabled\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/filterEnabled\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/filterEnabled.parent']/label", "xpath:idRelative"], + ["xpath=//checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Enable Filter?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "603aff60-cf79-4804-90c5-2ffd0f5ef550", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/signAssertion\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/signAssertion\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/signAssertion.parent']/label", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Sign the Assertion?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "9456ba02-3dd6-4305-a0d3-f031e1e79b16", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/dontSignResponse\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/dontSignResponse\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/dontSignResponse.parent']/label", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "a1ce4398-4f95-498c-b01b-2f25e1fd3380", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/turnOffEncryption\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/turnOffEncryption\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/turnOffEncryption.parent']/label", "xpath:idRelative"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Turn off Encryption of Response?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "dcaa766a-3800-4412-9631-0f279e23bf41", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/useSha\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/useSha\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/useSha.parent']/label", "xpath:idRelative"], + ["xpath=//div[4]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Use SHA1 Signing Algorithm?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c7a9bd88-9198-4ce0-8ae0-618b90fd787a", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/ignoreAuthenticationMethod\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/ignoreAuthenticationMethod\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/ignoreAuthenticationMethod.parent']/label", "xpath:idRelative"], + ["xpath=//div[5]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Ignore any SP-Requested Authentication Method?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c806723d-9713-4710-96e2-6410b79895c0", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/omitNotBefore\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/omitNotBefore\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/omitNotBefore.parent']/label", "xpath:idRelative"], + ["xpath=//div[6]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Omit Not Before Condition?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1c7d678e-5b74-4542-bf6c-a64d0117f831", + "comment": "", + "command": "type", + "target": "id=/relyingPartyOverrides/responderId", + "targets": [ + ["id=/relyingPartyOverrides/responderId", "id"], + ["name=field50", "name"], + ["css=#\\/relyingPartyOverrides\\/responderId", "css:finder"], + ["xpath=//input[@id='/relyingPartyOverrides/responderId']", "xpath:attributes"], + ["xpath=//div[7]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "id-123" + }, { + "id": "027b4448-eaf6-4f24-ae2f-5b592db910ed", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(8) .d-flex > .btn", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1bb700ae-08eb-403c-b3ba-0090132b69ff", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "fd1af538-1b5b-4d6a-b56b-d56e7f01bb40", + "comment": "", + "command": "click", + "target": "css=.fa-caret-down", + "targets": [ + ["css=.fa-caret-down", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/0-container']/div/div/button/i", "xpath:idRelative"], + ["xpath=//auto-complete/div/div/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "6afaa45d-1beb-4f15-8810-278af7489657", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "cc233154-4159-425b-8ac5-761c26a0de15", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/nameIdFormats/0__option--0", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/0__option--0", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/0__option--0", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/nameIdFormats/0__option--0']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/nameIdFormats/0__listbox']/li", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li", "xpath:position"] + ], + "value": "" + }, { + "id": "d8e3df44-0db6-458e-b133-36b7ec08fbb7", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .btn", + "targets": [ + ["css=div:nth-child(8) .btn > translate-i18n", "css:finder"], + ["xpath=//array-component/div/div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "3395ec88-2d19-4785-99f9-3921dddfba28", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "562c7f9f-1e55-432a-8fff-0cae15b23a33", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/nameIdFormats\\/1-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/1-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[4]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/1-container']/div/div/button", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "c80afbe5-2c88-4207-b133-6d151fea12a8", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "f5f27af2-b869-4b99-a3d9-3efce014be06", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/nameIdFormats/1__option--1", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/1__option--1", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/1__option--1", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/nameIdFormats/1__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/nameIdFormats/1__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "4e595806-b2c6-43c6-bd1f-78e659f795e4", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(8) .d-flex > .btn", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "5e26a17f-98e4-4adc-b851-4e854228ebba", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "b717af46-a3c1-40f2-ac1a-2c7f84fbf33f", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/nameIdFormats\\/2-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/2-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[5]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/2-container']/div/div/button", "xpath:idRelative"], + ["xpath=//li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "d07e6da7-ed28-4460-914a-eb355b3a2de3", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "4655a981-c5d6-4b48-aad2-77295dc37859", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/nameIdFormats/2__option--2", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/2__option--2", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/2__option--2", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/nameIdFormats/2__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/nameIdFormats/2__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "9902d02a-d7f7-4424-92f4-2a6072916421", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(8) .d-flex > .btn", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "605d3970-c910-4bec-accd-d7c4d0334f91", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "df07e4c7-8e0f-4eed-ab58-42e2b5bcfc93", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/nameIdFormats\\/3-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/3-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[6]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/3-container']/div/div/button", "xpath:idRelative"], + ["xpath=//li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "0ef4ae64-3b16-4488-b19e-629162a9c84d", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "cd34bc8a-564b-4d15-90c9-f09e12d7e078", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/nameIdFormats/3__option--3", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/3__option--3", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/3__option--3", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/nameIdFormats/3__option--3']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/nameIdFormats/3__listbox']/li[4]", "xpath:idRelative"], + ["xpath=//li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[4]", "xpath:position"] + ], + "value": "" + }, { + "id": "624fd275-3ee2-4cd0-890a-4ae22b152ed4", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(8) .d-flex > .btn", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "e6c3d2db-386e-4b9b-a160-c091b025c1b9", + "comment": "", + "command": "type", + "target": "id=/relyingPartyOverrides/nameIdFormats/4", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/4", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/4", "css:finder"], + ["xpath=//input[@id='/relyingPartyOverrides/nameIdFormats/4']", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/4-container']/div/input", "xpath:idRelative"], + ["xpath=//li[5]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/input", "xpath:position"] + ], + "value": "nameIdFormat" + }, { + "id": "82093807-448e-4a25-96bf-ed1dfca77452", + "comment": "", + "command": "click", + "target": "css=div:nth-child(9) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(9) .d-flex > .btn", "css:finder"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "1acc3e01-45ae-4c6d-9291-165affb7306f", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "fcd7d891-5ea4-45a6-8554-4298ec5804c9", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/authenticationMethods\\/0-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/0-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[8]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/authenticationMethods/0-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "faf08fb6-7c62-465c-b198-6da8ef3a1dd5", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "9bb8951c-c932-4236-89d8-9d2c8d49a702", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/authenticationMethods/0__option--0", + "targets": [ + ["id=/relyingPartyOverrides/authenticationMethods/0__option--0", "id"], + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/0__option--0", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/authenticationMethods/0__option--0']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/authenticationMethods/0__listbox']/li", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li", "xpath:position"] + ], + "value": "" + }, { + "id": "743e6d84-98b7-461a-8fb9-05826abb8e22", + "comment": "", + "command": "click", + "target": "css=div:nth-child(9) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(9) .d-flex > .btn", "css:finder"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "926e66e1-3bcb-41bd-a6a8-83ed90ceab59", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "81517bc9-7996-46be-9dfe-9eea57f0e616", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/authenticationMethods\\/1-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/1-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[9]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/authenticationMethods/1-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "8343153e-ade7-4713-a9f6-079b0bfbac44", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "8f00493c-94ef-4182-8423-5d23bd01136f", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/authenticationMethods/1__option--1", + "targets": [ + ["id=/relyingPartyOverrides/authenticationMethods/1__option--1", "id"], + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/1__option--1", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/authenticationMethods/1__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/authenticationMethods/1__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "7a3a49b4-4348-4318-a35c-ba0a2192e811", + "comment": "", + "command": "click", + "target": "css=div:nth-child(9) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(9) .d-flex > .btn", "css:finder"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "b9b5a336-2b99-4315-8c14-13ee1c5af2ed", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "c2f97ae8-fddf-4e48-b961-1d4154ceae9f", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/authenticationMethods\\/2-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/2-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[10]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/authenticationMethods/2-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "39a8ea0f-a57a-49b6-b640-7b608eb29b88", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "3dcbc6b1-2571-4ab8-9014-66b19727fe0a", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/authenticationMethods/2__option--2", + "targets": [ + ["id=/relyingPartyOverrides/authenticationMethods/2__option--2", "id"], + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/2__option--2", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/authenticationMethods/2__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/authenticationMethods/2__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "efad42c9-5d79-42f6-a348-54ba5fe59e9d", + "comment": "", + "command": "click", + "target": "css=div:nth-child(9) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(9) .d-flex > .btn", "css:finder"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "9a7b2bfe-8702-40be-a6fe-a76b9a01cdde", + "comment": "", + "command": "type", + "target": "id=/relyingPartyOverrides/authenticationMethods/3", + "targets": [ + ["id=/relyingPartyOverrides/authenticationMethods/3", "id"], + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/3", "css:finder"], + ["xpath=//input[@id='/relyingPartyOverrides/authenticationMethods/3']", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/authenticationMethods/3-container']/div/input", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/input", "xpath:position"] + ], + "value": "someOverride" + }, { + "id": "82bf7075-6128-4471-a631-c8e4c3525eea", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/forceAuthn\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/forceAuthn\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/forceAuthn.parent']/label", "xpath:idRelative"], + ["xpath=//div[10]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Force AuthN')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "4098e48d-eef1-42e8-a1a4-e4eb48f5f9bd", + "comment": "", + "command": "click", + "target": "css=.fa-check", + "targets": [ + ["css=.fa-check", "css:finder"], + ["xpath=//button[@id='/attributeRelease.checkall']/i", "xpath:idRelative"], + ["xpath=//td[2]/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "2c3908a1-3fbf-4bbe-8611-fb8a87da1a66", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//button[@type='submit']", "xpath:attributes"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c49e62e6-f8b6-44b9-be12-5329e8bc5495", + "comment": "", + "command": "click", + "target": "linkText=Add Filter", + "targets": [ + ["linkText=Add Filter", "linkText"], + ["css=.btn-success", "css:finder"], + ["xpath=//a[contains(@href, '/metadata/provider/d71151a4-a27d-4cb9-bd96-882280454c4a/filter/new')]", "xpath:href"], + ["xpath=//div[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Add Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "097ea9f6-e75c-41a3-b4e9-a4a80a866802", + "comment": "", + "command": "select", + "target": "name=type", + "targets": [], + "value": "label=NameIDFormat" + }, { + "id": "9cf1a2b7-f951-4908-9ffe-dfcd3258a48d", + "comment": "", + "command": "click", + "target": "css=option:nth-child(3)", + "targets": [ + ["css=option:nth-child(3)", "css:finder"], + ["xpath=//option[@value='NameIDFormat']", "xpath:attributes"], + ["xpath=//option[3]", "xpath:position"], + ["xpath=//option[contains(.,'NameIDFormat')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "4a663db9-9f10-4b12-9cb9-61aa01ecc0c0", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/name", + "targets": [], + "value": "10000" + }, { + "id": "92fdc836-2479-4faa-9e3d-447f5b82cc11", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field65", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Name ID Format Filter" + }, { + "id": "563c9606-0174-4432-877a-ad769eb3206a", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "abfa17d5-ebfe-4bb2-b64a-ef5f127bac86", + "comment": "", + "command": "click", + "target": "id=/nameIdFormatFilterTarget.valuedd", + "targets": [ + ["id=/nameIdFormatFilterTarget.valuedd", "id"], + ["css=#\\/nameIdFormatFilterTarget\\.valuedd", "css:finder"], + ["xpath=//button[@id='/nameIdFormatFilterTarget.valuedd']", "xpath:attributes"], + ["xpath=//fieldset/div/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "43878e34-28cc-424f-9044-87b8cb61db03", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "6040112e-86c4-4e98-b258-79d7e61dfb6d", + "comment": "", + "command": "click", + "target": "linkText=Entity ID", + "targets": [ + ["linkText=Entity ID", "linkText"], + ["css=.show > .dropdown-item:nth-child(1)", "css:finder"], + ["xpath=//a[contains(text(),'Entity ID')]", "xpath:link"], + ["xpath=//a[contains(@href, '#')]", "xpath:href"], + ["xpath=//div/div/a", "xpath:position"], + ["xpath=//a[contains(.,'Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "70eba7e8-d84f-4b65-b5e8-d1523514dd29", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "bba23377-23a1-46d5-b044-15047a08ee53", + "comment": "", + "command": "type", + "target": "id=/nameIdFormatFilterTarget.target", + "targets": [ + ["id=/nameIdFormatFilterTarget.target", "id"], + ["css=#\\/nameIdFormatFilterTarget\\.target", "css:finder"], + ["xpath=//input[@id='/nameIdFormatFilterTarget.target']", "xpath:attributes"], + ["xpath=//div[@id='-container']/div/input", "xpath:idRelative"], + ["xpath=//div/div/input", "xpath:position"] + ], + "value": "https://idp.unicon.net/idp/shibboleth" + }, { + "id": "6fbb57d1-0fc6-42bc-86ca-4a5fe872ea34", + "comment": "", + "command": "click", + "target": "css=.btn-success:nth-child(1)", + "targets": [ + ["css=.btn-success:nth-child(1)", "css:finder"], + ["xpath=//div[2]/button", "xpath:position"], + ["xpath=//button[contains(.,'Add Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "fa75b464-10a7-43da-939e-550e88748eb6", + "comment": "", + "command": "click", + "target": "css=#\\/filterEnabled\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/filterEnabled\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/filterEnabled.parent']/label", "xpath:idRelative"], + ["xpath=//checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Enable Filter?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "a721538a-5f95-4567-8d7c-5851f67f3ae0", + "comment": "", + "command": "click", + "target": "css=#\\/removeExistingFormats\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/removeExistingFormats\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/removeExistingFormats.parent']/label", "xpath:idRelative"], + ["xpath=//div[7]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Remove Existing Formats?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "78c6d6fc-a3e6-4ae7-9f62-49b64c457232", + "comment": "", + "command": "click", + "target": "css=.array-add-button", + "targets": [ + ["css=.array-add-button", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1503abb6-b674-495f-922b-f2ba07bb46bd", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "76b5506e-ebd3-416b-9a2d-391d39b8b282", + "comment": "", + "command": "click", + "target": "css=.input-group-append > .btn", + "targets": [ + ["css=.input-group-append > .btn", "css:finder"], + ["xpath=(//button[@type='button'])[3]", "xpath:attributes"], + ["xpath=//div[@id='/formats/0-container']/div/div/button", "xpath:idRelative"], + ["xpath=//auto-complete/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "e71b7c21-86c7-46e1-8451-4005940dbf02", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "ee812306-8d00-4162-9d92-eb598802f4bc", + "comment": "", + "command": "click", + "target": "id=/formats/0__option--0", + "targets": [ + ["id=/formats/0__option--0", "id"], + ["css=#\\/formats\\/0__option--0", "css:finder"], + ["xpath=//li[@id='/formats/0__option--0']", "xpath:attributes"], + ["xpath=//ul[@id='/formats/0__listbox']/li", "xpath:idRelative"], + ["xpath=//datalist-component/div/auto-complete/div/ul/li", "xpath:position"] + ], + "value": "" + }, { + "id": "ddcda076-a6d1-4a6f-861d-c32642305841", + "comment": "", + "command": "click", + "target": "css=.array-add-button", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//array-component/div/div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "da1e1b22-55cb-4934-9d0c-8955e5434289", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "1f3cca46-1bf0-469f-9ac5-6481c8447633", + "comment": "", + "command": "click", + "target": "css=#\\/formats\\/1-container .btn", + "targets": [ + ["css=#\\/formats\\/1-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[4]", "xpath:attributes"], + ["xpath=//div[@id='/formats/1-container']/div/div/button", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "65b07bc0-3c1d-4eeb-b268-baa2f2a0992c", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "aa0cb8e5-a5b5-4956-91dc-d25ea30ff87a", + "comment": "", + "command": "click", + "target": "id=/formats/1__option--1", + "targets": [ + ["id=/formats/1__option--1", "id"], + ["css=#\\/formats\\/1__option--1", "css:finder"], + ["xpath=//li[@id='/formats/1__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/formats/1__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "233f96b6-032e-40c4-8232-dc65583830fc", + "comment": "", + "command": "click", + "target": "css=.array-add-button", + "targets": [ + ["css=.array-add-button", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "43200793-5c4c-47dd-93b7-7bdd138eb6d4", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "f313f186-80e1-42ea-9b19-c59efe66a92d", + "comment": "", + "command": "click", + "target": "css=#\\/formats\\/2-container .btn", + "targets": [ + ["css=#\\/formats\\/2-container .fa", "css:finder"], + ["xpath=//div[@id='/formats/2-container']/div/div/button/i", "xpath:idRelative"], + ["xpath=//li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "26e1228a-a453-4f79-bd7d-222f50e21b69", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "bf10f8f1-f5b8-43f5-b1d8-6e4e67e92621", + "comment": "", + "command": "click", + "target": "id=/formats/2__option--2", + "targets": [ + ["id=/formats/2__option--2", "id"], + ["css=#\\/formats\\/2__option--2", "css:finder"], + ["xpath=//li[@id='/formats/2__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/formats/2__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "be2cee3b-966a-47e8-8907-9d21bb63a61c", + "comment": "", + "command": "click", + "target": "css=.array-add-button", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//array-component/div/div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "0502f5d7-bc0a-4b4c-b0d0-5cf159dd0492", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "823e4972-3bdd-4286-a22d-8805adef4f2c", + "comment": "", + "command": "click", + "target": "css=#\\/formats\\/3-container .btn", + "targets": [ + ["css=#\\/formats\\/3-container .fa", "css:finder"], + ["xpath=//div[@id='/formats/3-container']/div/div/button/i", "xpath:idRelative"], + ["xpath=//li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "55751a6d-974e-45cb-83fa-cea50fd6612c", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "3cba2ead-22cd-4bc9-b0ca-bb1f5ebb10a2", + "comment": "", + "command": "click", + "target": "id=/formats/3__option--3", + "targets": [ + ["id=/formats/3__option--3", "id"], + ["css=#\\/formats\\/3__option--3", "css:finder"], + ["xpath=//li[@id='/formats/3__option--3']", "xpath:attributes"], + ["xpath=//ul[@id='/formats/3__listbox']/li[4]", "xpath:idRelative"], + ["xpath=//li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[4]", "xpath:position"] + ], + "value": "" + }, { + "id": "e793e30f-cefa-4a31-9a92-56c49c87b339", + "comment": "", + "command": "click", + "target": "css=.array-add-button", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//array-component/div/div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "f0ae75e7-b2c0-49fa-9806-23f4f228e3e1", + "comment": "", + "command": "type", + "target": "id=/formats/4", + "targets": [ + ["id=/formats/4", "id"], + ["css=#\\/formats\\/4", "css:finder"], + ["xpath=//input[@id='/formats/4']", "xpath:attributes"], + ["xpath=//div[@id='/formats/4-container']/div/input", "xpath:idRelative"], + ["xpath=//li[5]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/input", "xpath:position"] + ], + "value": "name id format" + }, { + "id": "3a97e6c5-badb-45c8-b6e5-a7e8462ee77f", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//button[@type='submit']", "xpath:attributes"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c28d683a-552d-4752-aa89-465e33d60887", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "100902ee-6d6e-4148-a69b-b37746a4ad6e", + "comment": "", + "command": "assertText", + "target": "css=tr:nth-child(1) > .td-lg:nth-child(3)", + "targets": [ + ["css=tr:nth-child(1) > .td-lg:nth-child(3)", "css:finder"], + ["xpath=//td[3]", "xpath:position"], + ["xpath=//td[contains(.,'Entity Attributes Filter')]", "xpath:innerText"] + ], + "value": "Entity Attributes Filter" + }, { + "id": "9cc5dbab-bb39-455d-9338-6bdd054841e0", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .fa-arrow-circle-down", + "targets": [ + ["css=tr:nth-child(1) .fa-arrow-circle-down", "css:finder"], + ["xpath=//button[2]/i", "xpath:position"] + ], + "value": "" + }, { + "id": "febfcea8-8f72-4a17-b1a8-b1e323c8cced", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "c9d498da-9f59-40ae-b5d4-cae397a13766", + "comment": "", + "command": "assertText", + "target": "css=tr:nth-child(1) > .td-lg:nth-child(3)", + "targets": [ + ["css=tr:nth-child(1) > .td-lg:nth-child(3)", "css:finder"], + ["xpath=//td[3]", "xpath:position"], + ["xpath=//td[contains(.,'Name ID Format Filter')]", "xpath:innerText"] + ], + "value": "Name ID Format Filter" + }, { + "id": "1b05bac6-3412-4f4d-b168-0f7fb124e5d0", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .fa-arrow-circle-down", + "targets": [ + ["css=tr:nth-child(1) .fa-arrow-circle-down", "css:finder"], + ["xpath=//button[2]/i", "xpath:position"] + ], + "value": "" + }, { + "id": "4fdc2334-0b93-4f4c-b44e-80656f808f6d", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "441608df-24a3-4a60-bfce-50a90ff0ee16", + "comment": "", + "command": "assertText", + "target": "css=tr:nth-child(1) > .td-lg:nth-child(3)", + "targets": [ + ["css=tr:nth-child(1) > .td-lg:nth-child(3)", "css:finder"], + ["xpath=//td[3]", "xpath:position"], + ["xpath=//td[contains(.,'Entity Attributes Filter')]", "xpath:innerText"] + ], + "value": "Entity Attributes Filter" + }, { + "id": "50677e6f-49ab-467c-bd04-ac6064445b87", + "comment": "", + "command": "click", + "target": "linkText=Dashboard", + "targets": [ + ["linkText=Dashboard", "linkText"], + ["css=.nav-item > .nav-link", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li[2]/a", "xpath:idRelative"], + ["xpath=//a[contains(@href, '/dashboard')]", "xpath:href"], + ["xpath=//li[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Dashboard')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "b01aa467-757f-49a9-97bb-965238f84b9c", + "comment": "", + "command": "click", + "target": "linkText=Metadata Providers", + "targets": [ + ["linkText=Metadata Providers", "linkText"], + ["css=.nav > .nav-item:nth-child(2) > .nav-link", "css:finder"], + ["xpath=//a[contains(text(),'Metadata Providers')]", "xpath:link"], + ["xpath=//a[contains(@href, '/dashboard/metadata/manager/providers')]", "xpath:href"], + ["xpath=//dashboard-page/div/ul/li[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Metadata Providers')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d9f794d9-0d45-41a8-8fa9-55497ba17667", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "2c922b5f-35d4-4c31-bb06-7e936cf8cd1a", + "comment": "", + "command": "click", + "target": "linkText=File Backed HTTP Metadata Provider", + "targets": [ + ["linkText=File Backed HTTP Metadata Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'File Backed HTTP Metadata Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/8324f6d9-5390-4f99-8ca0-f7cd9f08fb71/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'File Backed HTTP Metadata Provider')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "ce07e08e-53a0-423a-9d00-7b0417a9697e", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1)", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "4c543e76-dc9b-4786-b569-4c3071a88f07", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) a", + "targets": [ + ["linkText=Sep 25, 2019 10:20:58 (Current)", "linkText"], + ["css=tr:nth-child(1) a", "css:finder"], + ["xpath=//a[contains(@href, '/metadata/provider/5ac01c48-a78d-42a9-b5fa-fd9a057ebb17/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Sep 25, 2019 10:20:58 (Current)')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "138845c8-0cbf-4cba-b256-8c7e58065c26", + "comment": "", + "command": "click", + "target": "css=.mb-4:nth-child(1) .actions span", + "targets": [ + ["css=.mb-4:nth-child(1) .actions span", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section/div/div/div/button/span", "xpath:idRelative"], + ["xpath=//div/button/span", "xpath:position"], + ["xpath=//span[contains(.,'Edit')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "eb4df817-c23d-47e6-92a8-e013701c90de", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" + }, { + "id": "ae293184-6d83-4ecb-8e25-b757931c49f0", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [], + "value": "Provider Version 2" + }, { + "id": "9c887b33-de0e-4f38-8ea8-d6d0f0a9d841", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "1006ef2d-f7c8-456d-a2fb-96a71625ae89", + "comment": "", + "command": "click", + "target": "css=.btn-outline-secondary", + "targets": [ + ["css=.btn-outline-secondary", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/backupFileInitNextRefreshDelay-container']/div/div/button", "xpath:idRelative"], + ["xpath=//auto-complete/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "33aedef5-ccf2-45b6-a2d9-729d159908c1", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "6ebd7167-8187-4564-b441-213daa903faa", + "comment": "", + "command": "click", + "target": "id=/backupFileInitNextRefreshDelay__option--2", + "targets": [ + ["id=/backupFileInitNextRefreshDelay__option--2", "id"], + ["css=#\\/backupFileInitNextRefreshDelay__option--2", "css:finder"], + ["xpath=//li[@id='/backupFileInitNextRefreshDelay__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/backupFileInitNextRefreshDelay__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[3]", "xpath:position"], + ["xpath=//li[contains(.,'PT1M')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "9e6add34-b3a4-4cbf-a8ca-b1bb262db729", + "comment": "", + "command": "click", + "target": "css=.btn-info", + "targets": [ + ["css=.btn-info", "css:finder"], + ["xpath=//div[2]/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "e5478587-138e-4e8d-94dd-073af6559f07", + "comment": "", + "command": "click", + "target": "css=td > a", + "targets": [ + ["linkText=File Backed HTTP Metadata Provider Version 2", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'File Backed HTTP Metadata Provider Version 2')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/9325baaf-0eac-49d6-9df4-c379703aae7e/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'File Backed HTTP Metadata Provider Version 2')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "8c0f82f1-d6b4-4e62-bdb0-087dd31471cf", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1) > translate-i18n", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "aca347cb-5c59-473b-8771-8706ec762277", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .custom-control-label", + "targets": [ + ["css=tr:nth-child(1) .custom-control-label", "css:finder"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Check to select')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "78651bb7-815c-4267-9fc6-4013a4d8548d", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(2) .custom-control-label", + "targets": [ + ["css=tr:nth-child(2) .custom-control-label", "css:finder"], + ["xpath=//tr[2]/td/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "6733a65d-7c16-4bf4-a6b4-bb3007e08c87", + "comment": "", + "command": "click", + "target": "css=.btn-primary > translate-i18n", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//history-list/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Compare Selected')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "0abf4b7f-cc20-4a29-8338-90a67421dc41", + "comment": "", + "command": "waitForElementVisible", + "target": "css=primitive-property:nth-child(1) .bg-diff > .d-block:nth-child(2)", + "targets": [], + "value": "30000" + }, { + "id": "2b495102-da87-400d-8c70-1758de76452d", + "comment": "", + "command": "assertText", + "target": "css=primitive-property:nth-child(1) .bg-diff > .d-block:nth-child(2)", + "targets": [ + ["css=primitive-property:nth-child(1) .bg-diff > .d-block:nth-child(2)", "css:finder"], + ["xpath=//div/span[2]", "xpath:position"] + ], + "value": "Provider Version 2" + }, { + "id": "63e1b12d-a50a-4877-9588-21209a08b364", + "comment": "", + "command": "assertText", + "target": "css=primitive-property:nth-child(8) .bg-diff > .d-block:nth-child(2)", + "targets": [ + ["css=primitive-property:nth-child(8) .bg-diff > .d-block:nth-child(2)", "css:finder"], + ["xpath=//primitive-property[8]/div/div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'PT1M')]", "xpath:innerText"] + ], + "value": "PT1M" + }, { + "id": "1f3e3d25-ea44-4110-913c-c6dc9a7ec215", + "comment": "", + "command": "click", + "target": "css=.fa-toggle-off", + "targets": [ + ["css=.fa-toggle-off", "css:finder"], + ["xpath=//div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "cfebf080-7825-4412-8a2d-924af79d4b26", + "comment": "", + "command": "assertText", + "target": "css=primitive-property:nth-child(1) .d-block:nth-child(2)", + "targets": [ + ["css=primitive-property:nth-child(1) .d-block:nth-child(2)", "css:finder"], + ["xpath=//div/span[2]", "xpath:position"] + ], + "value": "Provider Version 2" + }, { + "id": "75f45cb6-9c38-44e7-82dc-a473fa7fab62", + "comment": "", + "command": "assertText", + "target": "css=primitive-property:nth-child(2) .d-block:nth-child(2)", + "targets": [ + ["css=primitive-property:nth-child(2) .d-block:nth-child(2)", "css:finder"], + ["xpath=//primitive-property[2]/div/div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'PT1M')]", "xpath:innerText"] + ], + "value": "PT1M" + }, { + "id": "0b097967-1b4e-40cc-b8d7-bd0529fd46d2", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1) > translate-i18n", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "3bd7e8ca-0481-4b94-9037-e75145e2d545", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) a", + "targets": [ + ["linkText=Sep 25, 2019 10:33:02 (Current)", "linkText"], + ["css=tr:nth-child(1) a", "css:finder"], + ["xpath=//a[contains(@href, '/metadata/provider/9325baaf-0eac-49d6-9df4-c379703aae7e/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Sep 25, 2019 10:33:02 (Current)')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d2d4b08e-1056-4c7f-b9c0-b7efa76dfb94", + "comment": "", + "command": "click", + "target": "css=.list-group-item:nth-child(1) > filter-configuration-list-item > .d-flex > .btn", + "targets": [ + ["css=.list-group-item:nth-child(1) > filter-configuration-list-item > .d-flex > .btn", "css:finder"], + ["xpath=//div[@id='filters']/filter-configuration-list/ul/li/filter-configuration-list-item/div/button", "xpath:idRelative"], + ["xpath=//filter-configuration-list-item/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Entity Attributes Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "27db83c9-2893-4958-8547-9496cc73440f", + "comment": "", + "command": "click", + "target": "css=.justify-content-between > .btn:nth-child(1) > translate-i18n", + "targets": [ + ["css=.justify-content-between > .btn:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='filters']/filter-configuration-list/ul/li/filter-configuration-list-item/div[2]/div/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div[2]/div/div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Edit')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "2152a1f9-8608-420c-85d8-368f69260c21", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field118", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "Entity Attributes Filter Version 2" + }, { + "id": "55de5aff-fc78-488f-aa1a-977dabb678dc", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//button[@type='submit']", "xpath:attributes"], + ["xpath=//div[2]/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "97c031ee-65f1-4089-ab43-a4a98bfb3798", + "comment": "", + "command": "click", + "target": "css=.nav-item translate-i18n", + "targets": [ + ["css=.nav-item translate-i18n", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li[2]/a/translate-i18n", "xpath:idRelative"], + ["xpath=//a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Dashboard')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "59391129-1806-43da-9aa1-df5658550d02", + "comment": "", + "command": "click", + "target": "linkText=Metadata Providers", + "targets": [ + ["linkText=Metadata Providers", "linkText"], + ["css=.nav > .nav-item:nth-child(2) > .nav-link", "css:finder"], + ["xpath=//a[contains(text(),'Metadata Providers')]", "xpath:link"], + ["xpath=//a[contains(@href, '/dashboard/metadata/manager/providers')]", "xpath:href"], + ["xpath=//dashboard-page/div/ul/li[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Metadata Providers')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d5d78a35-098e-47c0-8f27-7ab8c79b0661", + "comment": "", + "command": "click", + "target": "css=td > a", + "targets": [ + ["linkText=File Backed HTTP Metadata Provider Version 2", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'File Backed HTTP Metadata Provider Version 2')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/9325baaf-0eac-49d6-9df4-c379703aae7e/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'File Backed HTTP Metadata Provider Version 2')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "42bc2d8d-550f-462b-af96-c3811768e78c", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1) > translate-i18n", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "7df630cc-9134-403c-956c-40ac6646b0d4", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .custom-control-label", + "targets": [ + ["css=tr:nth-child(1) .custom-control-label", "css:finder"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Check to select')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "f3f246d8-bdd4-4fff-9fe2-fbdacac5940e", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(2) .custom-control-label", + "targets": [ + ["css=tr:nth-child(2) .custom-control-label", "css:finder"], + ["xpath=//tr[2]/td/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "ae62dd1e-1474-447b-a0f4-93568e060b0f", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//history-list/button", "xpath:position"], + ["xpath=//button[contains(.,'Compare Selected(2)')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "2ff5a597-9fe0-46b4-9ca5-63123ddb3cef", + "comment": "", + "command": "click", + "target": "css=.d-flex:nth-child(1) > .border-primary:nth-child(2) .fa", + "targets": [ + ["css=.d-flex:nth-child(1) > .border-primary:nth-child(2) .fa", "css:finder"], + ["xpath=//div[2]/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "d5c5a3da-6634-4c1f-8eae-cd87baab22ef", + "comment": "", + "command": "click", + "target": "css=.btn-primary > translate-i18n", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//div[3]/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Compare Selected')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d7b5550d-1db8-4fa5-800f-fde753413c13", + "comment": "", + "command": "assertText", + "target": "css=.bg-diff > .d-block:nth-child(2)", + "targets": [ + ["css=.bg-diff > .d-block:nth-child(2)", "css:finder"], + ["xpath=//section[2]/div/div[2]/object-property/primitive-property/div/div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'Entity Attributes Filter Version 2')]", "xpath:innerText"] + ], + "value": "Entity Attributes Filter Version 2" + }, { + "id": "ad797f09-746e-4778-954e-6f92ac5934ea", + "comment": "", + "command": "assertText", + "target": "css=.bg-diff > .d-block:nth-child(3)", + "targets": [ + ["css=.bg-diff > .d-block:nth-child(3)", "css:finder"], + ["xpath=//section[2]/div/div[2]/object-property/primitive-property/div/div/span[3]", "xpath:position"] + ], + "value": "Entity Attributes Filter" + }] + }], + "suites": [{ + "id": "248ba015-77cd-430f-b973-d14fd4f39a27", + "name": "Default Suite", + "persistSession": false, + "parallel": false, + "timeout": 300, + "tests": ["d87336f9-5279-422f-bf4d-73403f34fc85"] + }], + "urls": ["http://localhost:10101/"], + "plugins": [] +} \ No newline at end of file From f53821964b6abd4cbd2b94788cef8a7cbdb14e92 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Wed, 25 Sep 2019 16:12:53 -0400 Subject: [PATCH 034/211] Fix tests --- .../MetadataResolversControllerIntegrationTests.groovy | 1 - .../tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy | 1 - 2 files changed, 2 deletions(-) diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy index 84c2c72ed..e6b0c2197 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy @@ -259,7 +259,6 @@ class MetadataResolversControllerIntegrationTests extends Specification { def resolver = new DynamicHttpMetadataResolver().with { it.name = 'DynamicHTTP' it.xmlId = 'DynamicHTTP' - it.metadataURL = 'http://metadata' it.metadataRequestURLConstructionScheme = new MetadataQueryProtocolScheme().with { it.transformRef = 'transformRef' it.content = 'content' diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy index cc1403bee..982722ebd 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy @@ -535,7 +535,6 @@ class TestObjectGenerator { new DynamicHttpMetadataResolver().with { it.name = 'DynamicHTTP' it.xmlId = 'DynamicHTTP' - it.metadataURL = 'http://metadata' it.dynamicMetadataResolverAttributes = new DynamicMetadataResolverAttributes().with { it } From 574254be7d71d34580244b89cb90b8d8b907a921 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Wed, 25 Sep 2019 16:04:31 -0700 Subject: [PATCH 035/211] SHIBUI-1478 A couple small Selenium test fixes. Hopefully. --- backend/src/integration/resources/SHIBUI-1392.side | 9 +-------- backend/src/integration/resources/SHIBUI-1407-1.side | 7 +++++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/src/integration/resources/SHIBUI-1392.side b/backend/src/integration/resources/SHIBUI-1392.side index 20cb9c8ee..ec421765b 100644 --- a/backend/src/integration/resources/SHIBUI-1392.side +++ b/backend/src/integration/resources/SHIBUI-1392.side @@ -389,20 +389,13 @@ ["xpath=//p", "xpath:position"] ], "value": "" - }, { - "id": "84be6a98-5739-42e8-b7ca-06a6c86e9f40", - "comment": "", - "command": "editContent", - "target": "id=/nameIdFormatFilterTarget.target", - "targets": [], - "value": "(true);" }, { "id": "05870356-d3db-4540-bb3f-db34b1cf65f1", "comment": "", "command": "sendKeys", "target": "id=/nameIdFormatFilterTarget.target", "targets": [], - "value": "eval" + "value": "eval(true);" }, { "id": "d7721254-68c9-4140-af2a-1757cce99da7", "comment": "", diff --git a/backend/src/integration/resources/SHIBUI-1407-1.side b/backend/src/integration/resources/SHIBUI-1407-1.side index 374834ff5..5960f7fc1 100644 --- a/backend/src/integration/resources/SHIBUI-1407-1.side +++ b/backend/src/integration/resources/SHIBUI-1407-1.side @@ -2187,6 +2187,13 @@ "target": "5000", "targets": [], "value": "" + }, { + "id": "c2fcb197-7e0d-4b64-82a5-ad24cf24126b", + "comment": "", + "command": "waitForElementEditable", + "target": "id=/serviceProviderName", + "targets": [], + "value": "30000" }, { "id": "99731068-2016-4a7f-8a38-febfb711d027", "comment": "", From 192b6609ed0d366e9f9ceaecb0c58ffa9861c32f Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Wed, 25 Sep 2019 23:24:22 -0700 Subject: [PATCH 036/211] SHIBUI-1364 Added more tests for comparing versions of metadata providers with filters. --- .../admin/ui/SeleniumSIDETest.groovy | 4 +- .../integration/resources/SHIBUI-1364-1.side | 81 +- .../integration/resources/SHIBUI-1364-2.side | 1247 +++++++++ .../integration/resources/SHIBUI-1364-3.side | 1471 +++++++++++ .../integration/resources/SHIBUI-1364-4.side | 1293 ++++++++++ backend/src/integration/resources/false.side | 2225 +++++++++++++++++ 6 files changed, 6318 insertions(+), 3 deletions(-) create mode 100644 backend/src/integration/resources/SHIBUI-1364-2.side create mode 100644 backend/src/integration/resources/SHIBUI-1364-3.side create mode 100644 backend/src/integration/resources/SHIBUI-1364-4.side create mode 100644 backend/src/integration/resources/false.side diff --git a/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy b/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy index 989d6a0e5..2b3015595 100644 --- a/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy +++ b/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy @@ -106,7 +106,9 @@ class SeleniumSIDETest extends Specification { // 'SHIBUI-1391: Regex Validation' | '/SHIBUI-1391.side' // 'SHIBUI-1407: Metadata source comparison highlights' | '/SHIBUI-1407-1.side' // 'SHIBUI-1407: Metadata provider comparison highlights' | '/SHIBUI-1407-2.side' - 'SHIBUI-1364: Compare FBHTTPMP with filters' | '/SHIBUI-1364-1.side' +// 'SHIBUI-1364: Compare FBHTTPMP with filters' | '/SHIBUI-1364-1.side' +// 'SHIBUI-1364: Compare FSMP with filters' | '/SHIBUI-1364-2.side' + 'SHIBUI-1364: Compare LDMP with filters' | '/SHIBUI-1364-3.side' } } diff --git a/backend/src/integration/resources/SHIBUI-1364-1.side b/backend/src/integration/resources/SHIBUI-1364-1.side index 2f8a435f8..98fb587ca 100644 --- a/backend/src/integration/resources/SHIBUI-1364-1.side +++ b/backend/src/integration/resources/SHIBUI-1364-1.side @@ -384,7 +384,7 @@ "id": "faf43746-1293-437f-a1ce-63145f5d6135", "comment": "", "command": "pause", - "target": "500", + "target": "1500", "targets": [], "value": "" }, { @@ -404,7 +404,7 @@ "id": "a14576bb-2d15-4e51-89c6-b8289311e58a", "comment": "", "command": "pause", - "target": "500", + "target": "1500", "targets": [], "value": "" }, { @@ -1834,6 +1834,13 @@ ["xpath=//li[contains(.,'PT1M')]", "xpath:innerText"] ], "value": "" + }, { + "id": "accf38c6-12f0-46cc-a174-e8ed589ea431", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" }, { "id": "9e6add34-b3a4-4cbf-a8ca-b1bb262db729", "comment": "", @@ -1845,6 +1852,13 @@ ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] ], "value": "" + }, { + "id": "141842d1-cde8-483a-a9dd-6723fe3642f0", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" }, { "id": "e5478587-138e-4e8d-94dd-073af6559f07", "comment": "", @@ -1871,6 +1885,13 @@ ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] ], "value": "" + }, { + "id": "f2788695-b02e-4405-8082-d9828f7207c3", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" }, { "id": "aca347cb-5c59-473b-8771-8706ec762277", "comment": "", @@ -1986,6 +2007,13 @@ ["xpath=//a[contains(.,'Sep 25, 2019 10:33:02 (Current)')]", "xpath:innerText"] ], "value": "" + }, { + "id": "180eec64-f1c7-4c4d-b34f-3f59258f48ec", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" }, { "id": "d2d4b08e-1056-4c7f-b9c0-b7efa76dfb94", "comment": "", @@ -1998,6 +2026,13 @@ ["xpath=//button[contains(.,'Entity Attributes Filter')]", "xpath:innerText"] ], "value": "" + }, { + "id": "afc71068-d135-466b-9ea0-ca020eb3116f", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" }, { "id": "27db83c9-2893-4958-8547-9496cc73440f", "comment": "", @@ -2010,6 +2045,13 @@ ["xpath=//translate-i18n[contains(.,'Edit')]", "xpath:innerText"] ], "value": "" + }, { + "id": "92d9e04a-f8cc-41b1-ac37-409fe4bb9942", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" }, { "id": "2152a1f9-8608-420c-85d8-368f69260c21", "comment": "", @@ -2035,6 +2077,13 @@ ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] ], "value": "" + }, { + "id": "f7da3042-0a66-4dbc-8d68-7f5ec9c448c1", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" }, { "id": "97c031ee-65f1-4089-ab43-a4a98bfb3798", "comment": "", @@ -2047,6 +2096,13 @@ ["xpath=//translate-i18n[contains(.,'Dashboard')]", "xpath:innerText"] ], "value": "" + }, { + "id": "7e9c196e-0890-43a2-bdb4-48059b1bd17d", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" }, { "id": "59391129-1806-43da-9aa1-df5658550d02", "comment": "", @@ -2061,6 +2117,13 @@ ["xpath=//a[contains(.,'Metadata Providers')]", "xpath:innerText"] ], "value": "" + }, { + "id": "dd64f34c-64bb-4c41-be84-fe6202113e71", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" }, { "id": "d5d78a35-098e-47c0-8f27-7ab8c79b0661", "comment": "", @@ -2075,6 +2138,13 @@ ["xpath=//a[contains(.,'File Backed HTTP Metadata Provider Version 2')]", "xpath:innerText"] ], "value": "" + }, { + "id": "b2974120-ca60-487e-9ea5-7d7af93a6644", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" }, { "id": "42bc2d8d-550f-462b-af96-c3811768e78c", "comment": "", @@ -2087,6 +2157,13 @@ ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] ], "value": "" + }, { + "id": "ada8b6fe-93a7-4f43-9457-2d0256c90744", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" }, { "id": "7df630cc-9134-403c-956c-40ac6646b0d4", "comment": "", diff --git a/backend/src/integration/resources/SHIBUI-1364-2.side b/backend/src/integration/resources/SHIBUI-1364-2.side new file mode 100644 index 000000000..19ec9bb9f --- /dev/null +++ b/backend/src/integration/resources/SHIBUI-1364-2.side @@ -0,0 +1,1247 @@ +{ + "id": "57bde36d-15e6-4364-b117-4fb36e1e4941", + "version": "2.0", + "name": "SHIBUI-1364-2", + "url": "http://localhost:10101", + "tests": [{ + "id": "d87336f9-5279-422f-bf4d-73403f34fc85", + "name": "SHIBUI-1364-2", + "commands": [{ + "id": "7e3c1218-65cd-4730-b715-ca9c922d75d3", + "comment": "", + "command": "open", + "target": "/login", + "targets": [], + "value": "" + }, { + "id": "4a52ace7-3b8c-44f1-8686-89f59a83b968", + "comment": "", + "command": "type", + "target": "name=username", + "targets": [ + ["name=username", "name"], + ["css=tr:nth-child(1) input", "css:finder"], + ["xpath=//input[@name='username']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "admin" + }, { + "id": "e9e6c795-7a41-4231-86b5-6a6c5d013aa2", + "comment": "", + "command": "type", + "target": "name=password", + "targets": [ + ["name=password", "name"], + ["css=tr:nth-child(2) input", "css:finder"], + ["xpath=//input[@name='password']", "xpath:attributes"], + ["xpath=//tr[2]/td[2]/input", "xpath:position"] + ], + "value": "adminpass" + }, { + "id": "185a1e41-d3a3-4627-aae2-7f05059e9c7d", + "comment": "", + "command": "click", + "target": "name=submit", + "targets": [ + ["name=submit", "name"], + ["css=td:nth-child(1) > input", "css:finder"], + ["xpath=//input[@name='submit']", "xpath:attributes"], + ["xpath=//tr[3]/td/input", "xpath:position"] + ], + "value": "" + }, { + "id": "94e01321-ac2d-427f-89a5-7f816cea0f00", + "comment": "", + "command": "click", + "target": "css=#addNewDropdown > translate-i18n", + "targets": [ + ["css=#addNewDropdown > translate-i18n", "css:finder"], + ["xpath=//button[@id='addNewDropdown']/translate-i18n", "xpath:idRelative"], + ["xpath=//translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Add New')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c65500ae-3b08-4c22-8c88-b4116d6e0c9b", + "comment": "", + "command": "click", + "target": "linkText=Metadata Provider", + "targets": [ + ["linkText=Metadata Provider", "linkText"], + ["css=.nav-link:nth-child(2)", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li/div/a[2]", "xpath:idRelative"], + ["xpath=(//a[contains(@href, '')])[3]", "xpath:href"], + ["xpath=//a[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "c5ec3177-5a66-4901-a644-8c6cfbb99254", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/name", + "targets": [], + "value": "10000" + }, { + "id": "d093ad38-ab2d-4441-a60b-2c094d6938f9", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field4", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Filesystem Metadata Provider" + }, { + "id": "aac150b1-6140-476b-8bdb-ebb83a14812d", + "comment": "", + "command": "select", + "target": "id=/type", + "targets": [ + ["id=/type", "id"], + ["name=field2", "name"], + ["css=#\\/type", "css:finder"], + ["xpath=//select[@id='/type']", "xpath:attributes"], + ["xpath=//select", "xpath:position"] + ], + "value": "label=FilesystemMetadataProvider" + }, { + "id": "7a60cb3c-ed3c-495c-8329-2fe52e72cceb", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[2]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "8cbc5dce-126e-4fb6-afcd-9651d9be6ba2", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/xmlId", + "targets": [], + "value": "10000" + }, { + "id": "c140099c-f6e3-4600-92b3-5b97e07a95ee", + "comment": "", + "command": "type", + "target": "id=/xmlId", + "targets": [ + ["id=/xmlId", "id"], + ["name=field7", "name"], + ["css=#\\/xmlId", "css:finder"], + ["xpath=//input[@id='/xmlId']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "12345" + }, { + "id": "e2e3a3e4-196c-483d-ac52-de4027636a05", + "comment": "", + "command": "type", + "target": "id=/metadataFile", + "targets": [ + ["id=/metadataFile", "id"], + ["name=field8", "name"], + ["css=#\\/metadataFile", "css:finder"], + ["xpath=//input[@id='/metadataFile']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "%{idp.home}/metadata.txt" + }, { + "id": "5f32dd3f-a1d0-4ca3-9f2d-8a9cc6141004", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "46a436e6-c122-4e28-b09c-0383ec5eb204", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "8197c49f-a70f-46dd-919e-58fff0e14075", + "comment": "", + "command": "click", + "target": "css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay-container .btn", + "targets": [ + ["css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/reloadableMetadataResolverAttributes/minRefreshDelay-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "ed02df07-4c70-4824-b4f8-e642a1b4e0c3", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "0f1a7a34-0955-45bb-bd2a-a5e4f246869b", + "comment": "", + "command": "click", + "target": "id=/reloadableMetadataResolverAttributes/minRefreshDelay__option--1", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/minRefreshDelay__option--1", "id"], + ["css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay__option--1", "css:finder"], + ["xpath=//li[@id='/reloadableMetadataResolverAttributes/minRefreshDelay__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/reloadableMetadataResolverAttributes/minRefreshDelay__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[2]", "xpath:position"], + ["xpath=//li[contains(.,'PT30S')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1887c6e3-9748-42fc-938e-14c5567d2f41", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "64d0912a-0244-4f5e-818f-17000c01477b", + "comment": "", + "command": "click", + "target": "css=#\\/reloadableMetadataResolverAttributes\\/maxRefreshDelay-container .btn", + "targets": [ + ["css=#\\/reloadableMetadataResolverAttributes\\/maxRefreshDelay-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[3]", "xpath:attributes"], + ["xpath=//div[@id='/reloadableMetadataResolverAttributes/maxRefreshDelay-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "21c54b64-910a-4a9d-b96c-ec9ede9e7f51", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "80a08176-de7d-4938-8d49-1d296a8ba27c", + "comment": "", + "command": "click", + "target": "id=/reloadableMetadataResolverAttributes/maxRefreshDelay__option--2", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/maxRefreshDelay__option--2", "id"], + ["css=#\\/reloadableMetadataResolverAttributes\\/maxRefreshDelay__option--2", "css:finder"], + ["xpath=//li[@id='/reloadableMetadataResolverAttributes/maxRefreshDelay__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/reloadableMetadataResolverAttributes/maxRefreshDelay__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "f5d73c96-8567-40da-8c7e-be7524050cb8", + "comment": "", + "command": "click", + "target": "id=/reloadableMetadataResolverAttributes/refreshDelayFactor", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/refreshDelayFactor", "id"], + ["name=field14", "name"], + ["css=#\\/reloadableMetadataResolverAttributes\\/refreshDelayFactor", "css:finder"], + ["xpath=//input[@id='/reloadableMetadataResolverAttributes/refreshDelayFactor']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "85e3eefd-43e7-43b7-b33e-a2c75149ba0c", + "comment": "", + "command": "type", + "target": "id=/reloadableMetadataResolverAttributes/refreshDelayFactor", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/refreshDelayFactor", "id"], + ["name=field14", "name"], + ["css=#\\/reloadableMetadataResolverAttributes\\/refreshDelayFactor", "css:finder"], + ["xpath=//input[@id='/reloadableMetadataResolverAttributes/refreshDelayFactor']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "0.5" + }, { + "id": "9c67eec5-eb13-4aaa-9071-e23abb1b7c4b", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "c5fbaf24-139b-4886-a437-ef41a695bbc9", + "comment": "", + "command": "click", + "target": "css=.custom-control-label", + "targets": [ + ["css=.custom-control-label", "css:finder"], + ["xpath=//div[@id='/enabled.parent']/label", "xpath:idRelative"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Enable Metadata Provider?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "7fcdaee3-5714-4c5a-93a7-b1b15c6b24e1", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//span[2]/i", "xpath:position"] + ], + "value": "" + }, { + "id": "27c0717e-f477-448b-8091-3bb2f3e6080f", + "comment": "", + "command": "waitForElementVisible", + "target": "css=td:nth-child(3)", + "targets": [], + "value": "10000" + }, { + "id": "20f7b832-ec52-450a-8224-399f0d4de0a0", + "comment": "", + "command": "assertText", + "target": "css=td:nth-child(3)", + "targets": [ + ["css=td:nth-child(3)", "css:finder"], + ["xpath=//td[3]", "xpath:position"], + ["xpath=//td[contains(.,'FilesystemMetadataResolver')]", "xpath:innerText"] + ], + "value": "FilesystemMetadataResolver" + }, { + "id": "7548f260-d328-4b47-97ed-cf6df394b6bc", + "comment": "", + "command": "click", + "target": "linkText=Filesystem Metadata Provider", + "targets": [ + ["linkText=Filesystem Metadata Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Filesystem Metadata Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/5ddf2624-1a30-4709-8873-35bbba4a372f/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Filesystem Metadata Provider')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "11d71ffb-3372-41cb-9832-72755ef298b5", + "comment": "", + "command": "click", + "target": "css=.btn:nth-child(2) > translate-i18n", + "targets": [ + ["css=.btn:nth-child(2) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/button/translate-i18n", "xpath:idRelative"], + ["xpath=//div/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Filters')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "b7312cb1-744c-429f-a6fa-58635f7a1fea", + "comment": "", + "command": "click", + "target": "css=#filters .actions span", + "targets": [ + ["css=#filters .actions span", "css:finder"], + ["xpath=//div[@id='filters']/div/div/a/span", "xpath:idRelative"], + ["xpath=//div/a/span", "xpath:position"], + ["xpath=//span[contains(.,'Add Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "2ba34b77-bac1-48f4-b2ef-c3a4f93e9b51", + "comment": "", + "command": "select", + "target": "name=type", + "targets": [], + "value": "label=EntityAttributes" + }, { + "id": "73f3151e-9a9f-4f6c-b3d4-93560b3e42bb", + "comment": "", + "command": "click", + "target": "css=option:nth-child(2)", + "targets": [ + ["css=option:nth-child(2)", "css:finder"], + ["xpath=//option[@value='EntityAttributes']", "xpath:attributes"], + ["xpath=//option[2]", "xpath:position"], + ["xpath=//option[contains(.,'EntityAttributes')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "a8ee94c0-d4f2-47f1-974e-09308193e6dd", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/name", + "targets": [], + "value": "10000" + }, { + "id": "3edb4fc7-f24c-440b-8403-974304f0b4ac", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field18", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Entity Attributes" + }, { + "id": "36dac228-9203-4f2e-a623-db41ef8c019f", + "comment": "", + "command": "pause", + "target": "5000", + "targets": [], + "value": "" + }, { + "id": "f2c07797-07f6-4325-8c5f-57a676dc982c", + "comment": "", + "command": "click", + "target": "id=/entityAttributesFilterTarget.valuedd", + "targets": [ + ["id=/entityAttributesFilterTarget.valuedd", "id"], + ["css=#\\/entityAttributesFilterTarget\\.valuedd", "css:finder"], + ["xpath=//button[@id='/entityAttributesFilterTarget.valuedd']", "xpath:attributes"], + ["xpath=//fieldset/div/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1c424cfa-8201-40df-b8ed-ddec065dfd66", + "comment": "", + "command": "pause", + "target": "5000", + "targets": [], + "value": "" + }, { + "id": "bca61e15-7c13-4007-8c90-1a667bbef67d", + "comment": "", + "command": "click", + "target": "linkText=Regex", + "targets": [ + ["linkText=Regex", "linkText"], + ["css=.dropdown-item:nth-child(2)", "css:finder"], + ["xpath=//a[contains(text(),'Regex')]", "xpath:link"], + ["xpath=(//a[contains(@href, '#')])[2]", "xpath:href"], + ["xpath=//div/div/a[2]", "xpath:position"], + ["xpath=//a[contains(.,'Regex')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "98f6eea0-36ff-449c-b042-98b87f0d3a70", + "comment": "", + "command": "pause", + "target": "5000", + "targets": [], + "value": "" + }, { + "id": "e0c65de5-d74a-4d87-aca0-9e9f4b37fb36", + "comment": "", + "command": "click", + "target": "id=/entityAttributesFilterTarget.target", + "targets": [ + ["id=/entityAttributesFilterTarget.target", "id"], + ["name=script", "name"], + ["css=#\\/entityAttributesFilterTarget\\.target", "css:finder"], + ["xpath=//input[@id='/entityAttributesFilterTarget.target']", "xpath:attributes"], + ["xpath=//div/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "70a43e87-7180-4761-8f64-d69c7c7557e5", + "comment": "", + "command": "sendKeys", + "target": "id=/entityAttributesFilterTarget.target", + "targets": [], + "value": "/foo.*/" + }, { + "id": "ce3cf65a-40bd-43fe-beb7-dc3e1d79927b", + "comment": "", + "command": "click", + "target": "css=#\\/filterEnabled\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/filterEnabled\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/filterEnabled.parent']/label", "xpath:idRelative"], + ["xpath=//checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Enable Filter?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "2eea7d5e-e992-4c85-94da-4537e4863228", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/signAssertion\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/signAssertion\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/signAssertion.parent']/label", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Sign the Assertion?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "f34181b8-eac5-4ce7-8776-0f87cf938503", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/dontSignResponse\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/dontSignResponse\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/dontSignResponse.parent']/label", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "06699eac-9dcc-46ea-a520-bd8117deab97", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/turnOffEncryption\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/turnOffEncryption\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/turnOffEncryption.parent']/label", "xpath:idRelative"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Turn off Encryption of Response?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "891515dc-c75b-45f7-b33e-05760891e9aa", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/forceAuthn\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/forceAuthn\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/forceAuthn.parent']/label", "xpath:idRelative"], + ["xpath=//div[10]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Force AuthN')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1c315922-1f5a-43a5-97fd-1767f3392471", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(5) .custom-control-label", + "targets": [ + ["css=tr:nth-child(5) .custom-control-label", "css:finder"], + ["xpath=//tr[5]/td[2]/fieldset/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Toggle givenName')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "9569fc2c-5b8d-4724-bf1c-5a2a9af253bd", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(9) .custom-control-label", + "targets": [ + ["css=tr:nth-child(9) .custom-control-label", "css:finder"], + ["xpath=//tr[9]/td[2]/fieldset/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Toggle eduPersonEntitlement')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "f2cfdab4-af65-45b5-b62a-56935ae15637", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//button[@type='submit']", "xpath:attributes"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "86d92dcf-e856-4578-8a0d-25b4121ad69e", + "comment": "", + "command": "waitForElementVisible", + "target": "linkText=Add Filter", + "targets": [ + ["linkText=Add Filter", "linkText"], + ["css=.btn-success", "css:finder"], + ["xpath=//a[contains(@href, '/metadata/provider/45943457-0dd0-486b-b111-19ae6dd6896c/filter/new')]", "xpath:href"], + ["xpath=//div[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Add Filter')]", "xpath:innerText"] + ], + "value": "10000" + }, { + "id": "bc3e5810-89fb-42de-92da-e9336b29ebd3", + "comment": "", + "command": "click", + "target": "linkText=Add Filter", + "targets": [ + ["linkText=Add Filter", "linkText"], + ["css=.btn-success", "css:finder"], + ["xpath=//a[contains(@href, '/metadata/provider/dbc814ac-890b-4f11-b3e0-3a2d667fa5cd/filter/new')]", "xpath:href"], + ["xpath=//div[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Add Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "094ce013-936c-4479-9c5b-ba26db4d05c9", + "comment": "", + "command": "waitForElementVisible", + "target": "name=type", + "targets": [ + ["name=type", "name"], + ["css=.form-control", "css:finder"], + ["xpath=//select[@name='type']", "xpath:attributes"], + ["xpath=//select", "xpath:position"] + ], + "value": "10000" + }, { + "id": "f6d537b3-74ab-430f-9688-b7c90516cfc0", + "comment": "", + "command": "select", + "target": "name=type", + "targets": [], + "value": "label=NameIDFormat" + }, { + "id": "471c00e2-52d8-4cf7-a071-00b50c98bf9e", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/name", + "targets": [], + "value": "10000" + }, { + "id": "8b0dfae1-5e58-4943-ae62-cad5d32ea203", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field37", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Name ID Filter" + }, { + "id": "ec49b089-a390-4cff-904f-363d3a57cb76", + "comment": "", + "command": "click", + "target": "id=/nameIdFormatFilterTarget.valuedd", + "targets": [ + ["id=/nameIdFormatFilterTarget.valuedd", "id"], + ["css=#\\/nameIdFormatFilterTarget\\.valuedd", "css:finder"], + ["xpath=//button[@id='/nameIdFormatFilterTarget.valuedd']", "xpath:attributes"], + ["xpath=//fieldset/div/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "56abaabc-0c96-428c-9070-62a79ba90c6c", + "comment": "", + "command": "click", + "target": "linkText=Entity ID", + "targets": [ + ["linkText=Entity ID", "linkText"], + ["css=.show > .dropdown-item:nth-child(1)", "css:finder"], + ["xpath=//a[contains(text(),'Entity ID')]", "xpath:link"], + ["xpath=//a[contains(@href, '#')]", "xpath:href"], + ["xpath=//div/div/a", "xpath:position"], + ["xpath=//a[contains(.,'Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "3f8bc2f3-ee80-410f-aa5d-33aea08bf991", + "comment": "", + "command": "type", + "target": "id=/nameIdFormatFilterTarget.target", + "targets": [ + ["id=/nameIdFormatFilterTarget.target", "id"], + ["css=#\\/nameIdFormatFilterTarget\\.target", "css:finder"], + ["xpath=//input[@id='/nameIdFormatFilterTarget.target']", "xpath:attributes"], + ["xpath=//div[@id='-container']/div/input", "xpath:idRelative"], + ["xpath=//div/div/input", "xpath:position"] + ], + "value": "unicon" + }, { + "id": "7129e60b-fecc-436f-b055-0f377ade83f8", + "comment": "", + "command": "click", + "target": "css=.btn-success:nth-child(1)", + "targets": [ + ["css=.btn-success:nth-child(1)", "css:finder"], + ["xpath=//div[2]/button", "xpath:position"], + ["xpath=//button[contains(.,'Add Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "93a29942-d580-412b-b151-9961fd1495d0", + "comment": "", + "command": "click", + "target": "css=#\\/filterEnabled\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/filterEnabled\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/filterEnabled.parent']/label", "xpath:idRelative"], + ["xpath=//checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Enable Filter?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c0ab05f8-13f7-4e4a-bf02-2118629eca43", + "comment": "", + "command": "click", + "target": "css=.btn-success > translate-i18n", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//array-component/div/div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "f0b7296b-004d-445e-9ebd-6bbd9052b30f", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "028122a4-7a5c-4ee9-afb9-5f7d491cc9bd", + "comment": "", + "command": "click", + "target": "css=.input-group-append > .btn", + "targets": [ + ["css=.input-group-append > .btn", "css:finder"], + ["xpath=(//button[@type='button'])[3]", "xpath:attributes"], + ["xpath=//div[@id='/formats/0-container']/div/div/button", "xpath:idRelative"], + ["xpath=//auto-complete/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "e3c2c21f-408c-48f2-a2dd-9241123f0ead", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "e50612f4-b0e4-4749-99ec-5c67e66cd398", + "comment": "", + "command": "click", + "target": "id=/formats/0__option--1", + "targets": [ + ["id=/formats/0__option--1", "id"], + ["css=#\\/formats\\/0__option--1", "css:finder"], + ["xpath=//li[@id='/formats/0__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/formats/0__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "952930b1-160e-42cd-9be5-c44f397a1451", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//button[@type='submit']", "xpath:attributes"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "eca1d3dd-9e47-49d2-b4a1-a45c2b6c8c3a", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "d722902b-5c10-45dc-99df-d96f46e78313", + "comment": "", + "command": "assertText", + "target": "css=tr:nth-child(1) > .td-lg:nth-child(4)", + "targets": [ + ["css=tr:nth-child(1) > .td-lg:nth-child(4)", "css:finder"], + ["xpath=//td[4]", "xpath:position"], + ["xpath=//td[contains(.,'EntityAttributes')]", "xpath:innerText"] + ], + "value": "EntityAttributes" + }, { + "id": "c8d9bc5a-4b7e-4178-8aba-8b8280506c20", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .fa-arrow-circle-down", + "targets": [ + ["css=tr:nth-child(1) .fa-arrow-circle-down", "css:finder"], + ["xpath=//button[2]/i", "xpath:position"] + ], + "value": "" + }, { + "id": "d25400e1-127e-4b8c-b7e2-ade937cfd5a0", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "d7909094-96ce-4532-98b4-446cc013c9c8", + "comment": "", + "command": "assertText", + "target": "css=tr:nth-child(1) > .td-lg:nth-child(4)", + "targets": [ + ["css=tr:nth-child(1) > .td-lg:nth-child(4)", "css:finder"], + ["xpath=//td[4]", "xpath:position"], + ["xpath=//td[contains(.,'NameIDFormat')]", "xpath:innerText"] + ], + "value": "NameIDFormat" + }, { + "id": "d49c5a8e-35f3-4498-a53b-2b03fcc79552", + "comment": "", + "command": "click", + "target": "css=.nav-item translate-i18n", + "targets": [ + ["css=.nav-item translate-i18n", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li[2]/a/translate-i18n", "xpath:idRelative"], + ["xpath=//a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Dashboard')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "fc58a8d5-f526-4a7c-8475-dbfbeae5cec4", + "comment": "", + "command": "click", + "target": "linkText=Metadata Providers", + "targets": [ + ["linkText=Metadata Providers", "linkText"], + ["css=.nav > .nav-item:nth-child(2) > .nav-link", "css:finder"], + ["xpath=//a[contains(text(),'Metadata Providers')]", "xpath:link"], + ["xpath=//a[contains(@href, '/dashboard/metadata/manager/providers')]", "xpath:href"], + ["xpath=//dashboard-page/div/ul/li[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Metadata Providers')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "fbdf6b10-dd49-402c-8a2f-c8b837505b05", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "1d36be5e-e705-4528-bd80-ae3566cb9b6a", + "comment": "", + "command": "click", + "target": "linkText=Filesystem Metadata Provider", + "targets": [ + ["linkText=Filesystem Metadata Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Filesystem Metadata Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/c90805c1-6468-4164-b9f1-fad547d31232/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Filesystem Metadata Provider')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "465f12fa-e547-4a1b-bea7-7998efca7f85", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "73335934-98c5-4427-9e05-13ddc7f00432", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1) > translate-i18n", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d5d51069-35a1-4d40-a88d-e51d674d9f72", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "cc66db21-0f0b-4d85-8ce6-775c3e58de89", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) a", + "targets": [ + ["linkText=Sep 25, 2019 22:44:09 (Current)", "linkText"], + ["css=tr:nth-child(1) a", "css:finder"], + ["xpath=//a[contains(@href, '/metadata/provider/c90805c1-6468-4164-b9f1-fad547d31232/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Sep 25, 2019 22:44:09 (Current)')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "0aab0bfa-7866-41ea-a58c-9b6e8fb52bbc", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "976c8149-9620-490c-887b-a23226619f0d", + "comment": "", + "command": "click", + "target": "css=.mb-4:nth-child(1) .actions span", + "targets": [ + ["css=.mb-4:nth-child(1) .actions span", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section/div/div/div/button/span", "xpath:idRelative"], + ["xpath=//div/button/span", "xpath:position"], + ["xpath=//span[contains(.,'Edit')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "6796aa25-00fa-4cf2-9a74-0c0aa6151863", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "0362fb34-4886-4f0d-8190-e006dc46df7c", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field61", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Filesystem Metadata Provider V2" + }, { + "id": "9d0539c7-e34c-4229-bbcf-d2c9fd499db4", + "comment": "", + "command": "type", + "target": "id=/xmlId", + "targets": [ + ["id=/xmlId", "id"], + ["name=field64", "name"], + ["css=#\\/xmlId", "css:finder"], + ["xpath=//input[@id='/xmlId']", "xpath:attributes"], + ["xpath=//fieldset[2]/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "123456" + }, { + "id": "93d98797-5117-4aca-ace8-c6c7e79976ee", + "comment": "", + "command": "click", + "target": "css=.btn-info > translate-i18n", + "targets": [ + ["css=.btn-info > translate-i18n", "css:finder"], + ["xpath=//div[2]/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "483aa6e8-f1b6-4a74-a7d6-38fd3a6b646f", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "bc0e9370-b6f7-40b0-93b2-1051954e4298", + "comment": "", + "command": "click", + "target": "linkText=Filesystem Metadata Provider V2", + "targets": [ + ["linkText=Filesystem Metadata Provider V2", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Filesystem Metadata Provider V2')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/c90805c1-6468-4164-b9f1-fad547d31232/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Filesystem Metadata Provider V2')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "a5885119-3102-4d0a-a0ea-d5517a94c6d8", + "comment": "", + "command": "assertText", + "target": "css=.d-block > primitive-property:nth-child(1) .text-truncate", + "targets": [ + ["css=.d-block > primitive-property:nth-child(1) .text-truncate", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section/div/div[2]/object-property/primitive-property/div/div/span[2]", "xpath:idRelative"], + ["xpath=//div/span[2]", "xpath:position"] + ], + "value": "Filesystem Metadata Provider V2" + }, { + "id": "23281755-0ef4-404d-bf3f-626bcc495710", + "comment": "", + "command": "assertText", + "target": "css=.d-block > primitive-property:nth-child(3) .text-truncate", + "targets": [ + ["css=.d-block > primitive-property:nth-child(3) .text-truncate", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section/div/div[2]/object-property/primitive-property[3]/div/div/span[2]", "xpath:idRelative"], + ["xpath=//primitive-property[3]/div/div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'123456')]", "xpath:innerText"] + ], + "value": "123456" + }, { + "id": "39bf8d48-8a95-42fa-8e9e-fe76584f05d1", + "comment": "", + "command": "click", + "target": "css=.btn:nth-child(2) > translate-i18n", + "targets": [ + ["css=.btn:nth-child(2) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/button/translate-i18n", "xpath:idRelative"], + ["xpath=//div/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Filters')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "642991a1-3ab6-4941-a524-62b9d6307cd1", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "c7163d8a-e960-4156-a41c-7d1ce46ad815", + "comment": "", + "command": "click", + "target": "css=.list-group-item:nth-child(1) > filter-configuration-list-item > .d-flex > .btn", + "targets": [ + ["css=.list-group-item:nth-child(1) > filter-configuration-list-item > .d-flex > .btn", "css:finder"], + ["xpath=//div[@id='filters']/filter-configuration-list/ul/li/filter-configuration-list-item/div/button", "xpath:idRelative"], + ["xpath=//filter-configuration-list-item/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Name ID Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "75e9b3fa-b677-4a8d-8175-cbb76c59beb5", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "b24c91ba-4b08-4467-abef-8b5a9f02da8f", + "comment": "", + "command": "click", + "target": "css=.justify-content-between > .btn:nth-child(1) > translate-i18n", + "targets": [ + ["css=.justify-content-between > .btn:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='filters']/filter-configuration-list/ul/li/filter-configuration-list-item/div[2]/div/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div[2]/div/div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Edit')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "ea24e7e6-4580-4875-b56f-f965765b4c86", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field68", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "Name ID Filter V2" + }, { + "id": "094f38d5-ed9f-4d23-9ad2-c25c0c8befc0", + "comment": "", + "command": "click", + "target": "css=.btn-primary > translate-i18n", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//div[2]/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "4ff30289-7e28-4402-bc9d-df75864fed75", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "3b5e6867-ef70-4e49-9a47-f560c76b7959", + "comment": "", + "command": "click", + "target": "css=.nav-item translate-i18n", + "targets": [ + ["css=.nav-item translate-i18n", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li[2]/a/translate-i18n", "xpath:idRelative"], + ["xpath=//a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Dashboard')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "fce3af79-af89-4a7b-856a-90967ca2406c", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "686d7c7d-8f5c-4560-be0e-26b8eef057f5", + "comment": "", + "command": "click", + "target": "linkText=Metadata Providers", + "targets": [ + ["linkText=Metadata Providers", "linkText"], + ["css=.nav > .nav-item:nth-child(2) > .nav-link", "css:finder"], + ["xpath=//a[contains(text(),'Metadata Providers')]", "xpath:link"], + ["xpath=//a[contains(@href, '/dashboard/metadata/manager/providers')]", "xpath:href"], + ["xpath=//dashboard-page/div/ul/li[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Metadata Providers')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "b7190fba-d4aa-4c7d-ba7e-e3e1447ec599", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "499ba6ae-7a8e-47d9-931a-57043cdc497d", + "comment": "", + "command": "click", + "target": "linkText=Filesystem Metadata Provider V2", + "targets": [ + ["linkText=Filesystem Metadata Provider V2", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Filesystem Metadata Provider V2')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/c90805c1-6468-4164-b9f1-fad547d31232/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Filesystem Metadata Provider V2')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "eaf3820f-d359-4c96-810d-b59b21f1ae71", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "d1645987-c4a3-473a-b830-48559708d23a", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1) > translate-i18n", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "2aba4862-7084-43d8-a4c0-856250d64458", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "5659bf0f-0ce6-4144-93dc-e5579a578b13", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .custom-control-label", + "targets": [ + ["css=tr:nth-child(1) .custom-control-label", "css:finder"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Check to select')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "701ea8df-7951-4544-89f0-0324c221d3da", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(2) .custom-control-label", + "targets": [ + ["css=tr:nth-child(2) .custom-control-label", "css:finder"], + ["xpath=//tr[2]/td/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "00c205c8-aa6d-4627-b063-ea8f8a02c7e9", + "comment": "", + "command": "click", + "target": "css=.btn-primary > translate-i18n", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//history-list/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Compare Selected')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c5f5881d-c6e3-4392-a1c1-6889b4b548b8", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "78d01216-5d2b-4067-a830-95eae9356738", + "comment": "", + "command": "click", + "target": "css=.d-flex:nth-child(1) > .border-primary:nth-child(2) .fa", + "targets": [ + ["css=.d-flex:nth-child(1) > .border-primary:nth-child(2) .fa", "css:finder"], + ["xpath=//div[2]/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "2cd5f1b5-f20d-44b9-b9aa-bd9079766088", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "dd7b9b74-ebf1-45b8-a91a-627f06f83996", + "comment": "", + "command": "click", + "target": "css=.btn-primary > translate-i18n", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//div[3]/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Compare Selected')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "08c5c802-f699-4eca-a727-8130db305f43", + "comment": "", + "command": "assertText", + "target": "css=.bg-diff > .d-block:nth-child(2)", + "targets": [ + ["css=.bg-diff > .d-block:nth-child(2)", "css:finder"], + ["xpath=//section[2]/div/div[2]/object-property/primitive-property/div/div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'Name ID Filter V2')]", "xpath:innerText"] + ], + "value": "Name ID Filter V2" + }, { + "id": "974ef62f-ae68-4c32-b439-b4ca8666aaa5", + "comment": "", + "command": "assertText", + "target": "css=.bg-diff > .d-block:nth-child(3)", + "targets": [ + ["css=.bg-diff > .d-block:nth-child(3)", "css:finder"], + ["xpath=//section[2]/div/div[2]/object-property/primitive-property/div/div/span[3]", "xpath:position"] + ], + "value": "Name ID Filter" + }] + }], + "suites": [{ + "id": "248ba015-77cd-430f-b973-d14fd4f39a27", + "name": "Default Suite", + "persistSession": false, + "parallel": false, + "timeout": 300, + "tests": ["d87336f9-5279-422f-bf4d-73403f34fc85"] + }], + "urls": ["http://localhost:10101/"], + "plugins": [] +} \ No newline at end of file diff --git a/backend/src/integration/resources/SHIBUI-1364-3.side b/backend/src/integration/resources/SHIBUI-1364-3.side new file mode 100644 index 000000000..25e9f3990 --- /dev/null +++ b/backend/src/integration/resources/SHIBUI-1364-3.side @@ -0,0 +1,1471 @@ +{ + "id": "57bde36d-15e6-4364-b117-4fb36e1e4941", + "version": "2.0", + "name": "SHIBUI-1364-3", + "url": "http://localhost:10101", + "tests": [{ + "id": "d87336f9-5279-422f-bf4d-73403f34fc85", + "name": "SHIBUI-1364-3", + "commands": [{ + "id": "7e3c1218-65cd-4730-b715-ca9c922d75d3", + "comment": "", + "command": "open", + "target": "/login", + "targets": [], + "value": "" + }, { + "id": "4a52ace7-3b8c-44f1-8686-89f59a83b968", + "comment": "", + "command": "type", + "target": "name=username", + "targets": [ + ["name=username", "name"], + ["css=tr:nth-child(1) input", "css:finder"], + ["xpath=//input[@name='username']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "admin" + }, { + "id": "e9e6c795-7a41-4231-86b5-6a6c5d013aa2", + "comment": "", + "command": "type", + "target": "name=password", + "targets": [ + ["name=password", "name"], + ["css=tr:nth-child(2) input", "css:finder"], + ["xpath=//input[@name='password']", "xpath:attributes"], + ["xpath=//tr[2]/td[2]/input", "xpath:position"] + ], + "value": "adminpass" + }, { + "id": "185a1e41-d3a3-4627-aae2-7f05059e9c7d", + "comment": "", + "command": "click", + "target": "name=submit", + "targets": [ + ["name=submit", "name"], + ["css=td:nth-child(1) > input", "css:finder"], + ["xpath=//input[@name='submit']", "xpath:attributes"], + ["xpath=//tr[3]/td/input", "xpath:position"] + ], + "value": "" + }, { + "id": "94e01321-ac2d-427f-89a5-7f816cea0f00", + "comment": "", + "command": "click", + "target": "css=#addNewDropdown > translate-i18n", + "targets": [ + ["css=#addNewDropdown > translate-i18n", "css:finder"], + ["xpath=//button[@id='addNewDropdown']/translate-i18n", "xpath:idRelative"], + ["xpath=//translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Add New')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c65500ae-3b08-4c22-8c88-b4116d6e0c9b", + "comment": "", + "command": "click", + "target": "linkText=Metadata Provider", + "targets": [ + ["linkText=Metadata Provider", "linkText"], + ["css=.nav-link:nth-child(2)", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li/div/a[2]", "xpath:idRelative"], + ["xpath=(//a[contains(@href, '')])[3]", "xpath:href"], + ["xpath=//a[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "c5ec3177-5a66-4901-a644-8c6cfbb99254", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/name", + "targets": [], + "value": "10000" + }, { + "id": "d093ad38-ab2d-4441-a60b-2c094d6938f9", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field4", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Local Dynamic Metadata Provider" + }, { + "id": "aac150b1-6140-476b-8bdb-ebb83a14812d", + "comment": "", + "command": "select", + "target": "id=/type", + "targets": [ + ["id=/type", "id"], + ["name=field2", "name"], + ["css=#\\/type", "css:finder"], + ["xpath=//select[@id='/type']", "xpath:attributes"], + ["xpath=//select", "xpath:position"] + ], + "value": "label=LocalDynamicMetadataProvider" + }, { + "id": "7a60cb3c-ed3c-495c-8329-2fe52e72cceb", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[2]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "8cbc5dce-126e-4fb6-afcd-9651d9be6ba2", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/xmlId", + "targets": [], + "value": "10000" + }, { + "id": "c140099c-f6e3-4600-92b3-5b97e07a95ee", + "comment": "", + "command": "type", + "target": "id=/xmlId", + "targets": [ + ["id=/xmlId", "id"], + ["name=field7", "name"], + ["css=#\\/xmlId", "css:finder"], + ["xpath=//input[@id='/xmlId']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "12345" + }, { + "id": "e2e3a3e4-196c-483d-ac52-de4027636a05", + "comment": "", + "command": "type", + "target": "id=/sourceDirectory", + "targets": [ + ["id=/sourceDirectory", "id"], + ["name=field8", "name"], + ["css=#\\/sourceDirectory", "css:finder"], + ["xpath=//input[@id='/sourceDirectory']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "%{idp.home}/foo" + }, { + "id": "5f32dd3f-a1d0-4ca3-9f2d-8a9cc6141004", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "0586f02c-c210-4e44-9a86-3e914bc94f3b", + "comment": "", + "command": "type", + "target": "id=/dynamicMetadataResolverAttributes/refreshDelayFactor", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/refreshDelayFactor", "id"], + ["name=field11", "name"], + ["css=#\\/dynamicMetadataResolverAttributes\\/refreshDelayFactor", "css:finder"], + ["xpath=//input[@id='/dynamicMetadataResolverAttributes/refreshDelayFactor']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "0.5" + }, { + "id": "ed3a2cad-339d-4cd6-b724-395057670e51", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "1a8a9dcf-9c6b-4802-8483-981d14131346", + "comment": "", + "command": "click", + "target": "css=#\\/dynamicMetadataResolverAttributes\\/minCacheDuration-container .btn", + "targets": [ + ["css=#\\/dynamicMetadataResolverAttributes\\/minCacheDuration-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/dynamicMetadataResolverAttributes/minCacheDuration-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "2d40e408-16c8-4eba-ae11-bc836c534c58", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "443a9cfc-17c8-49da-9d87-bfabda8fd0b6", + "comment": "", + "command": "click", + "target": "id=/dynamicMetadataResolverAttributes/minCacheDuration__option--0", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/minCacheDuration__option--0", "id"], + ["css=#\\/dynamicMetadataResolverAttributes\\/minCacheDuration__option--0", "css:finder"], + ["xpath=//li[@id='/dynamicMetadataResolverAttributes/minCacheDuration__option--0']", "xpath:attributes"], + ["xpath=//ul[@id='/dynamicMetadataResolverAttributes/minCacheDuration__listbox']/li", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li", "xpath:position"], + ["xpath=//li[contains(.,'PT0S')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "0b259df7-d713-4d4a-b9c3-ffe0b1c0ecf5", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "84f35d35-ea9c-4a06-aaec-bee1c1922aec", + "comment": "", + "command": "click", + "target": "css=#\\/dynamicMetadataResolverAttributes\\/maxCacheDuration-container .btn", + "targets": [ + ["css=#\\/dynamicMetadataResolverAttributes\\/maxCacheDuration-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[3]", "xpath:attributes"], + ["xpath=//div[@id='/dynamicMetadataResolverAttributes/maxCacheDuration-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "032f1b9b-640c-4f77-a61a-3bc2127b447e", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "c03be15d-ee34-4cd1-bac9-c52e3baa70a3", + "comment": "", + "command": "click", + "target": "id=/dynamicMetadataResolverAttributes/maxCacheDuration__option--2", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/maxCacheDuration__option--2", "id"], + ["css=#\\/dynamicMetadataResolverAttributes\\/maxCacheDuration__option--2", "css:finder"], + ["xpath=//li[@id='/dynamicMetadataResolverAttributes/maxCacheDuration__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/dynamicMetadataResolverAttributes/maxCacheDuration__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "508576b2-18ca-4360-ab90-fc0bf4b83cab", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "f0cdfbcf-46e2-4013-b085-0730b0127842", + "comment": "", + "command": "click", + "target": "css=#\\/dynamicMetadataResolverAttributes\\/maxIdleEntityData-container .btn", + "targets": [ + ["css=#\\/dynamicMetadataResolverAttributes\\/maxIdleEntityData-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[4]", "xpath:attributes"], + ["xpath=//div[@id='/dynamicMetadataResolverAttributes/maxIdleEntityData-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[4]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "6ac213ff-c86b-4724-9f80-a50989f00369", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "dd663319-7eef-4301-a0d4-24d9583eab7f", + "comment": "", + "command": "click", + "target": "id=/dynamicMetadataResolverAttributes/maxIdleEntityData__option--1", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/maxIdleEntityData__option--1", "id"], + ["css=#\\/dynamicMetadataResolverAttributes\\/maxIdleEntityData__option--1", "css:finder"], + ["xpath=//li[@id='/dynamicMetadataResolverAttributes/maxIdleEntityData__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/dynamicMetadataResolverAttributes/maxIdleEntityData__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//div[4]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "25ed1d75-be93-4e20-88ba-57d8ae7bf053", + "comment": "", + "command": "click", + "target": "id=/dynamicMetadataResolverAttributes/removeIdleEntityData.false", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/removeIdleEntityData.false", "id"], + ["css=#\\/dynamicMetadataResolverAttributes\\/removeIdleEntityData\\.false", "css:finder"], + ["xpath=//input[@id='/dynamicMetadataResolverAttributes/removeIdleEntityData.false']", "xpath:attributes"], + ["xpath=//div[2]/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "c0be0f29-02f9-46f1-9b65-0f2c9c310246", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "54df6d88-1a85-407f-935a-a016f5952a93", + "comment": "", + "command": "click", + "target": "css=#\\/dynamicMetadataResolverAttributes\\/cleanupTaskInterval-container .btn", + "targets": [ + ["css=#\\/dynamicMetadataResolverAttributes\\/cleanupTaskInterval-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[5]", "xpath:attributes"], + ["xpath=//div[@id='/dynamicMetadataResolverAttributes/cleanupTaskInterval-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[6]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "9a756ef8-7633-43c2-ac27-48f2bd41ad15", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "e7f2439a-e9a1-4b23-b0b9-d992f5b477d4", + "comment": "", + "command": "click", + "target": "id=/dynamicMetadataResolverAttributes/cleanupTaskInterval__option--3", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/cleanupTaskInterval__option--3", "id"], + ["css=#\\/dynamicMetadataResolverAttributes\\/cleanupTaskInterval__option--3", "css:finder"], + ["xpath=//li[@id='/dynamicMetadataResolverAttributes/cleanupTaskInterval__option--3']", "xpath:attributes"], + ["xpath=//ul[@id='/dynamicMetadataResolverAttributes/cleanupTaskInterval__listbox']/li[4]", "xpath:idRelative"], + ["xpath=//div[6]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[4]", "xpath:position"] + ], + "value": "" + }, { + "id": "64af203b-565c-4e35-b7da-4646423a3279", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "d02ae356-8086-4794-97ba-980fc75cca79", + "comment": "", + "command": "click", + "target": "css=.custom-control-label", + "targets": [ + ["css=.custom-control-label", "css:finder"], + ["xpath=//div[@id='/enabled.parent']/label", "xpath:idRelative"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Enable Metadata Provider?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "dc60328b-d6e0-4f62-96c5-012f0fb5edc4", + "comment": "", + "command": "click", + "target": "css=.save", + "targets": [ + ["css=.save", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "02e53e75-003b-42ce-8522-817d52ad16a3", + "comment": "", + "command": "waitForElementVisible", + "target": "css=td:nth-child(3)", + "targets": [], + "value": "10000" + }, { + "id": "7d059a57-60f7-4729-95af-b36619b98694", + "comment": "", + "command": "assertText", + "target": "css=td:nth-child(3)", + "targets": [ + ["css=td:nth-child(3)", "css:finder"], + ["xpath=//td[3]", "xpath:position"], + ["xpath=//td[contains(.,'LocalDynamicMetadataResolver')]", "xpath:innerText"] + ], + "value": "LocalDynamicMetadataResolver" + }, { + "id": "15912a4b-c036-4886-9577-312bf6816943", + "comment": "", + "command": "click", + "target": "linkText=Local Dynamic Metadata Provider", + "targets": [ + ["linkText=Local Dynamic Metadata Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Local Dynamic Metadata Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/dff5232d-66fb-4623-b25e-85c24df5ede4/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Local Dynamic Metadata Provider')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "feb08e76-e553-4505-bffe-07f3e77206d0", + "comment": "", + "command": "click", + "target": "css=.btn:nth-child(2)", + "targets": [ + ["css=.btn:nth-child(2) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/button/translate-i18n", "xpath:idRelative"], + ["xpath=//div/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Filters')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "2afa209b-d09b-468e-8cc3-d549abb3be4a", + "comment": "", + "command": "click", + "target": "css=#filters .actions span", + "targets": [ + ["css=#filters .actions span", "css:finder"], + ["xpath=//div[@id='filters']/div/div/a/span", "xpath:idRelative"], + ["xpath=//div/a/span", "xpath:position"], + ["xpath=//span[contains(.,'Add Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c4e0394c-ba68-4e75-8d20-174a91fad2f5", + "comment": "", + "command": "select", + "target": "name=type", + "targets": [], + "value": "label=EntityAttributes" + }, { + "id": "5f1229fb-9185-40cf-bd65-76435d93d7df", + "comment": "", + "command": "click", + "target": "css=option:nth-child(2)", + "targets": [ + ["css=option:nth-child(2)", "css:finder"], + ["xpath=//option[@value='EntityAttributes']", "xpath:attributes"], + ["xpath=//option[2]", "xpath:position"], + ["xpath=//option[contains(.,'EntityAttributes')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "03f838cb-2aea-40fa-b549-8263aa2046cf", + "comment": "", + "command": "click", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field20", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "" + }, { + "id": "ad127dfe-2cae-4693-b65f-e35c0655e9eb", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field20", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Entity Attributes Filter" + }, { + "id": "0065c161-84c6-4cd0-8b69-b257ec572915", + "comment": "", + "command": "click", + "target": "id=/entityAttributesFilterTarget.target", + "targets": [ + ["id=/entityAttributesFilterTarget.target", "id"], + ["css=#\\/entityAttributesFilterTarget\\.target", "css:finder"], + ["xpath=//input[@id='/entityAttributesFilterTarget.target']", "xpath:attributes"], + ["xpath=//div[@id='-container']/div/input", "xpath:idRelative"], + ["xpath=//div/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "15d90ee0-b1cc-4fae-abec-ae80d93db1c1", + "comment": "", + "command": "type", + "target": "id=/entityAttributesFilterTarget.target", + "targets": [ + ["id=/entityAttributesFilterTarget.target", "id"], + ["css=#\\/entityAttributesFilterTarget\\.target", "css:finder"], + ["xpath=//input[@id='/entityAttributesFilterTarget.target']", "xpath:attributes"], + ["xpath=//div[@id='-container']/div/input", "xpath:idRelative"], + ["xpath=//div/div/input", "xpath:position"] + ], + "value": "unicon" + }, { + "id": "1d754809-177b-47f9-98e6-5e757713d834", + "comment": "", + "command": "click", + "target": "css=.btn-success:nth-child(1)", + "targets": [ + ["css=.btn-success:nth-child(1)", "css:finder"], + ["xpath=//div[2]/button", "xpath:position"], + ["xpath=//button[contains(.,'Add Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "72c2bc1d-f96f-497b-bbd8-b2e254fae6b6", + "comment": "", + "command": "click", + "target": "css=#\\/filterEnabled\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/filterEnabled\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/filterEnabled.parent']/label", "xpath:idRelative"], + ["xpath=//checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Enable Filter?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1e74f318-f78c-4e64-8ac7-fc999df0dd19", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/turnOffEncryption\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/turnOffEncryption\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/turnOffEncryption.parent']/label", "xpath:idRelative"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Turn off Encryption of Response?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d05f7295-35b2-42ba-98d0-1c9673846190", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/useSha\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/useSha\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/useSha.parent']/label", "xpath:idRelative"], + ["xpath=//div[4]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Use SHA1 Signing Algorithm?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "82bbe8c4-e66c-470d-bdf6-9cd3337b4a3e", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/responderId", + "targets": [ + ["id=/relyingPartyOverrides/responderId", "id"], + ["name=field33", "name"], + ["css=#\\/relyingPartyOverrides\\/responderId", "css:finder"], + ["xpath=//input[@id='/relyingPartyOverrides/responderId']", "xpath:attributes"], + ["xpath=//div[7]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "2e4c1077-cd2f-4298-969f-e945e2d68636", + "comment": "", + "command": "type", + "target": "id=/relyingPartyOverrides/responderId", + "targets": [ + ["id=/relyingPartyOverrides/responderId", "id"], + ["name=field33", "name"], + ["css=#\\/relyingPartyOverrides\\/responderId", "css:finder"], + ["xpath=//input[@id='/relyingPartyOverrides/responderId']", "xpath:attributes"], + ["xpath=//div[7]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "responder" + }, { + "id": "14785e6f-8ab8-47e0-b16e-8e736638d8c8", + "comment": "", + "command": "click", + "target": "css=div:nth-child(9) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(9) .d-flex > .btn", "css:finder"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "1e7c0ceb-f555-497d-a465-92df7d67b40a", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "3e162911-9775-4d01-8802-63f5638c7cba", + "comment": "", + "command": "click", + "target": "css=.input-group-append > .btn", + "targets": [ + ["css=.input-group-append > .btn", "css:finder"], + ["xpath=(//button[@type='button'])[3]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/authenticationMethods/0-container']/div/div/button", "xpath:idRelative"], + ["xpath=//auto-complete/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "a9c5ad9d-05ab-4b47-9e0d-c4e81d28c87e", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "ab2594b3-45a8-43f7-885b-270239a46628", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/authenticationMethods/0__option--0", + "targets": [ + ["id=/relyingPartyOverrides/authenticationMethods/0__option--0", "id"], + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/0__option--0", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/authenticationMethods/0__option--0']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/authenticationMethods/0__listbox']/li", "xpath:idRelative"], + ["xpath=//datalist-component/div/auto-complete/div/ul/li", "xpath:position"] + ], + "value": "" + }, { + "id": "dd4e22ff-aa54-40c0-b5c2-6a5b79845062", + "comment": "", + "command": "click", + "target": "css=.fa-check", + "targets": [ + ["css=.fa-check", "css:finder"], + ["xpath=//button[@id='/attributeRelease.checkall']/i", "xpath:idRelative"], + ["xpath=//td[2]/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "1c4c90ac-b644-4033-8ebc-07a8cd1bdbdd", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//button[@type='submit']", "xpath:attributes"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "af17a3a7-f292-4c22-8f2f-3d3bf1938fc1", + "comment": "", + "command": "waitForElementVisible", + "target": "css=.td-lg:nth-child(4)", + "targets": [], + "value": "10000" + }, { + "id": "2b9c0a43-fd7a-4ffa-bfef-a7fc41746e16", + "comment": "", + "command": "assertText", + "target": "css=.td-lg:nth-child(4)", + "targets": [ + ["css=.td-lg:nth-child(4)", "css:finder"], + ["xpath=//td[4]", "xpath:position"], + ["xpath=//td[contains(.,'EntityAttributes')]", "xpath:innerText"] + ], + "value": "EntityAttributes" + }, { + "id": "a0e16e8d-91c9-416c-b1c1-a2898bfbd185", + "comment": "", + "command": "click", + "target": "linkText=Add Filter", + "targets": [ + ["linkText=Add Filter", "linkText"], + ["css=.btn-success", "css:finder"], + ["xpath=//a[contains(@href, '/metadata/provider/ceb1cfdd-26c1-4134-baab-1438190ae9bd/filter/new')]", "xpath:href"], + ["xpath=//div[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Add Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "11fd3e95-ce05-4ad0-8238-c34b696003cd", + "comment": "", + "command": "click", + "target": "name=type", + "targets": [ + ["name=type", "name"], + ["css=.form-control", "css:finder"], + ["xpath=//select[@name='type']", "xpath:attributes"], + ["xpath=//select", "xpath:position"] + ], + "value": "" + }, { + "id": "0b68dd82-e9a5-447f-b062-9f7849529bcc", + "comment": "", + "command": "select", + "target": "name=type", + "targets": [], + "value": "label=NameIDFormat" + }, { + "id": "e85fde4c-cdbf-41c6-89e7-d4b281a16219", + "comment": "", + "command": "click", + "target": "css=option:nth-child(3)", + "targets": [ + ["css=option:nth-child(3)", "css:finder"], + ["xpath=//option[@value='NameIDFormat']", "xpath:attributes"], + ["xpath=//option[3]", "xpath:position"], + ["xpath=//option[contains(.,'NameIDFormat')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "a058bf22-7d07-4850-8004-8a85a2016d25", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/name", + "targets": [], + "value": "10000" + }, { + "id": "8a94f318-76bb-49f1-90d5-b2dcbcb1ff80", + "comment": "", + "command": "click", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field40", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "" + }, { + "id": "9bd2419e-c4f5-4dd2-9fb8-278d70be987b", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field40", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Name ID Format Filter" + }, { + "id": "03d1d74e-efa5-4d0e-a780-900449bb4ac5", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "9b9d7604-7025-4ccb-bb95-862f57f696f1", + "comment": "", + "command": "click", + "target": "id=/nameIdFormatFilterTarget.valuedd", + "targets": [ + ["id=/nameIdFormatFilterTarget.valuedd", "id"], + ["css=#\\/nameIdFormatFilterTarget\\.valuedd", "css:finder"], + ["xpath=//button[@id='/nameIdFormatFilterTarget.valuedd']", "xpath:attributes"], + ["xpath=//fieldset/div/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "5cda2bf9-f169-4e37-8071-a6f8d1d1407d", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "9e84c57f-c33d-48f8-85ac-ed50751eb37b", + "comment": "", + "command": "click", + "target": "linkText=Regex", + "targets": [ + ["linkText=Regex", "linkText"], + ["css=.dropdown-item:nth-child(2)", "css:finder"], + ["xpath=//a[contains(text(),'Regex')]", "xpath:link"], + ["xpath=(//a[contains(@href, '#')])[2]", "xpath:href"], + ["xpath=//div/div/a[2]", "xpath:position"], + ["xpath=//a[contains(.,'Regex')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "82336d07-df2f-416e-b5c3-59eaf64a82d4", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "f3bc22e2-0e3a-4d58-b992-31d687148c57", + "comment": "", + "command": "sendKeys", + "target": "id=/nameIdFormatFilterTarget.target", + "targets": [], + "value": "/foo.*/" + }, { + "id": "343b40b9-87df-46ab-b3ef-285e4e5ed784", + "comment": "", + "command": "click", + "target": "css=#\\/filterEnabled\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/filterEnabled\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/filterEnabled.parent']/label", "xpath:idRelative"], + ["xpath=//checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Enable Filter?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "6ce98c83-68b8-45c0-834e-cc40af11fc29", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "17f77efb-f64a-4a64-8c48-36830a087dbb", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "a7aa04e7-b909-42cf-85ed-adbff0adefce", + "comment": "", + "command": "click", + "target": "css=.input-group-append > .btn", + "targets": [ + ["css=.input-group-append > .btn", "css:finder"], + ["xpath=(//button[@type='button'])[3]", "xpath:attributes"], + ["xpath=//div[@id='/formats/0-container']/div/div/button", "xpath:idRelative"], + ["xpath=//auto-complete/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d1fa4a9b-80bd-4ad7-989e-1e5b56893bbc", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "8b7b79fd-2405-4ab6-8f91-4906f663cd1e", + "comment": "", + "command": "click", + "target": "id=/formats/0__option--1", + "targets": [ + ["id=/formats/0__option--1", "id"], + ["css=#\\/formats\\/0__option--1", "css:finder"], + ["xpath=//li[@id='/formats/0__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/formats/0__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "6d4c2c20-0855-4cdf-8e4d-dbbd6afb328b", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//button[@type='submit']", "xpath:attributes"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "455e24c1-5093-4da3-a62d-457bbf0cd5db", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "9f7e95cf-4dd5-415f-8577-a6f1bc54a85d", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .fa-arrow-circle-down", + "targets": [ + ["css=tr:nth-child(1) .fa-arrow-circle-down", "css:finder"], + ["xpath=//button[2]/i", "xpath:position"] + ], + "value": "" + }, { + "id": "afb97ce0-665f-4469-9aad-d17349c491cd", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "4a73b268-7d33-4e8c-8fa4-cb059be9768f", + "comment": "", + "command": "assertText", + "target": "css=tr:nth-child(1) > .td-lg:nth-child(4)", + "targets": [ + ["css=tr:nth-child(1) > .td-lg:nth-child(4)", "css:finder"], + ["xpath=//td[4]", "xpath:position"], + ["xpath=//td[contains(.,'NameIDFormat')]", "xpath:innerText"] + ], + "value": "NameIDFormat" + }, { + "id": "63ac7307-0538-4c0d-8e98-2f05c767baaf", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .fa-arrow-circle-down", + "targets": [ + ["css=tr:nth-child(1) .fa-arrow-circle-down", "css:finder"], + ["xpath=//button[2]/i", "xpath:position"] + ], + "value": "" + }, { + "id": "5037edea-9d8f-496d-aedc-70b8763d5de2", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "ed8e07ff-0dce-47d6-8310-f1920bfe1367", + "comment": "", + "command": "assertText", + "target": "css=tr:nth-child(1) > .td-lg:nth-child(4)", + "targets": [ + ["css=tr:nth-child(1) > .td-lg:nth-child(4)", "css:finder"], + ["xpath=//td[4]", "xpath:position"], + ["xpath=//td[contains(.,'EntityAttributes')]", "xpath:innerText"] + ], + "value": "EntityAttributes" + }, { + "id": "45fe6404-6af7-4be0-8f21-2dcf378d0060", + "comment": "", + "command": "click", + "target": "css=.nav-item translate-i18n", + "targets": [ + ["css=.nav-item translate-i18n", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li[2]/a/translate-i18n", "xpath:idRelative"], + ["xpath=//a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Dashboard')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "beb584cd-c6a8-440e-bf38-b5bd2be71e9e", + "comment": "", + "command": "click", + "target": "linkText=Metadata Providers", + "targets": [ + ["linkText=Metadata Providers", "linkText"], + ["css=.nav > .nav-item:nth-child(2) > .nav-link", "css:finder"], + ["xpath=//a[contains(text(),'Metadata Providers')]", "xpath:link"], + ["xpath=//a[contains(@href, '/dashboard/metadata/manager/providers')]", "xpath:href"], + ["xpath=//dashboard-page/div/ul/li[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Metadata Providers')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "29e8f9ac-e02f-46e1-9765-5d7003e37f26", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "7c1fbdb4-1739-4b5b-86b9-231884a81e71", + "comment": "", + "command": "click", + "target": "linkText=Local Dynamic Metadata Provider", + "targets": [ + ["linkText=Local Dynamic Metadata Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Local Dynamic Metadata Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/b76c6aaf-4b5b-464b-8aa6-98d1125989b8/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Local Dynamic Metadata Provider')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "329a0f30-2aca-4a4b-8b6b-5ba61d73427b", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "547788c6-8ba2-4edc-8add-8ff24d6805b8", + "comment": "", + "command": "click", + "target": "css=.mb-4:nth-child(1) .actions span", + "targets": [ + ["css=.mb-4:nth-child(1) .actions span", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section/div/div/div/button/span", "xpath:idRelative"], + ["xpath=//div/button/span", "xpath:position"], + ["xpath=//span[contains(.,'Edit')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "98f8bc48-2251-4314-9157-3dd98cd79c5d", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" + }, { + "id": "2383637f-14ad-407d-82cd-49d36f218ee0", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field62", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Local Dynamic Metadata Provider V2" + }, { + "id": "31561081-f7d8-4fc5-90a2-a216da79b8a6", + "comment": "", + "command": "type", + "target": "id=/xmlId", + "targets": [ + ["id=/xmlId", "id"], + ["name=field65", "name"], + ["css=#\\/xmlId", "css:finder"], + ["xpath=//input[@id='/xmlId']", "xpath:attributes"], + ["xpath=//fieldset[2]/div/div[2]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "123456" + }, { + "id": "c988660e-6608-4ca4-814a-f1e3bd6a4347", + "comment": "", + "command": "click", + "target": "css=.btn-info > translate-i18n", + "targets": [ + ["css=.btn-info > translate-i18n", "css:finder"], + ["xpath=//div[2]/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "78258e16-b2c5-45bb-834f-f566da4a49b3", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "e900a26f-c75c-4cfc-a3dd-7f846bf74caf", + "comment": "", + "command": "click", + "target": "linkText=Local Dynamic Metadata Provider V2", + "targets": [ + ["linkText=Local Dynamic Metadata Provider V2", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Local Dynamic Metadata Provider V2')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/b76c6aaf-4b5b-464b-8aa6-98d1125989b8/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Local Dynamic Metadata Provider V2')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "f002c981-815d-472a-81fc-3c1ae3fb9222", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "add10378-ed96-4fc2-bd50-5ace327bb698", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1) > translate-i18n", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "39228609-8a84-40e7-8101-36a0849cb2ba", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "fc4a8e99-fa0c-410b-9a5a-07097a131234", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .custom-control-label", + "targets": [ + ["css=tr:nth-child(1) .custom-control-label", "css:finder"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Check to select')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "45f5cf56-587a-4e9b-ba41-333b34f4206c", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(2) .custom-control-label", + "targets": [ + ["css=tr:nth-child(2) .custom-control-label", "css:finder"], + ["xpath=//tr[2]/td/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "e0aa8d5c-d81c-4d4a-ac51-1d3511065d97", + "comment": "", + "command": "click", + "target": "css=.btn-primary > translate-i18n", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//history-list/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Compare Selected')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "627ca87e-e3d5-4cf6-ae53-ac095238f23a", + "comment": "", + "command": "waitForElementVisible", + "target": "css=primitive-property:nth-child(1) .bg-diff > .d-block:nth-child(2)", + "targets": [], + "value": "30000" + }, { + "id": "f3dc8bd0-e8da-48e5-b9bd-d442471a4005", + "comment": "", + "command": "assertText", + "target": "css=primitive-property:nth-child(1) .bg-diff > .d-block:nth-child(2)", + "targets": [ + ["css=primitive-property:nth-child(1) .bg-diff > .d-block:nth-child(2)", "css:finder"], + ["xpath=//div/span[2]", "xpath:position"] + ], + "value": "Local Dynamic Metadata Provider V2" + }, { + "id": "1103565a-1f1c-44f1-bfa9-91f6469a7723", + "comment": "", + "command": "assertText", + "target": "css=primitive-property:nth-child(3) .bg-diff > .d-block:nth-child(2)", + "targets": [ + ["css=primitive-property:nth-child(3) .bg-diff > .d-block:nth-child(2)", "css:finder"], + ["xpath=//primitive-property[3]/div/div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'123456')]", "xpath:innerText"] + ], + "value": "123456" + }, { + "id": "b0a15457-afc8-45e7-848e-876071ce15e4", + "comment": "", + "command": "assertText", + "target": "css=primitive-property:nth-child(1) .bg-diff > .d-block:nth-child(3)", + "targets": [ + ["css=primitive-property:nth-child(1) .bg-diff > .d-block:nth-child(3)", "css:finder"], + ["xpath=//span[3]", "xpath:position"] + ], + "value": "Local Dynamic Metadata Provider" + }, { + "id": "244b66e8-18ca-424b-a399-42df5671d554", + "comment": "", + "command": "assertText", + "target": "css=primitive-property:nth-child(3) .bg-diff > .d-block:nth-child(3)", + "targets": [ + ["css=primitive-property:nth-child(3) .bg-diff > .d-block:nth-child(3)", "css:finder"], + ["xpath=//primitive-property[3]/div/div/span[3]", "xpath:position"] + ], + "value": "12345" + }, { + "id": "a0411281-4bd1-4a25-a13c-31881f16381f", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1) > translate-i18n", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "e9c3e5d9-1418-4f24-80b5-5d2ea2f50570", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "82d0dbd1-6d39-4213-a169-ffd169ddb800", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) a", + "targets": [ + ["linkText=Sep 25, 2019 23:00:04 (Current)", "linkText"], + ["css=tr:nth-child(1) a", "css:finder"], + ["xpath=//a[contains(@href, '/metadata/provider/b76c6aaf-4b5b-464b-8aa6-98d1125989b8/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Sep 25, 2019 23:00:04 (Current)')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c40890c3-7077-4951-a62e-fd7f5fa3c78f", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "c9047379-4634-4d7c-9649-505437ccc4a8", + "comment": "", + "command": "click", + "target": "css=.list-group-item:nth-child(1) > filter-configuration-list-item > .d-flex > .btn", + "targets": [ + ["css=.list-group-item:nth-child(1) > filter-configuration-list-item > .d-flex > .btn", "css:finder"], + ["xpath=//div[@id='filters']/filter-configuration-list/ul/li/filter-configuration-list-item/div/button", "xpath:idRelative"], + ["xpath=//filter-configuration-list-item/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Entity Attributes Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "9a4e24c2-c536-46bf-ada1-6158fbaa8163", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "6ce85361-3225-40b2-ab3e-dda53647733c", + "comment": "", + "command": "click", + "target": "css=.justify-content-between > .btn:nth-child(1) > translate-i18n", + "targets": [ + ["css=.justify-content-between > .btn:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='filters']/filter-configuration-list/ul/li/filter-configuration-list-item/div[2]/div/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div[2]/div/div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Edit')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "7a41b3c7-cae5-4135-95ed-ba45fa4932f2", + "comment": "", + "command": "waitForElementEditable", + "target": "id=/name", + "targets": [], + "value": "30000" + }, { + "id": "52f4e177-c20c-4775-a973-b7b79c67bb96", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field68", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "Entity Attributes Filter V2" + }, { + "id": "3c8b4ac8-f3ef-4a02-82e3-735c382d3b09", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//button[@type='submit']", "xpath:attributes"], + ["xpath=//div[2]/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "0d44ec51-2979-437c-9d1d-cccf719e44f8", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "8a35aa02-3c14-4068-b92c-6d3f89d0e249", + "comment": "", + "command": "click", + "target": "css=.nav-item translate-i18n", + "targets": [ + ["css=.nav-item translate-i18n", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li[2]/a/translate-i18n", "xpath:idRelative"], + ["xpath=//a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Dashboard')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "e5bc1b13-a4bf-4957-90d6-d687c945c732", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "d14a78bc-a8bc-4d79-abf5-4f91954008b8", + "comment": "", + "command": "click", + "target": "linkText=Metadata Providers", + "targets": [ + ["linkText=Metadata Providers", "linkText"], + ["css=.nav > .nav-item:nth-child(2) > .nav-link", "css:finder"], + ["xpath=//a[contains(text(),'Metadata Providers')]", "xpath:link"], + ["xpath=//a[contains(@href, '/dashboard/metadata/manager/providers')]", "xpath:href"], + ["xpath=//dashboard-page/div/ul/li[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Metadata Providers')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "3144718e-3bb6-4e88-8571-b3fca31d432d", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "764605a3-d47d-4dd0-a117-2a5d8b662ec7", + "comment": "", + "command": "click", + "target": "linkText=Local Dynamic Metadata Provider V2", + "targets": [ + ["linkText=Local Dynamic Metadata Provider V2", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Local Dynamic Metadata Provider V2')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/b76c6aaf-4b5b-464b-8aa6-98d1125989b8/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Local Dynamic Metadata Provider V2')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "521a00d0-68cb-48ba-aa7a-28478af22174", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "3423ee08-377a-43a9-a608-1581eef0ce2e", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1) > translate-i18n", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "8f91f629-8715-44a8-8895-f271d3c77547", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "293e15d9-de41-45ef-9fa8-94599c9b1f36", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .custom-control-label", + "targets": [ + ["css=tr:nth-child(1) .custom-control-label", "css:finder"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Check to select')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "7810f774-045f-4841-80e7-2c061a5377a3", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(2) .custom-control-label", + "targets": [ + ["css=tr:nth-child(2) .custom-control-label", "css:finder"], + ["xpath=//tr[2]/td/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "77b0759a-f41e-4ebc-99bc-24ee7a793f6d", + "comment": "", + "command": "click", + "target": "css=.btn-primary > translate-i18n", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//history-list/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Compare Selected')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "12aa48b1-da07-456e-84a6-b1db2a72bc3c", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "c864f2b7-2da3-48ee-9d12-6e3deb69c451", + "comment": "", + "command": "click", + "target": "css=.d-flex:nth-child(1) > .border-primary:nth-child(2) .fa", + "targets": [ + ["css=.d-flex:nth-child(1) > .border-primary:nth-child(2) .fa", "css:finder"], + ["xpath=//div[2]/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "00209590-e55a-4559-a4f3-67e926d9e366", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "4eb17560-540b-435e-b99e-759d59435902", + "comment": "", + "command": "click", + "target": "css=.btn-primary > translate-i18n", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//div[3]/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Compare Selected')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "3ad7ca88-e2e9-47af-a4de-6c35828b26d3", + "comment": "", + "command": "waitForElementVisible", + "target": "css=.bg-diff > .d-block:nth-child(2)", + "targets": [], + "value": "30000" + }, { + "id": "50f9b213-6291-4b1a-b778-3db8e38e80da", + "comment": "", + "command": "assertText", + "target": "css=.bg-diff > .d-block:nth-child(2)", + "targets": [ + ["css=.bg-diff > .d-block:nth-child(2)", "css:finder"], + ["xpath=//section[2]/div/div[2]/object-property/primitive-property/div/div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'Entity Attributes Filter V2')]", "xpath:innerText"] + ], + "value": "Entity Attributes Filter V2" + }, { + "id": "4c5111e9-4f0f-4b96-9c62-20bba8aac910", + "comment": "", + "command": "assertText", + "target": "css=.bg-diff > .d-block:nth-child(3)", + "targets": [ + ["css=.bg-diff > .d-block:nth-child(3)", "css:finder"], + ["xpath=//section[2]/div/div[2]/object-property/primitive-property/div/div/span[3]", "xpath:position"] + ], + "value": "Entity Attributes Filter" + }] + }], + "suites": [{ + "id": "248ba015-77cd-430f-b973-d14fd4f39a27", + "name": "Default Suite", + "persistSession": false, + "parallel": false, + "timeout": 300, + "tests": ["d87336f9-5279-422f-bf4d-73403f34fc85"] + }], + "urls": ["http://localhost:10101/"], + "plugins": [] +} \ No newline at end of file diff --git a/backend/src/integration/resources/SHIBUI-1364-4.side b/backend/src/integration/resources/SHIBUI-1364-4.side new file mode 100644 index 000000000..f7848dc5d --- /dev/null +++ b/backend/src/integration/resources/SHIBUI-1364-4.side @@ -0,0 +1,1293 @@ +{ + "id": "57bde36d-15e6-4364-b117-4fb36e1e4941", + "version": "2.0", + "name": "SHIBUI-1364-4", + "url": "http://localhost:10101", + "tests": [{ + "id": "d87336f9-5279-422f-bf4d-73403f34fc85", + "name": "SHIBUI-1364-4", + "commands": [{ + "id": "7e3c1218-65cd-4730-b715-ca9c922d75d3", + "comment": "", + "command": "open", + "target": "/login", + "targets": [], + "value": "" + }, { + "id": "4a52ace7-3b8c-44f1-8686-89f59a83b968", + "comment": "", + "command": "type", + "target": "name=username", + "targets": [ + ["name=username", "name"], + ["css=tr:nth-child(1) input", "css:finder"], + ["xpath=//input[@name='username']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "admin" + }, { + "id": "e9e6c795-7a41-4231-86b5-6a6c5d013aa2", + "comment": "", + "command": "type", + "target": "name=password", + "targets": [ + ["name=password", "name"], + ["css=tr:nth-child(2) input", "css:finder"], + ["xpath=//input[@name='password']", "xpath:attributes"], + ["xpath=//tr[2]/td[2]/input", "xpath:position"] + ], + "value": "adminpass" + }, { + "id": "185a1e41-d3a3-4627-aae2-7f05059e9c7d", + "comment": "", + "command": "click", + "target": "name=submit", + "targets": [ + ["name=submit", "name"], + ["css=td:nth-child(1) > input", "css:finder"], + ["xpath=//input[@name='submit']", "xpath:attributes"], + ["xpath=//tr[3]/td/input", "xpath:position"] + ], + "value": "" + }, { + "id": "94e01321-ac2d-427f-89a5-7f816cea0f00", + "comment": "", + "command": "click", + "target": "css=#addNewDropdown > translate-i18n", + "targets": [ + ["css=#addNewDropdown > translate-i18n", "css:finder"], + ["xpath=//button[@id='addNewDropdown']/translate-i18n", "xpath:idRelative"], + ["xpath=//translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Add New')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c65500ae-3b08-4c22-8c88-b4116d6e0c9b", + "comment": "", + "command": "click", + "target": "linkText=Metadata Provider", + "targets": [ + ["linkText=Metadata Provider", "linkText"], + ["css=.nav-link:nth-child(2)", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li/div/a[2]", "xpath:idRelative"], + ["xpath=(//a[contains(@href, '')])[3]", "xpath:href"], + ["xpath=//a[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "c5ec3177-5a66-4901-a644-8c6cfbb99254", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/name", + "targets": [], + "value": "10000" + }, { + "id": "d093ad38-ab2d-4441-a60b-2c094d6938f9", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field4", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Dynamic Http Metadata Provider" + }, { + "id": "aac150b1-6140-476b-8bdb-ebb83a14812d", + "comment": "", + "command": "select", + "target": "id=/type", + "targets": [ + ["id=/type", "id"], + ["name=field2", "name"], + ["css=#\\/type", "css:finder"], + ["xpath=//select[@id='/type']", "xpath:attributes"], + ["xpath=//select", "xpath:position"] + ], + "value": "label=DynamicHttpMetadataProvider" + }, { + "id": "7a60cb3c-ed3c-495c-8329-2fe52e72cceb", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[2]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "8cbc5dce-126e-4fb6-afcd-9651d9be6ba2", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/xmlId", + "targets": [], + "value": "10000" + }, { + "id": "c140099c-f6e3-4600-92b3-5b97e07a95ee", + "comment": "", + "command": "type", + "target": "id=/xmlId", + "targets": [ + ["id=/xmlId", "id"], + ["name=field7", "name"], + ["css=#\\/xmlId", "css:finder"], + ["xpath=//input[@id='/xmlId']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "12345" + }, { + "id": "d8716eae-bb36-42ae-b505-2626c5a8c377", + "comment": "", + "command": "select", + "target": "id=/metadataRequestURLConstructionScheme/type", + "targets": [], + "value": "label=MetadataQueryProtocol" + }, { + "id": "326f3387-12c8-4294-843c-182fd8d06c46", + "comment": "", + "command": "click", + "target": "css=option:nth-child(2)", + "targets": [ + ["css=option:nth-child(2)", "css:finder"], + ["xpath=//option[@value='1: MetadataQueryProtocol']", "xpath:attributes"], + ["xpath=//select[@id='/metadataRequestURLConstructionScheme/type']/option[2]", "xpath:idRelative"], + ["xpath=//option[2]", "xpath:position"], + ["xpath=//option[contains(.,'MetadataQueryProtocol')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "516d7e81-3672-4dd7-811b-70ee38c21e52", + "comment": "", + "command": "click", + "target": "id=/metadataRequestURLConstructionScheme/content", + "targets": [ + ["id=/metadataRequestURLConstructionScheme/content", "id"], + ["name=field10", "name"], + ["css=#\\/metadataRequestURLConstructionScheme\\/content", "css:finder"], + ["xpath=//input[@id='/metadataRequestURLConstructionScheme/content']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "7b60ce4c-a16c-4bc5-9d9c-999f9fc6b197", + "comment": "", + "command": "type", + "target": "id=/metadataRequestURLConstructionScheme/content", + "targets": [ + ["id=/metadataRequestURLConstructionScheme/content", "id"], + ["name=field10", "name"], + ["css=#\\/metadataRequestURLConstructionScheme\\/content", "css:finder"], + ["xpath=//input[@id='/metadataRequestURLConstructionScheme/content']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "randomString" + }, { + "id": "cd0d4f15-2193-4814-8e72-f38d9d2221e2", + "comment": "", + "command": "click", + "target": "id=/requireValidMetadata.false", + "targets": [ + ["id=/requireValidMetadata.false", "id"], + ["css=#\\/requireValidMetadata\\.false", "css:finder"], + ["xpath=//input[@id='/requireValidMetadata.false']", "xpath:attributes"], + ["xpath=//div[2]/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "3b83fa2b-147f-4b7b-9b30-44c28b07576e", + "comment": "", + "command": "click", + "target": "id=/failFastInitialization.false", + "targets": [ + ["id=/failFastInitialization.false", "id"], + ["css=#\\/failFastInitialization\\.false", "css:finder"], + ["xpath=//input[@id='/failFastInitialization.false']", "xpath:attributes"], + ["xpath=//div[4]/sf-form-element/div/sf-widget-chooser/boolean-radio/div/div[2]/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "175324e0-025d-4674-a3ee-51307a215079", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "30565900-4c02-4cb0-9d5a-c980349307ea", + "comment": "", + "command": "click", + "target": "id=/dynamicMetadataResolverAttributes/refreshDelayFactor", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/refreshDelayFactor", "id"], + ["name=field15", "name"], + ["css=#\\/dynamicMetadataResolverAttributes\\/refreshDelayFactor", "css:finder"], + ["xpath=//input[@id='/dynamicMetadataResolverAttributes/refreshDelayFactor']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "" + }, { + "id": "5b6ea5bf-d5c1-4d5e-bc15-ffabf67f74ec", + "comment": "", + "command": "type", + "target": "id=/dynamicMetadataResolverAttributes/refreshDelayFactor", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/refreshDelayFactor", "id"], + ["name=field15", "name"], + ["css=#\\/dynamicMetadataResolverAttributes\\/refreshDelayFactor", "css:finder"], + ["xpath=//input[@id='/dynamicMetadataResolverAttributes/refreshDelayFactor']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "0.5" + }, { + "id": "45ebbdf0-1a4b-43ef-bba4-2302208653b2", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "a51172e3-792f-4881-8083-efcb34c63e56", + "comment": "", + "command": "click", + "target": "css=#\\/dynamicMetadataResolverAttributes\\/minCacheDuration-container .btn", + "targets": [ + ["css=#\\/dynamicMetadataResolverAttributes\\/minCacheDuration-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/dynamicMetadataResolverAttributes/minCacheDuration-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "07e1ade9-022c-4458-ba65-b7eecb4f8c0b", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "b1ec3405-0d75-45d6-8986-51c2f09c4dc4", + "comment": "", + "command": "click", + "target": "id=/dynamicMetadataResolverAttributes/minCacheDuration__option--1", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/minCacheDuration__option--1", "id"], + ["css=#\\/dynamicMetadataResolverAttributes\\/minCacheDuration__option--1", "css:finder"], + ["xpath=//li[@id='/dynamicMetadataResolverAttributes/minCacheDuration__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/dynamicMetadataResolverAttributes/minCacheDuration__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[2]", "xpath:position"], + ["xpath=//li[contains(.,'PT30S')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c64e2180-1b40-4bb9-8910-25a51438f27c", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "2793bf1b-177b-461f-b06c-0a584ab6eaf0", + "comment": "", + "command": "click", + "target": "css=#\\/dynamicMetadataResolverAttributes\\/maxCacheDuration-container .btn", + "targets": [ + ["css=#\\/dynamicMetadataResolverAttributes\\/maxCacheDuration-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[3]", "xpath:attributes"], + ["xpath=//div[@id='/dynamicMetadataResolverAttributes/maxCacheDuration-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "dc45395b-a584-4b7d-8c12-b6d0e669031a", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "87084a6a-8e89-4c00-a3d9-c104107a3ba2", + "comment": "", + "command": "click", + "target": "id=/dynamicMetadataResolverAttributes/maxCacheDuration__option--3", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/maxCacheDuration__option--3", "id"], + ["css=#\\/dynamicMetadataResolverAttributes\\/maxCacheDuration__option--3", "css:finder"], + ["xpath=//li[@id='/dynamicMetadataResolverAttributes/maxCacheDuration__option--3']", "xpath:attributes"], + ["xpath=//ul[@id='/dynamicMetadataResolverAttributes/maxCacheDuration__listbox']/li[4]", "xpath:idRelative"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[4]", "xpath:position"] + ], + "value": "" + }, { + "id": "239001d8-35ff-41d0-95cf-7e81917a9e19", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "4c017bde-e242-4d2f-838e-a2a026e4292b", + "comment": "", + "command": "click", + "target": "css=#\\/dynamicMetadataResolverAttributes\\/maxIdleEntityData-container .btn", + "targets": [ + ["css=#\\/dynamicMetadataResolverAttributes\\/maxIdleEntityData-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[4]", "xpath:attributes"], + ["xpath=//div[@id='/dynamicMetadataResolverAttributes/maxIdleEntityData-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[4]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "57ea5bd7-1ee0-41d9-b39e-56aeddeec7a0", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "d477fd6a-2c15-4fb6-a199-d49aa495ef94", + "comment": "", + "command": "click", + "target": "id=/dynamicMetadataResolverAttributes/maxIdleEntityData__option--2", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/maxIdleEntityData__option--2", "id"], + ["css=#\\/dynamicMetadataResolverAttributes\\/maxIdleEntityData__option--2", "css:finder"], + ["xpath=//li[@id='/dynamicMetadataResolverAttributes/maxIdleEntityData__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/dynamicMetadataResolverAttributes/maxIdleEntityData__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//div[4]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "0783a0de-0a8d-4cc2-adc4-6ed94f277298", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "62f7ce3c-5cff-43c6-8ce6-a0e6bf2b2257", + "comment": "", + "command": "click", + "target": "css=#\\/dynamicMetadataResolverAttributes\\/cleanupTaskInterval-container .btn", + "targets": [ + ["css=#\\/dynamicMetadataResolverAttributes\\/cleanupTaskInterval-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[5]", "xpath:attributes"], + ["xpath=//div[@id='/dynamicMetadataResolverAttributes/cleanupTaskInterval-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[6]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "a155f0af-2dd4-4906-a783-19a99d23a6a8", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "bf855df4-326e-484e-9022-d2c84e09e6f3", + "comment": "", + "command": "click", + "target": "id=/dynamicMetadataResolverAttributes/cleanupTaskInterval__option--3", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/cleanupTaskInterval__option--3", "id"], + ["css=#\\/dynamicMetadataResolverAttributes\\/cleanupTaskInterval__option--3", "css:finder"], + ["xpath=//li[@id='/dynamicMetadataResolverAttributes/cleanupTaskInterval__option--3']", "xpath:attributes"], + ["xpath=//ul[@id='/dynamicMetadataResolverAttributes/cleanupTaskInterval__listbox']/li[4]", "xpath:idRelative"], + ["xpath=//div[6]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[4]", "xpath:position"] + ], + "value": "" + }, { + "id": "df2a3e70-d7d3-487b-a205-218e9987b060", + "comment": "", + "command": "click", + "target": "id=/dynamicMetadataResolverAttributes/persistentCacheManagerDirectory", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/persistentCacheManagerDirectory", "id"], + ["name=field21", "name"], + ["css=#\\/dynamicMetadataResolverAttributes\\/persistentCacheManagerDirectory", "css:finder"], + ["xpath=//input[@id='/dynamicMetadataResolverAttributes/persistentCacheManagerDirectory']", "xpath:attributes"], + ["xpath=//div[7]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "b25d9d91-b8f2-46ad-ac79-cbac34fa3f91", + "comment": "", + "command": "type", + "target": "id=/dynamicMetadataResolverAttributes/persistentCacheManagerDirectory", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/persistentCacheManagerDirectory", "id"], + ["name=field21", "name"], + ["css=#\\/dynamicMetadataResolverAttributes\\/persistentCacheManagerDirectory", "css:finder"], + ["xpath=//input[@id='/dynamicMetadataResolverAttributes/persistentCacheManagerDirectory']", "xpath:attributes"], + ["xpath=//div[7]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "%{idp.home}/cache" + }, { + "id": "5b546b6b-ee98-4852-8ffd-b95f7e68d954", + "comment": "", + "command": "click", + "target": "id=/dynamicMetadataResolverAttributes/initializeFromPersistentCacheInBackground.false", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/initializeFromPersistentCacheInBackground.false", "id"], + ["css=#\\/dynamicMetadataResolverAttributes\\/initializeFromPersistentCacheInBackground\\.false", "css:finder"], + ["xpath=//input[@id='/dynamicMetadataResolverAttributes/initializeFromPersistentCacheInBackground.false']", "xpath:attributes"], + ["xpath=//div[8]/sf-form-element/div/sf-widget-chooser/boolean-radio/div/div[2]/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "5743cab2-018a-4706-b052-0d26c8e1e963", + "comment": "", + "command": "click", + "target": "css=.label:nth-child(1)", + "targets": [ + ["css=.label:nth-child(1)", "css:finder"], + ["xpath=//li[3]/button/span", "xpath:position"] + ], + "value": "" + }, { + "id": "bf17ff0c-363f-43d6-91ba-4f8131c35ada", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "b777b343-71a0-4056-a85e-d8d548b993b2", + "comment": "", + "command": "click", + "target": "css=.btn-outline-secondary", + "targets": [ + ["css=.btn-outline-secondary", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/metadataFilters/RequiredValidUntil/maxValidityInterval-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "7a7f2f9c-0f95-4a5c-89c3-299a212f2fb9", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "22f7bf37-718c-4126-867b-67a383eefff5", + "comment": "", + "command": "click", + "target": "id=/metadataFilters/RequiredValidUntil/maxValidityInterval__option--2", + "targets": [ + ["id=/metadataFilters/RequiredValidUntil/maxValidityInterval__option--2", "id"], + ["css=#\\/metadataFilters\\/RequiredValidUntil\\/maxValidityInterval__option--2", "css:finder"], + ["xpath=//li[@id='/metadataFilters/RequiredValidUntil/maxValidityInterval__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/metadataFilters/RequiredValidUntil/maxValidityInterval__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[3]", "xpath:position"], + ["xpath=//li[contains(.,'PT1M')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "5320f384-0881-4e7a-b89f-33a57efb22ba", + "comment": "", + "command": "click", + "target": "id=/metadataFilters/SignatureValidation/requireSignedRoot", + "targets": [ + ["css=#\\/metadataFilters\\/SignatureValidation\\/requireSignedRoot\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/metadataFilters/SignatureValidation/requireSignedRoot.parent']/label", "xpath:idRelative"], + ["xpath=//div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Require Signed Root')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "f60a2a6e-2739-4da6-8e94-a5f0e7cf70de", + "comment": "", + "command": "click", + "target": "id=/metadataFilters/SignatureValidation/certificateFile", + "targets": [ + ["id=/metadataFilters/SignatureValidation/certificateFile", "id"], + ["name=field30", "name"], + ["css=#\\/metadataFilters\\/SignatureValidation\\/certificateFile", "css:finder"], + ["xpath=//input[@id='/metadataFilters/SignatureValidation/certificateFile']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "d1402eee-5e5c-4634-ac31-6843ed775bb8", + "comment": "", + "command": "type", + "target": "id=/metadataFilters/SignatureValidation/certificateFile", + "targets": [ + ["id=/metadataFilters/SignatureValidation/certificateFile", "id"], + ["name=field30", "name"], + ["css=#\\/metadataFilters\\/SignatureValidation\\/certificateFile", "css:finder"], + ["xpath=//input[@id='/metadataFilters/SignatureValidation/certificateFile']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "%{idp.home}/cert.key" + }, { + "id": "581415bb-bd83-4bc8-9417-da0a9781c7bd", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "6e976ed9-98a5-4e5d-8151-13a6c8498155", + "comment": "", + "command": "select", + "target": "id=/metadataFilters/EntityRoleWhiteList/retainedRoles/0", + "targets": [], + "value": "label=SPSSODescriptor" + }, { + "id": "4c21b4c9-6f8e-4520-b55c-9b945b97de01", + "comment": "", + "command": "click", + "target": "css=option:nth-child(2)", + "targets": [ + ["css=option:nth-child(2)", "css:finder"], + ["xpath=//option[@value='1: SPSSODescriptor']", "xpath:attributes"], + ["xpath=//select[@id='/metadataFilters/EntityRoleWhiteList/retainedRoles/0']/option[2]", "xpath:idRelative"], + ["xpath=//option[2]", "xpath:position"], + ["xpath=//option[contains(.,'SPSSODescriptor')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "b027e53b-bdf7-40e5-a296-6f25eae50732", + "comment": "", + "command": "click", + "target": "id=/metadataFilters/EntityRoleWhiteList/removeRolelessEntityDescriptors", + "targets": [ + ["css=#\\/metadataFilters\\/EntityRoleWhiteList\\/removeRolelessEntityDescriptors\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/metadataFilters/EntityRoleWhiteList/removeRolelessEntityDescriptors.parent']/label", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Remove Roleless Entity Descriptors?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "939aa904-89cf-4063-9b95-15eeb6f2d43c", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "c4d98111-537a-45a1-9bfd-e8d780a0c0b3", + "comment": "", + "command": "click", + "target": "css=.custom-control-label", + "targets": [ + ["css=.custom-control-label", "css:finder"], + ["xpath=//div[@id='/enabled.parent']/label", "xpath:idRelative"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Enable Metadata Provider?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "a57a12dd-b641-46eb-afce-4c7be5a8f180", + "comment": "", + "command": "click", + "target": "css=.save", + "targets": [ + ["css=.save", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "ae27b108-a2f4-4d4b-b375-b582ccc0ef56", + "comment": "", + "command": "waitForElementVisible", + "target": "css=td:nth-child(3)", + "targets": [], + "value": "10000" + }, { + "id": "8c52471a-70f5-43aa-b670-6f8d22e18668", + "comment": "", + "command": "assertText", + "target": "css=td:nth-child(3)", + "targets": [ + ["css=td:nth-child(3)", "css:finder"], + ["xpath=//td[3]", "xpath:position"], + ["xpath=//td[contains(.,'DynamicHttpMetadataResolver')]", "xpath:innerText"] + ], + "value": "DynamicHttpMetadataResolver" + }, { + "id": "76629f3d-b0a3-40ac-b848-da22b0933c31", + "comment": "", + "command": "click", + "target": "linkText=Dynamic Http Metadata Provider", + "targets": [ + ["linkText=Dynamic Http Metadata Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Dynamic Http Metadata Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/f5bb61ac-54fe-427e-8b6b-2fcdd66ba175/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Dynamic Http Metadata Provider')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "31a8587f-8ac0-4512-98ec-6cd230dfb0b6", + "comment": "", + "command": "click", + "target": "css=.btn:nth-child(2) > translate-i18n", + "targets": [ + ["css=.btn:nth-child(2) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/button/translate-i18n", "xpath:idRelative"], + ["xpath=//div/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Filters')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "fb7aea4e-7991-482c-b673-de998c20129c", + "comment": "", + "command": "click", + "target": "css=#filters .actions span", + "targets": [ + ["css=#filters .actions span", "css:finder"], + ["xpath=//div[@id='filters']/div/div/a/span", "xpath:idRelative"], + ["xpath=//div/a/span", "xpath:position"], + ["xpath=//span[contains(.,'Add Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "990cf83b-5650-4b03-8b41-bdb5560a60fa", + "comment": "", + "command": "select", + "target": "name=type", + "targets": [], + "value": "label=EntityAttributes" + }, { + "id": "5d3daf7a-a4e0-4767-a1ef-2416270bfae4", + "comment": "", + "command": "click", + "target": "css=option:nth-child(2)", + "targets": [ + ["css=option:nth-child(2)", "css:finder"], + ["xpath=//option[@value='EntityAttributes']", "xpath:attributes"], + ["xpath=//option[2]", "xpath:position"], + ["xpath=//option[contains(.,'EntityAttributes')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "f013d7b6-96c3-4155-ac1e-cff223e5e547", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/name", + "targets": [], + "value": "10000" + }, { + "id": "a58e088d-329b-4cfb-949b-eea9fdbdad37", + "comment": "", + "command": "click", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field39", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "" + }, { + "id": "60177908-3143-407a-8bdf-a045463d5490", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field39", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Entity Attributes Filter" + }, { + "id": "67d52837-5e50-487c-a744-9ee0ea39f5b7", + "comment": "", + "command": "click", + "target": "id=/entityAttributesFilterTarget.target", + "targets": [ + ["id=/entityAttributesFilterTarget.target", "id"], + ["css=#\\/entityAttributesFilterTarget\\.target", "css:finder"], + ["xpath=//input[@id='/entityAttributesFilterTarget.target']", "xpath:attributes"], + ["xpath=//div[@id='-container']/div/input", "xpath:idRelative"], + ["xpath=//div/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "3512eb60-34d4-455b-8a2c-e6c98d382cac", + "comment": "", + "command": "type", + "target": "id=/entityAttributesFilterTarget.target", + "targets": [ + ["id=/entityAttributesFilterTarget.target", "id"], + ["css=#\\/entityAttributesFilterTarget\\.target", "css:finder"], + ["xpath=//input[@id='/entityAttributesFilterTarget.target']", "xpath:attributes"], + ["xpath=//div[@id='-container']/div/input", "xpath:idRelative"], + ["xpath=//div/div/input", "xpath:position"] + ], + "value": "unicon" + }, { + "id": "a9d49b1c-c794-4c54-83ea-c61bd3011dba", + "comment": "", + "command": "click", + "target": "css=.btn-success:nth-child(1)", + "targets": [ + ["css=.btn-success:nth-child(1)", "css:finder"], + ["xpath=//div[2]/button", "xpath:position"], + ["xpath=//button[contains(.,'Add Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "dff6b5d5-02ae-41a1-bae4-6ce39aeca199", + "comment": "", + "command": "click", + "target": "css=#\\/filterEnabled\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/filterEnabled\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/filterEnabled.parent']/label", "xpath:idRelative"], + ["xpath=//checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Enable Filter?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "356339ea-0caf-406a-a2d6-b3eb991b7af6", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/omitNotBefore\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/omitNotBefore\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/omitNotBefore.parent']/label", "xpath:idRelative"], + ["xpath=//div[6]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Omit Not Before Condition?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "fdb64234-9424-4e0d-8be0-dd7c43859de3", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/forceAuthn\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/forceAuthn\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/forceAuthn.parent']/label", "xpath:idRelative"], + ["xpath=//div[10]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Force AuthN')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c722da17-b739-4fa6-b731-8b347e3c96e3", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(8) .d-flex > .btn", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1abe39e3-d7f2-447f-aff4-3382cc648e29", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "93505bd6-8a5e-4ef0-8f50-d2dc9bce71d6", + "comment": "", + "command": "click", + "target": "css=.input-group-append > .btn", + "targets": [ + ["css=.input-group-append > .btn", "css:finder"], + ["xpath=(//button[@type='button'])[3]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/0-container']/div/div/button", "xpath:idRelative"], + ["xpath=//auto-complete/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "70e68495-a52f-4c3b-aeb4-fac69e8cda96", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "b269b8f4-8191-47c1-a84a-5b64df6aadcb", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/nameIdFormats/0__option--2", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/0__option--2", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/0__option--2", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/nameIdFormats/0__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/nameIdFormats/0__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "c4431fc6-cbd3-4b7b-b1fd-b30141aa2af8", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(6) .custom-control-label", + "targets": [ + ["css=tr:nth-child(6) .custom-control-label", "css:finder"], + ["xpath=//tr[6]/td[2]/fieldset/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Toggle eduPersonAffiliation')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "7b22d9b0-81f4-47c6-91f1-713c89cf9dd1", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(7) .custom-control-label", + "targets": [ + ["css=tr:nth-child(7) .custom-control-label", "css:finder"], + ["xpath=//tr[7]/td[2]/fieldset/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Toggle eduPersonScopedAffiliation')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "ad3ec36d-6e6a-4650-b7a1-0c8efaaeabe3", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(8) .custom-control-label", + "targets": [ + ["css=tr:nth-child(8) .custom-control-label", "css:finder"], + ["xpath=//tr[8]/td[2]/fieldset/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Toggle eduPersonPrimaryAffiliation')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "25090cbb-9e11-4938-b44e-70326857422d", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//button[@type='submit']", "xpath:attributes"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "772bafa8-7089-4895-a66b-0d3c333c7245", + "comment": "", + "command": "waitForElementVisible", + "target": "css=.td-lg:nth-child(4)", + "targets": [], + "value": "10000" + }, { + "id": "e9f4ddf4-db8a-4bda-88cc-66173717986c", + "comment": "", + "command": "assertText", + "target": "css=.td-lg:nth-child(4)", + "targets": [ + ["css=.td-lg:nth-child(4)", "css:finder"], + ["xpath=//td[4]", "xpath:position"], + ["xpath=//td[contains(.,'EntityAttributes')]", "xpath:innerText"] + ], + "value": "EntityAttributes" + }, { + "id": "9a99cc7c-55e1-4f62-bf18-e5936e8a98a7", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//div[2]/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Add Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "30bd8306-1aa2-4151-9076-68ce955052c3", + "comment": "", + "command": "select", + "target": "name=type", + "targets": [], + "value": "label=NameIDFormat" + }, { + "id": "a0388dc6-4668-48bb-ab21-2ecaaade5ff0", + "comment": "", + "command": "click", + "target": "css=option:nth-child(3)", + "targets": [ + ["css=option:nth-child(3)", "css:finder"], + ["xpath=//option[@value='NameIDFormat']", "xpath:attributes"], + ["xpath=//option[3]", "xpath:position"], + ["xpath=//option[contains(.,'NameIDFormat')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "be76769e-6422-4b1f-a2e4-00a32d394057", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field59", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Name ID Format Filter" + }, { + "id": "dbae3f45-d828-4a82-bc01-a1e48381fa2e", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "81373637-8e36-4736-9b2a-7b8d477dc2c1", + "comment": "", + "command": "click", + "target": "id=/nameIdFormatFilterTarget.valuedd", + "targets": [ + ["id=/nameIdFormatFilterTarget.valuedd", "id"], + ["css=#\\/nameIdFormatFilterTarget\\.valuedd", "css:finder"], + ["xpath=//button[@id='/nameIdFormatFilterTarget.valuedd']", "xpath:attributes"], + ["xpath=//fieldset/div/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "7cf83d2f-841e-48f3-997e-3dfedfb47dec", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "f562c710-39fc-490d-80c9-d3525722397c", + "comment": "", + "command": "click", + "target": "linkText=Regex", + "targets": [ + ["linkText=Regex", "linkText"], + ["css=.dropdown-item:nth-child(2)", "css:finder"], + ["xpath=//a[contains(text(),'Regex')]", "xpath:link"], + ["xpath=(//a[contains(@href, '#')])[2]", "xpath:href"], + ["xpath=//div/div/a[2]", "xpath:position"], + ["xpath=//a[contains(.,'Regex')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "0f4f0257-b63c-4724-b308-f54acf2afc2b", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "c5dc3e04-eb5a-4885-92ed-3425da3026e6", + "comment": "", + "command": "sendKeys", + "target": "id=/nameIdFormatFilterTarget.target", + "targets": [], + "value": "/foo.*/" + }, { + "id": "d2cbc813-89e5-4801-a9fe-5e0e775a419f", + "comment": "", + "command": "click", + "target": "css=#\\/removeExistingFormats\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/removeExistingFormats\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/removeExistingFormats.parent']/label", "xpath:idRelative"], + ["xpath=//div[7]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Remove Existing Formats?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "77dfeb05-38e3-4ef8-9566-06e7597d464c", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//div/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "f79371b5-0081-45a0-bfb3-c403db903043", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "a8ed628c-53f7-4551-9ce8-fef976cc96ce", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .fa-arrow-circle-down", + "targets": [ + ["css=tr:nth-child(1) .fa-arrow-circle-down", "css:finder"], + ["xpath=//button[2]/i", "xpath:position"] + ], + "value": "" + }, { + "id": "6b3ec8f1-8b9a-40f5-816f-3a1e415b9d8d", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "be805934-2692-4a1c-a28f-afb3cc4eb5f4", + "comment": "", + "command": "assertText", + "target": "css=tr:nth-child(1) > .td-lg:nth-child(4)", + "targets": [ + ["css=tr:nth-child(1) > .td-lg:nth-child(4)", "css:finder"], + ["xpath=//td[4]", "xpath:position"], + ["xpath=//td[contains(.,'NameIDFormat')]", "xpath:innerText"] + ], + "value": "NameIDFormat" + }, { + "id": "039aff93-c0de-40fb-a1c9-e22ffbf7e1da", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .fa-arrow-circle-down", + "targets": [ + ["css=tr:nth-child(1) .fa-arrow-circle-down", "css:finder"], + ["xpath=//button[2]/i", "xpath:position"] + ], + "value": "" + }, { + "id": "403570ff-e1f0-4db9-925f-f90c5994b60e", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "8f2da627-e8ad-473a-a71a-bec5dd1f0999", + "comment": "", + "command": "assertText", + "target": "css=tr:nth-child(1) > .td-lg:nth-child(4)", + "targets": [ + ["css=tr:nth-child(1) > .td-lg:nth-child(4)", "css:finder"], + ["xpath=//td[4]", "xpath:position"], + ["xpath=//td[contains(.,'EntityAttributes')]", "xpath:innerText"] + ], + "value": "EntityAttributes" + }, { + "id": "56e4a69d-0fcd-4d50-82c6-6716af892e39", + "comment": "", + "command": "click", + "target": "css=.nav-item translate-i18n", + "targets": [ + ["css=.nav-item translate-i18n", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li[2]/a/translate-i18n", "xpath:idRelative"], + ["xpath=//a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Dashboard')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "b913ed4f-3802-4fb6-8a5b-0d5a9afb76d5", + "comment": "", + "command": "click", + "target": "linkText=Metadata Providers", + "targets": [ + ["linkText=Metadata Providers", "linkText"], + ["css=.nav > .nav-item:nth-child(2) > .nav-link", "css:finder"], + ["xpath=//a[contains(text(),'Metadata Providers')]", "xpath:link"], + ["xpath=//a[contains(@href, '/dashboard/metadata/manager/providers')]", "xpath:href"], + ["xpath=//dashboard-page/div/ul/li[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Metadata Providers')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "4025491d-ad25-4b49-879a-af34ebd9ca7a", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "e28ed34b-a0bd-4339-844c-454835619d65", + "comment": "", + "command": "click", + "target": "linkText=Dynamic Http Metadata Provider", + "targets": [ + ["linkText=Dynamic Http Metadata Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Dynamic Http Metadata Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/e9de09a6-6d16-4e94-bba4-13fa38c312ff/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Dynamic Http Metadata Provider')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "3535cbe5-1ade-4d00-ab7f-2a8d1a5a5f6c", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "285fa762-484b-4a81-bdc3-68358cbbe895", + "comment": "", + "command": "click", + "target": "css=.mb-4:nth-child(1) .actions span", + "targets": [ + ["css=.mb-4:nth-child(1) .actions span", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section/div/div/div/button/span", "xpath:idRelative"], + ["xpath=//div/button/span", "xpath:position"], + ["xpath=//span[contains(.,'Edit')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "3234d83c-4f30-418b-a9fb-e717862fd493", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "9e520768-e930-483e-b078-c39be294438f", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field88", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Dynamic Http Metadata Provider V2" + }, { + "id": "8c2f44ff-29f5-49b0-94ee-6e79e2fe871b", + "comment": "", + "command": "click", + "target": "linkText=Dynamic Attributes", + "targets": [ + ["linkText=Dynamic Attributes", "linkText"], + ["css=.nav > .nav-link:nth-child(2)", "css:finder"], + ["xpath=(//a[contains(@href, '/metadata/provider/e9de09a6-6d16-4e94-bba4-13fa38c312ff/edit/dynamic')])[2]", "xpath:href"], + ["xpath=//nav/a[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "a339275d-3c7a-4a4d-9e6e-cf587521e65c", + "comment": "", + "command": "type", + "target": "id=/dynamicMetadataResolverAttributes/refreshDelayFactor", + "targets": [ + ["id=/dynamicMetadataResolverAttributes/refreshDelayFactor", "id"], + ["name=field99", "name"], + ["css=#\\/dynamicMetadataResolverAttributes\\/refreshDelayFactor", "css:finder"], + ["xpath=//input[@id='/dynamicMetadataResolverAttributes/refreshDelayFactor']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "0.7" + }, { + "id": "7cab82a7-0703-4087-b0d4-5d02a97c28f2", + "comment": "", + "command": "click", + "target": "css=.btn-info > translate-i18n", + "targets": [ + ["css=.btn-info > translate-i18n", "css:finder"], + ["xpath=//div[2]/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "de042711-231a-4090-8845-7a4c3260264b", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "1e0118a5-e853-4d3b-a017-225f41020fe8", + "comment": "", + "command": "click", + "target": "linkText=Dynamic Http Metadata Provider V2", + "targets": [ + ["linkText=Dynamic Http Metadata Provider V2", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Dynamic Http Metadata Provider V2')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/e9de09a6-6d16-4e94-bba4-13fa38c312ff/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Dynamic Http Metadata Provider V2')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "9a6b3095-e834-4f31-9d54-0561f556052f", + "comment": "", + "command": "click", + "target": "linkText=Version History", + "targets": [ + ["linkText=Version History", "linkText"], + ["css=div:nth-child(1) > .btn:nth-child(1)", "css:finder"], + ["xpath=//div[@id='navigation']/div/a", "xpath:idRelative"], + ["xpath=//a[contains(@href, '/metadata/provider/e9de09a6-6d16-4e94-bba4-13fa38c312ff/configuration/history')]", "xpath:href"], + ["xpath=//div/div/a", "xpath:position"], + ["xpath=//a[contains(.,'  Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d441ff7f-c099-4dd4-b6a7-53f220eb9023", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "5702d042-d8fd-4a3a-b354-c2378c6a395c", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .custom-control-label", + "targets": [ + ["css=tr:nth-child(1) .custom-control-label", "css:finder"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Check to select')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "10cb69e6-7738-4536-bed2-c71c812f1246", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(2) .custom-control-label", + "targets": [ + ["css=tr:nth-child(2) .custom-control-label", "css:finder"], + ["xpath=//tr[2]/td/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "bf03f3d5-c6f3-4693-9145-3afefbc84bab", + "comment": "", + "command": "click", + "target": "css=.btn-primary > translate-i18n", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//history-list/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Compare Selected')]", "xpath:innerText"] + ], + "value": "" + }] + }], + "suites": [{ + "id": "248ba015-77cd-430f-b973-d14fd4f39a27", + "name": "Default Suite", + "persistSession": false, + "parallel": false, + "timeout": 300, + "tests": ["d87336f9-5279-422f-bf4d-73403f34fc85"] + }], + "urls": ["http://localhost:10101/"], + "plugins": [] +} \ No newline at end of file diff --git a/backend/src/integration/resources/false.side b/backend/src/integration/resources/false.side new file mode 100644 index 000000000..b4f5dbad8 --- /dev/null +++ b/backend/src/integration/resources/false.side @@ -0,0 +1,2225 @@ +{ + "id": "57bde36d-15e6-4364-b117-4fb36e1e4941", + "version": "2.0", + "name": "SHIBUI-1364-1", + "url": "http://localhost:10101", + "tests": [{ + "id": "d87336f9-5279-422f-bf4d-73403f34fc85", + "name": "SHIBUI-1364-1", + "commands": [{ + "id": "2f6aa07a-6a16-439f-8c16-9822163c7b61", + "comment": "", + "command": "open", + "target": "/login", + "targets": [], + "value": "" + }, { + "id": "f1c7d7be-3f12-43f3-8646-ba7294416beb", + "comment": "", + "command": "type", + "target": "name=username", + "targets": [ + ["name=username", "name"], + ["css=tr:nth-child(1) input", "css:finder"], + ["xpath=//input[@name='username']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "admin" + }, { + "id": "f293afde-ce8a-4b85-9a19-fb77f21df988", + "comment": "", + "command": "type", + "target": "name=password", + "targets": [ + ["name=password", "name"], + ["css=tr:nth-child(2) input", "css:finder"], + ["xpath=//input[@name='password']", "xpath:attributes"], + ["xpath=//tr[2]/td[2]/input", "xpath:position"] + ], + "value": "adminpass" + }, { + "id": "358c31ea-fab8-4709-9b25-d9e5e82e123c", + "comment": "", + "command": "click", + "target": "name=submit", + "targets": [ + ["name=submit", "name"], + ["css=td:nth-child(1) > input", "css:finder"], + ["xpath=//input[@name='submit']", "xpath:attributes"], + ["xpath=//tr[3]/td/input", "xpath:position"] + ], + "value": "" + }, { + "id": "fdea3214-f0e0-4f13-9d5d-e07ef92d71f1", + "comment": "", + "command": "click", + "target": "css=#addNewDropdown", + "targets": [ + ["css=#addNewDropdown > translate-i18n", "css:finder"], + ["xpath=//button[@id='addNewDropdown']/translate-i18n", "xpath:idRelative"], + ["xpath=//translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Add New')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "2c40ac99-5e92-4c1c-923a-5a6100cadf43", + "comment": "", + "command": "click", + "target": "linkText=Metadata Provider", + "targets": [ + ["linkText=Metadata Provider", "linkText"], + ["css=.nav-link:nth-child(2)", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li/div/a[2]", "xpath:idRelative"], + ["xpath=(//a[contains(@href, '')])[3]", "xpath:href"], + ["xpath=//a[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "7a42de04-995f-45aa-ba3f-095900a564ec", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/name", + "targets": [], + "value": "10000" + }, { + "id": "b2725ef6-b394-4f87-a2a5-031be085cedb", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field4", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "File Backed HTTP Metadata Provider" + }, { + "id": "ca36b018-a4df-43d1-9fbd-973d6653d3e0", + "comment": "", + "command": "select", + "target": "id=/type", + "targets": [ + ["id=/type", "id"], + ["name=field2", "name"], + ["css=#\\/type", "css:finder"], + ["xpath=//select[@id='/type']", "xpath:attributes"], + ["xpath=//select", "xpath:position"] + ], + "value": "label=FileBackedHttpMetadataProvider" + }, { + "id": "e5d1d696-3029-4f9d-ad53-2e60b4789935", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[2]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "352f066f-c2af-4735-81b1-5440ba7a3432", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/xmlId", + "targets": [], + "value": "10000" + }, { + "id": "e7462621-f4e4-4512-b200-20afa5685fc6", + "comment": "", + "command": "type", + "target": "id=/xmlId", + "targets": [ + ["id=/xmlId", "id"], + ["name=field7", "name"], + ["css=#\\/xmlId", "css:finder"], + ["xpath=//input[@id='/xmlId']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "12345" + }, { + "id": "7bfaa2a7-c66d-4e36-b1f4-1de30b02ebd0", + "comment": "", + "command": "type", + "target": "id=/metadataURL", + "targets": [ + ["id=/metadataURL", "id"], + ["name=field8", "name"], + ["css=#\\/metadataURL", "css:finder"], + ["xpath=//input[@id='/metadataURL']", "xpath:attributes"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "https://idp.unicon.net/idp/shibboleth" + }, { + "id": "047e1ea4-e28c-4b1b-86fc-ff19a3c0efcc", + "comment": "", + "command": "click", + "target": "id=/initializeFromBackupFile.false", + "targets": [ + ["id=/initializeFromBackupFile.false", "id"], + ["css=#\\/initializeFromBackupFile\\.false", "css:finder"], + ["xpath=//input[@id='/initializeFromBackupFile.false']", "xpath:attributes"], + ["xpath=//div[2]/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "34124b74-7b90-424a-9219-1f0bfbf06b70", + "comment": "", + "command": "type", + "target": "id=/backingFile", + "targets": [ + ["id=/backingFile", "id"], + ["name=field10", "name"], + ["css=#\\/backingFile", "css:finder"], + ["xpath=//input[@id='/backingFile']", "xpath:attributes"], + ["xpath=//div[4]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "%{idp.home}/foo.txt" + }, { + "id": "91a96cbd-57f4-4dc2-8f75-eb3e96526ae7", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "0668032d-608b-4a01-9ac8-e4e2ac058294", + "comment": "", + "command": "click", + "target": "css=.btn-outline-secondary", + "targets": [ + ["css=.btn-outline-secondary", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/backupFileInitNextRefreshDelay-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "19657c78-782d-4046-abce-64093bd17fa7", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "35dfa0f8-c0f2-4356-a6b0-18b5dc35337b", + "comment": "", + "command": "click", + "target": "id=/backupFileInitNextRefreshDelay__option--1", + "targets": [ + ["id=/backupFileInitNextRefreshDelay__option--1", "id"], + ["css=#\\/backupFileInitNextRefreshDelay__option--1", "css:finder"], + ["xpath=//li[@id='/backupFileInitNextRefreshDelay__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/backupFileInitNextRefreshDelay__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[2]", "xpath:position"], + ["xpath=//li[contains(.,'PT30S')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "b4d0a551-3bc1-466f-b204-ec7164af44ec", + "comment": "", + "command": "click", + "target": "id=/failFastInitialization.false", + "targets": [ + ["id=/failFastInitialization.false", "id"], + ["css=#\\/failFastInitialization\\.false", "css:finder"], + ["xpath=//input[@id='/failFastInitialization.false']", "xpath:attributes"], + ["xpath=//div[7]/sf-form-element/div/sf-widget-chooser/boolean-radio/div/div[2]/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "bef80dbb-25a6-4381-8b0e-331faaeb4392", + "comment": "", + "command": "click", + "target": "id=/satisfyAnyPredicates.true", + "targets": [ + ["id=/satisfyAnyPredicates.true", "id"], + ["css=#\\/satisfyAnyPredicates\\.true", "css:finder"], + ["xpath=//input[@id='/satisfyAnyPredicates.true']", "xpath:attributes"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/boolean-radio/div/div/label/input", "xpath:position"] + ], + "value": "" + }, { + "id": "d0af8425-5f4c-4037-a549-52553b828179", + "comment": "", + "command": "pause", + "target": "1000", + "targets": [], + "value": "" + }, { + "id": "9fe532ee-4ce6-4ff8-ab6c-ea92eb527ded", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "44e705a1-f284-4303-a0b6-c4bc9896c78d", + "comment": "", + "command": "pause", + "target": "1000", + "targets": [], + "value": "" + }, { + "id": "91c42709-f202-48eb-bd7f-389ec454b86b", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "824b4515-ae14-436e-a56f-d631ea9e1edc", + "comment": "", + "command": "click", + "target": "css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay-container .btn", + "targets": [ + ["css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/reloadableMetadataResolverAttributes/minRefreshDelay-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "12ba0481-b236-495c-b2a3-a665c5eec502", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "9ee7065a-823e-4b4a-b212-0582eeaf7a00", + "comment": "", + "command": "click", + "target": "id=/reloadableMetadataResolverAttributes/minRefreshDelay__option--0", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/minRefreshDelay__option--0", "id"], + ["css=#\\/reloadableMetadataResolverAttributes\\/minRefreshDelay__option--0", "css:finder"], + ["xpath=//li[@id='/reloadableMetadataResolverAttributes/minRefreshDelay__option--0']", "xpath:attributes"], + ["xpath=//ul[@id='/reloadableMetadataResolverAttributes/minRefreshDelay__listbox']/li", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li", "xpath:position"], + ["xpath=//li[contains(.,'PT0S')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1e063a3c-c3c9-4ab6-9e7b-a7fb4d785288", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "618cc5f1-417b-4bc6-9388-3238f2304904", + "comment": "", + "command": "click", + "target": "css=#\\/reloadableMetadataResolverAttributes\\/maxRefreshDelay-container .btn", + "targets": [ + ["css=#\\/reloadableMetadataResolverAttributes\\/maxRefreshDelay-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[3]", "xpath:attributes"], + ["xpath=//div[@id='/reloadableMetadataResolverAttributes/maxRefreshDelay-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "0b129e41-adb3-47ef-a2b4-34899ca6d8fb", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "a89f1b4d-10bd-48f7-9b97-865710cfe01f", + "comment": "", + "command": "click", + "target": "id=/reloadableMetadataResolverAttributes/maxRefreshDelay__option--2", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/maxRefreshDelay__option--2", "id"], + ["css=#\\/reloadableMetadataResolverAttributes\\/maxRefreshDelay__option--2", "css:finder"], + ["xpath=//li[@id='/reloadableMetadataResolverAttributes/maxRefreshDelay__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/reloadableMetadataResolverAttributes/maxRefreshDelay__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "143b781c-56ae-48c6-a7f5-8c93953f6095", + "comment": "", + "command": "click", + "target": "id=/reloadableMetadataResolverAttributes/refreshDelayFactor", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/refreshDelayFactor", "id"], + ["name=field20", "name"], + ["css=#\\/reloadableMetadataResolverAttributes\\/refreshDelayFactor", "css:finder"], + ["xpath=//input[@id='/reloadableMetadataResolverAttributes/refreshDelayFactor']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "dcd01c7a-f733-4977-9cc2-e9084903e079", + "comment": "", + "command": "type", + "target": "id=/reloadableMetadataResolverAttributes/refreshDelayFactor", + "targets": [ + ["id=/reloadableMetadataResolverAttributes/refreshDelayFactor", "id"], + ["name=field20", "name"], + ["css=#\\/reloadableMetadataResolverAttributes\\/refreshDelayFactor", "css:finder"], + ["xpath=//input[@id='/reloadableMetadataResolverAttributes/refreshDelayFactor']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "0.5" + }, { + "id": "b7522094-c53a-4e79-8c7c-e38a3b2615f4", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "faf43746-1293-437f-a1ce-63145f5d6135", + "comment": "", + "command": "pause", + "target": "1500", + "targets": [], + "value": "" + }, { + "id": "363af92e-0327-47b9-918c-1560adab40cc", + "comment": "", + "command": "click", + "target": "css=.btn-outline-secondary", + "targets": [ + ["css=.btn-outline-secondary", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/metadataFilters/RequiredValidUntil/maxValidityInterval-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "a14576bb-2d15-4e51-89c6-b8289311e58a", + "comment": "", + "command": "pause", + "target": "1500", + "targets": [], + "value": "" + }, { + "id": "a4470d6f-04a7-4c4b-8c1e-70cff2f35e8a", + "comment": "", + "command": "click", + "target": "id=/metadataFilters/RequiredValidUntil/maxValidityInterval__option--1", + "targets": [ + ["id=/metadataFilters/RequiredValidUntil/maxValidityInterval__option--1", "id"], + ["css=#\\/metadataFilters\\/RequiredValidUntil\\/maxValidityInterval__option--1", "css:finder"], + ["xpath=//li[@id='/metadataFilters/RequiredValidUntil/maxValidityInterval__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/metadataFilters/RequiredValidUntil/maxValidityInterval__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[2]", "xpath:position"], + ["xpath=//li[contains(.,'P14D')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "4530c1b4-8f27-4272-9633-c792a3a54f90", + "comment": "", + "command": "click", + "target": "id=/metadataFilters/SignatureValidation/requireSignedRoot", + "targets": [ + ["css=#\\/metadataFilters\\/SignatureValidation\\/requireSignedRoot\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/metadataFilters/SignatureValidation/requireSignedRoot.parent']/label", "xpath:idRelative"], + ["xpath=//div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Require Signed Root')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "10cd8cee-fc6a-4e5b-a11b-a7b0a9338f5d", + "comment": "", + "command": "type", + "target": "id=/metadataFilters/SignatureValidation/certificateFile", + "targets": [ + ["id=/metadataFilters/SignatureValidation/certificateFile", "id"], + ["name=field27", "name"], + ["css=#\\/metadataFilters\\/SignatureValidation\\/certificateFile", "css:finder"], + ["xpath=//input[@id='/metadataFilters/SignatureValidation/certificateFile']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "%{idp.home}/foo2.txt" + }, { + "id": "a3ce889f-0607-4071-bd39-25b169c30114", + "comment": "", + "command": "click", + "target": "css=div:nth-child(3) > sf-form-element .bg-light", + "targets": [ + ["css=div:nth-child(3) > sf-form-element .bg-light", "css:finder"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/fieldset-object/div/div/fieldset/div", "xpath:position"] + ], + "value": "" + }, { + "id": "f205ec23-b433-44bb-af80-e72330b4c7a3", + "comment": "", + "command": "click", + "target": "css=.fa-plus", + "targets": [ + ["css=.fa-plus", "css:finder"], + ["xpath=//array-component/div/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "4dae6914-ae68-45e2-b332-cc4c1ac71e43", + "comment": "", + "command": "select", + "target": "id=/metadataFilters/EntityRoleWhiteList/retainedRoles/0", + "targets": [], + "value": "label=SPSSODescriptor" + }, { + "id": "4b257d69-1948-4c5f-a88d-b1bfa8f2ba72", + "comment": "", + "command": "click", + "target": "css=option:nth-child(2)", + "targets": [ + ["css=option:nth-child(2)", "css:finder"], + ["xpath=//option[@value='1: md:SPSSODescriptor']", "xpath:attributes"], + ["xpath=//select[@id='/metadataFilters/EntityRoleWhiteList/retainedRoles/0']/option[2]", "xpath:idRelative"], + ["xpath=//option[2]", "xpath:position"], + ["xpath=//option[contains(.,'SPSSODescriptor')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d47fc8b5-4062-4813-90a8-cdc91b777f1d", + "comment": "", + "command": "click", + "target": "css=.btn-success", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "442c5b8d-f108-488e-8779-06171f5081f6", + "comment": "", + "command": "select", + "target": "id=/metadataFilters/EntityRoleWhiteList/retainedRoles/1", + "targets": [], + "value": "label=AttributeAuthorityDescriptor" + }, { + "id": "42eddc22-9eed-41d1-aaee-2d4a1d933fa9", + "comment": "", + "command": "click", + "target": "css=#\\/metadataFilters\\/EntityRoleWhiteList\\/retainedRoles\\/1 > option:nth-child(3)", + "targets": [ + ["css=#\\/metadataFilters\\/EntityRoleWhiteList\\/retainedRoles\\/1 > option:nth-child(3)", "css:finder"], + ["xpath=(//option[@value='2: md:AttributeAuthorityDescriptor'])[2]", "xpath:attributes"], + ["xpath=//select[@id='/metadataFilters/EntityRoleWhiteList/retainedRoles/1']/option[3]", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/select-component/div/select/option[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "4ebbc08c-ee24-43d8-8c2d-b639a625189c", + "comment": "", + "command": "click", + "target": "css=#\\/metadataFilters\\/EntityRoleWhiteList\\/removeRolelessEntityDescriptors\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/metadataFilters\\/EntityRoleWhiteList\\/removeRolelessEntityDescriptors\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/metadataFilters/EntityRoleWhiteList/removeRolelessEntityDescriptors.parent']/label", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Remove Roleless Entity Descriptors?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1c23c527-46e7-4fe6-8f60-37833af073c8", + "comment": "", + "command": "click", + "target": "css=#\\/metadataFilters\\/EntityRoleWhiteList\\/removeEmptyEntitiesDescriptors\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/metadataFilters\\/EntityRoleWhiteList\\/removeEmptyEntitiesDescriptors\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/metadataFilters/EntityRoleWhiteList/removeEmptyEntitiesDescriptors.parent']/label", "xpath:idRelative"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Remove Empty Entities Descriptors?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "ee3d0257-56e2-402d-8fef-c21c8e62b9fe", + "comment": "", + "command": "click", + "target": "css=.next", + "targets": [ + ["css=.next", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "7cd861ea-d86c-4faa-a07b-c1508811b506", + "comment": "", + "command": "click", + "target": "css=.custom-control-label", + "targets": [ + ["css=.custom-control-label", "css:finder"], + ["xpath=//div[@id='/enabled.parent']/label", "xpath:idRelative"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Enable this service?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "0c112a41-8feb-42da-a58b-8fc04e9a3bf6", + "comment": "", + "command": "click", + "target": "css=.save", + "targets": [ + ["css=.save", "css:finder"], + ["xpath=//li[3]/button", "xpath:position"] + ], + "value": "" + }, { + "id": "12673aa7-fc4e-4877-9842-a9d88dbc2d97", + "comment": "", + "command": "click", + "target": "linkText=File Backed HTTP Metadata Provider", + "targets": [ + ["linkText=File Backed HTTP Metadata Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'File Backed HTTP Metadata Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/da22a0b7-40d7-418c-bbe9-7ba4c37d3905/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'File Backed HTTP Metadata Provider')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "daa2d46a-d238-4a48-aca7-0f34c9b93d5f", + "comment": "", + "command": "click", + "target": "css=.btn:nth-child(2) > translate-i18n", + "targets": [ + ["css=.btn:nth-child(2) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/button/translate-i18n", "xpath:idRelative"], + ["xpath=//div/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Filters')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d86e9a98-a0a1-4696-b454-1bca1d01f9d0", + "comment": "", + "command": "click", + "target": "css=#filters .actions span", + "targets": [ + ["css=#filters .actions span", "css:finder"], + ["xpath=//div[@id='filters']/div/div/a/span", "xpath:idRelative"], + ["xpath=//div/a/span", "xpath:position"], + ["xpath=//span[contains(.,'Add Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "dc41b26d-b101-4ead-866f-482df0bfee04", + "comment": "", + "command": "select", + "target": "name=type", + "targets": [], + "value": "label=EntityAttributes" + }, { + "id": "49fe7508-4f42-4eae-a47d-85a0983efb64", + "comment": "", + "command": "click", + "target": "css=option:nth-child(2)", + "targets": [ + ["css=option:nth-child(2)", "css:finder"], + ["xpath=//option[@value='EntityAttributes']", "xpath:attributes"], + ["xpath=//option[2]", "xpath:position"], + ["xpath=//option[contains(.,'EntityAttributes')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "8a52ad88-b583-41b7-92a6-bdb185b03a06", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/name", + "targets": [], + "value": "10000" + }, { + "id": "b1c779b1-d3ed-47cc-bc88-e5c280161c32", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field37", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Entity Attributes Filter" + }, { + "id": "9ac14c43-206b-4a60-8e58-c4ce64efa2c8", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "a10a6faf-90cd-4713-8ea3-60c768ed935e", + "comment": "", + "command": "click", + "target": "id=/entityAttributesFilterTarget.valuedd", + "targets": [ + ["id=/entityAttributesFilterTarget.valuedd", "id"], + ["css=#\\/entityAttributesFilterTarget\\.valuedd", "css:finder"], + ["xpath=//button[@id='/entityAttributesFilterTarget.valuedd']", "xpath:attributes"], + ["xpath=//fieldset/div/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1f54a508-0b40-4dc0-b6e0-706971fb19bf", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "1f2b93b8-23ae-4a9c-b015-96ca890ae150", + "comment": "", + "command": "click", + "target": "linkText=Regex", + "targets": [ + ["linkText=Regex", "linkText"], + ["css=.dropdown-item:nth-child(2)", "css:finder"], + ["xpath=//a[contains(text(),'Regex')]", "xpath:link"], + ["xpath=(//a[contains(@href, '#')])[2]", "xpath:href"], + ["xpath=//div/div/a[2]", "xpath:position"], + ["xpath=//a[contains(.,'Regex')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "b2a41370-db61-4bae-a5f7-a8c5e852e15e", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "5c2ed93d-3630-408c-bb89-0b2baffb73c0", + "comment": "", + "command": "click", + "target": "id=/entityAttributesFilterTarget.target", + "targets": [ + ["id=/entityAttributesFilterTarget.target", "id"], + ["name=script", "name"], + ["css=#\\/entityAttributesFilterTarget\\.target", "css:finder"], + ["xpath=//input[@id='/entityAttributesFilterTarget.target']", "xpath:attributes"], + ["xpath=//div/div/input", "xpath:position"] + ], + "value": "" + }, { + "id": "6dec176f-0c5a-4982-867e-087342c90987", + "comment": "", + "command": "sendKeys", + "target": "id=/entityAttributesFilterTarget.target", + "targets": [], + "value": "/foo.*/" + }, { + "id": "f4e6e8a5-0040-4aac-a0f9-9b49abbd9568", + "comment": "", + "command": "click", + "target": "css=#\\/filterEnabled\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/filterEnabled\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/filterEnabled.parent']/label", "xpath:idRelative"], + ["xpath=//checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Enable Filter?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "603aff60-cf79-4804-90c5-2ffd0f5ef550", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/signAssertion\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/signAssertion\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/signAssertion.parent']/label", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/custom-object/div/div/fieldset/div/div/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Sign the Assertion?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "9456ba02-3dd6-4305-a0d3-f031e1e79b16", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/dontSignResponse\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/dontSignResponse\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/dontSignResponse.parent']/label", "xpath:idRelative"], + ["xpath=//div[2]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "a1ce4398-4f95-498c-b01b-2f25e1fd3380", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/turnOffEncryption\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/turnOffEncryption\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/turnOffEncryption.parent']/label", "xpath:idRelative"], + ["xpath=//div[3]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Turn off Encryption of Response?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "dcaa766a-3800-4412-9631-0f279e23bf41", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/useSha\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/useSha\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/useSha.parent']/label", "xpath:idRelative"], + ["xpath=//div[4]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Use SHA1 Signing Algorithm?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c7a9bd88-9198-4ce0-8ae0-618b90fd787a", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/ignoreAuthenticationMethod\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/ignoreAuthenticationMethod\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/ignoreAuthenticationMethod.parent']/label", "xpath:idRelative"], + ["xpath=//div[5]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Ignore any SP-Requested Authentication Method?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c806723d-9713-4710-96e2-6410b79895c0", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/omitNotBefore\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/omitNotBefore\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/omitNotBefore.parent']/label", "xpath:idRelative"], + ["xpath=//div[6]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Omit Not Before Condition?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1c7d678e-5b74-4542-bf6c-a64d0117f831", + "comment": "", + "command": "type", + "target": "id=/relyingPartyOverrides/responderId", + "targets": [ + ["id=/relyingPartyOverrides/responderId", "id"], + ["name=field50", "name"], + ["css=#\\/relyingPartyOverrides\\/responderId", "css:finder"], + ["xpath=//input[@id='/relyingPartyOverrides/responderId']", "xpath:attributes"], + ["xpath=//div[7]/sf-form-element/div/sf-widget-chooser/custom-string/div/input", "xpath:position"] + ], + "value": "id-123" + }, { + "id": "027b4448-eaf6-4f24-ae2f-5b592db910ed", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(8) .d-flex > .btn", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1bb700ae-08eb-403c-b3ba-0090132b69ff", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "fd1af538-1b5b-4d6a-b56b-d56e7f01bb40", + "comment": "", + "command": "click", + "target": "css=.fa-caret-down", + "targets": [ + ["css=.fa-caret-down", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/0-container']/div/div/button/i", "xpath:idRelative"], + ["xpath=//auto-complete/div/div/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "6afaa45d-1beb-4f15-8810-278af7489657", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "cc233154-4159-425b-8ac5-761c26a0de15", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/nameIdFormats/0__option--0", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/0__option--0", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/0__option--0", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/nameIdFormats/0__option--0']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/nameIdFormats/0__listbox']/li", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li", "xpath:position"] + ], + "value": "" + }, { + "id": "d8e3df44-0db6-458e-b133-36b7ec08fbb7", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .btn", + "targets": [ + ["css=div:nth-child(8) .btn > translate-i18n", "css:finder"], + ["xpath=//array-component/div/div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "3395ec88-2d19-4785-99f9-3921dddfba28", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "562c7f9f-1e55-432a-8fff-0cae15b23a33", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/nameIdFormats\\/1-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/1-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[4]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/1-container']/div/div/button", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "c80afbe5-2c88-4207-b133-6d151fea12a8", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "f5f27af2-b869-4b99-a3d9-3efce014be06", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/nameIdFormats/1__option--1", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/1__option--1", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/1__option--1", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/nameIdFormats/1__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/nameIdFormats/1__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "4e595806-b2c6-43c6-bd1f-78e659f795e4", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(8) .d-flex > .btn", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "5e26a17f-98e4-4adc-b851-4e854228ebba", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "b717af46-a3c1-40f2-ac1a-2c7f84fbf33f", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/nameIdFormats\\/2-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/2-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[5]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/2-container']/div/div/button", "xpath:idRelative"], + ["xpath=//li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "d07e6da7-ed28-4460-914a-eb355b3a2de3", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "4655a981-c5d6-4b48-aad2-77295dc37859", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/nameIdFormats/2__option--2", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/2__option--2", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/2__option--2", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/nameIdFormats/2__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/nameIdFormats/2__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "9902d02a-d7f7-4424-92f4-2a6072916421", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(8) .d-flex > .btn", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "605d3970-c910-4bec-accd-d7c4d0334f91", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "df07e4c7-8e0f-4eed-ab58-42e2b5bcfc93", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/nameIdFormats\\/3-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/3-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[6]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/3-container']/div/div/button", "xpath:idRelative"], + ["xpath=//li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "0ef4ae64-3b16-4488-b19e-629162a9c84d", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "cd34bc8a-564b-4d15-90c9-f09e12d7e078", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/nameIdFormats/3__option--3", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/3__option--3", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/3__option--3", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/nameIdFormats/3__option--3']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/nameIdFormats/3__listbox']/li[4]", "xpath:idRelative"], + ["xpath=//li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[4]", "xpath:position"] + ], + "value": "" + }, { + "id": "624fd275-3ee2-4cd0-890a-4ae22b152ed4", + "comment": "", + "command": "click", + "target": "css=div:nth-child(8) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(8) .d-flex > .btn", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "e6c3d2db-386e-4b9b-a160-c091b025c1b9", + "comment": "", + "command": "type", + "target": "id=/relyingPartyOverrides/nameIdFormats/4", + "targets": [ + ["id=/relyingPartyOverrides/nameIdFormats/4", "id"], + ["css=#\\/relyingPartyOverrides\\/nameIdFormats\\/4", "css:finder"], + ["xpath=//input[@id='/relyingPartyOverrides/nameIdFormats/4']", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/nameIdFormats/4-container']/div/input", "xpath:idRelative"], + ["xpath=//li[5]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/input", "xpath:position"] + ], + "value": "nameIdFormat" + }, { + "id": "82093807-448e-4a25-96bf-ed1dfca77452", + "comment": "", + "command": "click", + "target": "css=div:nth-child(9) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(9) .d-flex > .btn", "css:finder"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "1acc3e01-45ae-4c6d-9291-165affb7306f", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "fcd7d891-5ea4-45a6-8554-4298ec5804c9", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/authenticationMethods\\/0-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/0-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[8]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/authenticationMethods/0-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "faf08fb6-7c62-465c-b198-6da8ef3a1dd5", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "9bb8951c-c932-4236-89d8-9d2c8d49a702", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/authenticationMethods/0__option--0", + "targets": [ + ["id=/relyingPartyOverrides/authenticationMethods/0__option--0", "id"], + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/0__option--0", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/authenticationMethods/0__option--0']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/authenticationMethods/0__listbox']/li", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li", "xpath:position"] + ], + "value": "" + }, { + "id": "743e6d84-98b7-461a-8fb9-05826abb8e22", + "comment": "", + "command": "click", + "target": "css=div:nth-child(9) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(9) .d-flex > .btn", "css:finder"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "926e66e1-3bcb-41bd-a6a8-83ed90ceab59", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "81517bc9-7996-46be-9dfe-9eea57f0e616", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/authenticationMethods\\/1-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/1-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[9]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/authenticationMethods/1-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "8343153e-ade7-4713-a9f6-079b0bfbac44", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "8f00493c-94ef-4182-8423-5d23bd01136f", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/authenticationMethods/1__option--1", + "targets": [ + ["id=/relyingPartyOverrides/authenticationMethods/1__option--1", "id"], + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/1__option--1", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/authenticationMethods/1__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/authenticationMethods/1__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "7a3a49b4-4348-4318-a35c-ba0a2192e811", + "comment": "", + "command": "click", + "target": "css=div:nth-child(9) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(9) .d-flex > .btn", "css:finder"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "b9b5a336-2b99-4315-8c14-13ee1c5af2ed", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "c2f97ae8-fddf-4e48-b961-1d4154ceae9f", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/authenticationMethods\\/2-container .btn", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/2-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[10]", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/authenticationMethods/2-container']/div/div/button", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "39a8ea0f-a57a-49b6-b640-7b608eb29b88", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "3dcbc6b1-2571-4ab8-9014-66b19727fe0a", + "comment": "", + "command": "click", + "target": "id=/relyingPartyOverrides/authenticationMethods/2__option--2", + "targets": [ + ["id=/relyingPartyOverrides/authenticationMethods/2__option--2", "id"], + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/2__option--2", "css:finder"], + ["xpath=//li[@id='/relyingPartyOverrides/authenticationMethods/2__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/relyingPartyOverrides/authenticationMethods/2__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "efad42c9-5d79-42f6-a348-54ba5fe59e9d", + "comment": "", + "command": "click", + "target": "css=div:nth-child(9) .d-flex > .btn", + "targets": [ + ["css=div:nth-child(9) .d-flex > .btn", "css:finder"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "9a7b2bfe-8702-40be-a6fe-a76b9a01cdde", + "comment": "", + "command": "type", + "target": "id=/relyingPartyOverrides/authenticationMethods/3", + "targets": [ + ["id=/relyingPartyOverrides/authenticationMethods/3", "id"], + ["css=#\\/relyingPartyOverrides\\/authenticationMethods\\/3", "css:finder"], + ["xpath=//input[@id='/relyingPartyOverrides/authenticationMethods/3']", "xpath:attributes"], + ["xpath=//div[@id='/relyingPartyOverrides/authenticationMethods/3-container']/div/input", "xpath:idRelative"], + ["xpath=//div[9]/sf-form-element/div/sf-widget-chooser/array-component/div/ul/li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/input", "xpath:position"] + ], + "value": "someOverride" + }, { + "id": "82bf7075-6128-4471-a631-c8e4c3525eea", + "comment": "", + "command": "click", + "target": "css=#\\/relyingPartyOverrides\\/forceAuthn\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/relyingPartyOverrides\\/forceAuthn\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/relyingPartyOverrides/forceAuthn.parent']/label", "xpath:idRelative"], + ["xpath=//div[10]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Force AuthN')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "4098e48d-eef1-42e8-a1a4-e4eb48f5f9bd", + "comment": "", + "command": "click", + "target": "css=.fa-check", + "targets": [ + ["css=.fa-check", "css:finder"], + ["xpath=//button[@id='/attributeRelease.checkall']/i", "xpath:idRelative"], + ["xpath=//td[2]/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "2c3908a1-3fbf-4bbe-8611-fb8a87da1a66", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//button[@type='submit']", "xpath:attributes"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c49e62e6-f8b6-44b9-be12-5329e8bc5495", + "comment": "", + "command": "click", + "target": "linkText=Add Filter", + "targets": [ + ["linkText=Add Filter", "linkText"], + ["css=.btn-success", "css:finder"], + ["xpath=//a[contains(@href, '/metadata/provider/d71151a4-a27d-4cb9-bd96-882280454c4a/filter/new')]", "xpath:href"], + ["xpath=//div[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Add Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "097ea9f6-e75c-41a3-b4e9-a4a80a866802", + "comment": "", + "command": "select", + "target": "name=type", + "targets": [], + "value": "label=NameIDFormat" + }, { + "id": "9cf1a2b7-f951-4908-9ffe-dfcd3258a48d", + "comment": "", + "command": "click", + "target": "css=option:nth-child(3)", + "targets": [ + ["css=option:nth-child(3)", "css:finder"], + ["xpath=//option[@value='NameIDFormat']", "xpath:attributes"], + ["xpath=//option[3]", "xpath:position"], + ["xpath=//option[contains(.,'NameIDFormat')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "4a663db9-9f10-4b12-9cb9-61aa01ecc0c0", + "comment": "", + "command": "waitForElementVisible", + "target": "id=/name", + "targets": [], + "value": "10000" + }, { + "id": "92fdc836-2479-4faa-9e3d-447f5b82cc11", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field65", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//input", "xpath:position"] + ], + "value": "Name ID Format Filter" + }, { + "id": "563c9606-0174-4432-877a-ad769eb3206a", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "abfa17d5-ebfe-4bb2-b64a-ef5f127bac86", + "comment": "", + "command": "click", + "target": "id=/nameIdFormatFilterTarget.valuedd", + "targets": [ + ["id=/nameIdFormatFilterTarget.valuedd", "id"], + ["css=#\\/nameIdFormatFilterTarget\\.valuedd", "css:finder"], + ["xpath=//button[@id='/nameIdFormatFilterTarget.valuedd']", "xpath:attributes"], + ["xpath=//fieldset/div/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "43878e34-28cc-424f-9044-87b8cb61db03", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "6040112e-86c4-4e98-b258-79d7e61dfb6d", + "comment": "", + "command": "click", + "target": "linkText=Entity ID", + "targets": [ + ["linkText=Entity ID", "linkText"], + ["css=.show > .dropdown-item:nth-child(1)", "css:finder"], + ["xpath=//a[contains(text(),'Entity ID')]", "xpath:link"], + ["xpath=//a[contains(@href, '#')]", "xpath:href"], + ["xpath=//div/div/a", "xpath:position"], + ["xpath=//a[contains(.,'Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "70eba7e8-d84f-4b65-b5e8-d1523514dd29", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "bba23377-23a1-46d5-b044-15047a08ee53", + "comment": "", + "command": "type", + "target": "id=/nameIdFormatFilterTarget.target", + "targets": [ + ["id=/nameIdFormatFilterTarget.target", "id"], + ["css=#\\/nameIdFormatFilterTarget\\.target", "css:finder"], + ["xpath=//input[@id='/nameIdFormatFilterTarget.target']", "xpath:attributes"], + ["xpath=//div[@id='-container']/div/input", "xpath:idRelative"], + ["xpath=//div/div/input", "xpath:position"] + ], + "value": "https://idp.unicon.net/idp/shibboleth" + }, { + "id": "6fbb57d1-0fc6-42bc-86ca-4a5fe872ea34", + "comment": "", + "command": "click", + "target": "css=.btn-success:nth-child(1)", + "targets": [ + ["css=.btn-success:nth-child(1)", "css:finder"], + ["xpath=//div[2]/button", "xpath:position"], + ["xpath=//button[contains(.,'Add Entity ID')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "fa75b464-10a7-43da-939e-550e88748eb6", + "comment": "", + "command": "click", + "target": "css=#\\/filterEnabled\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/filterEnabled\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/filterEnabled.parent']/label", "xpath:idRelative"], + ["xpath=//checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Enable Filter?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "a721538a-5f95-4567-8d7c-5851f67f3ae0", + "comment": "", + "command": "click", + "target": "css=#\\/removeExistingFormats\\.parent > .custom-control-label", + "targets": [ + ["css=#\\/removeExistingFormats\\.parent > .custom-control-label", "css:finder"], + ["xpath=//div[@id='/removeExistingFormats.parent']/label", "xpath:idRelative"], + ["xpath=//div[7]/sf-form-element/div/sf-widget-chooser/checkbox-component/div/div/div/label", "xpath:position"], + ["xpath=//label[contains(.,'Remove Existing Formats?')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "78c6d6fc-a3e6-4ae7-9f62-49b64c457232", + "comment": "", + "command": "click", + "target": "css=.array-add-button", + "targets": [ + ["css=.array-add-button", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "1503abb6-b674-495f-922b-f2ba07bb46bd", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "76b5506e-ebd3-416b-9a2d-391d39b8b282", + "comment": "", + "command": "click", + "target": "css=.input-group-append > .btn", + "targets": [ + ["css=.input-group-append > .btn", "css:finder"], + ["xpath=(//button[@type='button'])[3]", "xpath:attributes"], + ["xpath=//div[@id='/formats/0-container']/div/div/button", "xpath:idRelative"], + ["xpath=//auto-complete/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "e71b7c21-86c7-46e1-8451-4005940dbf02", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "ee812306-8d00-4162-9d92-eb598802f4bc", + "comment": "", + "command": "click", + "target": "id=/formats/0__option--0", + "targets": [ + ["id=/formats/0__option--0", "id"], + ["css=#\\/formats\\/0__option--0", "css:finder"], + ["xpath=//li[@id='/formats/0__option--0']", "xpath:attributes"], + ["xpath=//ul[@id='/formats/0__listbox']/li", "xpath:idRelative"], + ["xpath=//datalist-component/div/auto-complete/div/ul/li", "xpath:position"] + ], + "value": "" + }, { + "id": "ddcda076-a6d1-4a6f-861d-c32642305841", + "comment": "", + "command": "click", + "target": "css=.array-add-button", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//array-component/div/div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "da1e1b22-55cb-4934-9d0c-8955e5434289", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "1f3cca46-1bf0-469f-9ac5-6481c8447633", + "comment": "", + "command": "click", + "target": "css=#\\/formats\\/1-container .btn", + "targets": [ + ["css=#\\/formats\\/1-container .btn", "css:finder"], + ["xpath=(//button[@type='button'])[4]", "xpath:attributes"], + ["xpath=//div[@id='/formats/1-container']/div/div/button", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button", "xpath:position"] + ], + "value": "" + }, { + "id": "65b07bc0-3c1d-4eeb-b268-baa2f2a0992c", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "aa0cb8e5-a5b5-4956-91dc-d25ea30ff87a", + "comment": "", + "command": "click", + "target": "id=/formats/1__option--1", + "targets": [ + ["id=/formats/1__option--1", "id"], + ["css=#\\/formats\\/1__option--1", "css:finder"], + ["xpath=//li[@id='/formats/1__option--1']", "xpath:attributes"], + ["xpath=//ul[@id='/formats/1__listbox']/li[2]", "xpath:idRelative"], + ["xpath=//li[2]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[2]", "xpath:position"] + ], + "value": "" + }, { + "id": "233f96b6-032e-40c4-8232-dc65583830fc", + "comment": "", + "command": "click", + "target": "css=.array-add-button", + "targets": [ + ["css=.array-add-button", "css:finder"], + ["xpath=//array-component/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Add   ')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "43200793-5c4c-47dd-93b7-7bdd138eb6d4", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "f313f186-80e1-42ea-9b19-c59efe66a92d", + "comment": "", + "command": "click", + "target": "css=#\\/formats\\/2-container .btn", + "targets": [ + ["css=#\\/formats\\/2-container .fa", "css:finder"], + ["xpath=//div[@id='/formats/2-container']/div/div/button/i", "xpath:idRelative"], + ["xpath=//li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "26e1228a-a453-4f79-bd7d-222f50e21b69", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "bf10f8f1-f5b8-43f5-b1d8-6e4e67e92621", + "comment": "", + "command": "click", + "target": "id=/formats/2__option--2", + "targets": [ + ["id=/formats/2__option--2", "id"], + ["css=#\\/formats\\/2__option--2", "css:finder"], + ["xpath=//li[@id='/formats/2__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/formats/2__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//li[3]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[3]", "xpath:position"] + ], + "value": "" + }, { + "id": "be2cee3b-966a-47e8-8907-9d21bb63a61c", + "comment": "", + "command": "click", + "target": "css=.array-add-button", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//array-component/div/div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "0502f5d7-bc0a-4b4c-b0d0-5cf159dd0492", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "823e4972-3bdd-4286-a22d-8805adef4f2c", + "comment": "", + "command": "click", + "target": "css=#\\/formats\\/3-container .btn", + "targets": [ + ["css=#\\/formats\\/3-container .fa", "css:finder"], + ["xpath=//div[@id='/formats/3-container']/div/div/button/i", "xpath:idRelative"], + ["xpath=//li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "55751a6d-974e-45cb-83fa-cea50fd6612c", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "3cba2ead-22cd-4bc9-b0ca-bb1f5ebb10a2", + "comment": "", + "command": "click", + "target": "id=/formats/3__option--3", + "targets": [ + ["id=/formats/3__option--3", "id"], + ["css=#\\/formats\\/3__option--3", "css:finder"], + ["xpath=//li[@id='/formats/3__option--3']", "xpath:attributes"], + ["xpath=//ul[@id='/formats/3__listbox']/li[4]", "xpath:idRelative"], + ["xpath=//li[4]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/ul/li[4]", "xpath:position"] + ], + "value": "" + }, { + "id": "e793e30f-cefa-4a31-9a92-56c49c87b339", + "comment": "", + "command": "click", + "target": "css=.array-add-button", + "targets": [ + ["css=.btn-success > translate-i18n", "css:finder"], + ["xpath=//array-component/div/div/button/translate-i18n", "xpath:position"] + ], + "value": "" + }, { + "id": "f0ae75e7-b2c0-49fa-9806-23f4f228e3e1", + "comment": "", + "command": "type", + "target": "id=/formats/4", + "targets": [ + ["id=/formats/4", "id"], + ["css=#\\/formats\\/4", "css:finder"], + ["xpath=//input[@id='/formats/4']", "xpath:attributes"], + ["xpath=//div[@id='/formats/4-container']/div/input", "xpath:idRelative"], + ["xpath=//li[5]/div/sf-form-element/div/sf-widget-chooser/datalist-component/div/auto-complete/div/div/input", "xpath:position"] + ], + "value": "name id format" + }, { + "id": "3a97e6c5-badb-45c8-b6e5-a7e8462ee77f", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//button[@type='submit']", "xpath:attributes"], + ["xpath=//div/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c28d683a-552d-4752-aa89-465e33d60887", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "100902ee-6d6e-4148-a69b-b37746a4ad6e", + "comment": "", + "command": "assertText", + "target": "css=tr:nth-child(1) > .td-lg:nth-child(3)", + "targets": [ + ["css=tr:nth-child(1) > .td-lg:nth-child(3)", "css:finder"], + ["xpath=//td[3]", "xpath:position"], + ["xpath=//td[contains(.,'Entity Attributes Filter')]", "xpath:innerText"] + ], + "value": "Entity Attributes Filter" + }, { + "id": "9cc5dbab-bb39-455d-9338-6bdd054841e0", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .fa-arrow-circle-down", + "targets": [ + ["css=tr:nth-child(1) .fa-arrow-circle-down", "css:finder"], + ["xpath=//button[2]/i", "xpath:position"] + ], + "value": "" + }, { + "id": "febfcea8-8f72-4a17-b1a8-b1e323c8cced", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "c9d498da-9f59-40ae-b5d4-cae397a13766", + "comment": "", + "command": "assertText", + "target": "css=tr:nth-child(1) > .td-lg:nth-child(3)", + "targets": [ + ["css=tr:nth-child(1) > .td-lg:nth-child(3)", "css:finder"], + ["xpath=//td[3]", "xpath:position"], + ["xpath=//td[contains(.,'Name ID Format Filter')]", "xpath:innerText"] + ], + "value": "Name ID Format Filter" + }, { + "id": "1b05bac6-3412-4f4d-b168-0f7fb124e5d0", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .fa-arrow-circle-down", + "targets": [ + ["css=tr:nth-child(1) .fa-arrow-circle-down", "css:finder"], + ["xpath=//button[2]/i", "xpath:position"] + ], + "value": "" + }, { + "id": "4fdc2334-0b93-4f4c-b44e-80656f808f6d", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "441608df-24a3-4a60-bfce-50a90ff0ee16", + "comment": "", + "command": "assertText", + "target": "css=tr:nth-child(1) > .td-lg:nth-child(3)", + "targets": [ + ["css=tr:nth-child(1) > .td-lg:nth-child(3)", "css:finder"], + ["xpath=//td[3]", "xpath:position"], + ["xpath=//td[contains(.,'Entity Attributes Filter')]", "xpath:innerText"] + ], + "value": "Entity Attributes Filter" + }, { + "id": "50677e6f-49ab-467c-bd04-ac6064445b87", + "comment": "", + "command": "click", + "target": "linkText=Dashboard", + "targets": [ + ["linkText=Dashboard", "linkText"], + ["css=.nav-item > .nav-link", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li[2]/a", "xpath:idRelative"], + ["xpath=//a[contains(@href, '/dashboard')]", "xpath:href"], + ["xpath=//li[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Dashboard')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "b01aa467-757f-49a9-97bb-965238f84b9c", + "comment": "", + "command": "click", + "target": "linkText=Metadata Providers", + "targets": [ + ["linkText=Metadata Providers", "linkText"], + ["css=.nav > .nav-item:nth-child(2) > .nav-link", "css:finder"], + ["xpath=//a[contains(text(),'Metadata Providers')]", "xpath:link"], + ["xpath=//a[contains(@href, '/dashboard/metadata/manager/providers')]", "xpath:href"], + ["xpath=//dashboard-page/div/ul/li[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Metadata Providers')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d9f794d9-0d45-41a8-8fa9-55497ba17667", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "2c922b5f-35d4-4c31-bb06-7e936cf8cd1a", + "comment": "", + "command": "click", + "target": "linkText=File Backed HTTP Metadata Provider", + "targets": [ + ["linkText=File Backed HTTP Metadata Provider", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'File Backed HTTP Metadata Provider')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/8324f6d9-5390-4f99-8ca0-f7cd9f08fb71/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'File Backed HTTP Metadata Provider')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "ce07e08e-53a0-423a-9d00-7b0417a9697e", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1)", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "4c543e76-dc9b-4786-b569-4c3071a88f07", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) a", + "targets": [ + ["linkText=Sep 25, 2019 10:20:58 (Current)", "linkText"], + ["css=tr:nth-child(1) a", "css:finder"], + ["xpath=//a[contains(@href, '/metadata/provider/5ac01c48-a78d-42a9-b5fa-fd9a057ebb17/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Sep 25, 2019 10:20:58 (Current)')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "138845c8-0cbf-4cba-b256-8c7e58065c26", + "comment": "", + "command": "click", + "target": "css=.mb-4:nth-child(1) .actions span", + "targets": [ + ["css=.mb-4:nth-child(1) .actions span", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section/div/div/div/button/span", "xpath:idRelative"], + ["xpath=//div/button/span", "xpath:position"], + ["xpath=//span[contains(.,'Edit')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "eb4df817-c23d-47e6-92a8-e013701c90de", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" + }, { + "id": "ae293184-6d83-4ecb-8e25-b757931c49f0", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [], + "value": "Provider Version 2" + }, { + "id": "9c887b33-de0e-4f38-8ea8-d6d0f0a9d841", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "1006ef2d-f7c8-456d-a2fb-96a71625ae89", + "comment": "", + "command": "click", + "target": "css=.btn-outline-secondary", + "targets": [ + ["css=.btn-outline-secondary", "css:finder"], + ["xpath=(//button[@type='button'])[2]", "xpath:attributes"], + ["xpath=//div[@id='/backupFileInitNextRefreshDelay-container']/div/div/button", "xpath:idRelative"], + ["xpath=//auto-complete/div/div/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Toggle Dropdown')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "33aedef5-ccf2-45b6-a2d9-729d159908c1", + "comment": "", + "command": "pause", + "target": "500", + "targets": [], + "value": "" + }, { + "id": "6ebd7167-8187-4564-b441-213daa903faa", + "comment": "", + "command": "click", + "target": "id=/backupFileInitNextRefreshDelay__option--2", + "targets": [ + ["id=/backupFileInitNextRefreshDelay__option--2", "id"], + ["css=#\\/backupFileInitNextRefreshDelay__option--2", "css:finder"], + ["xpath=//li[@id='/backupFileInitNextRefreshDelay__option--2']", "xpath:attributes"], + ["xpath=//ul[@id='/backupFileInitNextRefreshDelay__listbox']/li[3]", "xpath:idRelative"], + ["xpath=//auto-complete/div/ul/li[3]", "xpath:position"], + ["xpath=//li[contains(.,'PT1M')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "accf38c6-12f0-46cc-a174-e8ed589ea431", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" + }, { + "id": "9e6add34-b3a4-4cbf-a8ca-b1bb262db729", + "comment": "", + "command": "click", + "target": "css=.btn-info", + "targets": [ + ["css=.btn-info", "css:finder"], + ["xpath=//div[2]/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "141842d1-cde8-483a-a9dd-6723fe3642f0", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" + }, { + "id": "e5478587-138e-4e8d-94dd-073af6559f07", + "comment": "", + "command": "click", + "target": "css=td > a", + "targets": [ + ["linkText=File Backed HTTP Metadata Provider Version 2", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'File Backed HTTP Metadata Provider Version 2')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/9325baaf-0eac-49d6-9df4-c379703aae7e/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'File Backed HTTP Metadata Provider Version 2')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "8c0f82f1-d6b4-4e62-bdb0-087dd31471cf", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1) > translate-i18n", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "f2788695-b02e-4405-8082-d9828f7207c3", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "aca347cb-5c59-473b-8771-8706ec762277", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .custom-control-label", + "targets": [ + ["css=tr:nth-child(1) .custom-control-label", "css:finder"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Check to select')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "78651bb7-815c-4267-9fc6-4013a4d8548d", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(2) .custom-control-label", + "targets": [ + ["css=tr:nth-child(2) .custom-control-label", "css:finder"], + ["xpath=//tr[2]/td/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "6733a65d-7c16-4bf4-a6b4-bb3007e08c87", + "comment": "", + "command": "click", + "target": "css=.btn-primary > translate-i18n", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//history-list/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Compare Selected')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "0abf4b7f-cc20-4a29-8338-90a67421dc41", + "comment": "", + "command": "waitForElementVisible", + "target": "css=primitive-property:nth-child(1) .bg-diff > .d-block:nth-child(2)", + "targets": [], + "value": "30000" + }, { + "id": "2b495102-da87-400d-8c70-1758de76452d", + "comment": "", + "command": "assertText", + "target": "css=primitive-property:nth-child(1) .bg-diff > .d-block:nth-child(2)", + "targets": [ + ["css=primitive-property:nth-child(1) .bg-diff > .d-block:nth-child(2)", "css:finder"], + ["xpath=//div/span[2]", "xpath:position"] + ], + "value": "Provider Version 2" + }, { + "id": "63e1b12d-a50a-4877-9588-21209a08b364", + "comment": "", + "command": "assertText", + "target": "css=primitive-property:nth-child(8) .bg-diff > .d-block:nth-child(2)", + "targets": [ + ["css=primitive-property:nth-child(8) .bg-diff > .d-block:nth-child(2)", "css:finder"], + ["xpath=//primitive-property[8]/div/div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'PT1M')]", "xpath:innerText"] + ], + "value": "PT1M" + }, { + "id": "1f3e3d25-ea44-4110-913c-c6dc9a7ec215", + "comment": "", + "command": "click", + "target": "css=.fa-toggle-off", + "targets": [ + ["css=.fa-toggle-off", "css:finder"], + ["xpath=//div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "cfebf080-7825-4412-8a2d-924af79d4b26", + "comment": "", + "command": "assertText", + "target": "css=primitive-property:nth-child(1) .d-block:nth-child(2)", + "targets": [ + ["css=primitive-property:nth-child(1) .d-block:nth-child(2)", "css:finder"], + ["xpath=//div/span[2]", "xpath:position"] + ], + "value": "Provider Version 2" + }, { + "id": "75f45cb6-9c38-44e7-82dc-a473fa7fab62", + "comment": "", + "command": "assertText", + "target": "css=primitive-property:nth-child(2) .d-block:nth-child(2)", + "targets": [ + ["css=primitive-property:nth-child(2) .d-block:nth-child(2)", "css:finder"], + ["xpath=//primitive-property[2]/div/div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'PT1M')]", "xpath:innerText"] + ], + "value": "PT1M" + }, { + "id": "0b097967-1b4e-40cc-b8d7-bd0529fd46d2", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1) > translate-i18n", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "3bd7e8ca-0481-4b94-9037-e75145e2d545", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) a", + "targets": [ + ["linkText=Sep 25, 2019 10:33:02 (Current)", "linkText"], + ["css=tr:nth-child(1) a", "css:finder"], + ["xpath=//a[contains(@href, '/metadata/provider/9325baaf-0eac-49d6-9df4-c379703aae7e/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Sep 25, 2019 10:33:02 (Current)')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "180eec64-f1c7-4c4d-b34f-3f59258f48ec", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" + }, { + "id": "d2d4b08e-1056-4c7f-b9c0-b7efa76dfb94", + "comment": "", + "command": "click", + "target": "css=.list-group-item:nth-child(1) > filter-configuration-list-item > .d-flex > .btn", + "targets": [ + ["css=.list-group-item:nth-child(1) > filter-configuration-list-item > .d-flex > .btn", "css:finder"], + ["xpath=//div[@id='filters']/filter-configuration-list/ul/li/filter-configuration-list-item/div/button", "xpath:idRelative"], + ["xpath=//filter-configuration-list-item/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Entity Attributes Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "afc71068-d135-466b-9ea0-ca020eb3116f", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "27db83c9-2893-4958-8547-9496cc73440f", + "comment": "", + "command": "click", + "target": "css=.justify-content-between > .btn:nth-child(1) > translate-i18n", + "targets": [ + ["css=.justify-content-between > .btn:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='filters']/filter-configuration-list/ul/li/filter-configuration-list-item/div[2]/div/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div[2]/div/div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Edit')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "92d9e04a-f8cc-41b1-ac37-409fe4bb9942", + "comment": "", + "command": "pause", + "target": "3000", + "targets": [], + "value": "" + }, { + "id": "2152a1f9-8608-420c-85d8-368f69260c21", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field118", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "Entity Attributes Filter Version 2" + }, { + "id": "55de5aff-fc78-488f-aa1a-977dabb678dc", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//button[@type='submit']", "xpath:attributes"], + ["xpath=//div[2]/button", "xpath:position"], + ["xpath=//button[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "97c031ee-65f1-4089-ab43-a4a98bfb3798", + "comment": "", + "command": "click", + "target": "css=.nav-item translate-i18n", + "targets": [ + ["css=.nav-item translate-i18n", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li[2]/a/translate-i18n", "xpath:idRelative"], + ["xpath=//a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Dashboard')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "59391129-1806-43da-9aa1-df5658550d02", + "comment": "", + "command": "click", + "target": "linkText=Metadata Providers", + "targets": [ + ["linkText=Metadata Providers", "linkText"], + ["css=.nav > .nav-item:nth-child(2) > .nav-link", "css:finder"], + ["xpath=//a[contains(text(),'Metadata Providers')]", "xpath:link"], + ["xpath=//a[contains(@href, '/dashboard/metadata/manager/providers')]", "xpath:href"], + ["xpath=//dashboard-page/div/ul/li[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Metadata Providers')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d5d78a35-098e-47c0-8f27-7ab8c79b0661", + "comment": "", + "command": "click", + "target": "css=td > a", + "targets": [ + ["linkText=File Backed HTTP Metadata Provider Version 2", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'File Backed HTTP Metadata Provider Version 2')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/9325baaf-0eac-49d6-9df4-c379703aae7e/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'File Backed HTTP Metadata Provider Version 2')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "42bc2d8d-550f-462b-af96-c3811768e78c", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1) > translate-i18n", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "ada8b6fe-93a7-4f43-9457-2d0256c90744", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "7df630cc-9134-403c-956c-40ac6646b0d4", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .custom-control-label", + "targets": [ + ["css=tr:nth-child(1) .custom-control-label", "css:finder"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Check to select')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "f3f246d8-bdd4-4fff-9fe2-fbdacac5940e", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(2) .custom-control-label", + "targets": [ + ["css=tr:nth-child(2) .custom-control-label", "css:finder"], + ["xpath=//tr[2]/td/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "ae62dd1e-1474-447b-a0f4-93568e060b0f", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//history-list/button", "xpath:position"], + ["xpath=//button[contains(.,'Compare Selected(2)')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "2ff5a597-9fe0-46b4-9ca5-63123ddb3cef", + "comment": "", + "command": "click", + "target": "css=.d-flex:nth-child(1) > .border-primary:nth-child(2) .fa", + "targets": [ + ["css=.d-flex:nth-child(1) > .border-primary:nth-child(2) .fa", "css:finder"], + ["xpath=//div[2]/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "d5c5a3da-6634-4c1f-8eae-cd87baab22ef", + "comment": "", + "command": "click", + "target": "css=.btn-primary > translate-i18n", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//div[3]/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Compare Selected')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d7b5550d-1db8-4fa5-800f-fde753413c13", + "comment": "", + "command": "assertText", + "target": "css=.bg-diff > .d-block:nth-child(2)", + "targets": [ + ["css=.bg-diff > .d-block:nth-child(2)", "css:finder"], + ["xpath=//section[2]/div/div[2]/object-property/primitive-property/div/div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'Entity Attributes Filter Version 2')]", "xpath:innerText"] + ], + "value": "Entity Attributes Filter Version 2" + }, { + "id": "ad797f09-746e-4778-954e-6f92ac5934ea", + "comment": "", + "command": "assertText", + "target": "css=.bg-diff > .d-block:nth-child(3)", + "targets": [ + ["css=.bg-diff > .d-block:nth-child(3)", "css:finder"], + ["xpath=//section[2]/div/div[2]/object-property/primitive-property/div/div/span[3]", "xpath:position"] + ], + "value": "Entity Attributes Filter" + }] + }], + "suites": [{ + "id": "248ba015-77cd-430f-b973-d14fd4f39a27", + "name": "Default Suite", + "persistSession": false, + "parallel": false, + "timeout": 300, + "tests": ["d87336f9-5279-422f-bf4d-73403f34fc85"] + }], + "urls": ["http://localhost:10101/"], + "plugins": [] +} \ No newline at end of file From 20a0534cdb5e491e86b105efe7263d7c3cd28b34 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Thu, 26 Sep 2019 10:32:48 -0700 Subject: [PATCH 037/211] SHIBUI-1364 Committing selenium scripts with issues for Ryan to review. See SHIBUI-1509 and SHIBUI-1510. --- .../tier/shibboleth/admin/ui/SeleniumSIDETest.groovy | 4 +++- backend/src/integration/resources/false.side | 7 ------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy b/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy index 2b3015595..3616a276c 100644 --- a/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy +++ b/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy @@ -108,7 +108,9 @@ class SeleniumSIDETest extends Specification { // 'SHIBUI-1407: Metadata provider comparison highlights' | '/SHIBUI-1407-2.side' // 'SHIBUI-1364: Compare FBHTTPMP with filters' | '/SHIBUI-1364-1.side' // 'SHIBUI-1364: Compare FSMP with filters' | '/SHIBUI-1364-2.side' - 'SHIBUI-1364: Compare LDMP with filters' | '/SHIBUI-1364-3.side' +// 'SHIBUI-1364: Compare LDMP with filters' | '/SHIBUI-1364-3.side' +// 'SHIBUI-1364: Compare DHTTPMP with filters' | '/SHIBUI-1364-4.side' + 'SHIBUI-1364: DELETE ME BEFORE PR' | '/false.side' } } diff --git a/backend/src/integration/resources/false.side b/backend/src/integration/resources/false.side index b4f5dbad8..480ad53c7 100644 --- a/backend/src/integration/resources/false.side +++ b/backend/src/integration/resources/false.side @@ -2129,13 +2129,6 @@ ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] ], "value": "" - }, { - "id": "ada8b6fe-93a7-4f43-9457-2d0256c90744", - "comment": "", - "command": "pause", - "target": "2000", - "targets": [], - "value": "" }, { "id": "7df630cc-9134-403c-956c-40ac6646b0d4", "comment": "", From 3157b013808e7f786b47ea17eb8ea9f7dc47480f Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Thu, 26 Sep 2019 12:03:10 -0700 Subject: [PATCH 038/211] SHIBUI-1364 Commented/uncommented relevant tests to match the open bugs in Jira. --- .../internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy b/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy index 3616a276c..6e2e2332a 100644 --- a/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy +++ b/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy @@ -109,7 +109,7 @@ class SeleniumSIDETest extends Specification { // 'SHIBUI-1364: Compare FBHTTPMP with filters' | '/SHIBUI-1364-1.side' // 'SHIBUI-1364: Compare FSMP with filters' | '/SHIBUI-1364-2.side' // 'SHIBUI-1364: Compare LDMP with filters' | '/SHIBUI-1364-3.side' -// 'SHIBUI-1364: Compare DHTTPMP with filters' | '/SHIBUI-1364-4.side' + 'SHIBUI-1364: Compare DHTTPMP with filters' | '/SHIBUI-1364-4.side' 'SHIBUI-1364: DELETE ME BEFORE PR' | '/false.side' } } From 1166ba4edf048ef68cd298531e942e6407697d2e Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Thu, 26 Sep 2019 13:02:36 -0700 Subject: [PATCH 039/211] SHIBUI-1437 Integrated config component to replace summary --- .../configuration/configuration.module.ts | 7 +- .../metadata/configuration/reducer/index.ts | 83 +------------- .../configuration/reducer/utilities.ts | 84 ++++++++++++++ .../service/configuration.service.ts | 2 +- .../component/wizard-summary.component.html | 13 --- .../wizard-summary.component.spec.ts | 103 ------------------ .../component/wizard-summary.component.ts | 81 -------------- ui/src/app/metadata/domain/domain.module.ts | 2 - .../container/provider-wizard.component.html | 6 +- .../container/resolver-wizard.component.html | 10 +- .../container/resolver-wizard.component.ts | 18 +-- ui/src/app/metadata/resolver/reducer/index.ts | 9 ++ .../app/metadata/resolver/resolver.module.ts | 4 +- 13 files changed, 112 insertions(+), 310 deletions(-) create mode 100644 ui/src/app/metadata/configuration/reducer/utilities.ts delete mode 100644 ui/src/app/metadata/domain/component/wizard-summary.component.html delete mode 100644 ui/src/app/metadata/domain/component/wizard-summary.component.spec.ts delete mode 100644 ui/src/app/metadata/domain/component/wizard-summary.component.ts diff --git a/ui/src/app/metadata/configuration/configuration.module.ts b/ui/src/app/metadata/configuration/configuration.module.ts index 338c39ccb..6430886b8 100644 --- a/ui/src/app/metadata/configuration/configuration.module.ts +++ b/ui/src/app/metadata/configuration/configuration.module.ts @@ -84,7 +84,9 @@ import { FilterCompareVersionEffects } from './effect/filter.effect'; WizardModule, FormModule ], - exports: [], + exports: [ + MetadataConfigurationComponent + ], providers: [ DatePipe, IndexResolver @@ -114,7 +116,8 @@ export class MetadataConfigurationModule { RestoreEffects, FilterCompareVersionEffects, VersionEffects - ]) + ] + ) ], providers: [] }) diff --git a/ui/src/app/metadata/configuration/reducer/index.ts b/ui/src/app/metadata/configuration/reducer/index.ts index 13daf9b34..3b08a9367 100644 --- a/ui/src/app/metadata/configuration/reducer/index.ts +++ b/ui/src/app/metadata/configuration/reducer/index.ts @@ -10,6 +10,7 @@ import * as fromFilter from './filter.reducer'; import { WizardStep } from '../../../wizard/model'; import * as utils from '../../domain/utility/configuration'; +import { getConfigurationSectionsFn, assignValueToProperties } from './utilities'; import { getSplitSchema, getModel } from '../../../wizard/reducer'; import { getInCollectionFn } from '../../domain/domain.util'; import { MetadataConfiguration } from '../model/metadata-configuration'; @@ -58,88 +59,6 @@ export const getConfigurationDefinition = createSelector(getConfigurationState, export const getConfigurationSchema = createSelector(getConfigurationState, fromConfiguration.getSchema); export const getConfigurationXml = createSelector(getConfigurationState, fromConfiguration.getXml); -export const assignValueToProperties = (models, properties, definition: any): any[] => { - return properties.map(prop => { - const differences = models.some((model, index, array) => { - if (!array) { - return false; - } - return JSON.stringify(model[prop.id]) !== JSON.stringify(array[0][prop.id]); - }); - - const widget = prop.type === 'array' && prop.widget && prop.widget.data ? ({ - ...prop.widget, - data: prop.widget.data.map(item => ({ - ...item, - differences: models - .map((model) => { - const value = model[prop.id]; - return value ? value.indexOf(item.key) > -1 : false; - }) - .reduce((current, val) => current !== val ? true : false, false) - })) - }) : null; - - switch (prop.type) { - case 'object': - return { - ...prop, - differences, - properties: assignValueToProperties( - models.map(model => definition.formatter(model)[prop.id] || {}), - prop.properties, - definition - ) - }; - default: - return { - ...prop, - differences, - value: models.map(model => { - return model[prop.id]; - }), - widget - }; - } - }); -}; - -export const getConfigurationSectionsFn = (models, definition, schema): MetadataConfiguration => { - return !definition || !schema || !models ? null : - ({ - dates: models.map(m => m ? m.modifiedDate : null), - sections: definition.steps - .filter(step => step.id !== 'summary') - .map( - (step: WizardStep, num: number) => { - return ({ - id: step.id, - pageNumber: num + 1, - index: step.index, - label: step.label, - properties: utils.getStepProperties( - getSplitSchema(schema, step), - definition.formatter({}), - schema.definitions || {} - ) - }); - } - ) - .map((section: any) => { - return { - ...section, - properties: assignValueToProperties(models, section.properties, definition) - }; - }) - .map((section: any) => ({ - ...section, - differences: section.properties.some(prop => prop.differences) - })) - }); - }; - - - export const getConfigurationModelEnabledFn = (config: Metadata) => config ? ('serviceEnabled' in config) ? config.serviceEnabled : config.enabled : false; diff --git a/ui/src/app/metadata/configuration/reducer/utilities.ts b/ui/src/app/metadata/configuration/reducer/utilities.ts new file mode 100644 index 000000000..16668a027 --- /dev/null +++ b/ui/src/app/metadata/configuration/reducer/utilities.ts @@ -0,0 +1,84 @@ +import { MetadataConfiguration } from '../model/metadata-configuration'; +import { WizardStep } from '../../../wizard/model'; +import * as utils from '../../domain/utility/configuration'; +import { getSplitSchema } from '../../../wizard/reducer'; + +export const getConfigurationSectionsFn = (models, definition, schema): MetadataConfiguration => { + return !definition || !schema || !models ? null : + ({ + dates: models.map(m => m ? m.modifiedDate : null), + sections: definition.steps + .filter(step => step.id !== 'summary') + .map( + (step: WizardStep, num: number) => { + return ({ + id: step.id, + pageNumber: num + 1, + index: step.index, + label: step.label, + properties: utils.getStepProperties( + getSplitSchema(schema, step), + definition.formatter({}), + schema.definitions || {} + ) + }); + } + ) + .map((section: any) => { + return { + ...section, + properties: assignValueToProperties(models, section.properties, definition) + }; + }) + .map((section: any) => ({ + ...section, + differences: section.properties.some(prop => prop.differences) + })) + }); +}; + +export const assignValueToProperties = (models, properties, definition: any): any[] => { + return properties.map(prop => { + const differences = models.some((model, index, array) => { + if (!array) { + return false; + } + return JSON.stringify(model[prop.id]) !== JSON.stringify(array[0][prop.id]); + }); + + const widget = prop.type === 'array' && prop.widget && prop.widget.data ? ({ + ...prop.widget, + data: prop.widget.data.map(item => ({ + ...item, + differences: models + .map((model) => { + const value = model[prop.id]; + return value ? value.indexOf(item.key) > -1 : false; + }) + .reduce((current, val) => current !== val ? true : false, false) + })) + }) : null; + + switch (prop.type) { + case 'object': + return { + ...prop, + differences, + properties: assignValueToProperties( + models.map(model => definition.formatter(model)[prop.id] || {}), + prop.properties, + definition + ) + }; + default: + return { + ...prop, + differences, + value: models.map(model => { + return model[prop.id]; + }), + widget + }; + } + }); +}; diff --git a/ui/src/app/metadata/configuration/service/configuration.service.ts b/ui/src/app/metadata/configuration/service/configuration.service.ts index ef03fc2e5..df8a3dba0 100644 --- a/ui/src/app/metadata/configuration/service/configuration.service.ts +++ b/ui/src/app/metadata/configuration/service/configuration.service.ts @@ -10,7 +10,7 @@ import { TYPES } from '../configuration.values'; import { ResolverService } from '../../domain/service/resolver.service'; import { MetadataProviderService } from '../../domain/service/provider.service'; import { MetadataFilterEditorTypes } from '../../filter/model'; -import { getConfigurationSectionsFn } from '../reducer'; +import { getConfigurationSectionsFn } from '../reducer/utilities'; @Injectable() export class MetadataConfigurationService { diff --git a/ui/src/app/metadata/domain/component/wizard-summary.component.html b/ui/src/app/metadata/domain/component/wizard-summary.component.html deleted file mode 100644 index e7ea5dbf6..000000000 --- a/ui/src/app/metadata/domain/component/wizard-summary.component.html +++ /dev/null @@ -1,13 +0,0 @@ -
-
-
- - - - -
-
-
diff --git a/ui/src/app/metadata/domain/component/wizard-summary.component.spec.ts b/ui/src/app/metadata/domain/component/wizard-summary.component.spec.ts deleted file mode 100644 index ecd51b1b9..000000000 --- a/ui/src/app/metadata/domain/component/wizard-summary.component.spec.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { Component, ViewChild } from '@angular/core'; -import { TestBed, async, ComponentFixture } from '@angular/core/testing'; -import { RouterTestingModule } from '@angular/router/testing'; - -import { NgbDropdownModule, NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap'; - -import { WizardSummaryComponent } from './wizard-summary.component'; -import { SchemaFormModule, WidgetRegistry, DefaultWidgetRegistry } from 'ngx-schema-form'; -import { Wizard } from '../../../wizard/model'; -import { MetadataProvider } from '../../domain/model'; -import { SummaryPropertyComponent } from './summary-property.component'; -import { SCHEMA } from '../../../../testing/form-schema.stub'; -import { MockI18nModule } from '../../../../testing/i18n.stub'; -import { MetadataProviderWizard } from '../../provider/model'; -import { AttributesService } from '../service/attributes.service'; -import { MockAttributeService } from '../../../../testing/attributes.stub'; - -@Component({ - template: ` - - ` -}) -class TestHostComponent { - @ViewChild(WizardSummaryComponent) - public componentUnderTest: WizardSummaryComponent; - - private _summary; - - get summary(): { definition: Wizard, schema: { [id: string]: any }, model: any } { - return this._summary; - } - - set summary(summary: { definition: Wizard, schema: { [id: string]: any }, model: any }) { - this._summary = summary; - } -} - -describe('Provider Wizard Summary Component', () => { - - let fixture: ComponentFixture; - let instance: TestHostComponent; - let app: WizardSummaryComponent; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ - NgbDropdownModule, - NgbPopoverModule, - RouterTestingModule, - SchemaFormModule.forRoot(), - MockI18nModule - ], - declarations: [ - WizardSummaryComponent, - SummaryPropertyComponent, - TestHostComponent - ], - providers: [ - { provide: WidgetRegistry, useClass: DefaultWidgetRegistry }, - { provide: AttributesService, useClass: MockAttributeService } - ] - }).compileComponents(); - - fixture = TestBed.createComponent(TestHostComponent); - instance = fixture.componentInstance; - app = instance.componentUnderTest; - fixture.detectChanges(); - })); - - it('should instantiate the component', async(() => { - expect(app).toBeTruthy(); - })); - - describe('gotoPage function', () => { - it('should emit an empty string if page is null', () => { - spyOn(app.onPageSelect, 'emit'); - app.gotoPage(); - expect(app.onPageSelect.emit).toHaveBeenCalledWith(''); - }); - - it('should emit the provided page', () => { - spyOn(app.onPageSelect, 'emit'); - app.gotoPage('foo'); - expect(app.onPageSelect.emit).toHaveBeenCalledWith('foo'); - }); - }); - - describe('ngOnChanges', () => { - it('should set columns and sections if summary is provided', () => { - instance.summary = { - model: { - name: 'foo', - '@type': 'MetadataProvider' - }, - schema: SCHEMA, - definition: MetadataProviderWizard - }; - fixture.detectChanges(); - expect(app.sections).toBeDefined(); - expect(app.columns).toBeDefined(); - }); - }); -}); diff --git a/ui/src/app/metadata/domain/component/wizard-summary.component.ts b/ui/src/app/metadata/domain/component/wizard-summary.component.ts deleted file mode 100644 index 80f246c83..000000000 --- a/ui/src/app/metadata/domain/component/wizard-summary.component.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { Component, Input, SimpleChanges, OnChanges, Output, EventEmitter } from '@angular/core'; -import merge from 'deepmerge'; - -import { Wizard, WizardStep } from '../../../wizard/model'; -import { MetadataProvider, MetadataResolver } from '../../domain/model'; -import { Property } from '../model/property'; -import { getSplitSchema } from '../../../wizard/reducer'; -import { getStepProperties } from '../utility/configuration'; - -interface Section { - id: string; - index: number; - label: string; - pageNumber: number; - properties: Property[]; -} - -@Component({ - selector: 'wizard-summary', - templateUrl: './wizard-summary.component.html', - styleUrls: [] -}) - -export class WizardSummaryComponent implements OnChanges { - @Input() summary: { definition: Wizard, schema: { [id: string]: any }, model: any }; - - @Output() onPageSelect: EventEmitter = new EventEmitter(); - - sections: Section[]; - columns: Array
[]; - steps: WizardStep[]; - - constructor() {} - - ngOnChanges(changes: SimpleChanges): void { - if (changes.summary && this.summary) { - const schema = this.summary.schema; - const model = this.summary.model; - const def = this.summary.definition; - const steps = def.steps; - - this.sections = steps - .filter(step => step.id !== 'summary') - .map( - (step: WizardStep, num: number) => { - const { id, index, label } = step; - const split = getSplitSchema(schema, step); - const properties = getStepProperties( - split, - def.formatter(model), - schema.definitions || {} - ); - return ({ - id, - pageNumber: num + 1, - index, - label, - properties - }); - } - ); - - this.columns = this.sections.reduce((resultArray, item, index) => { - const chunkIndex = Math.floor(index / Math.round(this.sections.length / 2)); - - if (!resultArray[chunkIndex]) { - resultArray[chunkIndex] = []; - } - - resultArray[chunkIndex].push(item); - - return resultArray; - }, []); - } - } - - gotoPage(page: string = ''): void { - this.onPageSelect.emit(page); - } -} - diff --git a/ui/src/app/metadata/domain/domain.module.ts b/ui/src/app/metadata/domain/domain.module.ts index ffee8cf1d..b109734a6 100644 --- a/ui/src/app/metadata/domain/domain.module.ts +++ b/ui/src/app/metadata/domain/domain.module.ts @@ -16,7 +16,6 @@ import { PreviewDialogComponent } from './component/preview-dialog.component'; import { MetadataFilterService } from './service/filter.service'; import { AttributesService } from './service/attributes.service'; import { I18nModule } from '../../i18n/i18n.module'; -import { WizardSummaryComponent } from './component/wizard-summary.component'; import { SummaryPropertyComponent } from './component/summary-property.component'; import { UnsavedEntityComponent } from './component/unsaved-entity.dialog'; @@ -26,7 +25,6 @@ import { SharedModule } from '../../shared/shared.module'; export const COMPONENTS = [ PreviewDialogComponent, - WizardSummaryComponent, UnsavedEntityComponent, SummaryPropertyComponent, EditorNavComponent diff --git a/ui/src/app/metadata/provider/container/provider-wizard.component.html b/ui/src/app/metadata/provider/container/provider-wizard.component.html index 366bb70d5..58766e536 100644 --- a/ui/src/app/metadata/provider/container/provider-wizard.component.html +++ b/ui/src/app/metadata/provider/container/provider-wizard.component.html @@ -19,11 +19,7 @@
- - +
diff --git a/ui/src/app/metadata/resolver/container/resolver-wizard.component.html b/ui/src/app/metadata/resolver/container/resolver-wizard.component.html index 87100a871..867ac0584 100644 --- a/ui/src/app/metadata/resolver/container/resolver-wizard.component.html +++ b/ui/src/app/metadata/resolver/container/resolver-wizard.component.html @@ -5,8 +5,8 @@ - - + + + diff --git a/ui/src/app/metadata/resolver/container/resolver-wizard.component.ts b/ui/src/app/metadata/resolver/container/resolver-wizard.component.ts index 56848ad5e..7a3bfc781 100644 --- a/ui/src/app/metadata/resolver/container/resolver-wizard.component.ts +++ b/ui/src/app/metadata/resolver/container/resolver-wizard.component.ts @@ -29,6 +29,8 @@ import { LoadSchemaRequest } from '../../../wizard/action/wizard.action'; import { UnsavedEntityComponent } from '../../domain/component/unsaved-entity.dialog'; import { Clear } from '../action/entity.action'; import { DifferentialService } from '../../../core/service/differential.service'; +import { getConfigurationSections } from '../../configuration/reducer'; +import { MetadataConfiguration } from '../../configuration/model/metadata-configuration'; @Component({ selector: 'resolver-wizard-page', @@ -60,7 +62,7 @@ export class ResolverWizardComponent implements OnDestroy, CanComponentDeactivat valid$: Observable; schema$: Observable; - summary$: Observable<{ definition: Wizard, schema: { [id: string]: any }, model: any }>; + summary$: Observable = this.store.select(fromCollections.getResolverConfiguration); constructor( private store: Store, @@ -115,20 +117,6 @@ export class ResolverWizardComponent implements OnDestroy, CanComponentDeactivat combineLatest(this.resolver$, (changes, base) => ({ ...base, ...changes })) ).subscribe(latest => this.latest = latest); - this.summary$ = combine( - this.store.select(fromWizard.getWizardDefinition), - this.store.select(fromWizard.getSchemaObject), - this.store.select(fromResolver.getDraftModelWithChanges) - ).pipe( - map(([definition, schema, model]) => ( - { - definition, - schema: schema || {}, - model - } - )) - ); - this.changes$.pipe(takeUntil(this.ngUnsubscribe)).subscribe(c => this.changes = c); this.resolver$.pipe(takeUntil(this.ngUnsubscribe)).subscribe(r => this.resolver = r); } diff --git a/ui/src/app/metadata/resolver/reducer/index.ts b/ui/src/app/metadata/resolver/reducer/index.ts index a1cc5256d..e25643a25 100644 --- a/ui/src/app/metadata/resolver/reducer/index.ts +++ b/ui/src/app/metadata/resolver/reducer/index.ts @@ -8,6 +8,7 @@ import * as fromCollection from './collection.reducer'; import * as fromWizard from '../../../wizard/reducer'; import { combineAllFn, getEntityIdsFn, getInCollectionFn, doesExistFn } from '../../domain/domain.util'; +import { getConfigurationSectionsFn } from '../../configuration/reducer/utilities'; export interface ResolverState { entity: fromEntity.EntityState; @@ -124,3 +125,11 @@ export const getDraftModelWithChanges = createSelector( }) ); +export const getDraftModelList = createSelector(getDraftModelWithChanges, (model) => [model]); + +export const getResolverConfiguration = createSelector( + getDraftModelList, + fromWizard.getWizardDefinition, + fromWizard.getSchema, + getConfigurationSectionsFn +); diff --git a/ui/src/app/metadata/resolver/resolver.module.ts b/ui/src/app/metadata/resolver/resolver.module.ts index e0cb4bb5b..e303181fc 100644 --- a/ui/src/app/metadata/resolver/resolver.module.ts +++ b/ui/src/app/metadata/resolver/resolver.module.ts @@ -36,6 +36,7 @@ import { MetadataSourceEditor } from '../domain/model/wizards/metadata-source-ed import { FinishFormComponent } from './component/finish-form.component'; import { ProviderFormFragmentComponent } from './component/provider-form-fragment.component'; import { MetadataResolverPageComponent } from './resolver.component'; +import { MetadataConfigurationModule } from '../configuration/configuration.module'; @NgModule({ declarations: [ @@ -67,7 +68,8 @@ import { MetadataResolverPageComponent } from './resolver.component'; WizardModule, FormModule, NgbPopoverModule, - NgbModalModule + NgbModalModule, + MetadataConfigurationModule ], exports: [], providers: [] From e9ef6e26d284b8c2924479411a74d925ce73e062 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Thu, 26 Sep 2019 13:47:27 -0700 Subject: [PATCH 040/211] SHIBUI-1508 Fixed issues with configuration page --- .../component/metadata-configuration.component.ts | 2 +- ui/src/app/metadata/configuration/reducer/index.ts | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts b/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts index e2d75c4da..5bd277fbb 100644 --- a/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts +++ b/ui/src/app/metadata/configuration/component/metadata-configuration.component.ts @@ -28,7 +28,7 @@ export class MetadataConfigurationComponent implements OnChanges { ) {} ngOnChanges(): void { - this.zero = this.configuration.sections.some(s => !s.properties.length); + this.zero = !this.configuration.sections.some(s => !!s.properties.length); } edit(id: string): void { diff --git a/ui/src/app/metadata/configuration/reducer/index.ts b/ui/src/app/metadata/configuration/reducer/index.ts index 8deb962ec..26391abd0 100644 --- a/ui/src/app/metadata/configuration/reducer/index.ts +++ b/ui/src/app/metadata/configuration/reducer/index.ts @@ -104,9 +104,7 @@ export const assignValueToProperties = (models, properties, definition: any): an return { ...prop, differences, - value: models.map(model => { - return model[prop.id]; - }), + value: models.map(model => model[prop.id]), widget }; } @@ -153,7 +151,7 @@ export const getConfigurationModelEnabledFn = (config: Metadata) => config ? ('serviceEnabled' in config) ? config.serviceEnabled : config.enabled : false; export const getConfigurationModelNameFn = - (config: Metadata) => config ? ('serviceProviderName' in config) ? config.serviceProviderName : config.name : false; + (config: Metadata) => config ? ('serviceProviderName' in config) ? config.serviceProviderName : config.name : ''; export const getConfigurationModelTypeFn = (config: Metadata) => config ? ('@type' in config) ? config['@type'] : 'resolver' : null; @@ -163,8 +161,8 @@ export const isAdditionalFilter = (type) => filterPluginTypes.indexOf(type) === export const getVersionModelFiltersFn = (model, kind) => kind === 'provider' ? - model.metadataFilters.filter(filter => isAdditionalFilter(filter['@type'])) : - null; + model.metadataFilters ? model.metadataFilters.filter(filter => isAdditionalFilter(filter['@type'])) : + [] : null; // Version History From 45711c5daf82e21326b5d497e4b432063826d596 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Fri, 27 Sep 2019 11:41:49 -0700 Subject: [PATCH 041/211] SHIBUI-1437 Implemented updated view for summary --- ...ter-configuration-list-item.component.html | 1 - .../metadata-configuration.component.html | 3 +-- .../metadata-configuration.component.ts | 20 +++++++++---------- .../metadata-comparison.component.html | 7 ++----- .../container/metadata-options.component.html | 6 +++++- .../container/metadata-options.component.ts | 10 ++++++++-- .../container/version-options.component.html | 1 - .../metadata/configuration/reducer/index.ts | 6 ++---- .../container/resolver-wizard.component.html | 5 +++-- .../container/resolver-wizard.component.ts | 17 +++++++--------- ui/src/app/metadata/resolver/reducer/index.ts | 2 +- 11 files changed, 39 insertions(+), 39 deletions(-) diff --git a/ui/src/app/metadata/configuration/component/filter-configuration-list-item.component.html b/ui/src/app/metadata/configuration/component/filter-configuration-list-item.component.html index cf1cfe3be..6a447d6f3 100644 --- a/ui/src/app/metadata/configuration/component/filter-configuration-list-item.component.html +++ b/ui/src/app/metadata/configuration/component/filter-configuration-list-item.component.html @@ -35,7 +35,6 @@ {{ section.label | translate }} -
+
- + [configuration]="versions$ | async">

Metadata Filter @@ -41,8 +39,7 @@


+ [configuration]="filterCompare$ | async">

- + +
diff --git a/ui/src/app/metadata/configuration/container/metadata-options.component.ts b/ui/src/app/metadata/configuration/container/metadata-options.component.ts index 8b3d3281f..484d03bc5 100644 --- a/ui/src/app/metadata/configuration/container/metadata-options.component.ts +++ b/ui/src/app/metadata/configuration/container/metadata-options.component.ts @@ -2,7 +2,7 @@ import { Store } from '@ngrx/store'; import { Component, ChangeDetectionStrategy, OnDestroy } from '@angular/core'; import { Observable, Subject } from 'rxjs'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { Router } from '@angular/router'; +import { Router, ActivatedRoute } from '@angular/router'; import { ViewportScroller } from '@angular/common'; import { takeUntil, filter } from 'rxjs/operators'; @@ -53,7 +53,9 @@ export class MetadataOptionsComponent implements OnDestroy { constructor( protected store: Store, protected modalService: NgbModal, - protected scroller: ViewportScroller + protected scroller: ViewportScroller, + protected router: Router, + protected activatedRoute: ActivatedRoute ) { this.model$ .pipe( @@ -63,6 +65,10 @@ export class MetadataOptionsComponent implements OnDestroy { .subscribe(p => this.setModel(p)); } + edit(id: string) { + this.router.navigate(['../', 'edit', id], { relativeTo: this.activatedRoute.parent }); + } + setModel(data: Metadata): void { this.id = 'resourceId' in data ? data.resourceId : data.id; this.kind = '@type' in data ? 'provider' : 'resolver'; diff --git a/ui/src/app/metadata/configuration/container/version-options.component.html b/ui/src/app/metadata/configuration/container/version-options.component.html index c4590848f..f18e661bf 100644 --- a/ui/src/app/metadata/configuration/container/version-options.component.html +++ b/ui/src/app/metadata/configuration/container/version-options.component.html @@ -23,7 +23,6 @@

diff --git a/ui/src/app/metadata/configuration/reducer/index.ts b/ui/src/app/metadata/configuration/reducer/index.ts index 4ffb7e081..1053ada29 100644 --- a/ui/src/app/metadata/configuration/reducer/index.ts +++ b/ui/src/app/metadata/configuration/reducer/index.ts @@ -7,13 +7,11 @@ import * as fromCompare from './compare.reducer'; import * as fromVersion from './version.reducer'; import * as fromRestore from './restore.reducer'; import * as fromFilter from './filter.reducer'; -import { WizardStep } from '../../../wizard/model'; import * as utils from '../../domain/utility/configuration'; -import { getConfigurationSectionsFn, assignValueToProperties } from './utilities'; -import { getSplitSchema, getModel } from '../../../wizard/reducer'; +import { getConfigurationSectionsFn } from './utilities'; +import { getModel } from '../../../wizard/reducer'; import { getInCollectionFn } from '../../domain/domain.util'; -import { MetadataConfiguration } from '../model/metadata-configuration'; import { Metadata } from '../../domain/domain.type'; import * as fromResolver from '../../resolver/reducer'; diff --git a/ui/src/app/metadata/resolver/container/resolver-wizard.component.html b/ui/src/app/metadata/resolver/container/resolver-wizard.component.html index 867ac0584..425a84920 100644 --- a/ui/src/app/metadata/resolver/container/resolver-wizard.component.html +++ b/ui/src/app/metadata/resolver/container/resolver-wizard.component.html @@ -5,8 +5,9 @@
- +
- +
diff --git a/ui/src/app/metadata/resolver/container/resolver-wizard.component.ts b/ui/src/app/metadata/resolver/container/resolver-wizard.component.ts index 7a3bfc781..bd7c6e437 100644 --- a/ui/src/app/metadata/resolver/container/resolver-wizard.component.ts +++ b/ui/src/app/metadata/resolver/container/resolver-wizard.component.ts @@ -9,7 +9,7 @@ import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; -import { Observable, Subject, of, combineLatest as combine } from 'rxjs'; +import { Observable, Subject, of } from 'rxjs'; import { skipWhile, startWith, distinctUntilChanged, map, takeUntil, combineLatest, withLatestFrom } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; @@ -28,8 +28,6 @@ import * as fromWizard from '../../../wizard/reducer'; import { LoadSchemaRequest } from '../../../wizard/action/wizard.action'; import { UnsavedEntityComponent } from '../../domain/component/unsaved-entity.dialog'; import { Clear } from '../action/entity.action'; -import { DifferentialService } from '../../../core/service/differential.service'; -import { getConfigurationSections } from '../../configuration/reducer'; import { MetadataConfiguration } from '../../configuration/model/metadata-configuration'; @Component({ @@ -69,7 +67,6 @@ export class ResolverWizardComponent implements OnDestroy, CanComponentDeactivat private route: ActivatedRoute, private router: Router, private modalService: NgbModal, - private diffService: DifferentialService, @Inject(METADATA_SOURCE_WIZARD) private sourceWizard: Wizard ) { this.store @@ -151,16 +148,16 @@ export class ResolverWizardComponent implements OnDestroy, CanComponentDeactivat this.store.dispatch(new SetIndex(page)); } + get blacklist(): string[] { + return ['id', 'resourceId']; + } + hasChanges(changes: MetadataResolver): boolean { - // const updated = this.diffService.updatedDiff(this.resolver, changes); - // const deleted = this.diffService.deletedDiff(this.resolver, changes); - let blacklist = ['id', 'resourceId']; - return Object.keys(changes).filter(key => !(blacklist.indexOf(key) > -1)).length > 0; + return Object.keys(changes).filter(key => !(this.blacklist.indexOf(key) > -1)).length > 0; } isNew(changes: MetadataResolver): boolean { - let blacklist = ['id', 'resourceId']; - return Object.keys(changes).filter(key => !(blacklist.indexOf(key) > -1)).length === 0; + return Object.keys(changes).filter(key => !(this.blacklist.indexOf(key) > -1)).length === 0; } ngOnDestroy(): void { diff --git a/ui/src/app/metadata/resolver/reducer/index.ts b/ui/src/app/metadata/resolver/reducer/index.ts index e25643a25..a22693e4d 100644 --- a/ui/src/app/metadata/resolver/reducer/index.ts +++ b/ui/src/app/metadata/resolver/reducer/index.ts @@ -130,6 +130,6 @@ export const getDraftModelList = createSelector(getDraftModelWithChanges, (model export const getResolverConfiguration = createSelector( getDraftModelList, fromWizard.getWizardDefinition, - fromWizard.getSchema, + fromWizard.getProcessedSchema, getConfigurationSectionsFn ); From 40feb8a1209c12e922341e736a19dadf23562225 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Fri, 27 Sep 2019 14:07:02 -0700 Subject: [PATCH 042/211] Updated unit tests, improved coverage --- .../metadata-configuration.component.spec.ts | 6 +- .../configuration/reducer/index.spec.ts | 118 +---------------- .../metadata/configuration/reducer/index.ts | 24 +--- .../configuration/reducer/utilities.spec.ts | 120 ++++++++++++++++++ .../configuration/reducer/utilities.ts | 21 +++ .../service/configuration.service.spec.ts | 2 +- .../component/wizard-summary.component.html | 14 ++ .../wizard-summary.component.spec.ts | 103 +++++++++++++++ .../component/wizard-summary.component.ts | 80 ++++++++++++ ui/src/app/metadata/domain/domain.module.ts | 2 + .../model/dynamic-http.provider.form.spec.ts | 85 +++++++++++++ .../metadata/provider/model/utilities.spec.ts | 33 +++++ .../app/metadata/provider/model/utilities.ts | 2 - .../resolver-wizard.component.spec.ts | 6 +- ui/src/app/wizard/reducer/index.ts | 2 +- 15 files changed, 471 insertions(+), 147 deletions(-) create mode 100644 ui/src/app/metadata/configuration/reducer/utilities.spec.ts create mode 100644 ui/src/app/metadata/domain/component/wizard-summary.component.html create mode 100644 ui/src/app/metadata/domain/component/wizard-summary.component.spec.ts create mode 100644 ui/src/app/metadata/domain/component/wizard-summary.component.ts create mode 100644 ui/src/app/metadata/provider/model/utilities.spec.ts diff --git a/ui/src/app/metadata/configuration/component/metadata-configuration.component.spec.ts b/ui/src/app/metadata/configuration/component/metadata-configuration.component.spec.ts index c17a469af..3feb146b5 100644 --- a/ui/src/app/metadata/configuration/component/metadata-configuration.component.spec.ts +++ b/ui/src/app/metadata/configuration/component/metadata-configuration.component.spec.ts @@ -66,10 +66,10 @@ describe('Metadata Configuration Component', () => { })); describe('edit method', () => { - it('should call router.navigate', () => { - spyOn(router, 'navigate'); + it('should call onEdit.emit', () => { + spyOn(app.onEdit, 'emit'); app.edit('foo'); - expect(router.navigate).toHaveBeenCalled(); + expect(app.onEdit.emit).toHaveBeenCalled(); }); }); diff --git a/ui/src/app/metadata/configuration/reducer/index.spec.ts b/ui/src/app/metadata/configuration/reducer/index.spec.ts index 8a1aa3cb7..d9dff5a83 100644 --- a/ui/src/app/metadata/configuration/reducer/index.spec.ts +++ b/ui/src/app/metadata/configuration/reducer/index.spec.ts @@ -1,143 +1,31 @@ import { - getConfigurationSectionsFn, getConfigurationModelNameFn, getConfigurationModelEnabledFn, - assignValueToProperties, - getLimitedPropertiesFn, getConfigurationModelTypeFn, getSelectedVersionNumberFn, getSelectedIsCurrentFn } from './index'; -import { SCHEMA as schema } from '../../../../testing/form-schema.stub'; + import { Metadata } from '../../domain/domain.type'; -import { MockMetadataWizard } from '../../../../testing/mockMetadataWizard'; describe('Configuration Reducer', () => { - const model = { - name: 'foo', - serviceEnabled: true, - foo: { - bar: 'bar', - baz: 'baz' - }, - list: [ - 'super', - 'cool' - ] - }; - - const props = [ - { - id: 'name', - items: null, - name: 'label.metadata-provider-name-dashboard-display-only', - properties: [], - type: 'string', - value: null, - widget: { id: 'string', help: 'message.must-be-unique' } - }, - { - id: 'serviceEnabled', - items: null, - name: 'serviceEnabled', - properties: [], - type: 'string', - value: null, - widget: { id: 'select', disabled: true } - }, - { - id: 'foo', - items: null, - name: 'foo', - type: 'object', - properties: [ - { - id: 'bar', - name: 'bar', - type: 'string', - properties: [] - }, - { - id: 'baz', - name: 'baz', - type: 'string', - properties: [] - } - ] - }, - { - id: 'list', - name: 'list', - type: 'array', - items: { - type: 'string' - }, - widget: { - id: 'datalist', - data: [ - { key: 'super', label: 'super' }, - { key: 'cool', label: 'cool' }, - { key: 'notcool', label: 'notcool' } - ] - } - } - ]; - - const definition = MockMetadataWizard; - - describe('getConfigurationSectionsFn', () => { - it('should parse the schema, definition, and model into a MetadataConfiguration', () => { - const config = getConfigurationSectionsFn([model], definition, schema); - expect(config.sections).toBeDefined(); - }); - }); describe('getConfigurationModelNameFn function', () => { it('should return the name attribute', () => { expect(getConfigurationModelNameFn({ serviceProviderName: 'foo' } as Metadata)).toBe('foo'); expect(getConfigurationModelNameFn({ name: 'bar' } as Metadata)).toBe('bar'); - expect(getConfigurationModelNameFn(null)).toBe(false); + expect(getConfigurationModelNameFn(null)).toBe(''); }); }); describe('getConfigurationModelEnabledFn function', () => { - it('should return the name attribute', () => { + it('should return the enabled attribute', () => { expect(getConfigurationModelEnabledFn({ serviceEnabled: true } as Metadata)).toBe(true); expect(getConfigurationModelEnabledFn({ enabled: true } as Metadata)).toBe(true); expect(getConfigurationModelEnabledFn(null)).toBe(false); }); }); - describe('assignValueToProperties function', () => { - it('should assign appropriate values to the given schema properties', () => { - const assigned = assignValueToProperties([model], props, definition); - expect(assigned[0].value).toEqual(['foo']); - expect(assigned[1].value).toEqual([true]); - }); - - it('should assign differences when passed multiple models', () => { - const assigned = assignValueToProperties([model, { - ...model, - name: 'bar', - list: [ - 'super', - 'notcool' - ] - }], props, definition); - expect(assigned[0].differences).toBe(true); - }); - }); - - describe('getLimitedPropertiesFn function', () => { - it('should filter properties without differences', () => { - const assigned = assignValueToProperties([model, { - ...model, - name: 'bar' - }], props, definition); - expect(getLimitedPropertiesFn(assigned).length).toBe(1); - }); - }); - describe('getConfigurationModelTypeFn function ', () => { it('should return provider type if the object has an @type property', () => { const md = { '@type': 'FilebackedHttpMetadataResolver' } as Metadata; diff --git a/ui/src/app/metadata/configuration/reducer/index.ts b/ui/src/app/metadata/configuration/reducer/index.ts index 1053ada29..58e92562f 100644 --- a/ui/src/app/metadata/configuration/reducer/index.ts +++ b/ui/src/app/metadata/configuration/reducer/index.ts @@ -8,15 +8,13 @@ import * as fromVersion from './version.reducer'; import * as fromRestore from './restore.reducer'; import * as fromFilter from './filter.reducer'; -import * as utils from '../../domain/utility/configuration'; -import { getConfigurationSectionsFn } from './utilities'; +import { getConfigurationSectionsFn, getLimitedPropertiesFn } from './utilities'; import { getModel } from '../../../wizard/reducer'; import { getInCollectionFn } from '../../domain/domain.util'; import { Metadata } from '../../domain/domain.type'; import * as fromResolver from '../../resolver/reducer'; import * as fromProvider from '../../provider/reducer'; -import { SectionProperty } from '../model/section'; export interface ConfigurationState { configuration: fromConfiguration.State; @@ -136,26 +134,6 @@ export const getComparisonConfigurationCount = createSelector(getComparisonConfi export const getViewChangedOnly = createSelector(getCompareState, fromCompare.getViewChangedOnly); -export const getLimitedPropertiesFn = (properties: SectionProperty[]) => { - return ([ - ...properties - .filter(p => p.differences) - .map(p => { - const parsed = { ...p }; - if (p.widget && p.widget.data) { - parsed.widget = { - ...p.widget, - data: p.widget.data.filter(item => item.differences) - }; - } - if (p.properties) { - parsed.properties = getLimitedPropertiesFn(p.properties); - } - return parsed; - }) - ]); -}; - export const getLimitedConfigurationsFn = (configurations, limited) => configurations ? ({ ...configurations, sections: limited ? configurations.sections : diff --git a/ui/src/app/metadata/configuration/reducer/utilities.spec.ts b/ui/src/app/metadata/configuration/reducer/utilities.spec.ts new file mode 100644 index 000000000..0d8234bb5 --- /dev/null +++ b/ui/src/app/metadata/configuration/reducer/utilities.spec.ts @@ -0,0 +1,120 @@ +import { + getConfigurationSectionsFn, + getLimitedPropertiesFn, + assignValueToProperties +} from './utilities'; + +import { SCHEMA as schema } from '../../../../testing/form-schema.stub'; +import { MockMetadataWizard } from '../../../../testing/mockMetadataWizard'; + +describe('config reducer utilities', () => { + + const model = { + name: 'foo', + serviceEnabled: true, + foo: { + bar: 'bar', + baz: 'baz' + }, + list: [ + 'super', + 'cool' + ] + }; + + const props = [ + { + id: 'name', + items: null, + name: 'label.metadata-provider-name-dashboard-display-only', + properties: [], + type: 'string', + value: null, + widget: { id: 'string', help: 'message.must-be-unique' } + }, + { + id: 'serviceEnabled', + items: null, + name: 'serviceEnabled', + properties: [], + type: 'string', + value: null, + widget: { id: 'select', disabled: true } + }, + { + id: 'foo', + items: null, + name: 'foo', + type: 'object', + properties: [ + { + id: 'bar', + name: 'bar', + type: 'string', + properties: [] + }, + { + id: 'baz', + name: 'baz', + type: 'string', + properties: [] + } + ] + }, + { + id: 'list', + name: 'list', + type: 'array', + items: { + type: 'string' + }, + widget: { + id: 'datalist', + data: [ + { key: 'super', label: 'super' }, + { key: 'cool', label: 'cool' }, + { key: 'notcool', label: 'notcool' } + ] + } + } + ]; + + const definition = MockMetadataWizard; + + describe('assignValueToProperties function', () => { + it('should assign appropriate values to the given schema properties', () => { + const assigned = assignValueToProperties([model], props, definition); + expect(assigned[0].value).toEqual(['foo']); + expect(assigned[1].value).toEqual([true]); + }); + + it('should assign differences when passed multiple models', () => { + const assigned = assignValueToProperties([model, { + ...model, + name: 'bar', + list: [ + 'super', + 'notcool' + ] + }], props, definition); + expect(assigned[0].differences).toBe(true); + }); + }); + + describe('getLimitedPropertiesFn function', () => { + it('should filter properties without differences', () => { + const assigned = assignValueToProperties([model, { + ...model, + name: 'bar' + }], props, definition); + expect(getLimitedPropertiesFn(assigned).length).toBe(1); + }); + }); + + describe('getConfigurationSectionsFn', () => { + it('should parse the schema, definition, and model into a MetadataConfiguration', () => { + const config = getConfigurationSectionsFn([model], definition, schema); + expect(config.sections).toBeDefined(); + }); + }); +}); diff --git a/ui/src/app/metadata/configuration/reducer/utilities.ts b/ui/src/app/metadata/configuration/reducer/utilities.ts index 16668a027..f2481e99c 100644 --- a/ui/src/app/metadata/configuration/reducer/utilities.ts +++ b/ui/src/app/metadata/configuration/reducer/utilities.ts @@ -2,6 +2,7 @@ import { MetadataConfiguration } from '../model/metadata-configuration'; import { WizardStep } from '../../../wizard/model'; import * as utils from '../../domain/utility/configuration'; import { getSplitSchema } from '../../../wizard/reducer'; +import { SectionProperty } from '../model/section'; export const getConfigurationSectionsFn = (models, definition, schema): MetadataConfiguration => { return !definition || !schema || !models ? null : @@ -82,3 +83,23 @@ export const assignValueToProperties = (models, properties, definition: any): an } }); }; + +export const getLimitedPropertiesFn = (properties: SectionProperty[]) => { + return ([ + ...properties + .filter(p => p.differences) + .map(p => { + const parsed = { ...p }; + if (p.widget && p.widget.data) { + parsed.widget = { + ...p.widget, + data: p.widget.data.filter(item => item.differences) + }; + } + if (p.properties) { + parsed.properties = getLimitedPropertiesFn(p.properties); + } + return parsed; + }) + ]); +}; \ No newline at end of file diff --git a/ui/src/app/metadata/configuration/service/configuration.service.spec.ts b/ui/src/app/metadata/configuration/service/configuration.service.spec.ts index 43fd99c05..e191471a0 100644 --- a/ui/src/app/metadata/configuration/service/configuration.service.spec.ts +++ b/ui/src/app/metadata/configuration/service/configuration.service.spec.ts @@ -9,7 +9,7 @@ import { of } from 'rxjs'; import { MetadataProviderService } from '../../domain/service/provider.service'; import { Metadata } from '../../domain/domain.type'; import { SCHEMA } from '../../../../testing/form-schema.stub'; -import { getConfigurationSectionsFn } from '../reducer'; +import { getConfigurationSectionsFn } from '../reducer/utilities'; describe(`Configuration Service`, () => { diff --git a/ui/src/app/metadata/domain/component/wizard-summary.component.html b/ui/src/app/metadata/domain/component/wizard-summary.component.html new file mode 100644 index 000000000..349f7cb74 --- /dev/null +++ b/ui/src/app/metadata/domain/component/wizard-summary.component.html @@ -0,0 +1,14 @@ +
+
+
+ + + + +
+
+
\ No newline at end of file diff --git a/ui/src/app/metadata/domain/component/wizard-summary.component.spec.ts b/ui/src/app/metadata/domain/component/wizard-summary.component.spec.ts new file mode 100644 index 000000000..43712bd48 --- /dev/null +++ b/ui/src/app/metadata/domain/component/wizard-summary.component.spec.ts @@ -0,0 +1,103 @@ +import { Component, ViewChild } from '@angular/core'; +import { TestBed, async, ComponentFixture } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; + +import { NgbDropdownModule, NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap'; + +import { WizardSummaryComponent } from './wizard-summary.component'; +import { SchemaFormModule, WidgetRegistry, DefaultWidgetRegistry } from 'ngx-schema-form'; +import { Wizard } from '../../../wizard/model'; +import { MetadataProvider } from '../../domain/model'; +import { SummaryPropertyComponent } from './summary-property.component'; +import { SCHEMA } from '../../../../testing/form-schema.stub'; +import { MockI18nModule } from '../../../../testing/i18n.stub'; +import { MetadataProviderWizard } from '../../provider/model'; +import { AttributesService } from '../service/attributes.service'; +import { MockAttributeService } from '../../../../testing/attributes.stub'; + +@Component({ + template: ` + + ` +}) +class TestHostComponent { + @ViewChild(WizardSummaryComponent) + public componentUnderTest: WizardSummaryComponent; + + private _summary; + + get summary(): { definition: Wizard, schema: { [id: string]: any }, model: any } { + return this._summary; + } + + set summary(summary: { definition: Wizard, schema: { [id: string]: any }, model: any }) { + this._summary = summary; + } +} + +describe('Wizard Summary Component', () => { + + let fixture: ComponentFixture; + let instance: TestHostComponent; + let app: WizardSummaryComponent; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + NgbDropdownModule, + NgbPopoverModule, + RouterTestingModule, + SchemaFormModule.forRoot(), + MockI18nModule + ], + declarations: [ + WizardSummaryComponent, + SummaryPropertyComponent, + TestHostComponent + ], + providers: [ + { provide: WidgetRegistry, useClass: DefaultWidgetRegistry }, + { provide: AttributesService, useClass: MockAttributeService } + ] + }).compileComponents(); + + fixture = TestBed.createComponent(TestHostComponent); + instance = fixture.componentInstance; + app = instance.componentUnderTest; + fixture.detectChanges(); + })); + + it('should instantiate the component', async(() => { + expect(app).toBeTruthy(); + })); + + describe('gotoPage function', () => { + it('should emit an empty string if page is null', () => { + spyOn(app.onPageSelect, 'emit'); + app.gotoPage(); + expect(app.onPageSelect.emit).toHaveBeenCalledWith(''); + }); + + it('should emit the provided page', () => { + spyOn(app.onPageSelect, 'emit'); + app.gotoPage('foo'); + expect(app.onPageSelect.emit).toHaveBeenCalledWith('foo'); + }); + }); + + describe('ngOnChanges', () => { + it('should set columns and sections if summary is provided', () => { + instance.summary = { + model: { + name: 'foo', + '@type': 'MetadataProvider' + }, + schema: SCHEMA, + definition: MetadataProviderWizard + }; + fixture.detectChanges(); + expect(app.sections).toBeDefined(); + expect(app.columns).toBeDefined(); + }); + }); +}); diff --git a/ui/src/app/metadata/domain/component/wizard-summary.component.ts b/ui/src/app/metadata/domain/component/wizard-summary.component.ts new file mode 100644 index 000000000..73a701491 --- /dev/null +++ b/ui/src/app/metadata/domain/component/wizard-summary.component.ts @@ -0,0 +1,80 @@ +import { Component, Input, SimpleChanges, OnChanges, Output, EventEmitter } from '@angular/core'; + +import { Wizard, WizardStep } from '../../../wizard/model'; +import { MetadataProvider, MetadataResolver } from '../../domain/model'; +import { Property } from '../model/property'; +import { getSplitSchema } from '../../../wizard/reducer'; +import { getStepProperties } from '../utility/configuration'; + +interface Section { + id: string; + index: number; + label: string; + pageNumber: number; + properties: Property[]; +} + +@Component({ + selector: 'wizard-summary', + templateUrl: './wizard-summary.component.html', + styleUrls: [] +}) + +export class WizardSummaryComponent implements OnChanges { + @Input() summary: { definition: Wizard, schema: { [id: string]: any }, model: any }; + + @Output() onPageSelect: EventEmitter = new EventEmitter(); + + sections: Section[]; + columns: Array
[]; + steps: WizardStep[]; + + constructor() { } + + ngOnChanges(changes: SimpleChanges): void { + if (changes.summary && this.summary) { + const schema = this.summary.schema; + const model = this.summary.model; + const def = this.summary.definition; + const steps = def.steps; + + this.sections = steps + .filter(step => step.id !== 'summary') + .map( + (step: WizardStep, num: number) => { + const { id, index, label } = step; + const split = getSplitSchema(schema, step); + const properties = getStepProperties( + split, + def.formatter(model), + schema.definitions || {} + ); + return ({ + id, + pageNumber: num + 1, + index, + label, + properties + }); + } + ); + + this.columns = this.sections.reduce((resultArray, item, index) => { + const chunkIndex = Math.floor(index / Math.round(this.sections.length / 2)); + + if (!resultArray[chunkIndex]) { + resultArray[chunkIndex] = []; + } + + resultArray[chunkIndex].push(item); + + return resultArray; + }, []); + } + } + + gotoPage(page: string = ''): void { + this.onPageSelect.emit(page); + } +} + diff --git a/ui/src/app/metadata/domain/domain.module.ts b/ui/src/app/metadata/domain/domain.module.ts index b109734a6..49e1fe685 100644 --- a/ui/src/app/metadata/domain/domain.module.ts +++ b/ui/src/app/metadata/domain/domain.module.ts @@ -22,8 +22,10 @@ import { UnsavedEntityComponent } from './component/unsaved-entity.dialog'; import { EditorNavComponent } from './component/editor-nav.component'; import { RouterModule } from '@angular/router'; import { SharedModule } from '../../shared/shared.module'; +import { WizardSummaryComponent } from './component/wizard-summary.component'; export const COMPONENTS = [ + WizardSummaryComponent, PreviewDialogComponent, UnsavedEntityComponent, SummaryPropertyComponent, diff --git a/ui/src/app/metadata/provider/model/dynamic-http.provider.form.spec.ts b/ui/src/app/metadata/provider/model/dynamic-http.provider.form.spec.ts index bafe25f4b..f561b4e99 100644 --- a/ui/src/app/metadata/provider/model/dynamic-http.provider.form.spec.ts +++ b/ui/src/app/metadata/provider/model/dynamic-http.provider.form.spec.ts @@ -1,5 +1,51 @@ import { DynamicHttpMetadataProviderWizard } from './dynamic-http.provider.form'; +const schema = { + 'type': 'object', + 'required': [ + '@type', + 'content' + ], + 'properties': { + '@type': { + 'title': 'label.md-request-type', + 'description': 'tooltip.md-request-type', + 'type': 'string', + 'widget': { + 'id': 'select' + }, + 'oneOf': [ + { + 'enum': [ + 'MetadataQueryProtocol' + ], + 'description': 'value.md-query-protocol' + }, + { + 'enum': [ + 'Regex' + ], + 'description': 'value.regex' + } + ] + }, + 'content': { + 'title': 'label.md-request-value', + 'description': 'tooltip.md-request-value', + 'type': 'string' + }, + 'match': { + 'title': 'label.match', + 'description': 'tooltip.match', + 'type': 'string', + 'visibleIf': { + '@type': [ + 'Regex' + ] + } + } + } +}; describe('DynamicHttpMetadataProviderWizard', () => { @@ -122,4 +168,43 @@ describe('DynamicHttpMetadataProviderWizard', () => { ]); }); }); + + describe('validators', () => { + let validators, + metadataRequestURLConstructionScheme, + metadataRequestURLConstructionSchemeContent, + metadataRequestURLConstructionSchemeType, + metadataRequestURLConstructionSchemeMatch; + + beforeEach(() => { + validators = getValidators([], []); + }); + + describe('metadataRequestURLConstructionScheme', () => { + it('should check other validators and propagate those errors up', () => { + const value = { + content: null, + '@type': null, + match: 'foo' + }; + const property = { value, schema, properties: null }; + property.properties = { + content: { + path: 'content', + parent: property + }, + '@type': { + path: '@type', + parent: property + }, + match: { + path: 'match', + parent: property + } + }; + const validator = validators['/metadataRequestURLConstructionScheme']; + expect(validator(value, property, null).length).toBe(2); + }); + }); + }); }); diff --git a/ui/src/app/metadata/provider/model/utilities.spec.ts b/ui/src/app/metadata/provider/model/utilities.spec.ts new file mode 100644 index 000000000..5affea1ae --- /dev/null +++ b/ui/src/app/metadata/provider/model/utilities.spec.ts @@ -0,0 +1,33 @@ +import { metadataFilterProcessor } from './utilities'; + +describe('provider model utilities', () => { + describe('metadata filter processor function', () => { + it('should return null if no schema provided', () => { + expect(metadataFilterProcessor(null)).toBe(null); + }); + + it('should return the schema if no properties are detected', () => { + const schema = {}; + expect(metadataFilterProcessor(schema)).toBe(schema); + }); + + it('should return the schema if no metadataFilters property exists in the schema', () => { + const schema = { properties: { foo: 'bar' } }; + expect(metadataFilterProcessor(schema)).toBe(schema); + }); + + it('should turn the filters into an object if provided ', () => { + const schema = { properties: { metadataFilters: { + type: 'array', + items: [ + { + $id: 'foo', + type: 'string' + } + ] + } } }; + const processed = metadataFilterProcessor(schema); + expect(processed.properties.metadataFilters.properties.foo.type).toBe('string'); + }); + }); +}); diff --git a/ui/src/app/metadata/provider/model/utilities.ts b/ui/src/app/metadata/provider/model/utilities.ts index aea90bc21..dc415bae1 100644 --- a/ui/src/app/metadata/provider/model/utilities.ts +++ b/ui/src/app/metadata/provider/model/utilities.ts @@ -1,5 +1,4 @@ export const metadataFilterProcessor = (schema) => { - console.log(schema); if (!schema) { return null; } @@ -20,6 +19,5 @@ export const metadataFilterProcessor = (schema) => { } } }); - console.log(processed); return processed; }; diff --git a/ui/src/app/metadata/resolver/container/resolver-wizard.component.spec.ts b/ui/src/app/metadata/resolver/container/resolver-wizard.component.spec.ts index 3cec9bf25..58191efeb 100644 --- a/ui/src/app/metadata/resolver/container/resolver-wizard.component.spec.ts +++ b/ui/src/app/metadata/resolver/container/resolver-wizard.component.spec.ts @@ -2,7 +2,7 @@ import { Component, ViewChild } from '@angular/core'; import { TestBed, async, ComponentFixture } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { StoreModule, Store, combineReducers } from '@ngrx/store'; -import { RouterStateSnapshot, ActivatedRouteSnapshot } from '@angular/router'; +import { RouterStateSnapshot } from '@angular/router'; import { NgbDropdownModule, NgbPopoverModule, NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { of } from 'rxjs'; @@ -18,6 +18,7 @@ import { MockWizardModule } from '../../../../testing/wizard.stub'; import { NgbModalStub } from '../../../../testing/modal.stub'; import { MetadataResolver } from '../../domain/model'; import { DifferentialService } from '../../../core/service/differential.service'; +import { MetadataConfigurationComponentStub } from '../../../../testing/metadata-configuration.stub'; @Component({ template: ` @@ -85,7 +86,8 @@ describe('Resolver Wizard Component', () => { ], declarations: [ ResolverWizardComponent, - TestHostComponent + TestHostComponent, + MetadataConfigurationComponentStub ], providers: [ DifferentialService, diff --git a/ui/src/app/wizard/reducer/index.ts b/ui/src/app/wizard/reducer/index.ts index 027ac1673..255710be0 100644 --- a/ui/src/app/wizard/reducer/index.ts +++ b/ui/src/app/wizard/reducer/index.ts @@ -129,7 +129,7 @@ export const getSchemaLockedFn = (step, locked) => step ? step.locked ? locked : export const getLocked = createSelector(getCurrent, getLockedStatus, getSchemaLockedFn); export const getSchemaProcessedFn = (schema, definition) => - definition.schemaPreprocessor ? definition.schemaPreprocessor(schema) : schema; + definition && definition.schemaPreprocessor ? definition.schemaPreprocessor(schema) : schema; export const getSchemaObject = createSelector(getState, fromWizard.getSchema); export const getProcessedSchema = createSelector(getSchemaObject, getWizardDefinition, getSchemaProcessedFn); From 22cb57c17c7b6d8ce6d69110dfb2aa268a1a9c26 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Mon, 30 Sep 2019 10:16:59 -0400 Subject: [PATCH 043/211] SHIBUI-1501 --- ...lerVersionEndpointsIntegrationTests.groovy | 67 +++++++++++++++++++ ...MetadataFilterEnversVersioningTests.groovy | 43 ++++++++++++ .../MetadataResolversController.java | 1 + .../ui/domain/resolvers/MetadataResolver.java | 11 +++ .../EnversMetadataResolverVersionService.java | 13 +++- .../util/AttributeReleaseAndOverridesX.groovy | 13 ++++ 6 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/AttributeReleaseAndOverridesX.groovy diff --git a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy index 8e23362e7..0e10dbac9 100644 --- a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy +++ b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy @@ -1,5 +1,9 @@ package edu.internet2.tier.shibboleth.admin.ui.controller +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.databind.SerializationFeature +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule +import edu.internet2.tier.shibboleth.admin.ui.configuration.CustomPropertiesConfiguration import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilterTarget import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityRoleWhiteListFilter @@ -11,10 +15,15 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FilesystemMetadat import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.LocalDynamicMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository +import edu.internet2.tier.shibboleth.admin.ui.service.MetadataResolverVersionService +import edu.internet2.tier.shibboleth.admin.ui.util.AttributeReleaseAndOverridesX +import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator +import edu.internet2.tier.shibboleth.admin.util.AttributeUtility import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.boot.test.web.client.TestRestTemplate import org.springframework.test.context.ActiveProfiles +import org.springframework.transaction.PlatformTransactionManager import spock.lang.Specification import static edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilterTarget.NameIdFormatFilterTargetType.ENTITY @@ -32,12 +41,34 @@ class MetadataResolverControllerVersionEndpointsIntegrationTests extends Specifi @Autowired MetadataResolverRepository repository + @Autowired + AttributeUtility attributeUtility + + @Autowired + CustomPropertiesConfiguration customPropertiesConfiguration + + ObjectMapper mapper + TestObjectGenerator generator + + @Autowired + PlatformTransactionManager txMgr + + @Autowired + MetadataResolverVersionService metadataResolverVersionService + static BASE_URI = '/api/MetadataResolvers' static ALL_VERSIONS_URI = "$BASE_URI/%s/Versions" static SPECIFIC_VERSION_URI = "$BASE_URI/%s/Versions/%s" + def setup() { + generator = new TestObjectGenerator(attributeUtility, customPropertiesConfiguration) + mapper = new ObjectMapper() + mapper.enable(SerializationFeature.INDENT_OUTPUT) + mapper.registerModule(new JavaTimeModule()) + } + def "GET /api/MetadataResolvers/{resourceId}/Versions with non-existent resolver"() { when: def result = getAllMetadataResolverVersions('non-existent-resolver-id', String) @@ -111,6 +142,7 @@ class MetadataResolverControllerVersionEndpointsIntegrationTests extends Specifi } def "SHIBUI-1386"() { + given: MetadataResolver mr = new FileBackedHttpMetadataResolver(name: 'testme') mr = repository.save(mr) @@ -142,6 +174,7 @@ class MetadataResolverControllerVersionEndpointsIntegrationTests extends Specifi } def "SHIBUI-1500"() { + given: MetadataResolver mr = new FileBackedHttpMetadataResolver(name: 'shibui-1500') mr = repository.save(mr) @@ -159,6 +192,7 @@ class MetadataResolverControllerVersionEndpointsIntegrationTests extends Specifi } def "SHIBUI-1499"() { + given: MetadataResolver mr = new FileBackedHttpMetadataResolver(name: 'shibui-1499') mr = repository.save(mr) @@ -182,6 +216,29 @@ class MetadataResolverControllerVersionEndpointsIntegrationTests extends Specifi noExceptionThrown() } + def "SHIBUI-1501"() { + given: + def mr = new FileBackedHttpMetadataResolver(name: 'shibui-1501') + mr = repository.save(mr) + + when: 'add a filter' + EntityAttributesFilter filter = this.generator.entityAttributesFilter() + mr.addFilter(filter) + def resolver = (repository.save(mr) as MetadataResolver).withTraits AttributeReleaseAndOverrides + resolver.entityAttributesFilterIntoTransientRepresentation() + + def allVersions = getAllMetadataResolverVersions(mr.resourceId, List) + def mrv2 = getMetadataResolverForVersion(mr.resourceId, allVersions.body[1].id, MetadataResolver) + .body.withTraits AttributeReleaseAndOverrides + + then: + mrv2.metadataFilters.size() == 1 + mrv2.attributesRelease(0).size() == resolver.attributesRelease(0).size() + mrv2.overrides(0).size() == resolver.overrides(0).size() + mrv2.attributesRelease(0) == resolver.attributesRelease(0) + mrv2.overrides(0) == resolver.overrides(0) + } + private getAllMetadataResolverVersions(String resourceId, responseType) { this.restTemplate.getForEntity(resourceUriFor(ALL_VERSIONS_URI, resourceId), responseType) } @@ -198,3 +255,13 @@ class MetadataResolverControllerVersionEndpointsIntegrationTests extends Specifi String.format(uriTemplate, resourceId) } } + +trait AttributeReleaseAndOverrides { + List attributesRelease(int filterIndex) { + (this.metadataFilters[filterIndex] as EntityAttributesFilter).attributeRelease + } + + Map overrides(int filterIndex) { + (this.metadataFilters[filterIndex] as EntityAttributesFilter).relyingPartyOverrides + } +} diff --git a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/MetadataFilterEnversVersioningTests.groovy b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/MetadataFilterEnversVersioningTests.groovy index fe1e5eee4..366dc9c0d 100644 --- a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/MetadataFilterEnversVersioningTests.groovy +++ b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/MetadataFilterEnversVersioningTests.groovy @@ -1,6 +1,10 @@ package edu.internet2.tier.shibboleth.admin.ui.repository.envers +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.databind.SerializationFeature +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import edu.internet2.tier.shibboleth.admin.ui.configuration.CoreShibUiConfiguration +import edu.internet2.tier.shibboleth.admin.ui.configuration.CustomPropertiesConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.EntitiesVersioningConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.InternationalizationConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.SearchConfiguration @@ -19,6 +23,8 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.ResourceBackedMet import edu.internet2.tier.shibboleth.admin.ui.repository.FilterRepository import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository import edu.internet2.tier.shibboleth.admin.ui.service.MetadataResolverVersionService +import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator +import edu.internet2.tier.shibboleth.admin.util.AttributeUtility import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.domain.EntityScan import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest @@ -49,6 +55,22 @@ class MetadataFilterEnversVersioningTests extends Specification { @Autowired PlatformTransactionManager txMgr + @Autowired + AttributeUtility attributeUtility + + @Autowired + CustomPropertiesConfiguration customPropertiesConfiguration + + ObjectMapper mapper + TestObjectGenerator generator + + def setup() { + generator = new TestObjectGenerator(attributeUtility, customPropertiesConfiguration) + mapper = new ObjectMapper() + mapper.enable(SerializationFeature.INDENT_OUTPUT) + mapper.registerModule(new JavaTimeModule()) + } + def "test versioning of MetadataResolver with EntityRoleWhiteListFilter"() { when: 'Add initial filter' @@ -312,4 +334,25 @@ class MetadataFilterEnversVersioningTests extends Specification { mrv1.metadataFilters.size() == 1 mrv2.metadataFilters.size() == 0 } + + def "SHIBUI-1501"() { + when: 'Add initial filter' + def mr = new FileBackedHttpMetadataResolver(name: 'resolver') + mr = EnversTestsSupport.doInExplicitTransaction(txMgr) { + metadataResolverRepository.save(mr) + } + EntityAttributesFilter filter = this.generator.entityAttributesFilter() + mr.metadataFilters.add(filter) + mr = EnversTestsSupport.doInExplicitTransaction(txMgr) { + metadataResolverRepository.save(mr) + } + def versions = metadataResolverVersionService.findVersionsForMetadataResolver(mr.resourceId) + def mrv1 = metadataResolverVersionService.findSpecificVersionOfMetadataResolver(mr.resourceId, versions[0].id) + def mrv2 = metadataResolverVersionService.findSpecificVersionOfMetadataResolver(mr.resourceId, versions[1].id) + + then: + versions.size() == 2 + mrv1.metadataFilters.size() == 0 + mrv2.metadataFilters.size() == 1 + } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java index dbdc0ddd1..e07272629 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java @@ -170,6 +170,7 @@ public ResponseEntity getAllVersions(@PathVariable String resourceId) { } @GetMapping("/MetadataResolvers/{resourceId}/Versions/{versionId}") + @Transactional(readOnly = true) public ResponseEntity getSpecificVersion(@PathVariable String resourceId, @PathVariable String versionId) { MetadataResolver resolver = versionService.findSpecificVersionOfMetadataResolver(resourceId, versionId); if (resolver == null) { diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java index 9e67a5549..d24cd3638 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import edu.internet2.tier.shibboleth.admin.ui.domain.AbstractAuditable; +import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter; import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -100,4 +101,14 @@ public void addFilter(MetadataFilter metadataFilter) { public void markAsModified() { this.versionModifiedTimestamp = System.currentTimeMillis(); } + + public void entityAttributesFilterIntoTransientRepresentation() { + //expose explicit API to call to convert into transient representation + //used in unit/integration tests where JPA's @PostLoad callback execution engine is not available + this.metadataFilters + .stream() + .filter(EntityAttributesFilter.class::isInstance) + .map(EntityAttributesFilter.class::cast) + .forEach(EntityAttributesFilter::intoTransientRepresentation); + } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversMetadataResolverVersionService.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversMetadataResolverVersionService.java index c98203eca..b0d90195f 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversMetadataResolverVersionService.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EnversMetadataResolverVersionService.java @@ -1,5 +1,6 @@ package edu.internet2.tier.shibboleth.admin.ui.service; +import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter; import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver; import edu.internet2.tier.shibboleth.admin.ui.domain.versioning.Version; import edu.internet2.tier.shibboleth.admin.ui.envers.EnversVersionServiceSupport; @@ -27,6 +28,16 @@ public List findVersionsForMetadataResolver(String resourceId) { @Override public MetadataResolver findSpecificVersionOfMetadataResolver(String resourceId, String versionId) { Object mrObject = enversVersionServiceSupport.findSpecificVersionOfPersistentEntity(resourceId, versionId, MetadataResolver.class); - return mrObject == null ? null : (MetadataResolver) mrObject; + if(mrObject == null) { + return null; + } + MetadataResolver resolver = (MetadataResolver) mrObject; + + //The @PostLoad is not honored by Envers. So need to do this manually for EntityAttributesFilters + //So the correct representation is built and returned to upstream clients expecting JSON + resolver.entityAttributesFilterIntoTransientRepresentation(); + + return resolver; + } } diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/AttributeReleaseAndOverridesX.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/AttributeReleaseAndOverridesX.groovy new file mode 100644 index 000000000..d3198d225 --- /dev/null +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/AttributeReleaseAndOverridesX.groovy @@ -0,0 +1,13 @@ +package edu.internet2.tier.shibboleth.admin.ui.util + +import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter + +trait AttributeReleaseAndOverridesX { + List attributesRelease(int filterIndex) { + (this.metadataFilters[filterIndex] as EntityAttributesFilter).attributeRelease + } + + Map overrides() { + (this.metadataFilters[filterIndex] as EntityAttributesFilter).relyingPartyOverrides + } +} From f4ce06f2fb3dad4a15101bf626df7a6d13a80eba Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Mon, 30 Sep 2019 10:18:04 -0400 Subject: [PATCH 044/211] SHIBUI-1501: cleanup --- .../ui/util/AttributeReleaseAndOverridesX.groovy | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/AttributeReleaseAndOverridesX.groovy diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/AttributeReleaseAndOverridesX.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/AttributeReleaseAndOverridesX.groovy deleted file mode 100644 index d3198d225..000000000 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/AttributeReleaseAndOverridesX.groovy +++ /dev/null @@ -1,13 +0,0 @@ -package edu.internet2.tier.shibboleth.admin.ui.util - -import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter - -trait AttributeReleaseAndOverridesX { - List attributesRelease(int filterIndex) { - (this.metadataFilters[filterIndex] as EntityAttributesFilter).attributeRelease - } - - Map overrides() { - (this.metadataFilters[filterIndex] as EntityAttributesFilter).relyingPartyOverrides - } -} From 21ef140bf25b4654308a579d158f7bb77e14b2c7 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Mon, 30 Sep 2019 10:24:52 -0400 Subject: [PATCH 045/211] SHIBUI-1501: cleanup --- ...dataResolverControllerVersionEndpointsIntegrationTests.groovy | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy index 0e10dbac9..d1bf151d3 100644 --- a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy +++ b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy @@ -16,7 +16,6 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.LocalDynamicMetad import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository import edu.internet2.tier.shibboleth.admin.ui.service.MetadataResolverVersionService -import edu.internet2.tier.shibboleth.admin.ui.util.AttributeReleaseAndOverridesX import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator import edu.internet2.tier.shibboleth.admin.util.AttributeUtility import org.springframework.beans.factory.annotation.Autowired From 25bc0af217bbb8a2cc4d8b855f054d2c7f17a896 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Mon, 30 Sep 2019 11:21:33 -0400 Subject: [PATCH 046/211] Fix tests --- ...MetadataFilterEnversVersioningTests.groovy | 21 ------------------- .../filters/EntityAttributesFilter.java | 3 +++ 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/MetadataFilterEnversVersioningTests.groovy b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/MetadataFilterEnversVersioningTests.groovy index 366dc9c0d..6df7da461 100644 --- a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/MetadataFilterEnversVersioningTests.groovy +++ b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/MetadataFilterEnversVersioningTests.groovy @@ -334,25 +334,4 @@ class MetadataFilterEnversVersioningTests extends Specification { mrv1.metadataFilters.size() == 1 mrv2.metadataFilters.size() == 0 } - - def "SHIBUI-1501"() { - when: 'Add initial filter' - def mr = new FileBackedHttpMetadataResolver(name: 'resolver') - mr = EnversTestsSupport.doInExplicitTransaction(txMgr) { - metadataResolverRepository.save(mr) - } - EntityAttributesFilter filter = this.generator.entityAttributesFilter() - mr.metadataFilters.add(filter) - mr = EnversTestsSupport.doInExplicitTransaction(txMgr) { - metadataResolverRepository.save(mr) - } - def versions = metadataResolverVersionService.findVersionsForMetadataResolver(mr.resourceId) - def mrv1 = metadataResolverVersionService.findSpecificVersionOfMetadataResolver(mr.resourceId, versions[0].id) - def mrv2 = metadataResolverVersionService.findSpecificVersionOfMetadataResolver(mr.resourceId, versions[1].id) - - then: - versions.size() == 2 - mrv1.metadataFilters.size() == 0 - mrv2.metadataFilters.size() == 1 - } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilter.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilter.java index 5d6d3132a..a3e0a6a93 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilter.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/EntityAttributesFilter.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; import static edu.internet2.tier.shibboleth.admin.util.ModelRepresentationConversions.getAttributeListFromAttributeReleaseList; import static edu.internet2.tier.shibboleth.admin.util.ModelRepresentationConversions.getAttributeListFromRelyingPartyOverridesRepresentation; @@ -69,6 +70,8 @@ private void rebuildAttributes() { @PostLoad public void intoTransientRepresentation() { + //For some update operations, list of attributes could contain null values. Filter them out + this.attributes.removeIf(Objects::isNull); this.attributeRelease = getAttributeReleaseListFromAttributeList(this.attributes); this.relyingPartyOverrides = getRelyingPartyOverridesRepresentationFromAttributeList(this.attributes); } From d1833a995bef48f4aac994e130ba5d84729955ea Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Tue, 1 Oct 2019 12:40:05 -0700 Subject: [PATCH 047/211] SHIBUI-1511 Fixed issue with filters showing for providers --- .../metadata-comparison.component.html | 43 ++++++++----------- .../metadata-comparison.component.ts | 11 ++--- 2 files changed, 23 insertions(+), 31 deletions(-) diff --git a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html index effbefb0a..2c6415052 100644 --- a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html +++ b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html @@ -25,32 +25,27 @@

- -
-

- Metadata Filter -

-
- - - - - -
- -
- + +
+

+ Metadata Filter +

+ + + + + +
+ +
+ +
+
-
diff --git a/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts b/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts index e8a905b0d..8fb4a817b 100644 --- a/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts +++ b/ui/src/app/metadata/configuration/container/metadata-comparison.component.ts @@ -20,14 +20,15 @@ export class MetadataComparisonComponent implements OnDestroy { limiter: BehaviorSubject = new BehaviorSubject(false); - versions$: Observable; - numVersions$: Observable; - type$: Observable; + versions$: Observable = this.store.select(fromReducer.getLimitedComparisonConfigurations); + numVersions$: Observable = this.store.select(getComparisonConfigurationCount); + type$: Observable = this.store.select(fromReducer.getConfigurationModelType); loading$: Observable = this.store.select(fromReducer.getComparisonLoading); limited$: Observable = this.store.select(fromReducer.getViewChangedOnly); sub: Subscription; filters$: Observable = this.store.select(fromReducer.getComparisonFilterConfiguration); filterCompare$: Observable = this.store.select(fromReducer.getLimitedFilterComparisonConfiguration); + isProvider$: Observable = this.type$.pipe(map(t => t !== 'resolver')); constructor( private store: Store, @@ -39,10 +40,6 @@ export class MetadataComparisonComponent implements OnDestroy { map(versions => new CompareVersionRequest(versions)) ).subscribe(this.store); - this.versions$ = this.store.select(fromReducer.getLimitedComparisonConfigurations); - this.numVersions$ = this.store.select(getComparisonConfigurationCount); - this.type$ = this.store.select(fromReducer.getConfigurationModelType); - this.sub = this.limiter.pipe( withLatestFrom(this.limited$), map(([compare, limit]) => new ViewChanged(!limit)) From d64ed696ded5138afaf44aae3767eab078e9ca92 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Tue, 1 Oct 2019 16:28:39 -0400 Subject: [PATCH 048/211] SHIBUI-1509 --- ...lerVersionEndpointsIntegrationTests.groovy | 29 +++++++++++++++++++ .../MetadataRequestURLConstructionScheme.java | 2 ++ 2 files changed, 31 insertions(+) diff --git a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy index d1bf151d3..8cb3df104 100644 --- a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy +++ b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy @@ -9,23 +9,33 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFil import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityRoleWhiteListFilter import edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilter import edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilterTarget +import edu.internet2.tier.shibboleth.admin.ui.domain.filters.SignatureValidationFilter import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.DynamicHttpMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FileBackedHttpMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FilesystemMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.LocalDynamicMetadataResolver +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataQueryProtocolScheme import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.RegexScheme +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.TemplateScheme import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository + import edu.internet2.tier.shibboleth.admin.ui.service.MetadataResolverVersionService import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator import edu.internet2.tier.shibboleth.admin.util.AttributeUtility + +import org.apache.commons.lang3.RandomStringUtils + import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.boot.test.web.client.TestRestTemplate import org.springframework.test.context.ActiveProfiles import org.springframework.transaction.PlatformTransactionManager import spock.lang.Specification +import spock.lang.Unroll import static edu.internet2.tier.shibboleth.admin.ui.domain.filters.NameIdFormatFilterTarget.NameIdFormatFilterTargetType.ENTITY +import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic /** * @author Dmitriy Kopylenko @@ -238,6 +248,25 @@ class MetadataResolverControllerVersionEndpointsIntegrationTests extends Specifi mrv2.overrides(0) == resolver.overrides(0) } + @Unroll + def "SHIBUI-1509 with #urlConstructionScheme"() { + MetadataResolver mr = new DynamicHttpMetadataResolver(name: randomAlphabetic(8)).with { + it.metadataRequestURLConstructionScheme = urlConstructionScheme + it + } + mr = repository.save(mr) + + when: + def allVersions = getAllMetadataResolverVersions(mr.resourceId, List) + def mrv1 = getMetadataResolverForVersion(mr.resourceId, allVersions.body[0].id, MetadataResolver) + + then: + noExceptionThrown() + + where: + urlConstructionScheme << [new RegexScheme(match: ".*"), new MetadataQueryProtocolScheme(), new TemplateScheme()] + } + private getAllMetadataResolverVersions(String resourceId, responseType) { this.restTemplate.getForEntity(resourceUriFor(ALL_VERSIONS_URI, resourceId), responseType) } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataRequestURLConstructionScheme.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataRequestURLConstructionScheme.java index af3b0eab5..a1223840e 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataRequestURLConstructionScheme.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataRequestURLConstructionScheme.java @@ -1,5 +1,6 @@ package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; @@ -28,6 +29,7 @@ @JsonSubTypes.Type(value=RegexScheme.class, name="Regex")}) @Audited @AuditOverride(forClass = AbstractAuditable.class) +@JsonIgnoreProperties({"handler", "hibernateLazyInitializer"}) public abstract class MetadataRequestURLConstructionScheme extends AbstractAuditable { public enum SchemeType { METADATA_QUERY_PROTOCOL("MetadataQueryProtocol"), From c316358f1cb5e42a8f70fa4473bf1a92620fbe49 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Tue, 1 Oct 2019 13:46:13 -0700 Subject: [PATCH 049/211] SHIBUI-1511 --- .../configuration/container/metadata-comparison.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html index a12fb59c5..01617fc64 100644 --- a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html +++ b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html @@ -53,7 +53,7 @@


- +
-
+
+

No Filters

+

No filters have been added to this Metadata Provider

+
+
-
-

No Filters

-

No filters have been added to this Metadata Provider

-
\ No newline at end of file diff --git a/ui/src/app/metadata/configuration/component/metadata-configuration.component.html b/ui/src/app/metadata/configuration/component/metadata-configuration.component.html index 6214c37d2..df06cc729 100644 --- a/ui/src/app/metadata/configuration/component/metadata-configuration.component.html +++ b/ui/src/app/metadata/configuration/component/metadata-configuration.component.html @@ -37,9 +37,4 @@

- - - \ No newline at end of file diff --git a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html index 01617fc64..a3505ae44 100644 --- a/ui/src/app/metadata/configuration/container/metadata-comparison.component.html +++ b/ui/src/app/metadata/configuration/container/metadata-comparison.component.html @@ -39,28 +39,13 @@


- +
- - - - - -
- -
- -
-
diff --git a/ui/src/app/metadata/configuration/reducer/utilities.ts b/ui/src/app/metadata/configuration/reducer/utilities.ts index f2481e99c..dfcad151e 100644 --- a/ui/src/app/metadata/configuration/reducer/utilities.ts +++ b/ui/src/app/metadata/configuration/reducer/utilities.ts @@ -44,7 +44,15 @@ export const assignValueToProperties = (models, properties, definition: any): an if (!array) { return false; } - return JSON.stringify(model[prop.id]) !== JSON.stringify(array[0][prop.id]); + let prop1 = model[prop.id]; + let prop2 = array[0][prop.id]; + if (prop1 && prop1.modifiedDate) { + let { checkedModifiedDate, checkedProp } = prop1; + let { firstModifiedDate, firstProp } = prop2; + prop1 = checkedProp; + prop2 = firstProp; + } + return JSON.stringify(prop1) !== JSON.stringify(prop2); }); const widget = prop.type === 'array' && prop.widget && prop.widget.data ? ({ diff --git a/ui/src/app/metadata/provider/container/provider-wizard.component.html b/ui/src/app/metadata/provider/container/provider-wizard.component.html index 58766e536..366bb70d5 100644 --- a/ui/src/app/metadata/provider/container/provider-wizard.component.html +++ b/ui/src/app/metadata/provider/container/provider-wizard.component.html @@ -19,7 +19,11 @@ - + + diff --git a/ui/src/app/metadata/provider/container/provider-wizard.component.ts b/ui/src/app/metadata/provider/container/provider-wizard.component.ts index f501f7cb8..e812527d5 100644 --- a/ui/src/app/metadata/provider/container/provider-wizard.component.ts +++ b/ui/src/app/metadata/provider/container/provider-wizard.component.ts @@ -63,7 +63,7 @@ export class ProviderWizardComponent implements OnDestroy { this.summary$ = combineLatest( this.store.select(fromWizard.getWizardDefinition), - this.store.select(fromWizard.getSchemaObject), + this.store.select(fromWizard.getParsedSchema), this.store.select(fromProvider.getEntityChanges) ).pipe( map(([ definition, schema, model ]) => ({ definition, schema, model })) From 5c66b379eb75e42c34462956439785a74be68306 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Wed, 2 Oct 2019 14:13:37 -0700 Subject: [PATCH 051/211] SHIBUI-1440 Implemented config layout for provider summary --- .../component/wizard-summary.component.html | 14 --- .../wizard-summary.component.spec.ts | 103 ------------------ .../component/wizard-summary.component.ts | 80 -------------- ui/src/app/metadata/domain/domain.module.ts | 2 - .../container/provider-wizard.component.html | 11 +- .../provider-wizard.component.spec.ts | 4 +- .../container/provider-wizard.component.ts | 14 +-- .../app/metadata/provider/provider.module.ts | 4 +- ui/src/app/metadata/provider/reducer/index.ts | 10 ++ 9 files changed, 24 insertions(+), 218 deletions(-) delete mode 100644 ui/src/app/metadata/domain/component/wizard-summary.component.html delete mode 100644 ui/src/app/metadata/domain/component/wizard-summary.component.spec.ts delete mode 100644 ui/src/app/metadata/domain/component/wizard-summary.component.ts diff --git a/ui/src/app/metadata/domain/component/wizard-summary.component.html b/ui/src/app/metadata/domain/component/wizard-summary.component.html deleted file mode 100644 index 349f7cb74..000000000 --- a/ui/src/app/metadata/domain/component/wizard-summary.component.html +++ /dev/null @@ -1,14 +0,0 @@ -
-
-
- - - - -
-
-
\ No newline at end of file diff --git a/ui/src/app/metadata/domain/component/wizard-summary.component.spec.ts b/ui/src/app/metadata/domain/component/wizard-summary.component.spec.ts deleted file mode 100644 index 43712bd48..000000000 --- a/ui/src/app/metadata/domain/component/wizard-summary.component.spec.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { Component, ViewChild } from '@angular/core'; -import { TestBed, async, ComponentFixture } from '@angular/core/testing'; -import { RouterTestingModule } from '@angular/router/testing'; - -import { NgbDropdownModule, NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap'; - -import { WizardSummaryComponent } from './wizard-summary.component'; -import { SchemaFormModule, WidgetRegistry, DefaultWidgetRegistry } from 'ngx-schema-form'; -import { Wizard } from '../../../wizard/model'; -import { MetadataProvider } from '../../domain/model'; -import { SummaryPropertyComponent } from './summary-property.component'; -import { SCHEMA } from '../../../../testing/form-schema.stub'; -import { MockI18nModule } from '../../../../testing/i18n.stub'; -import { MetadataProviderWizard } from '../../provider/model'; -import { AttributesService } from '../service/attributes.service'; -import { MockAttributeService } from '../../../../testing/attributes.stub'; - -@Component({ - template: ` - - ` -}) -class TestHostComponent { - @ViewChild(WizardSummaryComponent) - public componentUnderTest: WizardSummaryComponent; - - private _summary; - - get summary(): { definition: Wizard, schema: { [id: string]: any }, model: any } { - return this._summary; - } - - set summary(summary: { definition: Wizard, schema: { [id: string]: any }, model: any }) { - this._summary = summary; - } -} - -describe('Wizard Summary Component', () => { - - let fixture: ComponentFixture; - let instance: TestHostComponent; - let app: WizardSummaryComponent; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ - NgbDropdownModule, - NgbPopoverModule, - RouterTestingModule, - SchemaFormModule.forRoot(), - MockI18nModule - ], - declarations: [ - WizardSummaryComponent, - SummaryPropertyComponent, - TestHostComponent - ], - providers: [ - { provide: WidgetRegistry, useClass: DefaultWidgetRegistry }, - { provide: AttributesService, useClass: MockAttributeService } - ] - }).compileComponents(); - - fixture = TestBed.createComponent(TestHostComponent); - instance = fixture.componentInstance; - app = instance.componentUnderTest; - fixture.detectChanges(); - })); - - it('should instantiate the component', async(() => { - expect(app).toBeTruthy(); - })); - - describe('gotoPage function', () => { - it('should emit an empty string if page is null', () => { - spyOn(app.onPageSelect, 'emit'); - app.gotoPage(); - expect(app.onPageSelect.emit).toHaveBeenCalledWith(''); - }); - - it('should emit the provided page', () => { - spyOn(app.onPageSelect, 'emit'); - app.gotoPage('foo'); - expect(app.onPageSelect.emit).toHaveBeenCalledWith('foo'); - }); - }); - - describe('ngOnChanges', () => { - it('should set columns and sections if summary is provided', () => { - instance.summary = { - model: { - name: 'foo', - '@type': 'MetadataProvider' - }, - schema: SCHEMA, - definition: MetadataProviderWizard - }; - fixture.detectChanges(); - expect(app.sections).toBeDefined(); - expect(app.columns).toBeDefined(); - }); - }); -}); diff --git a/ui/src/app/metadata/domain/component/wizard-summary.component.ts b/ui/src/app/metadata/domain/component/wizard-summary.component.ts deleted file mode 100644 index 73a701491..000000000 --- a/ui/src/app/metadata/domain/component/wizard-summary.component.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { Component, Input, SimpleChanges, OnChanges, Output, EventEmitter } from '@angular/core'; - -import { Wizard, WizardStep } from '../../../wizard/model'; -import { MetadataProvider, MetadataResolver } from '../../domain/model'; -import { Property } from '../model/property'; -import { getSplitSchema } from '../../../wizard/reducer'; -import { getStepProperties } from '../utility/configuration'; - -interface Section { - id: string; - index: number; - label: string; - pageNumber: number; - properties: Property[]; -} - -@Component({ - selector: 'wizard-summary', - templateUrl: './wizard-summary.component.html', - styleUrls: [] -}) - -export class WizardSummaryComponent implements OnChanges { - @Input() summary: { definition: Wizard, schema: { [id: string]: any }, model: any }; - - @Output() onPageSelect: EventEmitter = new EventEmitter(); - - sections: Section[]; - columns: Array
[]; - steps: WizardStep[]; - - constructor() { } - - ngOnChanges(changes: SimpleChanges): void { - if (changes.summary && this.summary) { - const schema = this.summary.schema; - const model = this.summary.model; - const def = this.summary.definition; - const steps = def.steps; - - this.sections = steps - .filter(step => step.id !== 'summary') - .map( - (step: WizardStep, num: number) => { - const { id, index, label } = step; - const split = getSplitSchema(schema, step); - const properties = getStepProperties( - split, - def.formatter(model), - schema.definitions || {} - ); - return ({ - id, - pageNumber: num + 1, - index, - label, - properties - }); - } - ); - - this.columns = this.sections.reduce((resultArray, item, index) => { - const chunkIndex = Math.floor(index / Math.round(this.sections.length / 2)); - - if (!resultArray[chunkIndex]) { - resultArray[chunkIndex] = []; - } - - resultArray[chunkIndex].push(item); - - return resultArray; - }, []); - } - } - - gotoPage(page: string = ''): void { - this.onPageSelect.emit(page); - } -} - diff --git a/ui/src/app/metadata/domain/domain.module.ts b/ui/src/app/metadata/domain/domain.module.ts index 49e1fe685..b109734a6 100644 --- a/ui/src/app/metadata/domain/domain.module.ts +++ b/ui/src/app/metadata/domain/domain.module.ts @@ -22,10 +22,8 @@ import { UnsavedEntityComponent } from './component/unsaved-entity.dialog'; import { EditorNavComponent } from './component/editor-nav.component'; import { RouterModule } from '@angular/router'; import { SharedModule } from '../../shared/shared.module'; -import { WizardSummaryComponent } from './component/wizard-summary.component'; export const COMPONENTS = [ - WizardSummaryComponent, PreviewDialogComponent, UnsavedEntityComponent, SummaryPropertyComponent, diff --git a/ui/src/app/metadata/provider/container/provider-wizard.component.html b/ui/src/app/metadata/provider/container/provider-wizard.component.html index 366bb70d5..52d6f5e35 100644 --- a/ui/src/app/metadata/provider/container/provider-wizard.component.html +++ b/ui/src/app/metadata/provider/container/provider-wizard.component.html @@ -19,11 +19,12 @@ - - +
+ +
diff --git a/ui/src/app/metadata/provider/container/provider-wizard.component.spec.ts b/ui/src/app/metadata/provider/container/provider-wizard.component.spec.ts index 5bba916d4..1dc620637 100644 --- a/ui/src/app/metadata/provider/container/provider-wizard.component.spec.ts +++ b/ui/src/app/metadata/provider/container/provider-wizard.component.spec.ts @@ -8,10 +8,10 @@ import { NgbDropdownModule, NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap' import { ProviderWizardComponent } from './provider-wizard.component'; import * as fromRoot from '../reducer'; import { WizardModule } from '../../../wizard/wizard.module'; -import { WizardSummaryComponent } from '../../domain/component/wizard-summary.component'; import { SummaryPropertyComponent } from '../../domain/component/summary-property.component'; import * as fromWizard from '../../../wizard/reducer'; import { MockI18nModule } from '../../../../testing/i18n.stub'; +import { MetadataConfigurationComponentStub } from '../../../../testing/metadata-configuration.stub'; @Component({ template: ` @@ -46,7 +46,7 @@ describe('Provider Wizard Component', () => { declarations: [ ProviderWizardComponent, SummaryPropertyComponent, - WizardSummaryComponent, + MetadataConfigurationComponentStub, TestHostComponent ] }).compileComponents(); diff --git a/ui/src/app/metadata/provider/container/provider-wizard.component.ts b/ui/src/app/metadata/provider/container/provider-wizard.component.ts index e812527d5..c17ae03f2 100644 --- a/ui/src/app/metadata/provider/container/provider-wizard.component.ts +++ b/ui/src/app/metadata/provider/container/provider-wizard.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy } from '@angular/core'; -import { Observable, combineLatest, Subject } from 'rxjs'; +import { Observable, Subject } from 'rxjs'; import { Store } from '@ngrx/store'; import * as fromProvider from '../reducer'; @@ -11,9 +11,9 @@ import { startWith, takeUntil } from 'rxjs/operators'; import { Wizard, WizardStep } from '../../../wizard/model'; import { MetadataProvider } from '../../domain/model'; import { ClearProvider } from '../action/entity.action'; -import { map } from 'rxjs/operators'; import { AddProviderRequest } from '../action/collection.action'; import { MetadataProviderWizard } from '../model'; +import { MetadataConfiguration } from '../../configuration/model/metadata-configuration'; @Component({ selector: 'provider-wizard', @@ -33,7 +33,7 @@ export class ProviderWizardComponent implements OnDestroy { nextStep: WizardStep; previousStep: WizardStep; - summary$: Observable<{ definition: Wizard, schema: { [id: string]: any }, model: any }>; + summary$: Observable = this.store.select(fromProvider.getProviderConfiguration); provider: MetadataProvider; @@ -61,14 +61,6 @@ export class ProviderWizardComponent implements OnDestroy { this.store.dispatch(new SetDisabled(!valid)); }); - this.summary$ = combineLatest( - this.store.select(fromWizard.getWizardDefinition), - this.store.select(fromWizard.getParsedSchema), - this.store.select(fromProvider.getEntityChanges) - ).pipe( - map(([ definition, schema, model ]) => ({ definition, schema, model })) - ); - this.changes$.pipe(takeUntil(this.ngUnsubscribe)).subscribe(c => this.provider = c); this.store.dispatch(new SetDefinition(MetadataProviderWizard)); diff --git a/ui/src/app/metadata/provider/provider.module.ts b/ui/src/app/metadata/provider/provider.module.ts index 99e033e74..a8580f23e 100644 --- a/ui/src/app/metadata/provider/provider.module.ts +++ b/ui/src/app/metadata/provider/provider.module.ts @@ -27,6 +27,7 @@ import { I18nModule } from '../../i18n/i18n.module'; import { DomainModule } from '../domain/domain.module'; import { MetadataProviderPageComponent } from './provider.component'; import { FilterModule } from '../filter/filter.module'; +import { MetadataConfigurationModule } from '../configuration/configuration.module'; @NgModule({ declarations: [ @@ -55,7 +56,8 @@ import { FilterModule } from '../filter/filter.module'; NgbModalModule, I18nModule, DomainModule, - FilterModule + FilterModule, + MetadataConfigurationModule ], exports: [] }) diff --git a/ui/src/app/metadata/provider/reducer/index.ts b/ui/src/app/metadata/provider/reducer/index.ts index 8005d63e9..ce8a2813e 100644 --- a/ui/src/app/metadata/provider/reducer/index.ts +++ b/ui/src/app/metadata/provider/reducer/index.ts @@ -8,6 +8,7 @@ import * as utils from '../../domain/domain.util'; import * as fromWizard from '../../../wizard/reducer'; import { MetadataProvider } from '../../domain/model'; +import { getConfigurationSectionsFn } from '../../configuration/reducer/utilities'; export interface ProviderState { editor: fromEditor.EditorState; @@ -79,3 +80,12 @@ export const getOrderedProviders = createSelector(getAllProviders, getProviderOr export const getOrderedProvidersInSearch = createSelector(getAllProviders, getProviderOrder, utils.mergeOrderFn); export const getFilteredProviderXmlIds = createSelector(getProviderXmlIds, getSelectedProvider, getFilteredListFn('xmlId')); + +export const getProviderModelList = createSelector(getEntityChanges, (model) => [model]); + +export const getProviderConfiguration = createSelector( + getProviderModelList, + fromWizard.getWizardDefinition, + fromWizard.getProcessedSchema, + getConfigurationSectionsFn +); From 6b94295ff37c0368dc1e63a2ac5613b40737e82e Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Thu, 3 Oct 2019 10:27:50 -0700 Subject: [PATCH 052/211] SHIBUI-1408 Updates for metadata source comparison. --- .../integration/resources/SHIBUI-1407-1.side | 70 +++++-------------- 1 file changed, 16 insertions(+), 54 deletions(-) diff --git a/backend/src/integration/resources/SHIBUI-1407-1.side b/backend/src/integration/resources/SHIBUI-1407-1.side index 5960f7fc1..6bbe287cf 100644 --- a/backend/src/integration/resources/SHIBUI-1407-1.side +++ b/backend/src/integration/resources/SHIBUI-1407-1.side @@ -1775,10 +1775,11 @@ "id": "3baa7bd3-55c0-4d10-8aa3-c0daa63ec4d4", "comment": "", "command": "assertText", - "target": "css=.px-3 > summary-property:nth-child(2) > .mb-3 > .d-block:nth-child(2)", + "target": "css=.d-block > primitive-property:nth-child(1) .text-truncate", "targets": [ - ["css=.px-3 > summary-property:nth-child(2) > .mb-3 > .d-block:nth-child(2)", "css:finder"], - ["xpath=//summary-property/div/span", "xpath:position"], + ["css=.d-block > primitive-property:nth-child(1) .text-truncate", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section/div/div[2]/object-property/primitive-property/div/div/span[2]", "xpath:idRelative"], + ["xpath=//div/span[2]", "xpath:position"], ["xpath=//span[contains(.,'test-1234')]", "xpath:innerText"] ], "value": "test-1234" @@ -1786,32 +1787,33 @@ "id": "0d355ff0-0449-49a7-ae75-14d7c405b97c", "comment": "", "command": "assertText", - "target": "css=.px-3:nth-child(2) > summary-property:nth-child(2) tr:nth-child(2) > td:nth-child(1)", + "target": "css=.mb-4:nth-child(7) .py-2:nth-child(3) > .d-flex:nth-child(1) > .text-truncate", "targets": [ - ["css=.px-3:nth-child(2) > summary-property:nth-child(2) tr:nth-child(2) > td:nth-child(1)", "css:finder"], - ["xpath=//div[2]/section[2]/summary-property/div/table/tbody/tr[2]/td", "xpath:position"], - ["xpath=//td[contains(.,'http://test.org/assert2')]", "xpath:innerText"] + ["css=.mb-4:nth-child(7) .py-2:nth-child(3) > .d-flex:nth-child(1) > .text-truncate", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section[7]/div/div[2]/object-property/array-property/div/div[3]/div/div[2]", "xpath:idRelative"], + ["xpath=//section[7]/div/div[2]/object-property/array-property/div/div[3]/div/div[2]", "xpath:position"] ], "value": "http://test.org/assert2" }, { "id": "e53030b6-f344-4361-981d-b8303a721c5d", "comment": "", "command": "assertText", - "target": "css=summary-property:nth-child(2) > .mb-3 > .list-unstyled > li:nth-child(5)", + "target": "css=array-property:nth-child(8) .border-0", "targets": [ - ["css=summary-property:nth-child(2) > .mb-3 > .list-unstyled > li:nth-child(5)", "css:finder"], - ["xpath=//li[5]", "xpath:position"], - ["xpath=//li[contains(.,'somethingElse')]", "xpath:innerText"] + ["css=array-property:nth-child(8) .border-0", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section[8]/div/div[2]/object-property/object-property/array-property/div/ul/li[5]", "xpath:idRelative"], + ["xpath=//section[8]/div/div[2]/object-property/object-property/array-property/div/ul/li[5]", "xpath:position"] ], "value": "somethingElse" }, { "id": "18636780-2feb-458f-97be-cf4a625b22e1", "comment": "", "command": "assertText", - "target": "css=summary-property:nth-child(10) .d-block:nth-child(2)", + "target": "css=.d-flex:nth-child(2) > .py-2 > span", "targets": [ - ["css=summary-property:nth-child(10) .d-block:nth-child(2)", "css:finder"], - ["xpath=//summary-property[10]/div/span", "xpath:position"] + ["css=.d-flex:nth-child(2) > .py-2 > span", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section[9]/div/div[2]/object-property/array-property/div/div[2]/div/span", "xpath:idRelative"], + ["xpath=//array-property/div/div[2]/div/span", "xpath:position"] ], "value": "true" }, { @@ -1871,18 +1873,6 @@ ["xpath=//td[contains(.,'root')]", "xpath:innerText"] ], "value": "admin" - }, { - "id": "87281e0a-322f-4d3a-9703-3e6966f26759", - "comment": "", - "command": "click", - "target": "id=search", - "targets": [ - ["id=search", "id"], - ["css=#search", "css:finder"], - ["xpath=//input[@id='search']", "xpath:attributes"], - ["xpath=//input", "xpath:position"] - ], - "value": "" }, { "id": "fbcf1587-cb27-4deb-80c6-78b4d4aa2478", "comment": "", @@ -2438,34 +2428,6 @@ "target": "isPresent", "targets": [], "value": "true" - }, { - "id": "1d80e2ba-e14d-460e-b575-0314025bcf42", - "comment": "", - "command": "assertText", - "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[2]/div/div[2]/div", - "targets": [], - "value": "No Changes" - }, { - "id": "4dc0b20f-380a-43a0-b79a-8ba7b7a24ecd", - "comment": "", - "command": "storeAttribute", - "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[2]/div/div[2]/div@class", - "targets": [], - "value": "classes" - }, { - "id": "a604f1d3-af29-4800-aded-5cd70c4cd81e", - "comment": "", - "command": "executeScript", - "target": "return ${classes}.includes('bg-diff')", - "targets": [], - "value": "isPresent" - }, { - "id": "6ba6e7e2-9037-4260-8131-5fb98774b602", - "comment": "", - "command": "assert", - "target": "isPresent", - "targets": [], - "value": "false" }] }], "suites": [{ From 7b4c9e19259e4e1186f422671e82fd6ecd08f7ec Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Mon, 7 Oct 2019 12:45:22 -0700 Subject: [PATCH 053/211] SHIBUI-1364 Test fixes WIP. --- .../admin/ui/SeleniumSIDETest.groovy | 7 +- .../integration/resources/SHIBUI-1364-2.side | 7 + .../integration/resources/SHIBUI-1364-4.side | 281 +++++++++++++++++- 3 files changed, 290 insertions(+), 5 deletions(-) diff --git a/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy b/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy index 6e2e2332a..5ec9d8a67 100644 --- a/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy +++ b/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy @@ -106,11 +106,10 @@ class SeleniumSIDETest extends Specification { // 'SHIBUI-1391: Regex Validation' | '/SHIBUI-1391.side' // 'SHIBUI-1407: Metadata source comparison highlights' | '/SHIBUI-1407-1.side' // 'SHIBUI-1407: Metadata provider comparison highlights' | '/SHIBUI-1407-2.side' -// 'SHIBUI-1364: Compare FBHTTPMP with filters' | '/SHIBUI-1364-1.side' -// 'SHIBUI-1364: Compare FSMP with filters' | '/SHIBUI-1364-2.side' -// 'SHIBUI-1364: Compare LDMP with filters' | '/SHIBUI-1364-3.side' + 'SHIBUI-1364: Compare FBHTTPMP with filters' | '/SHIBUI-1364-1.side' + 'SHIBUI-1364: Compare FSMP with filters' | '/SHIBUI-1364-2.side' + 'SHIBUI-1364: Compare LDMP with filters' | '/SHIBUI-1364-3.side' 'SHIBUI-1364: Compare DHTTPMP with filters' | '/SHIBUI-1364-4.side' - 'SHIBUI-1364: DELETE ME BEFORE PR' | '/false.side' } } diff --git a/backend/src/integration/resources/SHIBUI-1364-2.side b/backend/src/integration/resources/SHIBUI-1364-2.side index 19ec9bb9f..5da65f6ef 100644 --- a/backend/src/integration/resources/SHIBUI-1364-2.side +++ b/backend/src/integration/resources/SHIBUI-1364-2.side @@ -960,6 +960,13 @@ ["xpath=//a[contains(.,'Filesystem Metadata Provider V2')]", "xpath:innerText"] ], "value": "" + }, { + "id": "038f43a0-5870-4103-bb2e-97928dcc1afb", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" }, { "id": "a5885119-3102-4d0a-a0ea-d5517a94c6d8", "comment": "", diff --git a/backend/src/integration/resources/SHIBUI-1364-4.side b/backend/src/integration/resources/SHIBUI-1364-4.side index f7848dc5d..8cfaf83c4 100644 --- a/backend/src/integration/resources/SHIBUI-1364-4.side +++ b/backend/src/integration/resources/SHIBUI-1364-4.side @@ -1172,7 +1172,7 @@ "id": "8c2f44ff-29f5-49b0-94ee-6e79e2fe871b", "comment": "", "command": "click", - "target": "linkText=Dynamic Attributes", + "target": "css=.nav > .nav-link:nth-child(2)", "targets": [ ["linkText=Dynamic Attributes", "linkText"], ["css=.nav > .nav-link:nth-child(2)", "css:finder"], @@ -1278,6 +1278,285 @@ ["xpath=//translate-i18n[contains(.,'Compare Selected')]", "xpath:innerText"] ], "value": "" + }, { + "id": "b69eee8b-5446-406a-b200-d315cd1076ac", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "678221bc-06e0-4aa3-884f-e56d8418f1b9", + "comment": "", + "command": "assertText", + "target": "css=.bg-diff > .d-block:nth-child(2)", + "targets": [ + ["css=.bg-diff > .d-block:nth-child(2)", "css:finder"], + ["xpath=//div/span[2]", "xpath:position"] + ], + "value": "Dynamic Http Metadata Provider V2" + }, { + "id": "06f4a490-ba9f-43e6-be58-9009f931efed", + "comment": "", + "command": "assertText", + "target": "css=.bg-diff > .d-block:nth-child(3)", + "targets": [ + ["css=.bg-diff > .d-block:nth-child(3)", "css:finder"], + ["xpath=//span[3]", "xpath:position"] + ], + "value": "Dynamic Http Metadata Provider" + }, { + "id": "010da979-20a9-419f-89ff-d897f11e6ccb", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1) > translate-i18n", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c6460bfb-987c-46e5-bfb1-dad5392a2029", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) a", + "targets": [ + ["linkText=Oct 03, 2019 10:37:01 (Current)", "linkText"], + ["css=tr:nth-child(1) a", "css:finder"], + ["xpath=//a[contains(@href, '/metadata/provider/28ab5bc2-c16d-4460-8e62-18b788b40b8d/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Oct 03, 2019 10:37:01 (Current)')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "f4d519b0-c4f5-4421-a7d2-c745de1c695f", + "comment": "", + "command": "click", + "target": "css=.btn:nth-child(2) > translate-i18n", + "targets": [ + ["css=.btn:nth-child(2) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/button/translate-i18n", "xpath:idRelative"], + ["xpath=//div/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Filters')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "53fcbf86-d8f4-4366-b9ea-1a01dd89ac08", + "comment": "", + "command": "click", + "target": "css=.list-group-item:nth-child(1) > filter-configuration-list-item > .d-flex > .btn", + "targets": [ + ["css=.list-group-item:nth-child(1) > filter-configuration-list-item > .d-flex > .btn", "css:finder"], + ["xpath=//div[@id='filters']/filter-configuration-list/ul/li/filter-configuration-list-item/div/button", "xpath:idRelative"], + ["xpath=//filter-configuration-list-item/div/button", "xpath:position"], + ["xpath=//button[contains(.,'Entity Attributes Filter')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "65b8ceb0-7589-465c-be12-123bd78de9ea", + "comment": "", + "command": "click", + "target": "css=.justify-content-between > .btn:nth-child(1) > translate-i18n", + "targets": [ + ["css=.justify-content-between > .btn:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='filters']/filter-configuration-list/ul/li/filter-configuration-list-item/div[2]/div/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div[2]/div/div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Edit')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "74e14851-7254-4d18-8a33-e81af5b0b08f", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "4600a21d-e332-4d99-8903-691a6126722f", + "comment": "", + "command": "type", + "target": "id=/name", + "targets": [ + ["id=/name", "id"], + ["name=field118", "name"], + ["css=#\\/name", "css:finder"], + ["xpath=//input[@id='/name']", "xpath:attributes"], + ["xpath=//custom-string/div/input", "xpath:position"] + ], + "value": "Entity Attributes Filter V2" + }, { + "id": "7b064f9b-5820-43cf-aca4-b5f8df846200", + "comment": "", + "command": "click", + "target": "css=.btn-primary > translate-i18n", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//div[2]/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Save')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "159089ea-e8b4-4f68-b2b1-5f99926be3a5", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "2e2a837d-0904-40bc-bef8-92d26660e04f", + "comment": "", + "command": "click", + "target": "css=.nav-item translate-i18n", + "targets": [ + ["css=.nav-item translate-i18n", "css:finder"], + ["xpath=//div[@id='navbar']/ul/li[2]/a/translate-i18n", "xpath:idRelative"], + ["xpath=//a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Dashboard')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "e8341415-d801-4e73-a8fc-3e89dcea974f", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "e4a0c0aa-fba0-424c-8fe3-d146fa6b042b", + "comment": "", + "command": "click", + "target": "linkText=Metadata Providers", + "targets": [ + ["linkText=Metadata Providers", "linkText"], + ["css=.nav > .nav-item:nth-child(2) > .nav-link", "css:finder"], + ["xpath=//a[contains(text(),'Metadata Providers')]", "xpath:link"], + ["xpath=//a[contains(@href, '/dashboard/metadata/manager/providers')]", "xpath:href"], + ["xpath=//dashboard-page/div/ul/li[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Metadata Providers')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "05e127fb-ed67-404f-9a81-9285df8f8228", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "99e05dae-06fb-4552-9250-8566465ec527", + "comment": "", + "command": "click", + "target": "linkText=Dynamic Http Metadata Provider V2", + "targets": [ + ["linkText=Dynamic Http Metadata Provider V2", "linkText"], + ["css=td > a", "css:finder"], + ["xpath=//a[contains(text(),'Dynamic Http Metadata Provider V2')]", "xpath:link"], + ["xpath=//a[contains(@href, '/metadata/provider/28ab5bc2-c16d-4460-8e62-18b788b40b8d/configuration/options')]", "xpath:href"], + ["xpath=//td[2]/a", "xpath:position"], + ["xpath=//a[contains(.,'Dynamic Http Metadata Provider V2')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "43a67b75-0971-49ce-b457-0c0424a5a2aa", + "comment": "", + "command": "click", + "target": "css=.btn-link:nth-child(1) > translate-i18n", + "targets": [ + ["css=.btn-link:nth-child(1) > translate-i18n", "css:finder"], + ["xpath=//div[@id='navigation']/div/a/translate-i18n", "xpath:idRelative"], + ["xpath=//div/a/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Version History')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "d0a80d37-3120-4784-95aa-f74c22d5a6cc", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "7618b70c-e0bd-4f84-9012-e152ec14b8d0", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(1) .custom-control-label", + "targets": [ + ["css=tr:nth-child(1) .custom-control-label", "css:finder"], + ["xpath=//label", "xpath:position"], + ["xpath=//label[contains(.,'Check to select')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "cfbfbea3-80b5-442b-8c78-efbe54003145", + "comment": "", + "command": "click", + "target": "css=tr:nth-child(2) .custom-control-label", + "targets": [ + ["css=tr:nth-child(2) .custom-control-label", "css:finder"], + ["xpath=//tr[2]/td/div/label", "xpath:position"] + ], + "value": "" + }, { + "id": "e0604fb8-e01c-4c3b-b8ff-35c215c8511c", + "comment": "", + "command": "click", + "target": "css=.btn-primary", + "targets": [ + ["css=.btn-primary", "css:finder"], + ["xpath=//history-list/button", "xpath:position"], + ["xpath=//button[contains(.,'Compare Selected(2)')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "751db2ce-ec90-4765-a13d-3aa7841d014d", + "comment": "", + "command": "pause", + "target": "2000", + "targets": [], + "value": "" + }, { + "id": "359620ef-2e60-425e-9513-a303075b3006", + "comment": "", + "command": "click", + "target": "css=.d-flex:nth-child(1) > .border-primary:nth-child(2) .fa", + "targets": [ + ["css=.d-flex:nth-child(1) > .border-primary:nth-child(2) .fa", "css:finder"], + ["xpath=//div[2]/div/button/i", "xpath:position"] + ], + "value": "" + }, { + "id": "e83dc2da-ad95-4e50-b969-57721eb8f1dc", + "comment": "", + "command": "click", + "target": "css=.btn-primary > translate-i18n", + "targets": [ + ["css=.btn-primary > translate-i18n", "css:finder"], + ["xpath=//div[3]/button/translate-i18n", "xpath:position"], + ["xpath=//translate-i18n[contains(.,'Compare Selected')]", "xpath:innerText"] + ], + "value": "" + }, { + "id": "c2102a31-6e18-4d6c-8146-e23459403b65", + "comment": "", + "command": "assertText", + "target": "css=.bg-diff > .d-block:nth-child(2)", + "targets": [ + ["css=.bg-diff > .d-block:nth-child(2)", "css:finder"], + ["xpath=//section[2]/div/div[2]/object-property/primitive-property/div/div/span[2]", "xpath:position"], + ["xpath=//span[contains(.,'Entity Attributes Filter V2')]", "xpath:innerText"] + ], + "value": "Entity Attributes Filter V2" + }, { + "id": "cac6c125-c81b-40af-ae21-2b717df9511e", + "comment": "", + "command": "assertText", + "target": "css=.bg-diff > .d-block:nth-child(3)", + "targets": [ + ["css=.bg-diff > .d-block:nth-child(3)", "css:finder"], + ["xpath=//section[2]/div/div[2]/object-property/primitive-property/div/div/span[3]", "xpath:position"] + ], + "value": "Entity Attributes Filter" }] }], "suites": [{ From 732a67504133b56592e55168a5982b5df634bcab Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Mon, 7 Oct 2019 13:32:04 -0700 Subject: [PATCH 054/211] SHIBUI-1408 Fixes for 1407/1408 tests. --- .../admin/ui/SeleniumSIDETest.groovy | 17 ++++---- .../integration/resources/SHIBUI-1407-1.side | 2 +- .../integration/resources/SHIBUI-1407-2.side | 42 ++++--------------- 3 files changed, 18 insertions(+), 43 deletions(-) diff --git a/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy b/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy index ea1505cee..f744aecae 100644 --- a/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy +++ b/backend/src/integration/groovy/edu/internet2/tier/shibboleth/admin/ui/SeleniumSIDETest.groovy @@ -85,24 +85,25 @@ class SeleniumSIDETest extends Specification { assert result.level.exitCode == 0 + // TODO: Uncomment the below commented tests once they've been updated to use the new configuration screen where: name | file - 'SHIBUI-1281: Metadata Source Dashboard' | '/SHIBUI-1281.side' - 'SHIBUI-1311: Metadata Provider Dashboard' | '/SHIBUI-1311.side' +// 'SHIBUI-1281: Metadata Source Dashboard' | '/SHIBUI-1281.side' +// 'SHIBUI-1311: Metadata Provider Dashboard' | '/SHIBUI-1311.side' 'SHIBUI-950: Metadata Source from XML w/ digest' | '/SHIBUI-950.side' 'SHIBUI-1352: Create LocalDynamic provider' | '/SHIBUI-1352-1.side' 'SHIBUI-1352: Create FileSystem provider' | '/SHIBUI-1352-2.side' - 'SHIBUI-1333: Verify metadata source configuration' | '/SHIBUI-1333.side' - 'SHIBUI-1334: Verify metadata source versioning' | '/SHIBUI-1334-1.side' - 'SHIBUI-1334: Verify metadata provider versioning' | '/SHIBUI-1334-2.side' +// 'SHIBUI-1333: Verify metadata source configuration' | '/SHIBUI-1333.side' +// 'SHIBUI-1334: Verify metadata source versioning' | '/SHIBUI-1334-1.side' +// 'SHIBUI-1334: Verify metadata provider versioning' | '/SHIBUI-1334-2.side' 'SHIBUI-1335: Verify File Backed HTTP Metadata Provider Filters' | '/SHIBUI-1335-1.side' 'SHIBUI-1335: Verify Filesystem Metadata Provider Filters' | '/SHIBUI-1335-2.side' 'SHIBUI-1335: Verify Local Dynamic Metadata Provider Filters' | '/SHIBUI-1335-3.side' 'SHIBUI-1335: Verify Dynamic HTTP Metadata Provider Filters' | '/SHIBUI-1335-4.side' 'SHIBUI-1392: Verify provider with script filter is persistable' | '/SHIBUI-1392.side' - 'SHIBUI-1361: Verify dates display in proper format' | '/SHIBUI-1361.side' - 'SHIBUI-1385: Restore a metadata source version' | '/SHIBUI-1385-1.side' - 'SHIBUI-1385: Restore a metadata provider version' | '/SHIBUI-1385-2.side' +// 'SHIBUI-1361: Verify dates display in proper format' | '/SHIBUI-1361.side' +// 'SHIBUI-1385: Restore a metadata source version' | '/SHIBUI-1385-1.side' +// 'SHIBUI-1385: Restore a metadata provider version' | '/SHIBUI-1385-2.side' 'SHIBUI-1391: Regex Validation' | '/SHIBUI-1391.side' 'SHIBUI-1407: Metadata source comparison highlights' | '/SHIBUI-1407-1.side' 'SHIBUI-1407: Metadata provider comparison highlights' | '/SHIBUI-1407-2.side' diff --git a/backend/src/integration/resources/SHIBUI-1407-1.side b/backend/src/integration/resources/SHIBUI-1407-1.side index 6bbe287cf..be28bbb23 100644 --- a/backend/src/integration/resources/SHIBUI-1407-1.side +++ b/backend/src/integration/resources/SHIBUI-1407-1.side @@ -1815,7 +1815,7 @@ ["xpath=//metadata-configuration[@id='configuration']/div/section[9]/div/div[2]/object-property/array-property/div/div[2]/div/span", "xpath:idRelative"], ["xpath=//array-property/div/div[2]/div/span", "xpath:position"] ], - "value": "true" + "value": "True" }, { "id": "1406d7e4-907d-4359-8de8-a40206f0993e", "comment": "", diff --git a/backend/src/integration/resources/SHIBUI-1407-2.side b/backend/src/integration/resources/SHIBUI-1407-2.side index ccab1411b..238e73c0a 100644 --- a/backend/src/integration/resources/SHIBUI-1407-2.side +++ b/backend/src/integration/resources/SHIBUI-1407-2.side @@ -538,10 +538,11 @@ "id": "52f5680c-c63d-411e-8332-52901f12ea3b", "comment": "", "command": "assertText", - "target": "css=.px-3:nth-child(1) > summary-property:nth-child(2) > .mb-3 > .d-block:nth-child(2)", + "target": "css=.mb-4:nth-child(1) primitive-property:nth-child(1) .d-block:nth-child(2)", "targets": [ - ["css=.px-3:nth-child(1) > summary-property:nth-child(2) > .mb-3 > .d-block:nth-child(2)", "css:finder"], - ["xpath=//summary-property/div/span", "xpath:position"], + ["css=.mb-4:nth-child(1) primitive-property:nth-child(1) .d-block:nth-child(2)", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section/div/div[2]/object-property/primitive-property/div/div/span[2]", "xpath:idRelative"], + ["xpath=//div/span[2]", "xpath:position"], ["xpath=//span[contains(.,'Test Metadata Provider')]", "xpath:innerText"] ], "value": "Test Metadata Provider" @@ -549,10 +550,11 @@ "id": "67ff44aa-1efd-4b13-a0e9-3648a09911dd", "comment": "", "command": "assertText", - "target": "css=.px-3:nth-child(2) > summary-property:nth-child(2) > .mb-3 > .d-block:nth-child(2)", + "target": "css=.mb-4:nth-child(2) primitive-property:nth-child(1) .d-block:nth-child(2)", "targets": [ - ["css=.px-3:nth-child(2) > summary-property:nth-child(2) > .mb-3 > .d-block:nth-child(2)", "css:finder"], - ["xpath=//section[2]/summary-property/div/span", "xpath:position"], + ["css=.mb-4:nth-child(2) primitive-property:nth-child(1) .d-block:nth-child(2)", "css:finder"], + ["xpath=//metadata-configuration[@id='configuration']/div/section[2]/div/div[2]/object-property/primitive-property/div/div/span[2]", "xpath:idRelative"], + ["xpath=//section[2]/div/div[2]/object-property/primitive-property/div/div/span[2]", "xpath:position"], ["xpath=//span[contains(.,'123')]", "xpath:innerText"] ], "value": "123" @@ -916,34 +918,6 @@ "target": "isDiff", "targets": [], "value": "true" - }, { - "id": "f82d1c60-acc3-40b8-90eb-3c7435b2dd52", - "comment": "", - "command": "assertText", - "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[2]/div/div[2]", - "targets": [], - "value": "No Changes" - }, { - "id": "9cad9b4c-982d-474f-9a6a-cd3e559a50b9", - "comment": "", - "command": "storeAttribute", - "target": "xpath=//metadata-comparison/div/metadata-configuration/div/section[2]/div/div[2]@class", - "targets": [], - "value": "classes" - }, { - "id": "6eb4e560-76f6-490f-a3b4-a5333962f2c6", - "comment": "", - "command": "executeScript", - "target": "return ${classes}.includes('bg-diff')", - "targets": [], - "value": "isDiff" - }, { - "id": "a10d2948-5e23-41ba-8c3d-716ac959c108", - "comment": "", - "command": "assert", - "target": "isDiff", - "targets": [], - "value": "false" }] }], "suites": [{ From 3a4542b89070d01042785e60fb0b218d8499b755 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Tue, 8 Oct 2019 07:11:17 -0700 Subject: [PATCH 055/211] SHIBUI-1503 Updated admin page with new layout --- .../component/enable-metadata.component.html | 9 +- .../component/enable-metadata.component.ts | 34 ++---- .../component/entity-item.component.spec.ts | 30 ----- .../component/entity-item.component.ts | 23 ---- .../component/provider-item.component.html | 87 --------------- .../component/provider-item.component.scss | 44 -------- .../component/provider-item.component.spec.ts | 73 ------------- .../component/provider-item.component.ts | 28 ----- .../component/resolver-item.component.html | 103 ------------------ .../component/resolver-item.component.scss | 19 ---- .../component/resolver-item.component.spec.ts | 38 ------- .../component/resolver-item.component.ts | 15 --- .../component/resolvers-list.component.html | 55 ++++++++++ .../resolvers-list.component.spec.ts | 0 .../component/resolvers-list.component.ts | 18 +++ ...dashboard-providers-list.component.spec.ts | 2 - .../dashboard-resolvers-list.component.html | 53 +-------- ...dashboard-resolvers-list.component.spec.ts | 8 +- .../dashboard-resolvers-list.component.ts | 2 +- ui/src/app/metadata/manager/manager.module.ts | 14 +-- ui/src/testing/mock-module.stub.ts | 15 +++ .../testing/resolvers-list.component.stub.ts | 18 +++ 22 files changed, 138 insertions(+), 550 deletions(-) delete mode 100644 ui/src/app/metadata/manager/component/entity-item.component.spec.ts delete mode 100644 ui/src/app/metadata/manager/component/entity-item.component.ts delete mode 100644 ui/src/app/metadata/manager/component/provider-item.component.html delete mode 100644 ui/src/app/metadata/manager/component/provider-item.component.scss delete mode 100644 ui/src/app/metadata/manager/component/provider-item.component.spec.ts delete mode 100644 ui/src/app/metadata/manager/component/provider-item.component.ts delete mode 100644 ui/src/app/metadata/manager/component/resolver-item.component.html delete mode 100644 ui/src/app/metadata/manager/component/resolver-item.component.scss delete mode 100644 ui/src/app/metadata/manager/component/resolver-item.component.spec.ts delete mode 100644 ui/src/app/metadata/manager/component/resolver-item.component.ts create mode 100644 ui/src/app/metadata/manager/component/resolvers-list.component.html create mode 100644 ui/src/app/metadata/manager/component/resolvers-list.component.spec.ts create mode 100644 ui/src/app/metadata/manager/component/resolvers-list.component.ts create mode 100644 ui/src/testing/mock-module.stub.ts create mode 100644 ui/src/testing/resolvers-list.component.stub.ts diff --git a/ui/src/app/admin/component/enable-metadata.component.html b/ui/src/app/admin/component/enable-metadata.component.html index 01465184f..7d3558e09 100644 --- a/ui/src/app/admin/component/enable-metadata.component.html +++ b/ui/src/app/admin/component/enable-metadata.component.html @@ -1,4 +1,9 @@ -