package me.gnat008.perworldinventory.listeners.player; import me.gnat008.perworldinventory.BukkitService; import me.gnat008.perworldinventory.data.players.PWIPlayerManager; import me.gnat008.perworldinventory.groups.Group; import me.gnat008.perworldinventory.groups.GroupManager; import org.bukkit.GameMode; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerGameModeChangeEvent; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import static me.gnat008.perworldinventory.TestHelper.mockGroup; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.*; /** * Tests for {@link PlayerGameModeChangeListener}. */ @RunWith(MockitoJUnitRunner.class) public class PlayerGameModeChangeListenerTest { @InjectMocks private PlayerGameModeChangeListener listener; @Mock private BukkitService bukkitService; @Mock private GroupManager groupManager; @Mock private PWIPlayerManager playerManager; @Test public void shouldDoNothingEventCancelled() { // given PlayerGameModeChangeEvent event = new PlayerGameModeChangeEvent(mock(Player.class), GameMode.CREATIVE); event.setCancelled(true); // when listener.onPlayerGameModeChange(event); // then verifyZeroInteractions(groupManager); verifyZeroInteractions(playerManager); verifyZeroInteractions(bukkitService); } @Test public void shouldDoEverything() { // given Player player = mock(Player.class); World world = mock(World.class); given(world.getName()).willReturn("world"); given(player.getWorld()).willReturn(world); Group group = mockGroup("world"); given(groupManager.getGroupFromWorld("world")).willReturn(group); PlayerGameModeChangeEvent event = new PlayerGameModeChangeEvent(player, GameMode.CREATIVE); // when listener.onPlayerGameModeChange(event); // then verify(groupManager).getGroupFromWorld("world"); verify(playerManager).addPlayer(player, group); verify(bukkitService).runTaskLater(any(Runnable.class), any(Long.class)); } }