package me.gnat008.perworldinventory.process;
import me.gnat008.perworldinventory.config.PwiProperties;
import me.gnat008.perworldinventory.config.Settings;
import me.gnat008.perworldinventory.data.players.PWIPlayerManager;
import me.gnat008.perworldinventory.data.serializers.DeserializeCause;
import me.gnat008.perworldinventory.groups.Group;
import me.gnat008.perworldinventory.permission.PermissionManager;
import me.gnat008.perworldinventory.permission.PlayerPermission;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
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 GameModeChangeProcess}.
*/
@RunWith(MockitoJUnitRunner.class)
public class GameModeChangeProcessTest {
@InjectMocks
private GameModeChangeProcess process;
@Mock
private PermissionManager permissionManager;
@Mock
private PWIPlayerManager playerManager;
@Mock
private Settings settings;
@Test
public void shouldBypass() {
// given
Player player = mock(Player.class);
Group group = mockGroup("world");
given(permissionManager.hasPermission(player, PlayerPermission.BYPASS_GAMEMODE)).willReturn(true);
given(settings.getProperty(PwiProperties.SEPARATE_GAMEMODE_INVENTORIES)).willReturn(true);
given(settings.getProperty(PwiProperties.DISABLE_BYPASS)).willReturn(false);
// when
process.processGameModeChange(player, GameMode.ADVENTURE, group);
// then
verify(playerManager, never()).getPlayerData(any(Group.class), any(GameMode.class), any(Player.class), any(DeserializeCause.class));
}
@Test
public void shouldNotBypassNoPermission() {
// given
Player player = mock(Player.class);
Group group = mockGroup("world");
GameMode newGameMode = GameMode.CREATIVE;
given(permissionManager.hasPermission(player, PlayerPermission.BYPASS_GAMEMODE)).willReturn(false);
given(settings.getProperty(PwiProperties.SEPARATE_GAMEMODE_INVENTORIES)).willReturn(true);
given(settings.getProperty(PwiProperties.DISABLE_BYPASS)).willReturn(false);
// when
process.processGameModeChange(player, newGameMode, group);
// then
verify(playerManager).getPlayerData(group, newGameMode, player, DeserializeCause.GAMEMODE_CHANGE);
}
@Test
public void shouldNotBypassBecauseBypassDisabled() {
// given
Player player = mock(Player.class);
Group group = mockGroup("world");
GameMode newGameMode = GameMode.CREATIVE;
given(settings.getProperty(PwiProperties.SEPARATE_GAMEMODE_INVENTORIES)).willReturn(true);
given(settings.getProperty(PwiProperties.DISABLE_BYPASS)).willReturn(true);
// when
process.processGameModeChange(player, newGameMode, group);
// then
verify(playerManager).getPlayerData(group, newGameMode, player, DeserializeCause.GAMEMODE_CHANGE);
}
@Test
public void shouldDoNothingBecauseDisabled() {
// given
Player player = mock(Player.class);
GameMode newGameMode = GameMode.CREATIVE;
Group group = mockGroup("world");
given(settings.getProperty(PwiProperties.SEPARATE_GAMEMODE_INVENTORIES)).willReturn(false);
// when
process.processGameModeChange(player, newGameMode, group);
// then
verifyZeroInteractions(permissionManager);
verifyZeroInteractions(playerManager);
}
}