inventory_mock tests #17

Merged
erns6604 merged 16 commits from inventory_mocks into main 2025-10-30 07:52:55 +01:00
13 changed files with 51 additions and 49 deletions
Showing only changes of commit d094c3954d - Show all commits

View File

@@ -1,11 +1,11 @@
package Action;
import Job.HasJob;
import Job.JobHolder;
import Job.Wizard;
public class CastAction implements Action {
private Wizard requireWizard(Actor actor) {
if (actor instanceof HasJob hasJob && hasJob.getJob() instanceof Wizard wizard) {
if (actor instanceof JobHolder hasJob && hasJob.getJob() instanceof Wizard wizard) {
return wizard;
}
throw new IllegalStateException(actor + " cannot perform this action without being a Wizard!");

View File

@@ -1,6 +1,6 @@
package Action;
import Job.HasJob;
import Job.JobHolder;
import Job.Miner;
import Terrain.Biome;
@@ -16,7 +16,7 @@ public class DigAction implements Action {
}
private Miner requireMiner(Actor actor) {
if (actor instanceof HasJob hasJob
if (actor instanceof JobHolder hasJob
&& hasJob.getJob() instanceof Miner miner) {
return miner;
}

View File

@@ -1,6 +1,6 @@
package Action;
import Job.HasJob;
import Job.JobHolder;
import Job.Wizard;
public class LearnSpellAction implements Action {
@@ -11,7 +11,7 @@ public class LearnSpellAction implements Action {
}
private Wizard requireWizard(Actor actor) {
if (actor instanceof HasJob hasJob && hasJob.getJob() instanceof Wizard wizard) {
if (actor instanceof JobHolder hasJob && hasJob.getJob() instanceof Wizard wizard) {
return wizard;
}
throw new IllegalStateException(actor + " cannot perform this action without being a Wizard!");

View File

@@ -1,7 +0,0 @@
package Character;
import java.util.List;
public interface HasInventory {
List<String> getInventory();
}

View File

@@ -4,7 +4,7 @@ package Entity;
import java.util.ArrayList;
import java.util.List;
public abstract class Entity implements HasPosition {
public abstract class Entity implements Positionable {
protected String name;
protected Position position;
private static final List<Entity> entities = new ArrayList<Entity>();

View File

@@ -8,14 +8,14 @@ import Combat.HasMana;
import Combat.Spell;
import Inventory.Inventory;
import Job.Job;
import Job.HasJob;
import Inventory.HasInventory;
import Job.JobHolder;
import Inventory.InventoryHolder;
import Inventory.HasSpellBook;
import java.util.LinkedList;
import java.util.List;
public class Player extends Entity implements Movable, Actor, HasInventory, HasSpellBook, HasJob, HasHealth, HasMana, HasConditions {
public class Player extends Entity implements Movable, Actor, InventoryHolder, HasSpellBook, JobHolder, HasHealth, HasMana, HasConditions {
protected int health;
protected int mana;
protected Job job;

View File

@@ -1,6 +1,6 @@
package Entity;
public interface HasPosition {
public interface Positionable {
Position getPosition();
void setPosition(Position position);
}

View File

@@ -1,7 +0,0 @@
package Inventory;
import java.util.List;
public interface HasInventory {
Inventory getInventory();
}

View File

@@ -0,0 +1,5 @@
package Inventory;
public interface InventoryHolder {
Inventory getInventory();
}

View File

@@ -3,8 +3,6 @@ package Job;
import Shared.ExperienceTable;
import Shared.Levelable;
import java.util.Objects;
public abstract class Job implements Levelable {
protected int level;
protected int experience;
@@ -43,21 +41,4 @@ public abstract class Job implements Levelable {
level++;
}
@Override
public String toString() {
return String.format("Job: %s. Level: %d", name, level);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
return o != null && getClass() == o.getClass();
}
@Override
public int hashCode() {
return Objects.hash(name);
}
}

View File

@@ -1,6 +1,6 @@
package Job;
public interface HasJob {
public interface JobHolder {
Job getJob();
void learnJob(Job job);
}

View File

@@ -1,19 +1,19 @@
package Job;
import Inventory.HasInventory;
import Inventory.InventoryHolder;
import Item.ItemStack;
import Terrain.Biome;
public class Miner extends Job {
HasInventory actor;
InventoryHolder actor;
public Miner(HasInventory actor) {
public Miner(InventoryHolder actor) {
super("Miner");
this.actor = actor;
}
public HasInventory getActor() {
public InventoryHolder getActor() {
return actor;
}

View File

@@ -0,0 +1,30 @@
import Action.DigAction;
import Entity.Player;
import Job.Miner;
import Terrain.Biome;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.*;
public class DigActionTest {
@Test
void can_be_executed_as_miner() {
var mockMiner = mock(Miner.class);
var player = mock(Player.class);
when(player.getJob()).thenReturn(mockMiner);
var biome = mock(Biome.class);
var action = new DigAction(biome);
action.execute(player);
verify(mockMiner, times(1)).dig(biome);
}
@Test
void digging_when_not_miner_throws_error() {
var player = mock(Player.class);
when(player.getJob()).thenReturn(null);
var biome = mock(Biome.class);
var action = new DigAction(biome);
assertThrows(IllegalStateException.class, () -> action.execute(player));
}
}