void updateForm_modifiedConcurrently()

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)
          ));
    }