This is an automated email from the ASF dual-hosted git repository.
SvenO3 pushed a commit to branch
4491-create-e2e-tests-for-critical-adapter-and-pipeline-updates
in repository https://gitbox.apache.org/repos/asf/streampipes.git
The following commit(s) were added to
refs/heads/4491-create-e2e-tests-for-critical-adapter-and-pipeline-updates by
this push:
new 436cc16d2f Add pipeline tests
436cc16d2f is described below
commit 436cc16d2f37a27b406fc39e166158cd9c091eb7
Author: Sven Oehler <[email protected]>
AuthorDate: Wed May 20 17:39:35 2026 +0200
Add pipeline tests
---
.../pipeline/pipelineDataLakeSchemaUpdate.spec.ts | 177 +++++++++++++++++++++
1 file changed, 177 insertions(+)
diff --git a/ui/cypress/tests/pipeline/pipelineDataLakeSchemaUpdate.spec.ts
b/ui/cypress/tests/pipeline/pipelineDataLakeSchemaUpdate.spec.ts
new file mode 100644
index 0000000000..39333880eb
--- /dev/null
+++ b/ui/cypress/tests/pipeline/pipelineDataLakeSchemaUpdate.spec.ts
@@ -0,0 +1,177 @@
+/*
+ * 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 { PipelineUtils } from '../../support/utils/pipeline/PipelineUtils';
+import { PipelineBtns } from '../../support/utils/pipeline/PipelineBtns';
+import { ChartUtils } from '../../support/utils/chart/ChartUtils';
+import { ChartBtns } from '../../support/utils/chart/ChartBtns';
+import { PipelineBuilder } from '../../support/builder/PipelineBuilder';
+import { PipelineElementBuilder } from
'../../support/builder/PipelineElementBuilder';
+import { PipelineElementInput } from
'../../support/model/PipelineElementInput';
+import { CompactAdapterUtils } from
'../../support/utils/connect/CompactAdapterUtils';
+
+describe('Test pipeline updates with data lake schema changes', () => {
+ const dataStreamSelector = 'test';
+ const chartName = 'Chart Density';
+ const pipelineName = 'Pipeline Test';
+ const dataLakeMeasurement = 'demo';
+
+ beforeEach('Setup Test', () => {
+ cy.initStreamPipesTest();
+ });
+
+ it('Test pipeline update with a field datatype change', () => {
+ createAdapter();
+ addPipelineWithProcessor(
+ transformToBooleanProcessor('sensor_fault_flags'),
+ );
+
+ editPipelineProcessor();
+ PipelineBtns.mappingCheckbox('density').click();
+ PipelineBtns.saveElementConfigBtn().click();
+ PipelineBtns.settingsPipelineElementBtn().eq(1).click();
+ savePipelineElementAndStartUpdatePreflight();
+
+ PipelineBtns.pipelineEditWarning().contains(dataLakeMeasurement);
+ PipelineBtns.pipelineMeasurementEditWarning().contains(
+ 'density (http://www.w3.org/2001/XMLSchema#float ->
http://www.w3.org/2001/XMLSchema#boolean)',
+ );
+ PipelineBtns.updateAndMigratePipeline().should('be.disabled');
+ });
+
+ it('Test pipeline update with a chart field deletion', () => {
+ createAdapter();
+ addPipelineWithProcessor(
+ fieldMapperProcessor('sensorId', 'sensorIdHash'),
+ );
+ addTableChart(dataLakeMeasurement);
+
+ PipelineUtils.goToPipelines();
+ editPipelineProcessor();
+ PipelineBtns.mappingCheckbox('sensorId').click();
+ PipelineBtns.mappingCheckbox('density').click();
+ PipelineBtns.staticPropertyInput('fieldName')
+ .clear()
+ .type('densityHash')
+ .blur();
+ savePipelineElementAndStartUpdatePreflight();
+
+ PipelineBtns.pipelineEditWarning().contains(dataLakeMeasurement);
+ PipelineBtns.pipelineChartEditWarning().contains(chartName);
+ PipelineBtns.pipelineChartEditWarning().contains('density');
+ PipelineBtns.updateAndMigratePipeline().should('not.be.disabled');
+ PipelineBtns.updateAndMigratePipeline().click();
+
+ cy.dataCy('sp-pipeline-started-success', { timeout: 15000 }).should(
+ 'be.visible',
+ );
+ PipelineBtns.navigateToPipelineOverview().click();
+
+ ChartUtils.goToDatalake();
+ ChartBtns.chartSyncProblemIcon().should('be.visible');
+ });
+
+ it('Test pipeline update with an added field', () => {
+ createAdapter();
+ addPipelineWithProcessor(javaScriptEvalProcessor());
+
+ editPipelineProcessor();
+ PipelineBtns.outputAddField().click();
+ PipelineBtns.outputRuntimeName().last().type('pipeline_added');
+ PipelineBtns.outputRuntimeType()
+ .last()
+ .click()
+ .get('mat-option')
+ .contains('Float')
+ .click();
+ savePipelineElementAndStartUpdatePreflight();
+
+ PipelineBtns.pipelineEditWarning().should('not.exist');
+ cy.dataCy('sp-pipeline-started-success', { timeout: 15000 }).should(
+ 'be.visible',
+ );
+ });
+
+ function addPipelineWithProcessor(processingElement: PipelineElementInput)
{
+ const pipelineInput = PipelineBuilder.create(pipelineName)
+ .addSource(dataStreamSelector)
+ .addProcessingElement(processingElement)
+ .addSink(
+ PipelineElementBuilder.create('data_lake')
+ .addInput('input', 'db_measurement', dataLakeMeasurement)
+ .build(),
+ )
+ .build();
+
+ PipelineUtils.addPipeline(pipelineInput);
+ }
+
+ function transformToBooleanProcessor(fieldName: string) {
+ return PipelineElementBuilder.create('transform_to_boolean')
+ .addInput('checkbox', fieldName, '')
+ .build();
+ }
+
+ function fieldMapperProcessor(fieldName: string, newFieldName: string) {
+ return PipelineElementBuilder.create('field_mapper')
+ .addInput('checkbox', fieldName, '')
+ .addInput('input', 'fieldName', newFieldName)
+ .build();
+ }
+
+ function javaScriptEvalProcessor() {
+ const processor = PipelineElementBuilder.create('javascript_eval')
+ .addInput(
+ 'code-input',
+ 'jsFunction',
+ 'function process(event) {\n return event;\n}',
+ )
+ .build();
+ processor.output = {
+ type: 'append',
+ config: [],
+ };
+ return processor;
+ }
+
+ function editPipelineProcessor() {
+ PipelineUtils.editPipeline(pipelineName);
+ PipelineBtns.settingsPipelineElementBtn().first().click();
+ }
+
+ function savePipelineElementAndStartUpdatePreflight() {
+ PipelineBtns.saveElementConfigBtn().click();
+ PipelineBtns.savePipelineBtn().click();
+ PipelineBtns.navigateToOverviewCheckbox().children().click();
+ PipelineBtns.editorApplyBtn().click();
+ }
+
+ function addTableChart(measurementName: string) {
+ ChartUtils.addDataViewAndTableWidget(chartName, measurementName, true);
+ ChartUtils.saveDataViewConfiguration();
+ ChartUtils.checkAmount(1);
+ }
+
+ function createAdapter() {
+ const compactAdapter = CompactAdapterUtils.getMachineDataSimulator()
+ .withTimestampProperty('timestamp')
+ .setStart()
+ .build();
+ CompactAdapterUtils.storeCompactAdapter(compactAdapter);
+ }
+});