From 6f45d059e7a2be850c0e490987f4acaa5ebd924e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hallvard=20Tr=C3=A6tteberg?= <hal@ntnu.no> Date: Thu, 19 Nov 2020 00:13:03 +0000 Subject: [PATCH] Added some logic and a test, and some docs. --- todolist/asciidocs/docs/README.adoc | 17 ++++++++++++----- todolist/asciidocs/docs/core.adoc | 2 ++ .../src/main/java/todolist/core/TodoList.java | 6 +++++- .../test/java/todolist/core/TodoListTest.java | 8 ++++++++ 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/todolist/asciidocs/docs/README.adoc b/todolist/asciidocs/docs/README.adoc index 9bf7f79..14e94ec 100644 --- a/todolist/asciidocs/docs/README.adoc +++ b/todolist/asciidocs/docs/README.adoc @@ -10,17 +10,24 @@ bygget med image:maven-logo-black-on-white.png[Maven logo,60,link="https://maven == Introduksjon -Todo-list er en applikasjon for håndtering av todo-lister. +Todolist er en applikasjon for håndtering av todo-lister. Den er implementert som en kombinasjon av en JavaFX-app og et REST API som appen bruker for håndtering av data. -Med et REST API adskilt fra appen, så er det lett å utvide med andre klienter, +Med et REST API adskilt fra appen, er det lett å støtte andre klienter som bruker de samme dataene, f.eks. en "native"-app for Android eller web-klient basert på React. +== arkitekturen +En kan tenke på appen som delt i ulike lag, med et indre lag som håndterer representasjon og lagring av data, og +et brukergrensesnittlag som brukeren interagerer med. Representasjonsdelen av det indre laget kalles ofte domenelogikken, +fordi det bestemmer strukturen på dataene og hva en har lov til å gjøre med det. REST API-et har på en måte en lignende struktur, +hvor brukergrensesnittet er byttet ut med et API som en når over web-protokollen HTTP. + == Modularisering -Todolist er strukturert i et sett _moduler_. Domenelogikken ligger i core-modulen, appen i fxui (og fxutil), -mens REST API-et er fordelt over to moduler, restapi og restserver (og en alternativ implementasjon i springboot/restserver): +Todolist er strukturert i et sett _moduler_, hvor hver modul fokuserer på en viss funksjonalitet eller del av arkitekturen. +Det indre laget ligger i core-modulen, brukergrensesnittet i fxui (og fxutil), mens REST API-et er fordelt over to moduler, +restapi og restserver (og en alternativ implementasjon i springboot/restserver): -- <<core.adoc#, core>> - domenelogikken med alle klassene for å representeree todo-lister og -elementer, og støtte for serialisering og derialisering som JSON med Jackson-biblioteket +- <<core.adoc#, core>> - klasser for representasjon og lagring (som JSON) av todo-lister og -elementer - <<fxui.adoc#, fxui (og fxutil)>> - app-brukergrensesnitt basert på JavaFX og FXML - <<restapi.adoc#, restapi og restserver>> - REST API og server basert på JAX-RS-standarden og Jersey-implementasjonen - <<springboot-restapi.adoc#, springboot/restserver>> - _alternativ_ REST API og server basert på spring boot-rammeverket diff --git a/todolist/asciidocs/docs/core.adoc b/todolist/asciidocs/docs/core.adoc index ef8f1bb..5e1824a 100644 --- a/todolist/asciidocs/docs/core.adoc +++ b/todolist/asciidocs/docs/core.adoc @@ -1 +1,3 @@ == Kjernelogikken + +En kan tenke på appen som delt i ulike lag, med \ No newline at end of file diff --git a/todolist/core/src/main/java/todolist/core/TodoList.java b/todolist/core/src/main/java/todolist/core/TodoList.java index 5f3aabd..8272bad 100644 --- a/todolist/core/src/main/java/todolist/core/TodoList.java +++ b/todolist/core/src/main/java/todolist/core/TodoList.java @@ -32,9 +32,10 @@ public class TodoList extends AbstractTodoList { * its contents is copied in to a new TodoListItem and that is added instead. * * @param items the TodoItems to add + * @throws IllegalStateException if an item is a TodoListItem not belonging to this TodoList */ @Override - public void addTodoItems(TodoItem... items) { + public void addTodoItems(TodoItem... items) throws IllegalStateException { for (TodoItem item : items) { TodoListItem todoListItem = null; if (item instanceof TodoListItem) { @@ -45,6 +46,9 @@ public class TodoList extends AbstractTodoList { todoListItem.setChecked(item.isChecked()); todoListItem.setDeadline(item.getDeadline()); } + if (todoListItem.getTodoList() != this) { + throw new IllegalStateException("TodoListItem does not belong to this list TodoList"); + } this.items.add(todoListItem); } fireTodoListChanged(); diff --git a/todolist/core/src/test/java/todolist/core/TodoListTest.java b/todolist/core/src/test/java/todolist/core/TodoListTest.java index 2913988..4e0ba10 100644 --- a/todolist/core/src/test/java/todolist/core/TodoListTest.java +++ b/todolist/core/src/test/java/todolist/core/TodoListTest.java @@ -7,6 +7,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.time.LocalDateTime; import java.util.Collection; import java.util.Iterator; @@ -38,6 +39,13 @@ public class TodoListTest { assertEquals(item.getDeadline(), addedItem.getDeadline()); } + @Test + public void testAddToDoItem_ownedByOtherTodoList() { + // create item belonging to other list + TodoItem listItem = new TodoList("other").createTodoItem(); + assertThrows(IllegalStateException.class, () -> newList.addTodoItem(listItem)); + } + // tests for getCheckedItems @Test -- GitLab