From e31465a1b5b6688a20891b3edef50fbca0eeb01e Mon Sep 17 00:00:00 2001 From: P0nk Date: Tue, 25 Jul 2023 17:52:38 +0200 Subject: [PATCH] Add MonsterCard --- .../database/monsterbook/MonsterCard.java | 17 +++++++ .../database/monsterbook/MonsterCardTest.java | 48 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/main/java/database/monsterbook/MonsterCard.java create mode 100644 src/test/java/database/monsterbook/MonsterCardTest.java diff --git a/src/main/java/database/monsterbook/MonsterCard.java b/src/main/java/database/monsterbook/MonsterCard.java new file mode 100644 index 0000000000..0f52bb8898 --- /dev/null +++ b/src/main/java/database/monsterbook/MonsterCard.java @@ -0,0 +1,17 @@ +package database.monsterbook; + +public record MonsterCard(int cardId, byte level) { + + public MonsterCard { + if (cardId / 10_000 != 238) { + throw new IllegalArgumentException("Invalid monster card id: %d".formatted(cardId)); + } + if (level < 0 || level > 5) { + throw new IllegalArgumentException("Invalid monster card level: %d".formatted(level)); + } + } + + public boolean isSpecial() { + return cardId / 1000 == 2388; + } +} diff --git a/src/test/java/database/monsterbook/MonsterCardTest.java b/src/test/java/database/monsterbook/MonsterCardTest.java new file mode 100644 index 0000000000..1b39726f3d --- /dev/null +++ b/src/test/java/database/monsterbook/MonsterCardTest.java @@ -0,0 +1,48 @@ +package database.monsterbook; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import static org.junit.jupiter.api.Assertions.*; + +class MonsterCardTest { + + @Test + void invalidCardId() { + assertThrows(IllegalArgumentException.class, () -> new MonsterCard(123456, validLevel())); + } + + @ParameterizedTest + @ValueSource(bytes = {-1, 6}) + void invalidLevel(byte invalidLevel) { + assertThrows(IllegalArgumentException.class, () -> new MonsterCard(validCardId(), invalidLevel)); + } + + @Test + public void createValidCard() { + assertDoesNotThrow(() -> new MonsterCard(validCardId(), validLevel())); + } + + @Test + void specialCardIsSpecial() { + var specialCard = new MonsterCard(2388000, validLevel()); + + assertTrue(specialCard.isSpecial()); + } + + @Test + void normalCardIsNotSpecial() { + var normalCard = new MonsterCard(2381234, validLevel()); + + assertFalse(normalCard.isSpecial()); + } + + private int validCardId() { + return 2380000; + } + + private byte validLevel() { + return 1; + } +}