Как сгенерировать те же правила соответствия для «arrayMinLike», используя лямбда-Dsl для Pact? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть образец тела, как показано ниже;

[
  "01/01/2019",
  "01/02/2019",
  "01/03/2019"
]

Я хотел бы проверить следующее: 1. Ответом должен быть массив с как минимум 1 элементом 2. Каждый элемент должен быть: 2.1. строка 2.2. Должен быть в этом формате "ДД / ММ / ГГГГ"

Отлично работает со «старым» стилем:

DslPart body = PactDslJsonArray.arrayMinLike(1, 2, PactDslJsonRootValue.stringMatcher(Constants.DATETIMEPATTERN, "01/01/2019"));

Это создаст файл пакта с соответствующими правилами, как показано ниже. Обратите внимание на $ и $[*]

...
                "matchingRules": {
                    "body": {
                        "$": {
                            "matchers": [
                                {
                                    "match": "type",
                                    "min": 1
                                }
                            ],
                            "combine": "AND"
                        },
                        "$[*]": {
                            "matchers": [
                                {
                                    "match": "regex",
                                    "regex": "^(([0-3]?\\d+)\\/((0?[1-9])|(1[0-2]))\\/20\\d{2})$"
                                }
                            ],
                            "combine": "AND"
                        }
                    }
                }

Однако, когда я пытаюсь использовать «новый» стиль, который является лямбда-дсл для Pact (Java8) , он не генерирует одинаковые правила сопоставления; следовательно, не работает так же, и мой тест провайдера всегда завершается неудачей с сообщением об ошибке ниже

$ -> Ожидается список с 1 элементом, но получено 3 элемента

Ниже приведен код и соответствующие правила, которые генерирует мой код. Обратите внимание на $[0] и $[1]: Соответствующие правила

...
"matchingRules": {
                    "body": {
                        "$[0]": {
                            "matchers": [
                                {
                                    "match": "regex",
                                    "regex": "^(([0-3]?\\d+)\\/((0?[1-9])|(1[0-2]))\\/20\\d{2})$"
                                }
                            ],
                            "combine": "AND"
                        },
                        "$[1]": {
                            "matchers": [
                                {
                                    "match": "type",
                                    "min": 1
                                }
                            ],
                            "combine": "AND"
                        }
                    }
                }

и код

DslPart body = newJsonArray((array) -> {
    array
            .stringMatcher(Constants.DATETIMEPATTERN, "01/01/2019");
}).minArrayLike(1).build();

Пробовал по-другому

DslPart body = newJsonArray((array) -> {
    array
            .stringMatcher(Constants.DATETIMEPATTERN, "01/01/2019")
            .minArrayLike(1);
}).build();

Я пытался разместить .minArrayLike(1) в разных местах, но ни одно из них не работает. Можно ли как-нибудь создать такие же правила сопоставления, используя лямбда-Dsl для Pact?

1 Ответ

0 голосов
/ 25 июня 2019

Я столкнулся с той же проблемой. Пожалуйста, смотрите проблему и решение здесь

например: -

final DslPart actualPactDsl = LambdaDsl.newJsonBody((bodyDsl) -> {
            bodyDsl
                    .stringType("id", "1")
                    .stringType("name","Dep 1")
                    .minArrayLike("students",1,(stud) ->{
                        stud
                            .stringType("id","1")
                               .stringType("firstName","John")
                               .stringType("lastName","Smith")
                               .numberType("age",21);
                    });

        }).build();
...