Category Entity and VO
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
d7bc76c5fa
commit
d5e1ec0571
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
package Category;
|
||||
|
||||
public record CategoryId(int id) {
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package Exeptions;
|
||||
|
||||
public class IllegalValueObjectArgument extends Exception {
|
||||
|
||||
public IllegalValueObjectArgument(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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() {
|
||||
}
|
||||
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
Reference in New Issue