package eu.lestard.snakefx.highscore;
import eu.lestard.snakefx.config.Config;
import org.junit.Before;
import org.junit.Test;
import org.mockito.internal.util.reflection.Whitebox;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
public class HighScoreManagerTest {
private HighscoreManager scoreManager;
private HighscoreDao daoMock;
@Before
public void setup() {
daoMock = mock(HighscoreDao.class);
scoreManager = new HighscoreManager(daoMock);
// Change the config value to 3 for easier testing.
Whitebox.setInternalState(Config.MAX_SCORE_COUNT, "value", 3);
}
@Test
public void testConstructor() {
final List<HighScoreEntry> existingEntries = new ArrayList<HighScoreEntry>();
final HighScoreEntry highScoreEntry = new HighScoreEntry(1, "yoda,", 14);
existingEntries.add(highScoreEntry);
when(daoMock.load()).thenReturn(existingEntries);
scoreManager = new HighscoreManager(daoMock);
assertThat(scoreManager.highScoreEntries()).hasSize(1);
assertThat(scoreManager.highScoreEntries()).contains(highScoreEntry);
}
@Test
public void testScores() {
scoreManager.addScore("yoda", 100);
scoreManager.addScore("yoda", 213);
scoreManager.addScore("luke", 143);
assertThat(scoreManager.highScoreEntries()).hasSize(3);
assertThat(extractProperty("points", Integer.class).from(scoreManager.highScoreEntries()))
.containsSequence(213, 143, 100);
assertThat(extractProperty("playername", String.class).from(scoreManager.highScoreEntries()))
.containsSequence("yoda", "luke", "yoda");
scoreManager.addScore("jabba", 215);
assertThat(scoreManager.highScoreEntries()).hasSize(3);
assertThat(extractProperty("points", Integer.class).from(scoreManager.highScoreEntries()))
.containsSequence(215, 213, 143).doesNotContain(100);
assertThat(extractProperty("playername", String.class).from(scoreManager.highScoreEntries()))
.containsSequence("jabba", "yoda", "luke");
verify(daoMock, times(4)).persist(scoreManager.highScoreEntries());
}
}