Как передать поставщику договорное соглашение о формате данных

Есть ли способ создать файл 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.

Другие вопросы по тегам