Spring Cloud Contract - контракты параметров запроса всегда соответствуют одному и тому же контракту - PullRequest
0 голосов
/ 24 января 2019

Я работаю над весенним облачным контрактом и у меня есть сценарий использования, в котором я хочу, чтобы ответ был 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')
        }
    }

}

Вопросы:

  1. Все мои тестовые случаи соответствуют первому случаю Оба параметра запроса отсутствуют , а не соответствуют специфике. Пожалуйста, дайте мне знать, что мне не хватает.

  2. Может кто-нибудь указать на документацию Spring-Cloud-контракта по параметрам запроса, которые удовлетворяют вышеуказанному требованию. Нашел это (http://cloud.spring.io/spring-cloud-contract/1.0.x/#_passing_optional_parameters), но мне нужно больше информации о моем вышеуказанном требовании.

1 Ответ

0 голосов
/ 24 января 2019

Ваши контракты расширяют друг друга.Каждый конкретнее другого.Вы должны использовать метод 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')
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...