Spring Boot @RestRepositoryResouce: исправление логического свойства не работает - PullRequest
0 голосов
/ 04 января 2019

У меня есть простой класс модели:

@Entity
public class Task {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  @Size(min = 1, max = 80)
  @NotNull
  private String text;

  @NotNull
  private boolean isCompleted;

А вот мой репозиторий Spring Rest Data:

@CrossOrigin // TODO: configure specific domains
@RepositoryRestResource(collectionResourceRel = "task", path 
= "task")
public interface TaskRepository extends CrudRepository<Task, 
Long> {

}

Так что, как проверка работоспособности, я создавал несколько тестов дляпроверьте конечные точки, которые создаются автоматически.публиковать, удалять и получать работает просто отлично.Однако я не могу правильно обновить свойство isCompleted.

Вот мои методы тестирования.ПЕРВЫЙ не проходит без проблем, но ВТОРОЙ отказывает.

    @Test
    void testUpdateTaskText() throws Exception {
      Task task1 = new Task("task1");
      taskRepository.save(task1);

      // update task text and hit update end point
      task1.setText("updatedText");
      String json = gson.toJson(task1);
      this.mvc.perform(patch("/task/1")
            .contentType(MediaType.APPLICATION_JSON_UTF8)
            .content(json))
            .andExpect(status().isNoContent());

      // Pull the task from the repository and verify text="updatedText"
      Task updatedTask = taskRepository.findById((long) 1).get();
      assertEquals("updatedText", updatedTask.getText());
}

    @Test
    void testUpdateTaskCompleted() throws Exception {
      Task task1 = new Task("task1");
      task1.setCompleted(false);
      taskRepository.save(task1);

      // ensure repository properly stores isCompleted = false
      Task updatedTask = taskRepository.findById((long) 1).get();
      assertFalse(updatedTask.isCompleted());

      //Update isCompleted = true and hit update end point
      task1.setCompleted(true);
      String json = gson.toJson(task1);
      this.mvc.perform(patch("/task/1")
            .contentType(MediaType.APPLICATION_JSON_UTF8)
            .content(json))
            .andExpect(status().isNoContent());

      // Pull the task from the repository and verify isCompleted=true
      updatedTask = taskRepository.findById((long) 1).get();
      assertTrue(updatedTask.isCompleted());
}

РЕДАКТИРОВАТЬ: Измененные методы испытаний, чтобы быть ясно.

1 Ответ

0 голосов
/ 04 января 2019

Наконец разобрался.Оказывается, что метод получения и установки в моем классе моделей был назван неправильно.

Они должны были быть:

    public boolean getIsCompleted() {
    return isCompleted;
}

    public void setIsCompleted(boolean isCompleted) {
    this.isCompleted = isCompleted;
}

Найден ответ согласно этой SO SO: JSON Post запрос на логическое значениеполе отправляет false по умолчанию

...