Как передать поставщику договорное соглашение о формате данных
Есть ли способ создать файл 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 ответ
Да, вы можете использовать регулярные выражения. Посмотрите документацию по соответствию для pact-jvm.