Используя mockMvc, Spring restDocs и облачный контракт Spring со следующим @Test
кодом:
var adminDTO = HandlerTestObjectGenerator.createRandomAdminDTO();
mockMvc.perform(
RestDocumentationRequestBuilders
.post("/api/admins")
.content(objectMapper.writeValueAsString(adminDTO))
.contentType(MediaType.APPLICATION_JSON_UTF8)
).andExpect(status().isCreated())
.andDo(document("create-admin",
preprocessRequest(),
preprocessResponse(),
requestFields(
usernameFieldDescriptor,
passwordFieldDescriptor,
rolesFieldDescriptor
),
responseFields(
admin_adminIdFieldDescriptor,
admin_usernameFieldDescriptor,
admin_rolesFieldDescriptor
),
SpringCloudContractRestDocs.dslContract()
));
Я получаю следующий нестандартный контракт:
Contract.make {
request {
method 'POST'
url '/api/admins'
body('''{
"username" : "6ddfee05-75c2-4cdb-b35e-668e79226e92",
"password" : "91a96b76-283f-44eb-b6cc-72945872b287",
"roles" : [ "ADMIN" ]
}''')
...
Значения тела запроса дляusername
и password
жестко закодированы в Groovy-контракте, что делает их непредсказуемыми на стороне потребителя.
Вместо того, чтобы жестко их кодировать, я хотел бы иметь проверку шаблона регулярного выражения, поэтому любой действительный ввод возвращает контрактответ
Можно ли это сделать? Пожалуйста, предоставьте конкретный код, так как я застрял с документацией.