void updateForm_validETag()

in ddm-rrm/src/it/java/com/epam/digital/data/platform/management/MasterVersionFormsControllerIT.java [416:479]


    void updateForm_validETag() {
      // add file to "remote" repo
      final var headFormContent = context.getResourceContent(
          "/versions/master/forms/{formName}/PUT/valid-form-head.json");
      context.addFileToRemoteHeadRepo("/forms/valid-form1.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");

      //perform get
      MockHttpServletResponse response = mockMvc.perform(get("/versions/master/forms/{formName}",
           "valid-form1")).andReturn().getResponse();

      //get eTag value from response
      String eTag = response.getHeader("ETag");

      // perform query
      mockMvc.perform(
          put("/versions/master/forms/{formName}",
              "valid-form1")
              .contentType(MediaType.APPLICATION_JSON)
              .content(expectedFormContent)
              .header("If-Match", eTag)
              .accept(MediaType.APPLICATION_JSON)
      ).andExpectAll(
          status().isOk(),
          content().contentType(MediaType.APPLICATION_JSON),
          jsonPath("$.name", is("valid-form")),
          jsonPath("$.title", is("Valid form Version Candidate"))
      );

      // define expected created date for form
      final var expectedCreated = context.getHeadRepoDatesByPath(
          "forms/valid-form1.json").getCreated();

      // assert that actual content and expected have no differences except for created and updated dates
      final var actualFormContent = mockMvc.perform(
          get("/versions/master/forms/{formName}","valid-form1")
      ).andExpectAll(
          status().isOk(),
          content().contentType(MediaType.APPLICATION_JSON),
          jsonPath("$.name", is("valid-form")),
          jsonPath("$.title", is("Valid form Version Candidate"))
      ).andReturn().getResponse().getContentAsString();

      JSONAssert.assertEquals(expectedFormContent, actualFormContent,
          new CustomComparator(JSONCompareMode.LENIENT,
              new Customization("created", (o1, o2) -> true),
              new Customization("modified", (o1, o2) -> true)
          ));

      // assert that form dates are close to current date
      var form = JsonParser.parseString(actualFormContent).getAsJsonObject();
      final var created = LocalDateTime.parse(form.get("created").getAsString(),
          JacksonConfig.DATE_TIME_FORMATTER).format(JacksonConfig.DATE_TIME_FORMATTER);
      final var updated = LocalDateTime.parse(form.get("modified").getAsString(),
          JacksonConfig.DATE_TIME_FORMATTER).format(JacksonConfig.DATE_TIME_FORMATTER);
      Assertions.assertThat(created)
          .isEqualTo(expectedCreated);
      Assertions.assertThat(LocalDateTime.parse(updated, JacksonConfig.DATE_TIME_FORMATTER))
          .isCloseTo(LocalDateTime.now(), within(1, ChronoUnit.MINUTES));
    }