Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,10 @@ public boolean hasSauce(Furniture f) {
if(!slot.getId().contains("display")) {
ItemStack item = slot.getCurrentItem();
if(item == null) continue;
// addSauce stores an ItemsAdder visual here, without Cooking food metadata.
if(slot.getId().equals("sauce")) return true;
FoodItem sauce = FoodItem.fromItem(item);
if(sauce == null) continue;
if(sauce.getCategory().equalsIgnoreCase("sauce")) return true;
}
}
Expand Down
119 changes: 119 additions & 0 deletions src/test/java/net/tfminecraft/cooking/manager/PlateManagerTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
package net.tfminecraft.cooking.manager;

import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.UUID;

import org.bukkit.inventory.ItemStack;
import org.junit.jupiter.api.Test;

import net.tfminecraft.interactiblefurniture.furniture.Furniture;
import net.tfminecraft.interactiblefurniture.furniture.PlacedSlot;

class PlateManagerTest {

@Test
void unrecognizedItemDoesNotHideLaterSauce() {
Map<String, PlacedSlot> slots = new LinkedHashMap<>();
Furniture plate = new Furniture("plate", null, UUID.randomUUID()) {
@Override
public Map<String, PlacedSlot> getActiveSlots() {
return slots;
}
};
ItemStack unrecognized = new ItemStack() {
@Override
public boolean hasItemMeta() {
return false;
}
};
PlacedSlot food = new PlacedSlot(plate, "food_item");
food.setModel(unrecognized);
slots.put("food_item", food);
PlacedSlot sauce = new PlacedSlot(plate, "sauce");
sauce.setModel(new ItemStack() {});
slots.put("sauce", sauce);

assertTrue(new PlateManager().hasSauce(plate));
assertSame(unrecognized, food.getCurrentItem());
assertSame(food, slots.get("food_item"));
}

@Test
void occupiedSauceSlotCountsAsSauceWithoutFoodMetadata() {
Furniture plate = plateWithSauceVisual();

assertTrue(new PlateManager().hasSauce(plate));
}

@Test
void existingSauceReturnsBeforeTouchingThePlayerOrLadle() {
Furniture plate = plateWithSauceVisual();
ItemStack visual = plate.getActiveSlots().get("sauce").getCurrentItem();

// Null interaction arguments ensure the duplicate attempt exits before using them.
assertDoesNotThrow(() -> new PlateManager().addSauce(null, plate, null, null));
assertSame(visual, plate.getActiveSlots().get("sauce").getCurrentItem());
}

@Test
void emptySauceSlotDoesNotCountAsSauce() {
Furniture plate = new Furniture("plate", null, UUID.randomUUID());
plate.getActiveSlots().put("sauce", new PlacedSlot(plate, "sauce"));

assertFalse(new PlateManager().hasSauce(plate));
}

private Furniture plateWithSauceVisual() {
Furniture plate = new Furniture("plate", null, UUID.randomUUID());
PlacedSlot sauce = new PlacedSlot(plate, "sauce");
sauce.setModel(new ItemStack() {
@Override
public boolean hasItemMeta() {
throw new AssertionError("Sauce visuals must not be parsed as food");
}
});
plate.getActiveSlots().put("sauce", sauce);
return plate;
}

@Test
void sauceCheckIgnoresUnrecognizedItemsWithoutRemovingThem() {
Furniture plate = new Furniture("plate", null, UUID.randomUUID());
ItemStack unrecognized = new ItemStack() {
@Override
public boolean hasItemMeta() {
return false;
}
};
PlacedSlot slot = new PlacedSlot(plate, "food_item");
slot.setModel(unrecognized);
plate.getActiveSlots().put(slot.getId(), slot);

assertFalse(new PlateManager().hasSauce(plate));
assertSame(unrecognized, slot.getCurrentItem());
assertSame(slot, plate.getActiveSlots().get("food_item"));
}

@Test
void sauceCheckStillIgnoresEmptyAndDisplaySlots() {
Furniture plate = new Furniture("plate", null, UUID.randomUUID());
PlacedSlot empty = new PlacedSlot(plate, "food_item");
plate.getActiveSlots().put(empty.getId(), empty);
PlacedSlot display = new PlacedSlot(plate, "display_1");
display.setModel(new ItemStack() {
@Override
public boolean hasItemMeta() {
throw new AssertionError("Display items must not be checked for sauce");
}
});
plate.getActiveSlots().put(display.getId(), display);

assertFalse(new PlateManager().hasSauce(plate));
}
}