Как установить значения NULL в Stub как clientValue с контрактами Spring Cloud

Мы пытаемся установить значения null в код сайта клиента производителя.

Пример контракта Groovy:

Contract.make {
        description("Creating user")
        name("Create user")
        request {
            method 'POST'
            url '/api/user'
            body(
                    name: $(consumer(anyNonEmptyString()), producer('John Doe')),
                    address: $(consumer(optional(regex(alphaNumeric()))), producer(null))
            )
            headers {
                contentType(applicationJson())
            }
        }
        response {
            status 201
        }
    }

Следующий контракт приводит к ошибке утверждения при попытке разобрать контракт Groovy:

assert testSide ==~ Pattern.compile(stubSide.optionalPattern())
   |        |           |       |        |
   null     false       |       |        ([a-zA-Z0-9]+)?
                        |       ([a-zA-Z0-9]+)?
                        ([a-zA-Z0-9]+)?

Любое предложение установить его равным нулю в сгенерированном классе, чтобы получить такой результат (или просто не добавлять поле address:

@Test
public void create_user() throws Exception {
    // given:
        MockMvcRequestSpecification request = given()
                .header("Content-Type", "application/json")
                .body("{\"name\":\"John Doe\",\"address\": null,");

    // when:
        ResponseOptions response = given().spec(request)
                .post("/api/user");

    // then:
        assertThat(response.statusCode()).isEqualTo(201);
}

person Michel    schedule 05.11.2019    source источник
comment
Это действительно интересно. По-видимому, необязательное значение на данный момент будет означать, по крайней мере, пустое значение, тогда как оно должно означать пустое или нулевое (поскольку оно необязательное). Это ошибка, не могли бы вы ее запилить?   -  person Marcin Grzejszczak    schedule 05.11.2019
comment
Конечно: github.com/spring-cloud/spring-cloud-contract /вопросы/1257   -  person Michel    schedule 05.11.2019


Ответы (1)


В Spring Cloud Contract была проблема, из-за которой мы рассматривали необязательное свойство как значение, для которого задано либо пустое, либо непустое значение, но оно должно было быть там. С исправлением https://github.com/spring-cloud/spring-cloud-contract/issues/1257 мы также добавили поддержку значения null.

person Marcin Grzejszczak    schedule 06.11.2019