This is an automated email from the ASF dual-hosted git repository.

riemer pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to refs/heads/dev by this push:
     new 2e0c14191 [hotfix] Fix e2e tests after adapter refactoring (#1655)
2e0c14191 is described below

commit 2e0c14191c3976f1d100978ed12e36604e38d61f
Author: Dominik Riemer <[email protected]>
AuthorDate: Mon Jun 5 15:00:44 2023 +0200

    [hotfix] Fix e2e tests after adapter refactoring (#1655)
---
 .../connect/adapter/parser/xml/XmlParser.java      |   2 +
 .../connect/adapter/parser/XmlParserTest.java      |  53 ++++++---
 ui/cypress/fixtures/connect/format/geoJson.json    |  23 ++--
 ui/cypress/support/builder/AdapterBuilder.ts       |   4 +-
 .../support/utils/ProcessingElementTestUtils.ts    |   8 +-
 ui/cypress/support/utils/StaticPropertyUtils.ts    |   2 +-
 ui/cypress/support/utils/connect/ConnectBtns.ts    |   8 ++
 ui/cypress/tests/adapter/formats/format.spec.ts    | 121 ++++++++++-----------
 .../tests/pipelineElement/SinglePipelineElement.ts |   2 +-
 9 files changed, 130 insertions(+), 93 deletions(-)

diff --git 
a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/xml/XmlParser.java
 
b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/xml/XmlParser.java
index 095481726..9013d6be7 100644
--- 
a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/xml/XmlParser.java
+++ 
b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/xml/XmlParser.java
@@ -106,6 +106,8 @@ public class XmlParser implements IParser {
         if (key.equals(tag)) {
           if (xml.get(tag) instanceof List) {
             return (List<Map<String, Object>>) xml.get(tag);
+          } else if (xml.get(tag) instanceof Map) {
+            return List.of((Map<String, Object>) xml.get(tag));
           } else {
             throw new ParseException("Could not parse %s with tag 
%s".formatted(xml, tag));
           }
diff --git 
a/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/XmlParserTest.java
 
b/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/XmlParserTest.java
index aa6d66425..b12e7ef32 100644
--- 
a/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/XmlParserTest.java
+++ 
b/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/XmlParserTest.java
@@ -20,6 +20,7 @@ package 
org.apache.streampipes.extensions.management.connect.adapter.parser;
 
 import org.apache.streampipes.extensions.api.connect.IParserEventHandler;
 import 
org.apache.streampipes.extensions.management.connect.adapter.parser.xml.XmlParser;
+import org.apache.streampipes.model.connect.guess.GuessSchema;
 import org.apache.streampipes.model.schema.PropertyScope;
 import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
 import org.apache.streampipes.sdk.builder.adapter.GuessSchemaBuilder;
@@ -48,24 +49,18 @@ public class XmlParserTest extends ParserTest {
                                + "</enclosing>"
                                + "</list>";
 
+  private final String sampleEventWithSingleObject = "<?xml version=\"1.0\" 
encoding=\"iso-8859-1\"?>"
+      + "<list>"
+      + "<enclosing>"
+      + "<k1>v1</k1><k2>1.0</k2>"
+      + "</enclosing>"
+      + "</list>";
+
   private final String tag = "enclosing";
 
   @Test
   public void getGuessSchema() {
-    var expected = GuessSchemaBuilder.create()
-        .property(PrimitivePropertyBuilder
-            .create(Datatypes.String, K1)
-            .description("")
-            .scope(PropertyScope.MEASUREMENT_PROPERTY)
-            .build())
-        .property(PrimitivePropertyBuilder
-            .create(Datatypes.Float, K2)
-            .scope(PropertyScope.MEASUREMENT_PROPERTY)
-            .description("")
-            .build())
-        .sample(K1, "v1")
-        .sample(K2, 1.0f)
-        .build();
+    var expected = getExpectedSchema();
 
     var parser = new XmlParser(tag);
 
@@ -76,6 +71,19 @@ public class XmlParserTest extends ParserTest {
     assertEquals(expected, result);
   }
 
+  @Test
+  public void getGuessSchemaWithSingleObjectInArray() {
+    var expected = getExpectedSchema();
+
+    var parser = new XmlParser(tag);
+
+    InputStream event = toStream(sampleEventWithSingleObject);
+
+    var result = parser.getGuessSchema(event);
+
+    assertEquals(expected, result);
+  }
+
   @Test
   public void parse() {
     var event = toStream(sampleEvent);
@@ -93,4 +101,21 @@ public class XmlParserTest extends ParserTest {
     expectedEvent.put(K2, 2.0f);
     verify(mockEventHandler, times(1)).handle(expectedEvent);
   }
+
+  private GuessSchema getExpectedSchema() {
+    return GuessSchemaBuilder.create()
+        .property(PrimitivePropertyBuilder
+            .create(Datatypes.String, K1)
+            .description("")
+            .scope(PropertyScope.MEASUREMENT_PROPERTY)
+            .build())
+        .property(PrimitivePropertyBuilder
+            .create(Datatypes.Float, K2)
+            .scope(PropertyScope.MEASUREMENT_PROPERTY)
+            .description("")
+            .build())
+        .sample(K1, "v1")
+        .sample(K2, 1.0f)
+        .build();
+  }
 }
diff --git a/ui/cypress/fixtures/connect/format/geoJson.json 
b/ui/cypress/fixtures/connect/format/geoJson.json
index 047e60497..97e202ba7 100644
--- a/ui/cypress/fixtures/connect/format/geoJson.json
+++ b/ui/cypress/fixtures/connect/format/geoJson.json
@@ -1,16 +1,11 @@
 {
-  "type": "FeatureCollection",
-  "features": [
-    {
-      "type": "Feature",
-      "geometry": {
-        "type": "Point",
-        "coordinates": [125.6, 10.1]
-      },
-      "properties": {
-        "timestamp": 1667904471000,
-        "v1": 4.1
-      }
-    }
-  ]
+  "type": "Feature",
+  "geometry": {
+    "type": "Point",
+    "coordinates": [125.6, 10.1]
+  },
+  "properties": {
+    "timestamp": 1667904471000,
+    "v1": 4.1
+  }
 }
diff --git a/ui/cypress/support/builder/AdapterBuilder.ts 
b/ui/cypress/support/builder/AdapterBuilder.ts
index d317079a5..c8c029c59 100644
--- a/ui/cypress/support/builder/AdapterBuilder.ts
+++ b/ui/cypress/support/builder/AdapterBuilder.ts
@@ -85,7 +85,9 @@ export class AdapterBuilder {
         return this;
     }
 
-    public setFormat(format: 'csv' | 'json' | 'json_array' | 'json_object') {
+    public setFormat(
+        format: 'csv' | 'json' | 'json_array' | 'json_object' | 'xml',
+    ) {
         this.adapterInput.format = format;
         return this;
     }
diff --git a/ui/cypress/support/utils/ProcessingElementTestUtils.ts 
b/ui/cypress/support/utils/ProcessingElementTestUtils.ts
index c42b661d0..b892de761 100644
--- a/ui/cypress/support/utils/ProcessingElementTestUtils.ts
+++ b/ui/cypress/support/utils/ProcessingElementTestUtils.ts
@@ -39,7 +39,7 @@ export class ProcessingElementTestUtils {
         let formatType;
         pipelineElementTest.inputFile.endsWith('.csv')
             ? (formatType = 'csv')
-            : (formatType = 'json_array');
+            : (formatType = 'json');
 
         FileManagementUtils.addFile(inputFile);
 
@@ -64,6 +64,12 @@ export class ProcessingElementTestUtils {
             adapterInputBuilder
                 .addFormatInput('input', ConnectBtns.csvDelimiter(), ';')
                 .addFormatInput('checkbox', ConnectBtns.csvHeader(), 'check');
+        } else if (formatType === 'json') {
+            adapterInputBuilder.addFormatInput(
+                'checkbox',
+                'json_options-array',
+                '',
+            );
         }
 
         const adapterInput = adapterInputBuilder.build();
diff --git a/ui/cypress/support/utils/StaticPropertyUtils.ts 
b/ui/cypress/support/utils/StaticPropertyUtils.ts
index 7a5d418c0..367302086 100644
--- a/ui/cypress/support/utils/StaticPropertyUtils.ts
+++ b/ui/cypress/support/utils/StaticPropertyUtils.ts
@@ -23,7 +23,7 @@ export class StaticPropertyUtils {
         // Configure Properties
         configs.forEach(config => {
             if (config.type === 'checkbox') {
-                cy.dataCy(config.selector).children().click();
+                cy.dataCy(config.selector).children().click({ force: true });
             } else if (config.type === 'button') {
                 cy.dataCy(config.selector).click();
             } else if (config.type === 'drop-down') {
diff --git a/ui/cypress/support/utils/connect/ConnectBtns.ts 
b/ui/cypress/support/utils/connect/ConnectBtns.ts
index 9841047d6..0fab8973c 100644
--- a/ui/cypress/support/utils/connect/ConnectBtns.ts
+++ b/ui/cypress/support/utils/connect/ConnectBtns.ts
@@ -69,5 +69,13 @@ export class ConnectBtns {
         return 
'undefined-org.apache.streampipes.extensions.management.connect.adapter.parser.csv-1-header-1';
     }
 
+    public static jsonArrayFieldKey() {
+        return 'undefined-arrayFieldConfig-2-key-0';
+    }
+
+    public static xmlTag() {
+        return 
'undefined-org.apache.streampipes.extensions.management.connect.adapter.parser.xml-2-tag-0';
+    }
+
     // ========================================================================
 }
diff --git a/ui/cypress/tests/adapter/formats/format.spec.ts 
b/ui/cypress/tests/adapter/formats/format.spec.ts
index 7e615e869..c91303123 100644
--- a/ui/cypress/tests/adapter/formats/format.spec.ts
+++ b/ui/cypress/tests/adapter/formats/format.spec.ts
@@ -21,6 +21,8 @@ import { ConnectUtils } from 
'../../../support/utils/connect/ConnectUtils';
 import { ConnectBtns } from '../../../support/utils/connect/ConnectBtns';
 import { StaticPropertyUtils } from 
'../../../support/utils/StaticPropertyUtils';
 import { UserInputBuilder } from '../../../support/builder/UserInputBuilder';
+import { AdapterInput } from '../../../support/model/AdapterInput';
+import { AdapterBuilder } from '../../../support/builder/AdapterBuilder';
 
 describe('Test adapter formats', () => {
     beforeEach('Setup Test', () => {
@@ -40,12 +42,13 @@ describe('Test adapter formats', () => {
     it('Test json object format', () => {
         // Set up test
         FileManagementUtils.addFile(baseDir + 'jsonObject.json');
+        const template = makeAdapterInputTemplate();
 
-        navigateToFormatSelection();
+        template
+            .setFormat('json')
+            .addFormatInput('checkbox', 'json_options-single_object', '');
 
-        // Set format configuration
-        ConnectBtns.json().click();
-        ConnectBtns.jsonObject().click();
+        navigateToFormatSelection(template.build());
 
         // Validate result
         validateResult(expected);
@@ -54,11 +57,13 @@ describe('Test adapter formats', () => {
     it('Test array with json objects', () => {
         // Set up test
         FileManagementUtils.addFile('connect/format/jsonArray.json');
-        navigateToFormatSelection();
+        const template = makeAdapterInputTemplate();
 
-        // Set format configuration
-        ConnectBtns.json().click();
-        ConnectBtns.jsonArray().click();
+        template
+            .setFormat('json')
+            .addFormatInput('checkbox', 'json_options-array', '');
+
+        navigateToFormatSelection(template.build());
 
         // Validate result
         validateResult(expected);
@@ -67,15 +72,14 @@ describe('Test adapter formats', () => {
     it('Test json with a field of type array', () => {
         // Set up test
         FileManagementUtils.addFile(baseDir + 'jsonArrayField.json');
-        navigateToFormatSelection();
+        const template = makeAdapterInputTemplate();
+
+        template
+            .setFormat('json')
+            .addFormatInput('checkbox', 'json_options-array_field', '')
+            .addFormatInput('input', ConnectBtns.jsonArrayFieldKey(), 'field');
 
-        // Set format configuration
-        ConnectBtns.json().click();
-        ConnectBtns.jsonArrayField().click();
-        const arrayFieldInput = UserInputBuilder.create()
-            .add('input', 'key', 'field')
-            .build();
-        StaticPropertyUtils.input(arrayFieldInput);
+        navigateToFormatSelection(template.build());
 
         // Validate result
         validateResult(expected);
@@ -90,11 +94,13 @@ describe('Test adapter formats', () => {
             v1: 4.1,
         };
         FileManagementUtils.addFile(baseDir + 'geoJson.json');
-        navigateToFormatSelection();
+        const template = makeAdapterInputTemplate();
 
-        // Set format configuration
-        ConnectBtns.json().click();
-        ConnectBtns.geoJson().click();
+        template
+            .setFormat('json')
+            .addFormatInput('checkbox', 'json_options-geojson', '');
+
+        navigateToFormatSelection(template.build());
 
         // Validate result
         validateResult(geoJsonResultEvent);
@@ -103,14 +109,12 @@ describe('Test adapter formats', () => {
     it('Test xml format', () => {
         // Set up test
         FileManagementUtils.addFile(baseDir + 'xmlObject.xml');
-        navigateToFormatSelection();
+        const template = makeAdapterInputTemplate();
+        template
+            .setFormat('xml')
+            .addFormatInput('input', ConnectBtns.xmlTag(), 'event');
 
-        // Set format configuration
-        ConnectBtns.xml().click();
-        const tagInputField = UserInputBuilder.create()
-            .add('input', 'tag', 'event')
-            .build();
-        StaticPropertyUtils.input(tagInputField);
+        navigateToFormatSelection(template.build());
 
         // Validate result
         validateResult(expected);
@@ -119,18 +123,13 @@ describe('Test adapter formats', () => {
     it('Test csv format with header', () => {
         // Set up test
         FileManagementUtils.addFile(baseDir + 'csvWithHeader.csv');
-        navigateToFormatSelection();
-
-        // Set format configuration
-        ConnectBtns.csv().click();
-        const delimiterInputField = UserInputBuilder.create()
-            .add('input', 'delimiter', ';')
-            .build();
-        StaticPropertyUtils.input(delimiterInputField);
-        const headerInputField = UserInputBuilder.create()
-            .add('checkbox', 'header', 'check')
-            .build();
-        StaticPropertyUtils.input(headerInputField);
+        const template = makeAdapterInputTemplate();
+        template
+            .setFormat('csv')
+            .addFormatInput('input', ConnectBtns.csvDelimiter(), ';')
+            .addFormatInput('checkbox', ConnectBtns.csvHeader(), 'check');
+
+        navigateToFormatSelection(template.build());
 
         // Validate result
         validateResult(expected);
@@ -139,14 +138,12 @@ describe('Test adapter formats', () => {
     it('Test csv format without header', () => {
         // Set up test
         FileManagementUtils.addFile(baseDir + 'csvWithoutHeader.csv');
-        navigateToFormatSelection();
+        const template = makeAdapterInputTemplate();
+        template
+            .setFormat('csv')
+            .addFormatInput('input', ConnectBtns.csvDelimiter(), ';');
 
-        // Set format configuration
-        ConnectBtns.csv().click();
-        const delimiterInputField = UserInputBuilder.create()
-            .add('input', 'delimiter', ';')
-            .build();
-        StaticPropertyUtils.input(delimiterInputField);
+        navigateToFormatSelection(template.build());
 
         const expectedNoHeader = {
             key_0: 1667904471000,
@@ -163,36 +160,38 @@ describe('Test adapter formats', () => {
     it('Test csv format with comma', () => {
         // Set up test
         FileManagementUtils.addFile(baseDir + 'csvWithComma.csv');
-        navigateToFormatSelection();
-
-        // Set format configuration
-        ConnectBtns.csv().click();
-        const delimiterInputField = UserInputBuilder.create()
-            .add('input', 'delimiter', ',')
-            .build();
-        StaticPropertyUtils.input(delimiterInputField);
-        const headerInputField = UserInputBuilder.create()
-            .add('checkbox', 'header', 'check')
-            .build();
-        StaticPropertyUtils.input(headerInputField);
+        const template = makeAdapterInputTemplate();
+        template
+            .setFormat('csv')
+            .addFormatInput('input', ConnectBtns.csvDelimiter(), ',')
+            .addFormatInput('checkbox', ConnectBtns.csvHeader(), 'check');
+
+        navigateToFormatSelection(template.build());
 
         // Validate result
         validateResult(expected);
     });
 });
 
-const navigateToFormatSelection = () => {
+const navigateToFormatSelection = (adapterInput: AdapterInput) => {
     ConnectUtils.goToConnect();
 
     ConnectUtils.goToNewAdapterPage();
 
     ConnectUtils.selectAdapter('File_Stream');
 
-    ConnectUtils.configureAdapter([]);
+    ConnectUtils.configureAdapter(adapterInput);
+};
+
+const makeAdapterInputTemplate = (): AdapterBuilder => {
+    return AdapterBuilder.create('File_Stream')
+        .setName('File Stream Adapter Test')
+        .setTimestampProperty('timestamp')
+        .addProtocolInput('checkbox', 'replaceTimestamp', 'check');
 };
 
 const validateResult = expected => {
-    ConnectBtns.formatSelectionNextBtn().click();
+    //ConnectBtns.formatSelectionNextBtn().click();
     cy.dataCy('schema-preview-original-event', { timeout: 10000 }).then(
         value => {
             const jsonResult = removeWhitespaceExceptInQuotes(value.text());
diff --git a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts 
b/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
index 46b6c8565..3bdac4f86 100644
--- a/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
+++ b/ui/cypress/tests/pipelineElement/SinglePipelineElement.ts
@@ -22,7 +22,7 @@ import { ProcessorTest } from 
'../../support/model/ProcessorTest';
 const allTests = Cypress.env('processingElements');
 
 allTests.forEach(test => {
-    const testNames = ['staticmath1'];
+    const testNames = ['splitArray1'];
 
     const processorTest = test as ProcessorTest;
 

Reply via email to