From 649d2a917f8fe6a954c84fd2701f3f84fac68398 Mon Sep 17 00:00:00 2001 From: Philipp Zehnder Date: Thu, 23 May 2024 09:20:36 +0200 Subject: [PATCH] fix(#2894): Fix flaky e2e test (#2895) --- .../SupportsNestedTransformationRule.java | 2 +- .../schema/DeleteTransformationRuleTest.java | 89 +++++++++++++++---- .../deleteTransformationRule/nestedInput.json | 3 +- .../support/utils/ConnectEventSchemaUtils.ts | 9 +- .../rules/deleteTransformationRule.spec.ts | 30 +++++++ 5 files changed, 114 insertions(+), 19 deletions(-) diff --git a/streampipes-connect-shared/src/main/java/org/apache/streampipes/connect/shared/preprocessing/SupportsNestedTransformationRule.java b/streampipes-connect-shared/src/main/java/org/apache/streampipes/connect/shared/preprocessing/SupportsNestedTransformationRule.java index a0494cff34..86a36b7d6c 100644 --- a/streampipes-connect-shared/src/main/java/org/apache/streampipes/connect/shared/preprocessing/SupportsNestedTransformationRule.java +++ b/streampipes-connect-shared/src/main/java/org/apache/streampipes/connect/shared/preprocessing/SupportsNestedTransformationRule.java @@ -43,7 +43,7 @@ protected Map applyNested(Map event, event.remove(key); - if (newSubEvent != null && !newSubEvent.isEmpty()) { + if (newSubEvent != null) { event.put(key, newSubEvent); } } diff --git a/streampipes-connect-shared/src/test/java/org/apache/streampipes/connect/shared/preprocessing/transform/schema/DeleteTransformationRuleTest.java b/streampipes-connect-shared/src/test/java/org/apache/streampipes/connect/shared/preprocessing/transform/schema/DeleteTransformationRuleTest.java index e8d5e1feb8..28d8ffb20e 100644 --- a/streampipes-connect-shared/src/test/java/org/apache/streampipes/connect/shared/preprocessing/transform/schema/DeleteTransformationRuleTest.java +++ b/streampipes-connect-shared/src/test/java/org/apache/streampipes/connect/shared/preprocessing/transform/schema/DeleteTransformationRuleTest.java @@ -18,16 +18,22 @@ package org.apache.streampipes.connect.shared.preprocessing.transform.schema; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import java.util.Arrays; import java.util.HashMap; import java.util.List; +import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; public class DeleteTransformationRuleTest { + + private ObjectMapper objectMapper = new ObjectMapper(); + @Test public void transformSimple() { var event = new HashMap(); @@ -37,25 +43,63 @@ public void transformSimple() { var result = deleteRule.apply(event); - assertEquals(0, result.keySet().size()); + assertEquals(0, + result.keySet() + .size() + ); } @Test - public void transformNested() { - var child = new HashMap(); - child.put("child", "value"); - child.put("secondChild", "value"); - var event = new HashMap(); - event.put("parent", child); - event.put("keepProperty", "test"); + public void transformNested() throws JsonProcessingException { + var jsonString = """ + { + "parent": { + "child": "value", + "child2": "value2" + }, + "keepProperty": "test" + } + """; + + var event = getEvent(jsonString); var deleteRule = new DeleteTransformationRule(List.of("parent", "child")); var result = deleteRule.apply(event); - assertEquals(2, result.keySet().size()); + assertEquals(2, + result.keySet() + .size() + ); + assertEquals(1, ((Map) result.get("parent")).size()); + } + + @Test + public void testRemoveParent() throws JsonProcessingException { + var jsonString = """ + { + "parent": { + "child": "value", + "child2": "value2" + }, + "keepProperty": "test" + } + """; + + var event = getEvent(jsonString); + + var deleteRule = new DeleteTransformationRule(List.of("parent")); + + var result = deleteRule.apply(event); + + assertEquals(1, + result.keySet() + .size() + ); + assertEquals("test", result.get("keepProperty")); } + @Test // verifying that mathod applyTransformation method works when passed a null event. public void applyTransformationWithNullParameter() { @@ -64,19 +108,32 @@ public void applyTransformationWithNullParameter() { } @Test - public void deleteNestedChildWithParentProperty() { - var child = new HashMap(); - child.put("child", "value"); - var event = new HashMap(); - event.put("parent", child); - event.put("keepProperty", "test"); + public void deleteNestedChildWithParentProperty() throws JsonProcessingException { + + var jsonString = """ + { + "parent": { + "child": "value" + }, + "keepProperty": "test" + } + """; + + var event = getEvent(jsonString); var deleteRule = new DeleteTransformationRule(Arrays.asList("parent", "child")); var result = deleteRule.apply(event); - assertEquals(1, result.keySet().size()); + assertEquals(2, + result.keySet() + .size() + ); assertEquals("test", result.get("keepProperty")); } + private Map getEvent(String eventJson) throws JsonProcessingException { + return objectMapper.readValue(eventJson, HashMap.class); + } + } diff --git a/ui/cypress/fixtures/connect/deleteTransformationRule/nestedInput.json b/ui/cypress/fixtures/connect/deleteTransformationRule/nestedInput.json index 92177c23ed..5456e65cbb 100644 --- a/ui/cypress/fixtures/connect/deleteTransformationRule/nestedInput.json +++ b/ui/cypress/fixtures/connect/deleteTransformationRule/nestedInput.json @@ -1,6 +1,7 @@ { "timestamp": 1667904471000, "parent": { - "child": "text" + "child": "text", + "child_two": "textTwo" } } diff --git a/ui/cypress/support/utils/ConnectEventSchemaUtils.ts b/ui/cypress/support/utils/ConnectEventSchemaUtils.ts index 495a47c738..663a42edbf 100644 --- a/ui/cypress/support/utils/ConnectEventSchemaUtils.ts +++ b/ui/cypress/support/utils/ConnectEventSchemaUtils.ts @@ -183,7 +183,14 @@ export class ConnectEventSchemaUtils { .click({ force: true }); cy.dataCy('connect-schema-delete-properties-btn', { timeout: 10000, - }).click(); + }).click({ force: true }); + + // The following two commands are required to fix flaky tests + // if another solution can be found, it can be removed + cy.wait(200); + cy.dataCy('connect-schema-update-preview-btn', { + timeout: 10000, + }).click({ force: true }); } public static changePropertyDataType( diff --git a/ui/cypress/tests/adapter/rules/deleteTransformationRule.spec.ts b/ui/cypress/tests/adapter/rules/deleteTransformationRule.spec.ts index 2ece7e9a38..6ecb38744b 100644 --- a/ui/cypress/tests/adapter/rules/deleteTransformationRule.spec.ts +++ b/ui/cypress/tests/adapter/rules/deleteTransformationRule.spec.ts @@ -69,6 +69,25 @@ describe('Connect delete rule transformation', () => { ConnectEventSchemaUtils.deleteProperty('child'); // The resulting string contains non-breaking spaces character (\u00A0) + cy.dataCy('schema-preview-result-event').should( + 'have.text', + '{\u00A0\u00A0\u00A0\u00A0"parent":\u00A0{\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0"child_two":\u00A0"textTwo"\u00A0\u00A0\u00A0\u00A0},\u00A0\u00A0\u00A0\u00A0"timestamp":\u00A01667904471000}', + ); + + ConnectBtns.refreshSchema().click(); + + // Test to delete the parent property + ConnectEventSchemaUtils.deleteProperty('parent'); + cy.dataCy('schema-preview-result-event').should( + 'have.text', + + '{\u00A0\u00A0\u00A0\u00A0"timestamp":\u00A01667904471000}', + ); + + ConnectBtns.refreshSchema().click(); + ConnectEventSchemaUtils.deleteProperty('child'); + ConnectEventSchemaUtils.deleteProperty('child_two'); + cy.dataCy('schema-preview-result-event').should( 'have.text', '{\u00A0\u00A0\u00A0\u00A0"parent":\u00A0{},\u00A0\u00A0\u00A0\u00A0"timestamp":\u00A01667904471000}', @@ -83,5 +102,16 @@ describe('Connect delete rule transformation', () => { '{\u00A0\u00A0\u00A0\u00A0"timestamp":\u00A01667904471000}', ); + + ConnectBtns.refreshSchema().click(); + + // Test to delete both child properties + ConnectEventSchemaUtils.deleteProperty('child'); + ConnectEventSchemaUtils.deleteProperty('child_two'); + + cy.dataCy('schema-preview-result-event').should( + 'have.text', + '{\u00A0\u00A0\u00A0\u00A0"parent":\u00A0{},\u00A0\u00A0\u00A0\u00A0"timestamp":\u00A01667904471000}', + ); }); });