Соответствие заголовка YAML Spring Cloud Contract - PullRequest
0 голосов
/ 01 марта 2020

При создании нового ресурса с использованием метода POST местоположение нового ресурса добавляется к ответу в виде заголовка Location.

Как создать YML-объект Spring-Cloud-Contract для проверки того, что ответ содержит Заголовок Location с допустимым значением URI в качестве значения?

Я пробовал ниже YAML, но он не работает.

request:
  method: POST
  url: /customers/v1
  body:
    firstName: First Name
    lastName: Last Name
    dateOfBirth: "1990-12-12"
    active: false
  headers:
    Content-Type: application/json
response:
  status: 201
  matchers:
    headers:
      - key: Location
        regex: "http://localhost/customers/v1/*"

Сгенерированный код для теста

@Test
public void validate_create_customer_successfully() throws Exception {
    // given:
        MockMvcRequestSpecification request = given()
                .header("Content-Type", "application/json")
                .body("{\"firstName\":\"First Name\",\"lastName\":\"Last Name\",\"dateOfBirth\":\"1990-12-12\",\"active\":false}");

    // when:
        ResponseOptions response = given().spec(request)
                    .post("/customers/v1");

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

Сгенерированный код не содержит проверки заголовка.

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Ниже работает определение yaml

response:
  status: 201
  headers:
      Location: "http://localhost/customers/v1/"
  matchers:
    headers:
      - key: Location
        regex: "http://localhost/customers/v1/.*"

Сгенерированный код для теста

// then:
    assertThat(response.statusCode()).isEqualTo(201);
    assertThat(response.header("Location")).matches("http://localhost/customers/v1/.*");

Работает, как и ожидалось. Я не знаю почему. Может кто-нибудь объяснить, пожалуйста?

0 голосов
/ 03 марта 2020

Я не проверял это, но что произойдет, если вы попробуете:

response:
  status: 201
  matchers:
    headers:
      - key: Location
        type: by_regex
        predefined: url

Это то, что вы бы использовали для сопоставителей своего тела, я не уверен, будет ли это работать для заголовков.

Просто, чтобы вы знали. Я полагаю, что раздел «Сопоставители» предназначен только для стороны ответа (проверяющей ответ, отправленный производителем). Если вы также хотите предоставить этот заголовок в качестве отклика-заглушки для своего потребителя, вам придется добавить его также и вне раздела соответствия, с фиксированным значением.

...