rwrg/src/test/java/EquipmentTest.java
2025-10-31 15:51:53 +01:00

229 lines
7.3 KiB
Java

import Entity.Player;
import Item.*;
import Job.Wizard;
import Job.Knight;
import org.junit.jupiter.api.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.nullValue;
import static org.junit.jupiter.api.Assertions.*;
public class EquipmentTest {
private final Knight knight = new Knight();
private final Wizard wizard = new Wizard();
private Player defaultWizard(){
return new Player("name", wizard);
}
private AttributeModifier defaultAttributeModifier(){
return new AttributeModifier(4,8,7,1,2,8);
}
private BodyArmour defaultArmorType(){
return new BodyArmour("Body Armour", defaultAttributeModifier());
}
private Equipment defaultBodyArmour() {
AttributeModifier a = defaultAttributeModifier();
BodyArmour b = new BodyArmour("Body Armour", a);
return new Equipment("5", "Thornmail", b, knight, 2);
}
private Equipment defaultMageHat() {
AttributeModifier a = new AttributeModifier(4,8,2,10,2,8);
MageHat b = new MageHat("Mage Hat", a);
return new Equipment("6", "Deathmage Cap", b, wizard, 1);
}
@Test
void setIdOnCreation(){
var e = defaultBodyArmour();
assertEquals(defaultBodyArmour().getId(), e.getId(), "Equipment id should have been set");
}
@Test
void setNameOnCreation() {
var e = defaultBodyArmour();
assertEquals("Thornmail", e.getName(), "Equipment name should have been set");
}
@Test
void returnsUnmodifiedMagicStrengthIfNoEquipment(){
var w = new Player("name");
assertEquals(0, w.getMagicStrength());
}
@Test
void returnsUnmodifiedDefenceIfNoEquipment(){
var w = new Player("name");
assertEquals(0, w.getDefence());
}
@Test
void returnsUnmodifiedStrengthIfNoEquipment(){
var w = new Player("name");
assertEquals(0, w.getStrength());
}
@Test
void returnsUnmodifiedMagicDefenceIfNoEquipment(){
var w = new Player("name");
assertEquals(0, w.getMagicDefence());
}
@Test
void setEquipmentWeightOnCreation() {
var e = defaultBodyArmour();
assertEquals(defaultBodyArmour().getWeight(), e.getWeight(), "Equipment weight should have been set");
}
@Test
void setBodyArmourTypeOnCreation() {
var e = defaultBodyArmour();
assertEquals("Body Armour", e.getEquipmentType().getName(), "Equipment type should have been set");
}
@Test
void setMageHatTypeOnCreation() {
var e = defaultMageHat();
assertEquals("Mage Hat", e.getEquipmentType().getName(), "Equipment type should have been set");
}
@Test
void setSlotOnCreation() {
var e = defaultBodyArmour();
assertEquals(2, e.getSlot(), "Equipment slot should have been set");
}
@Test
void setMaxHpModOnCreation() {
var e = defaultBodyArmour();
assertEquals(4, e.getEquipmentType().getModifiers().getMaxHpMod(), "Equipment max hp modifier should have been set");
}
@Test
void setMaxMpModOnCreation() {
var e = defaultBodyArmour();
assertEquals(8, e.getEquipmentType().getModifiers().getMaxMpMod(), "Equipment max mp modifier should have been set");
}
@Test
void setStrModOnCreation() {
var e = defaultBodyArmour();
assertEquals(7, e.getEquipmentType().getModifiers().getStrMod(), "Equipment strength modifier should have been set");
}
@Test
void setMagicStrModOnCreation() {
var e = defaultBodyArmour();
assertEquals(1, e.getEquipmentType().getModifiers().getMagicStrMod(), "Equipment magic strength modifier should have been set");
}
@Test
void setDefModOnCreation() {
var e = defaultBodyArmour();
assertEquals(4, e.getEquipmentType().getModifiers().getDefMod(), "Equipment defence modifier should have been set");
}
@Test
void setMagicDefModOnCreation() {
var e = defaultBodyArmour();
assertEquals(16, e.getEquipmentType().getModifiers().getMagicDefMod(), "Equipment magic defence modifier should have been set");
}
@Test
void canEquipWithRightJob() {
var p = defaultWizard();
p.equip(defaultMageHat());
assertTrue(p.getEquipments().get(defaultMageHat().getSlot()).equals(defaultMageHat()), "Wizard can equip wizard hat");
}
@Test
void isNotEqualIfNameIsDifferent() {
var e1 = new Equipment("e1", "equipment 1", defaultArmorType(), knight, 1);
var e2 = new Equipment("e2", "equipment 2", defaultArmorType(), knight, 1);
assertFalse(e1.equals(e2));
}
@Test
void canNotEquipWithWrongJob() {
var p = defaultWizard();
IllegalStateException exception = assertThrows(
IllegalStateException.class,
() -> p.equip(defaultBodyArmour())
);
assertTrue(exception.getMessage().contains("A player with this job can not equip this equipment"));
}
@Test
void canNotEquipAlreadyEquippedSlot() {
AttributeModifier a = new AttributeModifier(2,2,2,2,2,8);
MageHat b = new MageHat("Mage Hat", a);
Equipment e = new Equipment("7", "Mage hat2", b, wizard, 1);
var p = defaultWizard();
p.equip(defaultMageHat());
IllegalStateException exception = assertThrows(
IllegalStateException.class,
() -> p.equip(e)
);
assertTrue(exception.getMessage().contains("Equipment slot already filled"));
}
@Test
void bodyArmourToString() {
AttributeModifier a = new AttributeModifier(1,1,1,1,1,1);
BodyArmour b = new BodyArmour("Body Armour", a);
assertEquals("Body Armour111122", b.toString(), "Equipment name should have been set");
}
@Test
void mageHatToString() {
AttributeModifier a = new AttributeModifier(1,1,1,1,1,1);
MageHat b = new MageHat("Mage Hat", a);
assertEquals("Mage Hat111212", b.toString(), "Equipment name should have been set");
}
@Test
void equipmentModifiesPlayerHealth() {
var p = defaultWizard();
p.setHealth(100);
p.equip(defaultMageHat());
assertEquals(104, p.getHealth(), "Equipment modifies health");
}
@Test
void equipmentModifiesPlayerMana() {
var p = defaultWizard();
p.setMana(30);
p.equip(defaultMageHat());
assertEquals(38, p.getMana(), "Equipment modifies mana");
}
@Test
void equipmentModifiesPlayerStrength() {
var p = defaultWizard();
p.equip(defaultMageHat());
assertEquals(2, p.getStrength(), "Equipment modifies strength");
}
@Test
void equipmentModifiesPlayerMagicStrength() {
var p = defaultWizard();
p.equip(defaultMageHat());
assertEquals(20, p.getMagicStrength(), "Equipment modifies magic strength");
}
@Test
void equipmentModifiesPlayerDefence() {
var p = defaultWizard();
p.equip(defaultMageHat());
assertEquals(2, p.getDefence(), "Equipment modifies defence");
}
@Test
void equipmentModifiesPlayerMagicDefence() {
var p = defaultWizard();
p.equip(defaultMageHat());assertEquals(16, p.getMagicDefence() , "Equipment modifies magic defence");
}
}