loot tracker: cleanup clue scroll stacking and test

Most of this test was superfluous and continiously retesting the same
logic
This commit is contained in:
Adam
2020-05-03 13:33:54 -04:00
parent 8eb57c5a92
commit c7a155d09c
2 changed files with 28 additions and 148 deletions

View File

@@ -26,14 +26,14 @@ package net.runelite.client.plugins.loottracker;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import lombok.Getter; import lombok.AllArgsConstructor;
import net.runelite.api.ItemComposition; import net.runelite.api.ItemComposition;
import net.runelite.api.ItemID; import net.runelite.api.ItemID;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.game.ItemStack; import net.runelite.client.game.ItemStack;
@Getter @AllArgsConstructor
public enum LootTrackerMapping enum LootTrackerMapping
{ {
CLUE_SCROLL_BEGINNER("Clue scroll (beginner)", ItemID.CLUE_SCROLL_BEGINNER), CLUE_SCROLL_BEGINNER("Clue scroll (beginner)", ItemID.CLUE_SCROLL_BEGINNER),
CLUE_SCROLL_EASY("Clue scroll (easy)", ItemID.CLUE_SCROLL_EASY), CLUE_SCROLL_EASY("Clue scroll (easy)", ItemID.CLUE_SCROLL_EASY),
@@ -45,41 +45,30 @@ public enum LootTrackerMapping
private final String name; private final String name;
private final int baseId; private final int baseId;
LootTrackerMapping(String name, int baseId) private static final ImmutableMap<String, Integer> MAPPINGS;
{
this.name = name;
this.baseId = baseId;
}
private static final ImmutableMap<String, LootTrackerMapping> MAPPINGS;
static static
{ {
ImmutableMap.Builder<String, LootTrackerMapping> map = ImmutableMap.builder(); ImmutableMap.Builder<String, Integer> map = ImmutableMap.builder();
for (LootTrackerMapping mapping : values()) for (LootTrackerMapping mapping : values())
{ {
map.put(mapping.name, mapping); map.put(mapping.name, mapping.baseId);
} }
MAPPINGS = map.build(); MAPPINGS = map.build();
} }
public static int map(int itemId, ItemManager itemManager) private static int map(int itemId, ItemManager itemManager)
{ {
ItemComposition itemComp = itemManager.getItemComposition(itemId); ItemComposition itemComp = itemManager.getItemComposition(itemId);
if (itemComp == null || Strings.isNullOrEmpty(itemComp.getName())) if (Strings.isNullOrEmpty(itemComp.getName()))
{ {
return itemId; return itemId;
} }
if (!MAPPINGS.containsKey(itemComp.getName())) return MAPPINGS.getOrDefault(itemComp.getName(), itemId);
{
return itemId;
}
return MAPPINGS.get(itemComp.getName()).baseId;
} }
public static ItemStack map(ItemStack item, ItemManager itemManager) static ItemStack map(ItemStack item, ItemManager itemManager)
{ {
int baseId = map(item.getId(), itemManager); int baseId = map(item.getId(), itemManager);
if (baseId == item.getId()) if (baseId == item.getId())

View File

@@ -32,11 +32,9 @@ import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import javax.inject.Inject; import javax.inject.Inject;
import lombok.AllArgsConstructor;
import net.runelite.api.ChatMessageType; import net.runelite.api.ChatMessageType;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.ItemComposition; import net.runelite.api.ItemComposition;
@@ -55,7 +53,6 @@ import net.runelite.http.api.item.ItemPrice;
import net.runelite.http.api.loottracker.LootRecordType; import net.runelite.http.api.loottracker.LootRecordType;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -68,7 +65,6 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
@RunWith(MockitoJUnitRunner.class) @RunWith(MockitoJUnitRunner.class)
public class LootTrackerPluginTest public class LootTrackerPluginTest
@@ -150,135 +146,30 @@ public class LootTrackerPluginTest
assertEquals(LootRecordType.EVENT, lootTrackerPlugin.lootRecordType); assertEquals(LootRecordType.EVENT, lootTrackerPlugin.lootRecordType);
} }
private static ItemStack is(int id, int q) private static ItemComposition mockItem(String name)
{ {
return new ItemStack(id, q, null); ItemComposition itemComposition = mock(ItemComposition.class);
when(itemComposition.getName()).thenReturn(name);
return itemComposition;
} }
@Test @Test
public void testClueStacks() public void testClueStacks()
{ {
String beg = "Clue scroll (beginner)"; when(itemManager.getItemComposition(ItemID.CLUE_SCROLL_MEDIUM)).thenAnswer(invocation -> mockItem("Clue scroll (medium)"));
String easy = "Clue scroll (easy)"; when(itemManager.getItemComposition(ItemID.CLUE_SCROLL_MEDIUM_3602)).thenAnswer(invocation -> mockItem("Clue scroll (medium)"));
String med = "Clue scroll (medium)"; when(itemManager.getItemComposition(ItemID.GRACEFUL_HOOD_13579)).thenAnswer(invocation -> mockItem("Graceful hood"));
String hard = "Clue scroll (hard)"; Collection<ItemStack> stack = lootTrackerPlugin.stack(
String elite = "Clue scroll (elite)"; Arrays.asList(
String master = "Clue scroll (master)"; new ItemStack(ItemID.CLUE_SCROLL_MEDIUM, 1, null),
Map<Integer, String> idsToName = ImmutableMap.<Integer, String>builder() new ItemStack(ItemID.CLUE_SCROLL_MEDIUM_3602, 1, null),
.put(ItemID.CLUE_SCROLL_BEGINNER, beg) new ItemStack(ItemID.GRACEFUL_HOOD_13579, 1, null)
.put(ItemID.CLUE_SCROLL_EASY, easy) )
.put(ItemID.CLUE_SCROLL_EASY_2719, easy) );
.put(ItemID.CLUE_SCROLL_EASY_23153, easy) assertEquals(Arrays.asList(
.put(ItemID.CLUE_SCROLL_MEDIUM, med) new ItemStack(ItemID.CLUE_SCROLL_MEDIUM, 2, null),
.put(ItemID.CLUE_SCROLL_MEDIUM_3599, med) new ItemStack(ItemID.GRACEFUL_HOOD_13579, 1, null)
.put(ItemID.CLUE_SCROLL_MEDIUM_2817, med) ), stack);
.put(ItemID.CLUE_SCROLL_MEDIUM_3602, med)
.put(ItemID.CLUE_SCROLL_MEDIUM_12045, med)
.put(ItemID.CLUE_SCROLL_MEDIUM_12065, med)
.put(ItemID.CLUE_SCROLL_HARD, hard)
.put(ItemID.CLUE_SCROLL_HARD_3520, hard)
.put(ItemID.CLUE_SCROLL_HARD_3550, hard)
.put(ItemID.CLUE_SCROLL_HARD_23045, hard)
.put(ItemID.CLUE_SCROLL_ELITE, elite)
.put(ItemID.CLUE_SCROLL_ELITE_19783, elite)
.put(ItemID.CLUE_SCROLL_ELITE_21524, elite)
.put(ItemID.CLUE_SCROLL_ELITE_12096, elite)
.put(ItemID.CLUE_SCROLL_MASTER, master)
.put(ItemID.RUNE_PLATEBODY, "Rune platebody")
.put(ItemID.AMETHYST_ARROW, "Amethyst arrow")
.put(ItemID.GRACEFUL_HOOD_13579, "Graceful hood")
.put(ItemID.RUNITE_ORE, "Runite ore")
.put(ItemID.RUNITE_ORE + 1, "Runite ore")
.put(0, "null")
.build();
@AllArgsConstructor
class Case
{
private final List<ItemStack> drops;
private final List<ItemStack> expected;
}
Case[] cases = {
new Case(
Arrays.asList(
is(ItemID.CLUE_SCROLL_MEDIUM, 1),
is(ItemID.CLUE_SCROLL_MEDIUM_3602, 1)),
Collections.singletonList(
is(ItemID.CLUE_SCROLL_MEDIUM, 2))
),
new Case(
Arrays.asList(
// graceful isn't a drop, but it is an item w/ variations that we're not tracking.
is(ItemID.GRACEFUL_HOOD_13579, 1),
is(ItemID.RUNE_PLATEBODY, 1),
is(ItemID.AMETHYST_ARROW, 125)),
Arrays.asList(
is(ItemID.GRACEFUL_HOOD_13579, 1),
is(ItemID.RUNE_PLATEBODY, 1),
is(ItemID.AMETHYST_ARROW, 125))
),
new Case(
Arrays.asList(
is(ItemID.CLUE_SCROLL_BEGINNER, 1),
is(ItemID.CLUE_SCROLL_ELITE_19783, 1),
is(ItemID.CLUE_SCROLL_MEDIUM_12045, 1),
is(ItemID.CLUE_SCROLL_MEDIUM_12065, 1),
is(ItemID.RUNITE_ORE, 25),
is(ItemID.RUNITE_ORE + 1, 10)), // noted rune ore
Arrays.asList(
is(ItemID.CLUE_SCROLL_BEGINNER, 1),
is(ItemID.CLUE_SCROLL_ELITE, 1),
is(ItemID.CLUE_SCROLL_MEDIUM, 2),
is(ItemID.RUNITE_ORE, 25),
is(ItemID.RUNITE_ORE + 1, 10)) // noted rune ore
),
new Case(
Arrays.asList(
is(ItemID.CLUE_SCROLL_BEGINNER, 1),
is(ItemID.CLUE_SCROLL_BEGINNER, 1),
is(ItemID.CLUE_SCROLL_EASY, 1),
is(ItemID.CLUE_SCROLL_EASY_2719, 1),
is(ItemID.CLUE_SCROLL_EASY_23153, 1),
is(ItemID.CLUE_SCROLL_MEDIUM, 1),
is(ItemID.CLUE_SCROLL_MEDIUM_12065, 1),
is(ItemID.CLUE_SCROLL_MEDIUM_2817, 1),
is(ItemID.CLUE_SCROLL_HARD, 1),
is(ItemID.CLUE_SCROLL_HARD_3550, 1),
is(ItemID.CLUE_SCROLL_HARD_23045, 1),
is(ItemID.CLUE_SCROLL_ELITE, 1),
is(ItemID.CLUE_SCROLL_ELITE_21524, 1),
is(ItemID.CLUE_SCROLL_ELITE_12096, 1),
is(ItemID.CLUE_SCROLL_MASTER, 1),
is(ItemID.CLUE_SCROLL_MASTER, 1)),
Arrays.asList(
is(ItemID.CLUE_SCROLL_BEGINNER, 2),
is(ItemID.CLUE_SCROLL_EASY, 3),
is(ItemID.CLUE_SCROLL_MEDIUM, 3),
is(ItemID.CLUE_SCROLL_HARD, 3),
is(ItemID.CLUE_SCROLL_ELITE, 3),
is(ItemID.CLUE_SCROLL_MASTER, 2))
),
};
for (int i = 0; i < cases.length; i++)
{
Case tc = cases[i];
when(itemManager.getItemComposition(anyInt())).thenAnswer((Answer<ItemComposition>) invocationOnMock ->
{
int itemId = invocationOnMock.getArgument(0);
if (!idsToName.containsKey(itemId))
{
fail("item id not in names map: " + itemId);
}
ItemComposition c = mock(ItemComposition.class);
when(c.getName()).thenReturn(idsToName.get(itemId));
return c;
});
assertEquals("Test case: " + (i + 1), tc.expected, lootTrackerPlugin.stack(tc.drops));
}
} }
@Test @Test