package me.gnat008.perworldinventory.data.players; import ch.jalu.injector.testing.BeforeInjecting; import ch.jalu.injector.testing.DelayedInjectionRunner; import ch.jalu.injector.testing.InjectDelayed; import me.gnat008.perworldinventory.BukkitService; import me.gnat008.perworldinventory.PerWorldInventory; import me.gnat008.perworldinventory.TestHelper; import me.gnat008.perworldinventory.config.PwiProperties; import me.gnat008.perworldinventory.config.Settings; import me.gnat008.perworldinventory.data.DataSource; import me.gnat008.perworldinventory.groups.Group; import me.gnat008.perworldinventory.groups.GroupManager; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Server; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; import org.bukkit.scheduler.BukkitScheduler; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import static me.gnat008.perworldinventory.TestHelper.mockGroup; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; /** * Tests for {@link PWIPlayerManager}. */ @RunWith(DelayedInjectionRunner.class) public class PWIPlayerManagerTest { @InjectDelayed private PWIPlayerManager playerManager; @InjectDelayed private PWIPlayerFactory pwiPlayerFactory; @Mock private PerWorldInventory plugin; @Mock private BukkitService bukkitService; @Mock private DataSource dataSource; @Mock private GroupManager groupManager; @Mock private Settings settings; @BeforeInjecting public void initSettings() { given(settings.getProperty(PwiProperties.SAVE_INTERVAL)).willReturn(300); // Add mocks for Bukkit.getScheduler, called in @PostConstruct method Server server = mock(Server.class); TestHelper.setField(Bukkit.class, "server", null, server); BukkitScheduler scheduler = mock(BukkitScheduler.class); given(server.getScheduler()).willReturn(scheduler); } @Test public void addPlayerShouldHaveSurvivalKey() { // given Player player = mockPlayer("playah", GameMode.SURVIVAL); Group group = mockGroup("test"); given(settings.getProperty(PwiProperties.SEPARATE_GAMEMODE_INVENTORIES)).willReturn(true); // when String result = playerManager.makeKey(player.getUniqueId(), group, GameMode.SURVIVAL); // then String expected = TestHelper.TEST_UUID + ".test.survival"; assertThat(result, equalTo(expected)); } @Test public void addPlayerShouldHaveSurvivalKeyNoSeparation() { // given Player player = mockPlayer("player", GameMode.CREATIVE); Group group = mockGroup("test"); given(settings.getProperty(PwiProperties.SEPARATE_GAMEMODE_INVENTORIES)).willReturn(false); // when String result = playerManager.makeKey(player.getUniqueId(), group, GameMode.CREATIVE); // then String expected = TestHelper.TEST_UUID + ".test.survival"; assertThat(result, equalTo(expected)); } @Test public void addPlayerShouldHaveCreativeKey() { // given Player player = mockPlayer("Nicole", GameMode.CREATIVE); Group group = mockGroup("test"); given(settings.getProperty(PwiProperties.SEPARATE_GAMEMODE_INVENTORIES)).willReturn(true); // when String result = playerManager.makeKey(player.getUniqueId(), group, GameMode.CREATIVE); // then String expected = TestHelper.TEST_UUID + ".test.creative"; assertThat(result, equalTo(expected)); } @Test public void addPlayerShouldHaveAdventureKey() { // given Player player = mockPlayer("Bob", GameMode.ADVENTURE); Group group = mockGroup("test"); given(settings.getProperty(PwiProperties.SEPARATE_GAMEMODE_INVENTORIES)).willReturn(true); // when String result = playerManager.makeKey(player.getUniqueId(), group, GameMode.ADVENTURE); // then String expected = TestHelper.TEST_UUID + ".test.adventure"; assertThat(result, equalTo(expected)); } @Test public void addPlayerShouldHaveSpectatorKey() { // given Player player = mockPlayer("someDude", GameMode.SPECTATOR); Group group = mockGroup("test"); given(settings.getProperty(PwiProperties.SEPARATE_GAMEMODE_INVENTORIES)).willReturn(true); // when String result = playerManager.makeKey(player.getUniqueId(), group, GameMode.SPECTATOR); // then String expected = TestHelper.TEST_UUID + ".test.spectator"; assertThat(result, equalTo(expected)); } private Player mockPlayer(String name, GameMode gameMode) { Player mock = mock(Player.class); PlayerInventory inv = mock(PlayerInventory.class); inv.setContents(new ItemStack[39]); inv.setArmorContents(new ItemStack[4]); Inventory enderChest = mock(Inventory.class); enderChest.setContents(new ItemStack[27]); given(mock.getInventory()).willReturn(inv); given(mock.getEnderChest()).willReturn(enderChest); given(mock.getName()).willReturn(name); given(mock.getUniqueId()).willReturn(TestHelper.TEST_UUID); given(mock.getGameMode()).willReturn(gameMode); AttributeInstance attribute = mock(AttributeInstance.class); given(mock.getAttribute(Attribute.GENERIC_MAX_HEALTH)).willReturn(attribute); given(attribute.getBaseValue()).willReturn(20.0); return mock; } }