You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by ze...@apache.org on 2026/01/30 20:55:52 UTC
(streampipes) 02/02: fix(#4139): Add cypress test for upload sample
This is an automated email from the ASF dual-hosted git repository.
zehnder pushed a commit to branch 4139-allow-manual-upload-of-sample-event-for-adapter-schema-inference
in repository https://gitbox.apache.org/repos/asf/streampipes.git
commit 6148bfb30ce2deb3c48be857d8951d6cd49c469a
Author: Philipp Zehnder <te...@users.noreply.github.com>
AuthorDate: Fri Jan 30 21:55:31 2026 +0100
fix(#4139): Add cypress test for upload sample
---
ui/cypress/support/utils/connect/ConnectBtns.ts | 18 +++
ui/cypress/support/utils/connect/ConnectUtils.ts | 11 ++
ui/cypress/tests/connect/uploadSampleEvent.spec.ts | 131 +++++++++++++++++++++
.../adapter-configuration-state.service.ts | 3 +-
.../adapter-configuration.component.ts | 8 +-
.../upload-sample-event-dialog.component.html | 1 +
6 files changed, 168 insertions(+), 4 deletions(-)
diff --git a/ui/cypress/support/utils/connect/ConnectBtns.ts b/ui/cypress/support/utils/connect/ConnectBtns.ts
index 9caf3610e6..a036502496 100644
--- a/ui/cypress/support/utils/connect/ConnectBtns.ts
+++ b/ui/cypress/support/utils/connect/ConnectBtns.ts
@@ -272,6 +272,24 @@ export class ConnectBtns {
});
}
+ public static uploadSampleBtn() {
+ return cy.dataCy('connect-upload-sample-button', {
+ timeout: 10000,
+ });
+ }
+
+ public static uploadSampleDialogTextarea() {
+ return cy.dataCy('upload-sample-event-textarea', {
+ timeout: 10000,
+ });
+ }
+
+ public static uploadSampleDialogSubmitBtn() {
+ return cy.dataCy('upload-sample-event-submit', {
+ timeout: 10000,
+ });
+ }
+
public static configureFieldsEventPreviewResult() {
return cy.dataCy('configure-fields-event-preview-result', {
timeout: 10000,
diff --git a/ui/cypress/support/utils/connect/ConnectUtils.ts b/ui/cypress/support/utils/connect/ConnectUtils.ts
index 97f0e0635e..4e635d8758 100644
--- a/ui/cypress/support/utils/connect/ConnectUtils.ts
+++ b/ui/cypress/support/utils/connect/ConnectUtils.ts
@@ -409,6 +409,17 @@ export class ConnectUtils {
.type(script);
}
+ public static uploadSampleEvent(samplePayload: string) {
+ ConnectBtns.uploadSampleBtn().click();
+ ConnectBtns.uploadSampleDialogTextarea()
+ .should('be.visible')
+ .clear()
+ .type(samplePayload, { parseSpecialCharSequences: false });
+ ConnectBtns.uploadSampleDialogSubmitBtn()
+ .should('not.be.disabled')
+ .click();
+ }
+
public static addScriptAsScriptTemplate(
templateName: string,
script: string,
diff --git a/ui/cypress/tests/connect/uploadSampleEvent.spec.ts b/ui/cypress/tests/connect/uploadSampleEvent.spec.ts
new file mode 100644
index 0000000000..06ccb5c6cd
--- /dev/null
+++ b/ui/cypress/tests/connect/uploadSampleEvent.spec.ts
@@ -0,0 +1,131 @@
+/*
+ * 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 { AdapterBuilder } from '../../support/builder/AdapterBuilder';
+import { ConnectUtils } from '../../support/utils/connect/ConnectUtils';
+import { ConnectBtns } from '../../support/utils/connect/ConnectBtns';
+import { SharedBtns } from '../../support/utils/shared/SharedBtns';
+import { SharedUtils } from '../../support/utils/shared/SharedUtils';
+
+describe('Upload sample event during schema configuration', () => {
+ beforeEach('Setup Test', () => {
+ cy.initStreamPipesTest();
+
+ const adapterConfiguration =
+ buildMachineDataSimulator('Upload Sample Test');
+ setupAdapter(adapterConfiguration);
+ });
+
+ it('Uses uploaded sample and refreshes fields on warning', () => {
+ ConnectBtns.configureSchemaNextBtn().click();
+ ConnectUtils.eventSchemaWithFieldsShouldBeVisible();
+ ConnectBtns.configureFieldsBackBtn().click();
+
+ uploadSample();
+
+ ConnectBtns.configureSchemaEventPreviewOriginal().should(
+ 'contain.text',
+ '"uploadedSample": true',
+ );
+
+ ConnectBtns.configureSchemaNextBtn().click();
+ SharedUtils.confirmDialogVisible();
+ SharedBtns.confirmDialogConfirmBtn().click();
+
+ ConnectUtils.eventSchemaWithFieldsShouldBeVisible();
+ ConnectBtns.configureFieldsEventPreviewResult().should(
+ 'contain.text',
+ 'uploadedSample',
+ );
+ });
+
+ it('Uses uploaded sample with script enabled after fields roundtrip', () => {
+ ConnectBtns.scriptActiveToggle().click();
+
+ ConnectBtns.configureSchemaNextBtn().click();
+ ConnectUtils.eventSchemaWithFieldsShouldBeVisible();
+ ConnectBtns.configureFieldsBackBtn().click();
+
+ uploadSample();
+
+ ConnectBtns.configureSchemaEventPreviewOriginal().should(
+ 'contain.text',
+ 'uploadedSample',
+ );
+ ConnectBtns.configureSchemaEventPreviewResult().should(
+ 'contain.text',
+ 'uploadedSample',
+ );
+
+ ConnectBtns.configureSchemaNextBtn().click();
+ SharedUtils.confirmDialogVisible();
+ SharedBtns.confirmDialogConfirmBtn().click();
+
+ ConnectUtils.eventSchemaWithFieldsShouldBeVisible();
+ ConnectBtns.configureFieldsEventPreviewResult().should(
+ 'contain.text',
+ 'uploadedSample',
+ );
+ });
+
+ it('Uses uploaded sample with script enabled without fields roundtrip', () => {
+ ConnectBtns.scriptActiveToggle().click();
+
+ uploadSample();
+
+ ConnectBtns.configureSchemaEventPreviewOriginal().should(
+ 'contain.text',
+ 'uploadedSample',
+ );
+ ConnectBtns.configureSchemaEventPreviewResult().should(
+ 'contain.text',
+ 'uploadedSample',
+ );
+
+ ConnectBtns.configureSchemaNextBtn().click();
+
+ ConnectUtils.eventSchemaWithFieldsShouldBeVisible();
+ ConnectBtns.configureFieldsEventPreviewResult().should(
+ 'contain.text',
+ 'uploadedSample',
+ );
+ });
+
+ const buildMachineDataSimulator = (name: string) =>
+ AdapterBuilder.create('Machine_Data_Simulator')
+ .setName(name)
+ .setTimestampProperty('timestamp')
+ .addInput('input', 'wait-time-ms', '1000')
+ .build();
+
+ const setupAdapter = (adapterConfiguration: any) => {
+ ConnectUtils.goToConnect();
+ ConnectUtils.goToNewAdapterPage();
+ ConnectUtils.selectAdapter(adapterConfiguration.adapterType);
+ ConnectUtils.configureAdapter(adapterConfiguration);
+ ConnectBtns.configureSchemaEventPreviewOriginal().should('be.visible');
+ };
+
+ const uploadSample = () => {
+ const uploadedSample = JSON.stringify({
+ uploadedSample: true,
+ temperature: 42,
+ });
+ ConnectUtils.uploadSampleEvent(uploadedSample);
+ };
+});
diff --git a/ui/src/app/connect/components/adapter-configuration/adapter-configuration-state-service/adapter-configuration-state.service.ts b/ui/src/app/connect/components/adapter-configuration/adapter-configuration-state-service/adapter-configuration-state.service.ts
index b5fbc538f8..5468092725 100644
--- a/ui/src/app/connect/components/adapter-configuration/adapter-configuration-state-service/adapter-configuration-state.service.ts
+++ b/ui/src/app/connect/components/adapter-configuration/adapter-configuration-state-service/adapter-configuration-state.service.ts
@@ -454,8 +454,7 @@ export class AdapterConfigurationStateService {
isGettingSample: false,
adapterSettingsChanged: false,
adapterSettingsString: JSON.stringify(updatedAdapter.config),
- transformationConfigurationChanged:
- transformationConfigurationChanged,
+ transformationConfigurationChanged,
sampleFieldStatusInfos: null,
sampleError: null,
});
diff --git a/ui/src/app/connect/components/adapter-configuration/adapter-configuration.component.ts b/ui/src/app/connect/components/adapter-configuration/adapter-configuration.component.ts
index 075f488a69..268ef7303a 100644
--- a/ui/src/app/connect/components/adapter-configuration/adapter-configuration.component.ts
+++ b/ui/src/app/connect/components/adapter-configuration/adapter-configuration.component.ts
@@ -101,10 +101,14 @@ export class AdapterConfigurationComponent implements OnInit, OnDestroy {
}
nextConfigureSchema() {
+ const adapter =
+ this.stateService.state().adapterDescription ??
+ this.adapterDescription;
+
if (this.stateService.state().autoLoadSchema) {
- this.stateService.getEventSchema(this.adapterDescription);
+ this.stateService.getEventSchema(adapter);
} else {
- this.stateService.updateEventPreview(this.adapterDescription);
+ this.stateService.updateEventPreview(adapter);
}
if (this.stateService.state().transformationConfigurationChanged) {
diff --git a/ui/src/app/connect/dialog/upload-sample-event-dialog/upload-sample-event-dialog.component.html b/ui/src/app/connect/dialog/upload-sample-event-dialog/upload-sample-event-dialog.component.html
index 152420c11a..21a2a981e5 100644
--- a/ui/src/app/connect/dialog/upload-sample-event-dialog/upload-sample-event-dialog.component.html
+++ b/ui/src/app/connect/dialog/upload-sample-event-dialog/upload-sample-event-dialog.component.html
@@ -26,6 +26,7 @@
(ngModelChange)="samplePayload.set($event)"
class="code-input"
rows="12"
+ data-cy="upload-sample-event-textarea"
></textarea>
@if (isSampleInvalid()) {
<sp-alert-banner