This is an automated email from the ASF dual-hosted git repository. zehnder pushed a commit to branch STREAMPIPES-483 in repository https://gitbox.apache.org/repos/asf/incubator-streampipes.git
commit 560fca8120a5498f7e31183a16a4a497054bb746 Author: Philipp Zehnder <[email protected]> AuthorDate: Mon Dec 13 08:04:59 2021 +0100 [STREAMPIPES-483] Provide E2E tests for preprocessing rules within the adapter --- ui/cypress/support/utils/AdapterUtils.ts | 10 +-- .../adapter/machineDataSimulator.smoke.spec.ts | 9 ++- ui/cypress/tests/adapter/schemaRules.smoke.ts | 76 ++++++++++++++++++++++ ui/package.json | 4 +- .../event-schema/event-schema.component.html | 11 +++- .../schema-editor-header.component.html | 17 +++-- .../edit-event-property-primitive.component.html | 8 ++- .../edit-event-property-primitive.component.ts | 10 ++- .../edit-event-property.component.html | 6 +- 9 files changed, 124 insertions(+), 27 deletions(-) diff --git a/ui/cypress/support/utils/AdapterUtils.ts b/ui/cypress/support/utils/AdapterUtils.ts index ec84372..7eaadff 100644 --- a/ui/cypress/support/utils/AdapterUtils.ts +++ b/ui/cypress/support/utils/AdapterUtils.ts @@ -107,12 +107,12 @@ export class AdapterUtils { cy.visit('#/connect'); } - private static selectAdapter(name) { + public static selectAdapter(name) { // Select adapter cy.get('#' + name).click(); } - private static configureAdapter(configs: UserInput[]) { + public static configureAdapter(configs: UserInput[]) { StaticPropertyUtils.input(configs); @@ -157,13 +157,13 @@ export class AdapterUtils { cy.get('#event-schema-next-button').parent().should('not.be.disabled'); } - private static finishEventSchemaConfiguration() { + public static finishEventSchemaConfiguration() { // Click next cy.dataCy('sp-connect-schema-editor', { timeout: 10000 }).should('be.visible'); cy.get('#event-schema-next-button').click(); } - private static startStreamAdapter(adapterInput: AdapterInput) { + public static startStreamAdapter(adapterInput: AdapterInput) { AdapterUtils.startAdapter(adapterInput, 'sp-connect-adapter-live-preview'); } @@ -171,7 +171,7 @@ export class AdapterUtils { AdapterUtils.startAdapter(adapterInput, 'sp-connect-adapter-set-success'); } - private static startAdapter(adapterInput: AdapterInput, successElement) { + public static startAdapter(adapterInput: AdapterInput, successElement) { // Set adapter name cy.dataCy('sp-adapter-name').type(adapterInput.adapterName); diff --git a/ui/cypress/tests/adapter/machineDataSimulator.smoke.spec.ts b/ui/cypress/tests/adapter/machineDataSimulator.smoke.spec.ts index bd70350..9353cc3 100644 --- a/ui/cypress/tests/adapter/machineDataSimulator.smoke.spec.ts +++ b/ui/cypress/tests/adapter/machineDataSimulator.smoke.spec.ts @@ -26,16 +26,15 @@ describe('Test Random Data Simulator Stream Adapter', () => { it('Perform Test', () => { const adapterInput = SpecificAdapterBuilder - .create('Machine_Data_Simulator') - .setName('Machine Data Simulator Test') - .addInput('input', 'wait-time-ms', '1000') - .build(); + .create('Machine_Data_Simulator') + .setName('Machine Data Simulator Test') + .addInput('input', 'wait-time-ms', '1000') + .build(); cy.visit('#/connect'); AdapterUtils.testSpecificStreamAdapter(adapterInput); AdapterUtils.deleteAdapter(); - }); }); diff --git a/ui/cypress/tests/adapter/schemaRules.smoke.ts b/ui/cypress/tests/adapter/schemaRules.smoke.ts new file mode 100644 index 0000000..a922e73 --- /dev/null +++ b/ui/cypress/tests/adapter/schemaRules.smoke.ts @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { AdapterUtils } from '../../support/utils/AdapterUtils'; +import { SpecificAdapterBuilder } from '../../support/builder/SpecificAdapterBuilder'; + +describe('Test Random Data Simulator Stream Adapter', () => { + beforeEach('Setup Test', () => { + cy.initStreamPipesTest(); + }); + + it('Perform Test', () => { + + const adapterConfiguration = SpecificAdapterBuilder + .create('Machine_Data_Simulator') + .setName('Machine Data Simulator Test') + .addInput('input', 'wait-time-ms', '1000') + .build(); + + + AdapterUtils.goToConnect(); + + AdapterUtils.selectAdapter(adapterConfiguration.adapterType); + + AdapterUtils.configureAdapter(adapterConfiguration.adapterConfiguration); + + // wait till schema is shown + + cy.dataCy('sp-connect-schema-editor', { timeout: 60000 }).should('be.visible'); + + // Add fixed property + + // Click add a static value to event + cy.dataCy('connect-add-static-property', { timeout: 10000 }).click(); + + // Edit new property + const propertyName = 'staticPropertyName'; + const propertyValue = 'id1'; + cy.dataCy('edit-key_0', { timeout: 10000 }).click(); + + cy.dataCy('connect-edit-field-runtime-name', { timeout: 10000 }) + .type('{backspace}{backspace}{backspace}{backspace}{backspace}' + propertyName); + cy.dataCy('connect-edit-field-static-value', { timeout: 10000 }).type(propertyValue); + + cy.dataCy('sp-save-edit-property').click(); + + // validate that static value is persisted + cy.dataCy('edit-' + propertyName, { timeout: 10000 }).click(); + cy.dataCy('connect-edit-field-static-value', { timeout: 10000 }).should('have.value', propertyValue); + cy.dataCy('sp-save-edit-property').click(); + + AdapterUtils.finishEventSchemaConfiguration(); + + AdapterUtils.startAdapter(adapterConfiguration, 'sp-connect-adapter-live-preview'); + + // Add timestamp + // Delete + // Change data type + }); + +}); diff --git a/ui/package.json b/ui/package.json index 640862b..1063438 100644 --- a/ui/package.json +++ b/ui/package.json @@ -111,8 +111,8 @@ "copy-webpack-plugin": "^5.1.2", "css-loader": "^0.28.11", "csv-string": "4.0.1", - "cypress": "^7.7.0", - "cypress-file-upload": "5.0.7", + "cypress": "^9.1.1", + "cypress-file-upload": "^5.0.8", "extract-text-webpack-plugin": "^3.0.2", "file-loader": "^1.1.6", "html-webpack-plugin": "^3.2.0", diff --git a/ui/src/app/connect/components/schema-editor/event-schema/event-schema.component.html b/ui/src/app/connect/components/schema-editor/event-schema/event-schema.component.html index d422367..3077edf 100644 --- a/ui/src/app/connect/components/schema-editor/event-schema/event-schema.component.html +++ b/ui/src/app/connect/components/schema-editor/event-schema/event-schema.component.html @@ -43,8 +43,15 @@ *ngIf="isError"> </sp-error-message> - <div *ngIf="!isError && !isLoading" fxLayout="column" fxLayoutAlign="space-evenly stretched" class="drag-drop-tree" data-cy="sp-connect-schema-editor"> - <tree-root #tree [nodes]="nodes" [options]="options" (updateData)="onUpdateData(tree)"> + <div *ngIf="!isError && !isLoading" + fxLayout="column" + fxLayoutAlign="space-evenly stretched" + class="drag-drop-tree" + data-cy="sp-connect-schema-editor"> + <tree-root #tree + [nodes]="nodes" + [options]="options" + (updateData)="onUpdateData(tree)"> <ng-template #treeNodeTemplate let-node let-index="index"> <event-property-row [node]="node" diff --git a/ui/src/app/connect/components/schema-editor/schema-editor-header/schema-editor-header.component.html b/ui/src/app/connect/components/schema-editor/schema-editor-header/schema-editor-header.component.html index bd19b4d..b3cae9a 100644 --- a/ui/src/app/connect/components/schema-editor/schema-editor-header/schema-editor-header.component.html +++ b/ui/src/app/connect/components/schema-editor/schema-editor-header/schema-editor-header.component.html @@ -19,18 +19,27 @@ <div fxLayout="row"> <div fxLayoutAlign="space-between center" class="add-schema" fxFlex="0 1 100%"> <div> - <button color="primary" mat-button (click)=addNestedProperty()> + <button color="primary" + mat-button + data-cy="connect-add-nested-property" + (click)=addNestedProperty()> <mat-icon matTooltip="Add a Nested Property">queue</mat-icon> </button> - <button color="primary" mat-button + <button color="primary" + mat-button + data-cy="connect-add-static-property" (click)="addStaticValueProperty()"> <mat-icon matTooltip="Add a static value to event">add</mat-icon> </button> - <button color="primary" mat-button + <button color="primary" + mat-button + data-cy="connect-add-timestamp-property" (click)=addTimestampProperty()> <mat-icon matTooltip="Add timestamp to event schema">access_time</mat-icon> </button> - <button color="primary" mat-button (click)=guessSchema()> + <button color="primary" + mat-button + (click)=guessSchema()> <mat-icon matTooltip="Refresh Schema">refresh</mat-icon> </button> <!-- <button color="primary" mat-button (click)=togglePreview()>--> diff --git a/ui/src/app/connect/dialog/edit-event-property/components/edit-event-property-primitive/edit-event-property-primitive.component.html b/ui/src/app/connect/dialog/edit-event-property/components/edit-event-property-primitive/edit-event-property-primitive.component.html index 533dc0d..def4039 100644 --- a/ui/src/app/connect/dialog/edit-event-property/components/edit-event-property-primitive/edit-event-property-primitive.component.html +++ b/ui/src/app/connect/dialog/edit-event-property/components/edit-event-property-primitive/edit-event-property-primitive.component.html @@ -37,9 +37,13 @@ <div fxLayout="row" fxLayoutAlign="start" *ngIf="addedByUser"> <mat-form-field class="doubleWidth"> - <input matInput placeholder="Static Value" name="static_value" id="static_value" + <input matInput + placeholder="Static Value" + name="static_value" + id="static_value" + data-cy="connect-edit-field-static-value" [(ngModel)]="cachedProperty.staticValue"> </mat-form-field> </div> -</div> \ No newline at end of file +</div> diff --git a/ui/src/app/connect/dialog/edit-event-property/components/edit-event-property-primitive/edit-event-property-primitive.component.ts b/ui/src/app/connect/dialog/edit-event-property/components/edit-event-property-primitive/edit-event-property-primitive.component.ts index d9388ae..7f50bb7 100644 --- a/ui/src/app/connect/dialog/edit-event-property/components/edit-event-property-primitive/edit-event-property-primitive.component.ts +++ b/ui/src/app/connect/dialog/edit-event-property/components/edit-event-property-primitive/edit-event-property-primitive.component.ts @@ -41,7 +41,9 @@ export class EditEventPropertyPrimitiveComponent implements OnInit { ngOnInit(): void { this.setShowUnitTransformation(); this.addedByUser = this.staticValueAddedByUser(); - this.cachedProperty.staticValue = ''; + if (!this.cachedProperty.staticValue) { + this.cachedProperty.staticValue = ''; + } } setShowUnitTransformation() { @@ -56,11 +58,7 @@ export class EditEventPropertyPrimitiveComponent implements OnInit { } staticValueAddedByUser() { - if (this.cachedProperty.elementId.startsWith('http://eventProperty.de/staticValue/')) { - return true; - } else { - return false; - } + return this.cachedProperty.elementId.startsWith('http://eventProperty.de/staticValue/'); } } diff --git a/ui/src/app/connect/dialog/edit-event-property/edit-event-property.component.html b/ui/src/app/connect/dialog/edit-event-property/edit-event-property.component.html index f7f278d..5168be5 100644 --- a/ui/src/app/connect/dialog/edit-event-property/edit-event-property.component.html +++ b/ui/src/app/connect/dialog/edit-event-property/edit-event-property.component.html @@ -27,7 +27,11 @@ </div> <div attr.id="input-runtime-name-{{cachedProperty.label}}" class="form-group" fxFlexAlign="center"> <mat-form-field class="example-full-width" color="accent"> - <input matInput placeholder="RuntimeName" name="runtimename" id="runtimename" + <input matInput + placeholder="RuntimeName" + name="runtimename" + id="runtimename" + data-cy="connect-edit-field-runtime-name" [(ngModel)]="cachedProperty.runtimeName"> </mat-form-field> </div>
