Skip to content
Snippets Groups Projects
Commit 6f45d059 authored by Hallvard Trætteberg's avatar Hallvard Trætteberg
Browse files

Added some logic and a test, and some docs.

parent fd0a6fc2
No related branches found
No related tags found
No related merge requests found
......@@ -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, 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
......
== Kjernelogikken
En kan tenke på appen som delt i ulike lag, med
\ No newline at end of file
......@@ -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();
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment