package ge.edu.freeuni.sdp.snake.presenter;
import ge.edu.freeuni.sdp.snake.model.GameFacade;
import ge.edu.freeuni.sdp.snake.model.HighScoreData;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.*;
import org.junit.Test;
import org.mockito.InOrder;
public class HighScorePresenterTest {
@Test
public void game_is_over(){
GameFacade game = mock(GameFacade.class);
when(game.isGameOver()).thenReturn(true);
HighScoreData data = mock(HighScoreData.class);
HighScorePresenter presenter= new HighScorePresenter(data, game);
assertTrue(presenter.isGameOver());
}
@Test
public void is_score_correct(){
GameFacade game = mock(GameFacade.class);
when(game.getScore()).thenReturn(5);
HighScoreData data = mock(HighScoreData.class);
HighScorePresenter presenter= new HighScorePresenter(data, game);
assertTrue(5==presenter.getScore());
}
@Test
public void is_high_score_info_correct(){
GameFacade game = mock(GameFacade.class);
HighScoreData data = mock(HighScoreData.class);
String file = "File";
when(data.getFileContent()).thenReturn(file);
HighScorePresenter presenter= new HighScorePresenter(data, game);
assertEquals(file,presenter.getHighScoreInfo());
verify(data).readFile();
}
@Test
public void is_HighScoreData_invocation_order_correct(){
GameFacade game = mock(GameFacade.class);
HighScoreData data = mock(HighScoreData.class);
HighScorePresenter presenter= new HighScorePresenter(data, game);
presenter.getHighScoreInfo();
InOrder inOrder = inOrder(data);
inOrder.verify(data).readFile();
inOrder.verify(data).getFileContent();
}
@Test
public void is_editFile_called(){
GameFacade game = mock(GameFacade.class);
HighScoreData data = mock(HighScoreData.class);
HighScorePresenter presenter= new HighScorePresenter(data, game);
String name = "Giorgi";
int score = 100;
presenter.changeHighScoreInfo(name,score);
verify(data).editFile(name,score);
}
@Test
public void file_must_be_changed(){
GameFacade game = mock(GameFacade.class);
HighScoreData data = mock(HighScoreData.class);
when(data.checkIfFileMustBeEdited(anyInt())).thenReturn(1);
HighScorePresenter presenter= new HighScorePresenter(data, game);
assertTrue(presenter.checkNewScore(10));
}
@Test
public void file_must_not_be_changed(){
GameFacade game = mock(GameFacade.class);
HighScoreData data = mock(HighScoreData.class);
when(data.checkIfFileMustBeEdited(anyInt())).thenReturn(-1);
HighScorePresenter presenter= new HighScorePresenter(data, game);
assertFalse(presenter.checkNewScore(10));
}
}