From d5e1ec0571bdd2f42bd1c18a6a62cb5cff73d353 Mon Sep 17 00:00:00 2001 From: qvalentin Date: Sun, 6 Mar 2022 10:53:36 +0100 Subject: [PATCH] Category Entity and VO --- 3-Domain/src/main/java/Category/Category.java | 25 ++++++++++ .../src/main/java/Category/CategoryId.java | 4 ++ .../src/main/java/Category/CategoryName.java | 43 +++++++++++++++++ .../Exeptions/IllegalValueObjectArgument.java | 8 ++++ .../test/java/Category/CategoryIdTest.java | 26 ++++++++++ .../test/java/Category/CategoryNameTest.java | 47 +++++++++++++++++++ .../src/test/java/Category/CategoryTest.java | 29 ++++++++++++ 7 files changed, 182 insertions(+) create mode 100644 3-Domain/src/main/java/Category/Category.java create mode 100644 3-Domain/src/main/java/Category/CategoryId.java create mode 100644 3-Domain/src/main/java/Category/CategoryName.java create mode 100644 3-Domain/src/main/java/Exeptions/IllegalValueObjectArgument.java create mode 100644 3-Domain/src/test/java/Category/CategoryIdTest.java create mode 100644 3-Domain/src/test/java/Category/CategoryNameTest.java create mode 100644 3-Domain/src/test/java/Category/CategoryTest.java diff --git a/3-Domain/src/main/java/Category/Category.java b/3-Domain/src/main/java/Category/Category.java new file mode 100644 index 0000000..b2a9847 --- /dev/null +++ b/3-Domain/src/main/java/Category/Category.java @@ -0,0 +1,25 @@ +package Category; + +/** + * A Category that can be assigned to a link to group links with similar content. + * Categories need a unique name, by which they can be identified for the user. + * They can be created by the user. + */ +public class Category { + + private CategoryName name; + private CategoryId id; + + public Category(CategoryName name, CategoryId id) { + this.name = name; + this.id = id; + } + + public CategoryName getName() { + return name; + } + + public CategoryId getId() { + return id; + } +} diff --git a/3-Domain/src/main/java/Category/CategoryId.java b/3-Domain/src/main/java/Category/CategoryId.java new file mode 100644 index 0000000..d9207f0 --- /dev/null +++ b/3-Domain/src/main/java/Category/CategoryId.java @@ -0,0 +1,4 @@ +package Category; + +public record CategoryId(int id) { +} diff --git a/3-Domain/src/main/java/Category/CategoryName.java b/3-Domain/src/main/java/Category/CategoryName.java new file mode 100644 index 0000000..e86fc6c --- /dev/null +++ b/3-Domain/src/main/java/Category/CategoryName.java @@ -0,0 +1,43 @@ +package Category; + +import Exeptions.IllegalValueObjectArgument; + +import java.util.Objects; + +public class CategoryName { + private final String name; + + public String getName() { + return name; + } + + public CategoryName(final String name) throws IllegalValueObjectArgument { + validateName(name); + this.name = name; + } + + private void validateName(final String name) throws IllegalValueObjectArgument { + if (name == null) { + throw new IllegalValueObjectArgument("A Category name can not be null."); + } + + if (name.isBlank() || name.isEmpty() || name.length() < 3) { + throw new IllegalValueObjectArgument("A Category name must be a valid string of at least 3 characters."); + } + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + CategoryName that = (CategoryName) o; + + return Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return name != null ? name.hashCode() : 0; + } +} diff --git a/3-Domain/src/main/java/Exeptions/IllegalValueObjectArgument.java b/3-Domain/src/main/java/Exeptions/IllegalValueObjectArgument.java new file mode 100644 index 0000000..1092e5e --- /dev/null +++ b/3-Domain/src/main/java/Exeptions/IllegalValueObjectArgument.java @@ -0,0 +1,8 @@ +package Exeptions; + +public class IllegalValueObjectArgument extends Exception { + + public IllegalValueObjectArgument(String message) { + super(message); + } +} diff --git a/3-Domain/src/test/java/Category/CategoryIdTest.java b/3-Domain/src/test/java/Category/CategoryIdTest.java new file mode 100644 index 0000000..86f6b82 --- /dev/null +++ b/3-Domain/src/test/java/Category/CategoryIdTest.java @@ -0,0 +1,26 @@ +package Category; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class CategoryIdTest { + + @Test + void constructorWorks() { + int id = 432; + CategoryId sut = new CategoryId(id); + + assertEquals(id, sut.id()); + } + + @Test + void equalsWorks() { + int id = 432; + CategoryId first = new CategoryId(id); + CategoryId second = new CategoryId(id); + + assertEquals(first, second); + } + +} diff --git a/3-Domain/src/test/java/Category/CategoryNameTest.java b/3-Domain/src/test/java/Category/CategoryNameTest.java new file mode 100644 index 0000000..ca46e46 --- /dev/null +++ b/3-Domain/src/test/java/Category/CategoryNameTest.java @@ -0,0 +1,47 @@ +package Category; + +import Exeptions.IllegalValueObjectArgument; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class CategoryNameTest { + + @Test + void getNameWorks() throws IllegalValueObjectArgument { + String name = "libaries"; + CategoryName sut = new CategoryName(name); + + assertEquals(name, sut.getName()); + } + + @Test + void constructorThrowsNull() { + String nullString = null; + assertThrows(IllegalValueObjectArgument.class, () -> new CategoryName(nullString)); + } + + @Test + void constructorThrowsBlank() { + String blankString = " "; + assertThrows(IllegalValueObjectArgument.class, () -> new CategoryName(blankString)); + } + + @Test + void constructorThrowsEmpty() { + String emptyString = ""; + assertThrows(IllegalValueObjectArgument.class, () -> new CategoryName(emptyString)); + } + + @Test + void constructorThrowsTooShort() { + String shortString = "da"; + assertThrows(IllegalValueObjectArgument.class, () -> new CategoryName(shortString)); + } + + @Test + void testEquals() { + } + +} diff --git a/3-Domain/src/test/java/Category/CategoryTest.java b/3-Domain/src/test/java/Category/CategoryTest.java new file mode 100644 index 0000000..b08f5d9 --- /dev/null +++ b/3-Domain/src/test/java/Category/CategoryTest.java @@ -0,0 +1,29 @@ +package Category; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; + +class CategoryTest { + + @Test + void getNameWorks() { + CategoryId id = new CategoryId(32); + CategoryName name = mock(CategoryName.class); + + Category sut = new Category(name, id); + + assertEquals(name, sut.getName()); + } + + @Test + void getIdWorks() { + CategoryId id = new CategoryId(32); + CategoryName name = mock(CategoryName.class); + + Category sut = new Category(name, id); + + assertEquals(id, sut.getId()); + } +}