package org.apollo.game.message.handler;

import org.apollo.cache.def.ItemDefinition;
import org.apollo.game.message.impl.ItemOnItemMessage;
import org.apollo.game.model.Item;
import org.apollo.game.model.World;
import org.apollo.game.model.entity.Player;
import org.apollo.game.model.inter.bank.BankConstants;
import org.apollo.game.model.inv.Inventory;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import static org.junit.Assert.*;
import static org.powermock.api.mockito.PowerMockito.*;

@RunWith(PowerMockRunner.class)
@PrepareForTest({Player.class, ItemDefinition.class})
public class ItemOnItemVerificationHandlerTest {

	private World world = new World();

	private ItemOnItemVerificationHandler itemOnItemVerificationHandler = new ItemOnItemVerificationHandler(world);
	private ItemVerificationHandler itemVerificationHandler = new ItemVerificationHandler(world);

	@Before
	public void setupTestItemDefinitions() {
		mockStatic(ItemDefinition.class);
		when(ItemDefinition.lookup(4151)).thenReturn(new ItemDefinition(4151));
	}

	@Test
	public void testTerminateWithNoSourceItem() throws Exception {
		Player player = mock(Player.class);
		Inventory inventory = new Inventory(28);
		inventory.set(1, new Item(4151, 1));

		when(player.getInventory()).thenReturn(inventory);

		ItemOnItemMessage itemOnItemMessage = new ItemOnItemMessage(BankConstants.SIDEBAR_INVENTORY_ID, 500, 1,
				BankConstants.SIDEBAR_INVENTORY_ID, 4151, 1);

		itemVerificationHandler.handle(player, itemOnItemMessage);
		itemOnItemVerificationHandler.handle(player, itemOnItemMessage);

		assertTrue("ItemOnItemVerificationHandler: failed terminating message with invalid source item", itemOnItemMessage.terminated());
	}

	@Test
	public void testTerminateWithNoTargetItem() throws Exception {
		Player player = mock(Player.class);
		Inventory inventory = new Inventory(28);
		inventory.set(1, new Item(4151, 1));

		when(player.getInventory()).thenReturn(inventory);

		ItemOnItemMessage itemOnItemMessage = new ItemOnItemMessage(BankConstants.SIDEBAR_INVENTORY_ID, 4151, 1,
				BankConstants.SIDEBAR_INVENTORY_ID, 4152, 2);

		itemVerificationHandler.handle(player, itemOnItemMessage);
		itemOnItemVerificationHandler.handle(player, itemOnItemMessage);

		assertTrue("ItemOnItemVerificationHandler: failed terminating message with invalid target item", itemOnItemMessage.terminated());
	}
}
@@ -959,103 +959,8 @@
 ld);
-%0A%09private ItemVerificationHandler itemVerificationHandler = new ItemVerificationHandler(world);
 %0A%0A%09@
@@ -1126,676 +1126,8 @@
 %09%7D%0A%0A
-%09@Test%0A%09public void testTerminateWithNoSourceItem() throws Exception %7B%0A%09%09Player player = mock(Player.class);%0A%09%09Inventory inventory = new Inventory(28);%0A%09%09inventory.set(1, new Item(4151, 1));%0A%0A%09%09when(player.getInventory()).thenReturn(inventory);%0A%0A%09%09ItemOnItemMessage itemOnItemMessage = new ItemOnItemMessage(BankConstants.SIDEBAR_INVENTORY_ID, 500, 1,%0A%09%09%09%09BankConstants.SIDEBAR_INVENTORY_ID, 4151, 1);%0A%0A%09%09itemVerificationHandler.handle(player, itemOnItemMessage);%0A%09%09itemOnItemVerificationHandler.handle(player, itemOnItemMessage);%0A%0A%09%09assertTrue(%22ItemOnItemVerificationHandler: failed terminating message with invalid source item%22, itemOnItemMessage.terminated());%0A%09%7D%0A%0A
 %09@Te
@@ -1530,69 +1530,8 @@
 );%0A%0A
-%09%09itemVerificationHandler.handle(player, itemOnItemMessage);%0A
 %09%09it

Remove ItemVerificationHandler test to account for #32