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"); } }