Есть ли способ сгенерировать 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());
});