From 52efaf20a81a4d7d4e5cd287003c092231c50576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98ystein=20Kristoffer=20Tveit?= Date: Thu, 23 Sep 2021 12:20:14 +0000 Subject: [PATCH] Resolve "Add model objects for flashcard data" --- .vscode/java.code-snippets | 65 ++++++++++++++++ flashy/core/pom.xml | 10 +++ .../gr2141/core/models/CardContent.java | 30 ++++++++ .../gr2141/core/models/CardDeck.java | 77 +++++++++++++++++++ .../gr2141/core/models/Flashcard.java | 43 +++++++++++ .../serializers/CardContentDeserializer.java | 39 ++++++++++ .../serializers/CardContentSerializer.java | 32 ++++++++ .../serializers/CardDeckDeserializer.java | 42 ++++++++++ .../serializers/CardDeckSerializer.java | 30 ++++++++ .../serializers/FlashcardDeserializer.java | 40 ++++++++++ .../serializers/FlashcardSerializer.java | 29 +++++++ .../serializers/ModelSerializingModule.java | 23 ++++++ .../it1901/groups_2021/gr2141/json/.gitkeep | 0 .../gr2141/core/models/CardContentTest.java | 45 +++++++++++ .../gr2141/core/models/CardDeckTest.java | 48 ++++++++++++ .../gr2141/core/models/FlashcardTest.java | 46 +++++++++++ .../models/serializers/SerializerTest.java | 75 ++++++++++++++++++ 17 files changed, 674 insertions(+) create mode 100644 .vscode/java.code-snippets create mode 100644 flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/CardContent.java create mode 100644 flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/CardDeck.java create mode 100644 flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/Flashcard.java create mode 100644 flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardContentDeserializer.java create mode 100644 flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardContentSerializer.java create mode 100644 flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardDeckDeserializer.java create mode 100644 flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardDeckSerializer.java create mode 100644 flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/FlashcardDeserializer.java create mode 100644 flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/FlashcardSerializer.java create mode 100644 flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/ModelSerializingModule.java delete mode 100644 flashy/core/src/main/java/it1901/groups_2021/gr2141/json/.gitkeep create mode 100644 flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/CardContentTest.java create mode 100644 flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/CardDeckTest.java create mode 100644 flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/FlashcardTest.java create mode 100644 flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/serializers/SerializerTest.java diff --git a/.vscode/java.code-snippets b/.vscode/java.code-snippets new file mode 100644 index 0000000..0031f52 --- /dev/null +++ b/.vscode/java.code-snippets @@ -0,0 +1,65 @@ +{ + "Serializer": { + "prefix": ["srz", "sz"], + "description": "Boilerplate for a jackson serializer", + "body": [ + "import java.io.IOException;", + "", + "import com.fasterxml.jackson.core.JsonGenerator;", + "import com.fasterxml.jackson.databind.SerializerProvider;", + "import com.fasterxml.jackson.databind.ser.std.StdSerializer;", + "", + "public class ${1:Item}Serializer extends StdSerializer<${1:Item}> {", + " public ${1:Item}Serializer() {", + " this(null);", + " }", + "", + " public ${1:Item}Serializer(Class<${1:Item}> t) {", + " super(t);", + " }", + "", + " @Override", + " public void serialize(${1:Item} ${2:item}, JsonGenerator jgenerator, SerializerProvider provider) throws IOException {", + " $0", + " }", + "}" + ] + }, + "Deserializer": { + "prefix": ["dsz"], + "description": "Boilerplate for a jackson deserializer", + "body": [ + "import java.io.IOException;", + "", + "import com.fasterxml.jackson.core.JacksonException;", + "import com.fasterxml.jackson.core.JsonParser;", + "import com.fasterxml.jackson.databind.DeserializationContext;", + "import com.fasterxml.jackson.databind.deser.std.StdDeserializer;", + "", + "public class ${1:Item}Deserializer extends StdDeserializer<${1:Item}> {", + " public ${1:Item}Deserializer() {", + " this(null);", + " }", + "", + " public ${1:Item}Deserializer(Class<${1:Item}> t) {", + " super(t);", + " }", + "", + " @Override", + " public ${1:Item} deserialize(JsonParser jparser, DeserializationContext context) throws IOException, JacksonException {", + " $0", + " }", + "}" + ] + }, + "Test": { + "prefix": ["tst"], + "description": "Boilerplate for a standard test", + "body": [ + "@Test", + "public void test$1() {", + " $0", + "}" + ] + } +} \ No newline at end of file diff --git a/flashy/core/pom.xml b/flashy/core/pom.xml index 70f7ff7..ccddca8 100644 --- a/flashy/core/pom.xml +++ b/flashy/core/pom.xml @@ -10,4 +10,14 @@ core Core + + + + + com.fasterxml.jackson.core + jackson-databind + 2.13.0-rc2 + + + \ No newline at end of file diff --git a/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/CardContent.java b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/CardContent.java new file mode 100644 index 0000000..32dac8f --- /dev/null +++ b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/CardContent.java @@ -0,0 +1,30 @@ +package it1901.groups_2021.gr2141.core.models; + +import java.util.List; + +public class CardContent { + private List lines; + + public CardContent(List lines) { + if (lines == null || lines.size() == 0) + throw new IllegalArgumentException("Lines can not be null/empty"); + + this.lines = lines; + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof CardContent)) + return false; + + return this.getLines().equals(((CardContent) obj).getLines()); + } + + public boolean isEmpty() { + return lines.isEmpty(); + } + + public List getLines() { + return lines; + } +} diff --git a/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/CardDeck.java b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/CardDeck.java new file mode 100644 index 0000000..a7bf22b --- /dev/null +++ b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/CardDeck.java @@ -0,0 +1,77 @@ +package it1901.groups_2021.gr2141.core.models; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +public class CardDeck { + private List flashcards; + private List> onChangedListeners; + + public CardDeck() { + this.flashcards = new ArrayList<>(); + } + + public CardDeck(List flashcards) { + if (flashcards == null) + throw new IllegalArgumentException("Flashcards can not be null"); + + this.flashcards = flashcards; + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof CardDeck)) + return false; + + return this.getFlashcards().equals(((CardDeck) obj).getFlashcards()); + } + + public List getFlashcards() { + return flashcards; + } + + public int getNumberOfCards() { + return flashcards.size(); + } + + public void onChanged(Consumer function) { + if (function == null) + throw new IllegalArgumentException("Function can not be null"); + + this.onChangedListeners.add(function); + } + + private void updateListeners() { + onChangedListeners.forEach((f) -> f.accept(this)); + } + + public void add(Flashcard card) { + if (card == null) + throw new IllegalArgumentException("Flashcard can not be null"); + + flashcards.add(card); + updateListeners(); + } + + public void update(int index, Flashcard card) { + if (card == null) + throw new IllegalArgumentException("Flashcard can not be null"); + + if (index < 0 || index > flashcards.size()) + throw new IllegalArgumentException("Can not update card at index: " + index); + + flashcards.remove(index); + flashcards.add(index, card); + updateListeners(); + } + + public void remove(int index) { + if (index < 0 || index > flashcards.size()) + throw new IllegalArgumentException("Can not remove card at index: " + index); + + flashcards.remove(index); + updateListeners(); + } + +} diff --git a/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/Flashcard.java b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/Flashcard.java new file mode 100644 index 0000000..0a2c885 --- /dev/null +++ b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/Flashcard.java @@ -0,0 +1,43 @@ +package it1901.groups_2021.gr2141.core.models; + +public class Flashcard { + private CardContent front; + private CardContent back; + + public Flashcard(CardContent front, CardContent back) { + if (front == null || back == null) + throw new IllegalArgumentException("Card Content can not be null"); + this.front = front; + this.back = back; + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof Flashcard)) + return false; + + Flashcard card2 = (Flashcard) obj; + return this.getFront().equals(card2.getFront()) && this.getBack().equals(card2.getBack()); + } + + public CardContent getFront() { + return front; + } + + public CardContent getBack() { + return back; + } + + public void setFront(CardContent front) { + if (front.isEmpty()) + throw new IllegalArgumentException("Card Content can not be empty"); + this.front = front; + } + + public void setBack(CardContent back) { + if (back.isEmpty()) + throw new IllegalArgumentException("Card Content can not be empty"); + this.back = back; + } + +} diff --git a/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardContentDeserializer.java b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardContentDeserializer.java new file mode 100644 index 0000000..da2b1b7 --- /dev/null +++ b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardContentDeserializer.java @@ -0,0 +1,39 @@ +package it1901.groups_2021.gr2141.core.models.serializers; + +import it1901.groups_2021.gr2141.core.models.CardContent; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.JsonNode; + +public class CardContentDeserializer extends StdDeserializer { + public CardContentDeserializer() { + this(null); + } + + public CardContentDeserializer(Class t) { + super(t); + } + + @Override + public CardContent deserialize(JsonParser jparser, DeserializationContext context) + throws IOException, JacksonException { + JsonNode node = jparser.getCodec().readTree(jparser); + return deserialize(node); + } + + CardContent deserialize(JsonNode node) { + List lines = new ArrayList<>(); + + for (JsonNode n : node.get("lines")) + lines.add(n.asText()); + + return new CardContent(lines); + } +} diff --git a/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardContentSerializer.java b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardContentSerializer.java new file mode 100644 index 0000000..f19a2f8 --- /dev/null +++ b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardContentSerializer.java @@ -0,0 +1,32 @@ +package it1901.groups_2021.gr2141.core.models.serializers; + +import it1901.groups_2021.gr2141.core.models.CardContent; +import java.io.IOException; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class CardContentSerializer extends StdSerializer { + public CardContentSerializer() { + this(null); + } + + public CardContentSerializer(Class t) { + super(t); + } + + @Override + public void serialize(CardContent cardContent, JsonGenerator jgenerator, SerializerProvider provider) + throws IOException { + jgenerator.writeStartObject(); + jgenerator.writeFieldName("lines"); + + jgenerator.writeStartArray(); + for (String line : cardContent.getLines()) + jgenerator.writeString(line); + jgenerator.writeEndArray(); + + jgenerator.writeEndObject(); + } +} diff --git a/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardDeckDeserializer.java b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardDeckDeserializer.java new file mode 100644 index 0000000..92746e9 --- /dev/null +++ b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardDeckDeserializer.java @@ -0,0 +1,42 @@ +package it1901.groups_2021.gr2141.core.models.serializers; + +import it1901.groups_2021.gr2141.core.models.CardDeck; +import it1901.groups_2021.gr2141.core.models.Flashcard; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; + +public class CardDeckDeserializer extends StdDeserializer { + + private FlashcardDeserializer flashcardDeserializer = new FlashcardDeserializer(); + + public CardDeckDeserializer() { + this(null); + } + + public CardDeckDeserializer(Class t) { + super(t); + } + + @Override + public CardDeck deserialize(JsonParser jparser, DeserializationContext context) throws IOException, JacksonException { + JsonNode node = jparser.getCodec().readTree(jparser); + return deserialize(node); + } + + CardDeck deserialize(JsonNode node) { + List cards = new ArrayList<>(); + + for (JsonNode n : node.get("flashcards")) + cards.add(flashcardDeserializer.deserialize(n)); + + return new CardDeck(cards); + } +} \ No newline at end of file diff --git a/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardDeckSerializer.java b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardDeckSerializer.java new file mode 100644 index 0000000..d26d1ab --- /dev/null +++ b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/CardDeckSerializer.java @@ -0,0 +1,30 @@ +package it1901.groups_2021.gr2141.core.models.serializers; + +import it1901.groups_2021.gr2141.core.models.CardDeck; + +import java.io.IOException; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class CardDeckSerializer extends StdSerializer { + public CardDeckSerializer() { + this(null); + } + + public CardDeckSerializer(Class t) { + super(t); + } + + @Override + public void serialize(CardDeck cardDeck, JsonGenerator jgenerator, SerializerProvider provider) throws IOException { + jgenerator.writeStartObject(); + jgenerator.writeFieldName("flashcards"); + jgenerator.writeStartArray(); + for (var flashcard : cardDeck.getFlashcards()) + jgenerator.writeObject(flashcard); + jgenerator.writeEndArray(); + jgenerator.writeEndObject(); + } +} \ No newline at end of file diff --git a/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/FlashcardDeserializer.java b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/FlashcardDeserializer.java new file mode 100644 index 0000000..3310bf3 --- /dev/null +++ b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/FlashcardDeserializer.java @@ -0,0 +1,40 @@ +package it1901.groups_2021.gr2141.core.models.serializers; + +import it1901.groups_2021.gr2141.core.models.Flashcard; +import it1901.groups_2021.gr2141.core.models.CardContent; + +import java.io.IOException; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; + +public class FlashcardDeserializer extends StdDeserializer { + + private CardContentDeserializer cardContentDeserializer = new CardContentDeserializer(); + + public FlashcardDeserializer() { + this(null); + } + + public FlashcardDeserializer(Class t) { + super(t); + } + + @Override + public Flashcard deserialize(JsonParser jparser, DeserializationContext context) throws IOException, JacksonException { + JsonNode node = jparser.getCodec().readTree(jparser); + + return deserialize(node); + } + + Flashcard deserialize(JsonNode node) { + CardContent front = cardContentDeserializer.deserialize(node.get("front")); + CardContent back = cardContentDeserializer.deserialize(node.get("back")); + + return new Flashcard(front, back); + } + +} diff --git a/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/FlashcardSerializer.java b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/FlashcardSerializer.java new file mode 100644 index 0000000..d331304 --- /dev/null +++ b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/FlashcardSerializer.java @@ -0,0 +1,29 @@ +package it1901.groups_2021.gr2141.core.models.serializers; + +import it1901.groups_2021.gr2141.core.models.Flashcard; + +import java.io.IOException; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class FlashcardSerializer extends StdSerializer { + public FlashcardSerializer() { + this(null); + } + + public FlashcardSerializer(Class t) { + super(t); + } + + @Override + public void serialize(Flashcard flashcard, JsonGenerator jgenerator, SerializerProvider provider) throws IOException { + jgenerator.writeStartObject(); + jgenerator.writeFieldName("front"); + jgenerator.writeObject(flashcard.getFront()); + jgenerator.writeFieldName("back"); + jgenerator.writeObject(flashcard.getBack()); + jgenerator.writeEndObject(); + } +} diff --git a/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/ModelSerializingModule.java b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/ModelSerializingModule.java new file mode 100644 index 0000000..cfb7cc6 --- /dev/null +++ b/flashy/core/src/main/java/it1901/groups_2021/gr2141/core/models/serializers/ModelSerializingModule.java @@ -0,0 +1,23 @@ +package it1901.groups_2021.gr2141.core.models.serializers; + +import com.fasterxml.jackson.core.Version; +import com.fasterxml.jackson.databind.module.SimpleModule; + +import it1901.groups_2021.gr2141.core.models.CardContent; +import it1901.groups_2021.gr2141.core.models.CardDeck; +import it1901.groups_2021.gr2141.core.models.Flashcard; + +public class ModelSerializingModule extends SimpleModule { + + private static final String NAME = "FlashcardModule"; + + public ModelSerializingModule() { + super(NAME, Version.unknownVersion()); + addSerializer(CardContent.class, new CardContentSerializer()); + addSerializer(Flashcard.class, new FlashcardSerializer()); + addSerializer(CardDeck.class, new CardDeckSerializer()); + addDeserializer(CardContent.class, new CardContentDeserializer()); + addDeserializer(Flashcard.class, new FlashcardDeserializer()); + addDeserializer(CardDeck.class, new CardDeckDeserializer()); + } +} diff --git a/flashy/core/src/main/java/it1901/groups_2021/gr2141/json/.gitkeep b/flashy/core/src/main/java/it1901/groups_2021/gr2141/json/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/CardContentTest.java b/flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/CardContentTest.java new file mode 100644 index 0000000..67d28d5 --- /dev/null +++ b/flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/CardContentTest.java @@ -0,0 +1,45 @@ +package it1901.groups_2021.gr2141.core.models; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class CardContentTest { + + private List exampleLines; + + @BeforeEach + public void setUpExampleData() { + exampleLines = List.of("asdf", "fdsa", "asdf"); + } + + @Test + public void testNullInput() { + assertThrows(IllegalArgumentException.class, () -> new CardContent(null)); + } + + @Test + public void testEmptyListInput() { + assertThrows(IllegalArgumentException.class, () -> new CardContent(List.of())); + } + + @Test + public void testRealInput() { + CardContent content = new CardContent(exampleLines); + assertEquals(exampleLines, content.getLines()); + } + + @Test + public void testEquality() { + CardContent cc1 = new CardContent(exampleLines); + CardContent cc2 = new CardContent(exampleLines); + + assertNotEquals(cc1.hashCode(), cc2.hashCode()); + assertEquals(cc1, cc2); + } +} diff --git a/flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/CardDeckTest.java b/flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/CardDeckTest.java new file mode 100644 index 0000000..8adaae5 --- /dev/null +++ b/flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/CardDeckTest.java @@ -0,0 +1,48 @@ +package it1901.groups_2021.gr2141.core.models; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class CardDeckTest { + + List exampleFlashcardList; + + @BeforeEach + public void setUpExampleData() { + Flashcard card1 = new Flashcard(new CardContent(List.of("1", "2")), new CardContent(List.of("3"))); + Flashcard card2 = new Flashcard(new CardContent(List.of("why")), new CardContent(List.of("por qué"))); + exampleFlashcardList = List.of(card1, card2); + } + + @Test + public void testNullInput() { + assertThrows(IllegalArgumentException.class, () -> new CardDeck(null)); + } + + @Test + public void testEmptyListInput() { + var cardDeck = new CardDeck(List.of()); + assertEquals(0, cardDeck.getNumberOfCards()); + } + + @Test + public void testRealInput() { + CardDeck cardDeck = new CardDeck(exampleFlashcardList); + assertEquals(exampleFlashcardList, cardDeck.getFlashcards()); + } + + @Test + public void testEquality() { + var cardDeck1 = new CardDeck(exampleFlashcardList); + var cardDeck2 = new CardDeck(exampleFlashcardList); + + assertNotEquals(cardDeck1.hashCode(), cardDeck2.hashCode()); + assertEquals(cardDeck1, cardDeck2); + } +} diff --git a/flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/FlashcardTest.java b/flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/FlashcardTest.java new file mode 100644 index 0000000..8e8df81 --- /dev/null +++ b/flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/FlashcardTest.java @@ -0,0 +1,46 @@ +package it1901.groups_2021.gr2141.core.models; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class FlashcardTest { + + CardContent exampleCardContent1; + CardContent exampleCardContent2; + + @BeforeEach + public void setUpExampleData() { + exampleCardContent1 = new CardContent(List.of("1")); + exampleCardContent2 = new CardContent(List.of("2", "3")); + } + + @Test + public void testNullInput() { + assertThrows(IllegalArgumentException.class, () -> new Flashcard(null, null)); + assertThrows(IllegalArgumentException.class, () -> new Flashcard(null, exampleCardContent1)); + assertThrows(IllegalArgumentException.class, () -> new Flashcard(exampleCardContent1, null)); + } + + @Test + public void testRealInput() { + Flashcard card = new Flashcard(exampleCardContent1, exampleCardContent2); + assertEquals(card.getFront(), exampleCardContent1); + assertEquals(card.getBack(), exampleCardContent2); + } + + @Test + public void testEquality() { + Flashcard card1 = new Flashcard(exampleCardContent1, exampleCardContent2); + Flashcard card2 = new Flashcard(exampleCardContent1, exampleCardContent2); + + assertNotEquals(card1.hashCode(), card2.hashCode()); + assertEquals(card1, card2); + } + +} diff --git a/flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/serializers/SerializerTest.java b/flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/serializers/SerializerTest.java new file mode 100644 index 0000000..0161e86 --- /dev/null +++ b/flashy/core/src/test/java/it1901/groups_2021/gr2141/core/models/serializers/SerializerTest.java @@ -0,0 +1,75 @@ +package it1901.groups_2021.gr2141.core.models.serializers; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; + +import java.util.List; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import it1901.groups_2021.gr2141.core.models.CardContent; +import it1901.groups_2021.gr2141.core.models.CardDeck; +import it1901.groups_2021.gr2141.core.models.Flashcard; + +public class SerializerTest { + + private static ObjectMapper mapper; + private CardDeck exampleCardDeck; + private String exampleSerializedCardDeck; + + @BeforeAll + public static void setUpMapper() { + mapper = new ObjectMapper(); + mapper.registerModule(new ModelSerializingModule()); + } + + @BeforeEach + public void setUpExampleData() { + var front = new CardContent(List.of("A cow")); + var back = new CardContent(List.of("Nǎiniú", "奶牛")); + var card = new Flashcard(front, back); + exampleCardDeck = new CardDeck(List.of(card)); + exampleSerializedCardDeck = "{\"flashcards\":[{\"front\":{\"lines\":[\"A cow\"]},\"back\":{\"lines\":[\"Nǎiniú\",\"奶牛\"]}}]}"; + } + + @Test + public void testSerializeExampleObject() { + String serializedCardDeck = null; + try { + serializedCardDeck = mapper.writeValueAsString(exampleCardDeck); + } catch (JsonProcessingException e) { + fail(e); + } + assertEquals(exampleSerializedCardDeck, serializedCardDeck); + } + + @Test + public void testDeserializeExampleObject() { + CardDeck cardDeck = null; + try { + cardDeck = mapper.readValue(exampleSerializedCardDeck, CardDeck.class); + } catch (JsonProcessingException e) { + fail(e); + } + assertEquals(exampleCardDeck, cardDeck); + + } + + @Test + public void testSerializeDeserializeEquals() { + CardDeck cardDeck2 = null; + try { + String deserializedCardDeck = mapper.writeValueAsString(exampleCardDeck); + cardDeck2 = mapper.readValue(deserializedCardDeck, CardDeck.class); + } catch (JsonProcessingException e) { + fail(e); + } + assertEquals(exampleCardDeck, cardDeck2); + } + +}