void readFourLevelObject()

in java/clickhouse-connector/src/integration-test/java/com/epam/deltix/timebase/connector/clickhouse/DeepObjectFieldTests.java [100:137]


    void readFourLevelObject() {

        L1 message = new L1(
                new L2(new L3(new L4("l41", TestEnum.FIRST), "l3", List.of(TestEnum.FIRST.name())), "l2",
                        List.of(new L3(new L4("l42", TestEnum.SECOND), "l3ar1", List.of(TestEnum.FIRST.name(), TestEnum.SECOND.name())),
                                new L3(new L4("l42", TestEnum.DEFAULT), "l3arr2", List.of(TestEnum.FIRST.name(), TestEnum.DEFAULT.name()))
                        )
                ),
                "l1");

        initSystemRequiredFields(message);

        Pair<DXTickStream, TableDeclaration> chSchemaByStream = loadAndReplicateData(message, L1.class, L2.class, L3.class, L4.class);
        TableDeclaration tableDeclaration = chSchemaByStream.getRight();
        Map<String, Object> values = selectAllValues(tableDeclaration).get(0);
        Map<String, Object> expectedValues = new HashMap<>() {{
            put("type", "deltix.clickhouse.timebase.L1");
            put("L1_l1simple", "l1");
            put("L1_l1obj_type", "deltix.clickhouse.timebase.L2");
            put("L1_l1obj_L2_l2obj_type", "deltix.clickhouse.timebase.L3");
            put("L1_l1obj_L2_l2simple", "l2");
            put("L1_l1obj_L2_l2obj_L3_l3simple", "l3");
            put("L1_l1obj_L2_l2obj_L3_l3obj_L4_l4simple", "l41");
            put("L1_l1obj_L2_l2obj_L3_l3obj_L4_enumField", TestEnum.FIRST.name());
            put("L1_l1obj_L2_l2obj_L3_enumArray", new String[]{TestEnum.FIRST.name()});
            put("L1_l1obj_L2_l2obj_L3_l3obj_type", "deltix.clickhouse.timebase.L4");
            put("L1_l1obj_L2_l2ArrObj.type", new String[]{"deltix.clickhouse.timebase.L3", "deltix.clickhouse.timebase.L3"});
            put("L1_l1obj_L2_l2ArrObj.L3_l3obj_type", new String[]{"deltix.clickhouse.timebase.L4", "deltix.clickhouse.timebase.L4"});
            put("L1_l1obj_L2_l2ArrObj.L3_l3obj_L4_l4simple", new String[]{"l42", "l42"});
            put("L1_l1obj_L2_l2ArrObj.L3_l3obj_L4_enumField", new String[]{TestEnum.SECOND.name(), TestEnum.DEFAULT.name()});
            put("L1_l1obj_L2_l2ArrObj.L3_enumArray", new String[][]{new String[]{TestEnum.FIRST.name(), TestEnum.SECOND.name()}, new String[]{TestEnum.FIRST.name(), TestEnum.DEFAULT.name()}});
            put("L1_l1obj_L2_l2ArrObj.L3_l3simple", new String[]{"l3ar1", "l3arr2"});
        }};
        expectedValues.forEach((k, v) -> {
            Object actualValue = values.get(k);
            assertArrayEquals(new Object[]{v}, new Object[]{actualValue});
        });
    }