Spring Cloud Contract - контракты параметров запроса всегда соответствуют одному и тому же контракту
Я работаю над весенним облачным контрактом и у меня есть сценарий использования, в котором я хочу, чтобы ответ был BAD_REQUEST, когда несколько параметров запроса отсутствуют, и ОК, когда присутствуют все обязательные параметры запроса. Чтобы добиться этого, у меня есть разные контракты (отличные файлы) для обслуживания каждого такого запроса / ответа. Но когда я проверяю от потребителя (с / без параметров запроса), все они соответствуют только 1 контракту, присутствует ли параметр запроса.
Контракты, перечисленные ниже,
Оба параметра запроса отсутствуют
Contract.make {
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate")
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BothFieldsNotPresent"
headers {
contentType('application/json')
}
}
}
Параметр запроса B отсутствует
Contract.make {
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate") {
queryParameters {
parameter 'a' : value(regex(nonBlank()))
}
}
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BNotPresent"
headers {
contentType('application/json')
}
}
}
Параметры запроса присутствуют, и ответ в порядке
Contract.make {
description("Test to see if authorisation works")
request {
method 'GET'
urlPath('/check/validate') {
queryParameters {
parameter 'a' : equalTo("AUTHORISED")
parameter 'b' : value(regex(nonBlank()))
}
}
headers {
contentType('application/json')
}
}
response {
status(200)
"body" "shouldReturn200OkValidRequest"
headers {
contentType('application/json')
}
}
}
Вопросы:
Все мои тестовые случаи соответствуют первому случаю. Оба параметра запроса отсутствуют, а не соответствуют специфике. Пожалуйста, дайте мне знать, что мне не хватает.
Может ли кто-нибудь указать на документацию Spring-Cloud-Contract на параметры запроса, которые удовлетворяют вышеуказанному требованию. Нашел это ( http://cloud.spring.io/spring-cloud-contract/1.0.x/), но мне нужно больше информации о моем вышеупомянутом требовании.
1 ответ
Ваши контракты расширяют друг друга. Каждый конкретнее другого. Вы должны использовать priority()
способ сказать, какой из них более конкретен, чем другой. Например, наименее конкретный должен иметь самый высокий приоритетный приоритет - priority(100)
, Большинство - priority(1)
,
Оба параметра запроса отсутствуют
Contract.make {
priority(100)
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate")
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BothFieldsNotPresent"
headers {
contentType('application/json')
}
}
}
Параметр запроса B отсутствует
Contract.make {
priority(50)
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate") {
queryParameters {
parameter 'a' : value(regex(nonBlank()))
}
}
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BNotPresent"
headers {
contentType('application/json')
}
}
}
Параметры запроса присутствуют, и ответ в порядке
Contract.make {
priority(10)
description("Test to see if authorisation works")
request {
method 'GET'
urlPath('/check/validate') {
queryParameters {
parameter 'a' : equalTo("AUTHORISED")
parameter 'b' : value(regex(nonBlank()))
}
}
headers {
contentType('application/json')
}
}
response {
status(200)
"body" "shouldReturn200OkValidRequest"
headers {
contentType('application/json')
}
}
}