in ddm-rrm/src/it/java/com/epam/digital/data/platform/management/CandidateVersionFormsControllerIT.java [640:692]
void updateForm_modifiedConcurrently() {
// add file to "remote" repo
final var headFormContent = context.getResourceContent(
"/versions/candidates/{versionCandidateId}/forms/{formName}/PUT/valid-form-head.json");
context.addFileToRemoteHeadRepo("/forms/valid-form.json", headFormContent);
// mock gerrit change info for version candidate
final var versionCandidateId = context.createVersionCandidate();
// define expected form content to update
final var expectedFormContent = context.getResourceContent(
"/versions/candidates/{versionCandidateId}/forms/{formName}/PUT/valid-form-version-candidate.json");
// define modified form content to update
final var modifiedFormContent = context.getResourceContent(
"/versions/candidates/{versionCandidateId}/forms/{formName}/PUT/valid-form-version-candidate-modified.json");
//perform get
MockHttpServletResponse response = mockMvc.perform(get("/versions/candidates/{versionCandidateId}/forms/{formName}",
versionCandidateId, "valid-form")).andReturn().getResponse();
//get eTag value from response
String eTag = response.getHeader("ETag");
//perform update with missing eTag
mockMvc.perform(
put("/versions/candidates/{versionCandidateId}/forms/{formName}",
versionCandidateId, "valid-form")
.contentType(MediaType.APPLICATION_JSON)
.content(modifiedFormContent)
.accept(MediaType.APPLICATION_JSON));
// perform query with outdated ETag
mockMvc.perform(
put("/versions/candidates/{versionCandidateId}/forms/{formName}",
versionCandidateId, "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 = context.getFileFromRemoteVersionCandidateRepo(
"/forms/valid-form.json");
JSONAssert.assertEquals(modifiedFormContent, actualFormContent,
new CustomComparator(JSONCompareMode.LENIENT,
new Customization("created", (o1, o2) -> true),
new Customization("modified", (o1, o2) -> true)
));
}