Как передать поставщику договорное соглашение о формате данных - PullRequest
0 голосов
/ 13 декабря 2018

Есть ли способ сгенерировать PACT-файл для передачи проверки формата данных?

Пример того, чего я пытаюсь достичь: как потребитель, я ожидаю поле "phoneNumber" с некоторыми данными.Я также ожидаю, что номер телефона должен содержать от 7 до 10 цифр.Он может содержать тире и / или квадратные скобки.

В потребительском тесте (код ниже) я создаю объект ответа, поэтому я могу указать формат так, как я ожидал.Но это не значит, что поставщик связан тем же ограничением.(то есть они могли бы предоставить это таким способом, но они могут также предоставить это в формате, который я не ожидаю).

Я предполагаю, что самый логичный способ проверки данных - это предоставитьнекоторые RegEx внутри файла PACT в качестве метаданных.Это то, что можно сделать?Если да, то как вы укажите это в коде.

Фрагмент кода ниже, чтобы помочь визуализировать, как я это делаю: (Кредит за фрагмент кода идет в "https://github.com/Mikuu/Pact-JVM-Example")

    Object homerUser = new Object() {
        public String name = "Homer Simpson";
        public String phoneNumber = "1-234-5678";
    };
    JSONObject responseBody = new JSONObject(new ObjectMapper().writeValueAsString(homerUser));

    RequestResponsePact pact = ConsumerPactBuilder
            .consumer(consumer)
            .hasPactWith(provider)
            .given("User Homer Exist")
            .uponReceiving("getUserById where homer exists")
                .path("/users/1")
                .method("GET")
                .headers(requestHeader)
            .willRespondWith()
                .status(HttpStatus.OK.value())
                .headers(responseHeader)
                .body(responseBody)
            .toPact();

    PactVerificationResult result = runConsumerTest(pact, getProviderConfig(), mockServer -> {
        ResponseEntity<User> response = userProvider.getUserById(1);
        assertThat(response.getStatusCode().value(), is(200));
        assertThat(response.getHeaders().get(HttpHeaders.CONTENT_TYPE), contains(MediaType.APPLICATION_JSON_UTF8_VALUE));
        assertThat(response.getBody(), notNullValue());
        assertThat(response.getBody().phoneNumber, matchesPhoneNumberPattern());
    });

1 Ответ

0 голосов
/ 13 декабря 2018

Да, вы можете использовать регулярные выражения.Посмотрите документацию по соответствию для pact-jvm.

...