in ddm-rrm/src/it/java/com/epam/digital/data/platform/management/MasterVersionFormsControllerIT.java [636:691]
void updateForm_modifiedConcurrently() {
// add file to "remote" repo
final var headFormContent = context.getResourceContent(
"/versions/master/forms/{formName}/PUT/valid-form-head.json");
context.addFileToRemoteHeadRepo("/forms/valid-form.json", headFormContent);
context.pullHeadRepo();
// define expected form content to update
final var expectedFormContent = context.getResourceContent(
"/versions/master/forms/{formName}/PUT/valid-form-version-candidate.json");
// define modified form content to update
final var modifiedFormContent = context.getResourceContent(
"/versions/master/forms/{formName}/PUT/valid-form-version-candidate-modified.json");
//perform get
MockHttpServletResponse response = mockMvc.perform(get("/versions/master/forms/{formName}",
"valid-form")).andReturn().getResponse();
//get eTag value from response
String eTag = response.getHeader("ETag");
//perform update with missing eTag
mockMvc.perform(
put("/versions/master/forms/{formName}","valid-form")
.contentType(MediaType.APPLICATION_JSON)
.content(modifiedFormContent)
.accept(MediaType.APPLICATION_JSON));
// perform query with outdated ETag
mockMvc.perform(
put("/versions/master/forms/{formName}","valid-form")
.contentType(MediaType.APPLICATION_JSON)
.content(expectedFormContent)
.header("If-Match", eTag)
.accept(MediaType.APPLICATION_JSON)
).andExpectAll(
status().isConflict()
);
// assert that actual content was not updated after second request
final var actualFormContent = mockMvc.perform(
get("/versions/master/forms/{formName}","valid-form")
).andExpectAll(
status().isOk(),
content().contentType(MediaType.APPLICATION_JSON),
jsonPath("$.name", is("valid-form")),
jsonPath("$.title", is("Valid form Version Candidate Modified"))
).andReturn().getResponse().getContentAsString();
JSONAssert.assertEquals(modifiedFormContent, actualFormContent,
new CustomComparator(JSONCompareMode.LENIENT,
new Customization("created", (o1, o2) -> true),
new Customization("modified", (o1, o2) -> true)
));
}