package managers;
import model.forms.GameForm;
import models.data.Game;
import models.data.Player;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import play.mvc.Http.Context;
import common.AbstractTest;
/**
* This was separated out from the GameManagerTest class because this uses PowerMockito,
* so due to time constraint, i created a separated it to a different class than modifying
* existing class
*
* @author Susan Fung
*
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(UserManager.class)
public class CreateAndStartGameTest extends AbstractTest {
@Mock
private GameForm gameForm;
// @Mock
// private Game game;
@InjectMocks
private GameManager gameManager;
@Before
public void createStubs() {
Context context = Mockito.mock(Context.class);
Context.current.set(context);
Mockito.when(gameForm.gameLength).thenReturn(2);
Mockito.when(gameForm.gameTitle).thenReturn("Test game");
Mockito.when(gameForm.maxPlayers).thenReturn(2);
Mockito.when(gameForm.openBalance).thenReturn(1000.00);
PowerMockito.mockStatic(UserManager.class);
}
@Test
public void createAndStartGameSuccess() {
Player player = new Player();
player.setEmail("player1@columbia.edu");
player.setId(1);
Mockito.when(UserManager.getCurrentLoggedInUser()).thenReturn(
player);
Game game = gameManager.createFixedTimeChallengeGame(gameForm);
Assert.assertTrue(game != null);
// PowerMockito.verifyStatic();
// UserManager.getCurrentLoggedInUser();
// Mockito.when(game.getId()).thenReturn(1);
// Mockito.when(game.getOwner()).thenReturn(player);
// Mockito.when(game.getGameLength() ).thenReturn(2);
// Mockito.when(game.getGameTitle()).thenReturn("Test game");
// Mockito.when(game.getMaxPlayers()).thenReturn(2);
// Mockito.when(game.getOpenBalance()).thenReturn(1000.00);
// doReturn(1000.00).when(game).getOpenBalance();
// doReturn(1).when(game).getId();
// Mockito.when(gameManager.startGame(game.getId())).thenReturn(
// true);
// System.out.println("****"+game.getOwner());
// System.out.println("****"+UserManager.getCurrentLoggedInUser());
// Assert.assertTrue(gameManager.startGame(game.getId()));
// PowerMockito.verifyStatic(times(2));
}
// @Test
// public void createAndStartGameSuccess() {
//
//
// Mockito.when(UserManager.getCurrentLoggedInUser()).thenReturn(
// player);
//
// Game game = gameManager.createFixedTimeChallengeGame(gameForm);
// Mockito.when(game.getOwner()).thenReturn(
// player);
// Mockito.when(game.getId()).thenReturn(
// 1);
//
//// Mockito.when(game.getGameLength()).thenReturn(2);
//// Mockito.when(game.getGameTitle()).thenReturn("Test game");
//// Mockito.when(game.getMaxPlayers()).thenReturn(2);
//// Mockito.when(game.getOpenBalance()).thenReturn(1000.00);
////
// Assert.assertTrue(game != null);
// PowerMockito.verifyStatic();
// UserManager.getCurrentLoggedInUser();
//
// System.out.println("*****"+game.getOwner());
// Assert.assertTrue(gameManager.startGame(game.getId()));
// PowerMockito.verifyStatic();
// UserManager.getCurrentLoggedInUser();
// }
//@Test
/**
* Commenting out due to mockito issues. need to investigate
*/
public void createGameFailure() {
System.out.println("*****");
Mockito.when(UserManager.getCurrentLoggedInUser()).thenReturn(null);
System.out.println("here");
Game game = gameManager.createFixedTimeChallengeGame(gameForm);
System.out.println("here again");
Assert.assertTrue(game == null);
}
@Test
public void startGameFailure() {
Mockito.when(UserManager.getCurrentLoggedInUser()).thenReturn(null);
Assert.assertFalse(gameManager.startGame(1));
}
}