package me.gnat008.perworldinventory.listeners.player;
import me.gnat008.perworldinventory.TestHelper;
import me.gnat008.perworldinventory.data.players.PWIPlayerManager;
import me.gnat008.perworldinventory.groups.Group;
import me.gnat008.perworldinventory.groups.GroupManager;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
/**
* Tests for {@link PlayerTeleportListener}.
*/
@RunWith(MockitoJUnitRunner.class)
public class PlayerTeleportListenerTest {
@InjectMocks
private PlayerTeleportListener listener;
@Mock
private GroupManager groupManager;
@Mock
private PWIPlayerManager playerManager;
@Test
public void noInteractionsEventCancelled() {
// given
PlayerTeleportEvent event = mock(PlayerTeleportEvent.class);
given(event.isCancelled()).willReturn(true);
// when
listener.onPlayerTeleport(event);
// then
verifyZeroInteractions(groupManager);
verifyZeroInteractions(playerManager);
}
@Test
public void noInteractionsSameWorld() {
// given
Player player = mock(Player.class);
World worldFrom = mock(World.class);
Location from = new Location(worldFrom, 1, 2, 3);
Location to = new Location(worldFrom, 4, 5, 6);
PlayerTeleportEvent event = new PlayerTeleportEvent(player, from, to);
// when
listener.onPlayerTeleport(event);
// then
verifyZeroInteractions(groupManager);
verifyZeroInteractions(playerManager);
}
@Test
public void noPlayerInteractionsSameGroup() {
// given
Player player = mock(Player.class);
World worldFrom = mock(World.class);
given(worldFrom.getName()).willReturn("world");
Location from = new Location(worldFrom, 1, 2, 3);
World worldTo = mock(World.class);
given(worldTo.getName()).willReturn("world_nether");
Location to = new Location(worldTo, 4, 5, 6);
Group group = TestHelper.mockGroup("world");
given(groupManager.getGroupFromWorld("world")).willReturn(group);
given(groupManager.getGroupFromWorld("world_nether")).willReturn(group);
PlayerTeleportEvent event = new PlayerTeleportEvent(player, from, to);
// when
listener.onPlayerTeleport(event);
// then
verifyZeroInteractions(playerManager);
}
@Test
public void shouldAddPlayer() {
// given
Player player = mock(Player.class);
World worldFrom = mock(World.class);
given(worldFrom.getName()).willReturn("world");
Location from = new Location(worldFrom, 1, 2, 3);
World worldTo = mock(World.class);
given(worldTo.getName()).willReturn("world2");
Location to = new Location(worldTo, 4, 5, 6);
Group groupFrom = TestHelper.mockGroup("world");
Group groupTo = TestHelper.mockGroup("world2");
given(groupManager.getGroupFromWorld("world")).willReturn(groupFrom);
given(groupManager.getGroupFromWorld("world2")).willReturn(groupTo);
PlayerTeleportEvent event = new PlayerTeleportEvent(player, from, to);
// when
listener.onPlayerTeleport(event);
// then
verify(playerManager).addPlayer(player, groupFrom);
}
}