package com.faforever.client.leaderboard;
import com.faforever.client.notification.NotificationService;
import com.faforever.client.reporting.ReportingService;
import com.faforever.client.test.AbstractPlainJavaFxTest;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import java.util.Arrays;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.*;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
public class LeaderboardControllerTest extends AbstractPlainJavaFxTest {
private LeaderboardController instance;
@Mock
private LeaderboardService leaderboardService;
@Mock
private NotificationService notificationService;
@Mock
private ReportingService reportingService;
@Before
public void setUp() throws Exception {
instance = loadController("leaderboard.fxml");
instance.leaderboardService = leaderboardService;
instance.notificationService = notificationService;
instance.reportingService = reportingService;
}
@Test
public void testSetUpIfNecessary() throws Exception {
when(leaderboardService.getRanked1v1Entries()).thenReturn(CompletableFuture.completedFuture(Arrays.asList(
new Ranked1v1EntryBean(), new Ranked1v1EntryBean()
)));
CountDownLatch loadedLatch = new CountDownLatch(1);
instance.ratingTable.itemsProperty().addListener(observable -> loadedLatch.countDown());
instance.setUpIfNecessary();
assertTrue(loadedLatch.await(3, TimeUnit.SECONDS));
verifyZeroInteractions(notificationService);
}
@Test
public void testFilterByNamePlayerExactMatch() throws Exception {
Ranked1v1EntryBean entry1 = new Ranked1v1EntryBean();
entry1.setUsername("Aa");
Ranked1v1EntryBean entry2 = new Ranked1v1EntryBean();
entry2.setUsername("Ab");
when(leaderboardService.getRanked1v1Entries()).thenReturn(CompletableFuture.completedFuture(Arrays.asList(
entry1, entry2
)));
instance.setUpIfNecessary();
assertThat(instance.ratingTable.getSelectionModel().getSelectedItem(), nullValue());
instance.searchTextField.setText("aa");
assertThat(instance.ratingTable.getItems(), hasSize(2));
assertThat(instance.ratingTable.getSelectionModel().getSelectedItem().getUsername(), is("Aa"));
}
@Test
public void testFilterByNamePlayerPartialMatch() throws Exception {
Ranked1v1EntryBean entry1 = new Ranked1v1EntryBean();
entry1.setUsername("Aa");
Ranked1v1EntryBean entry2 = new Ranked1v1EntryBean();
entry2.setUsername("Ab");
when(leaderboardService.getRanked1v1Entries()).thenReturn(CompletableFuture.completedFuture(Arrays.asList(
entry1, entry2
)));
instance.setUpIfNecessary();
assertThat(instance.ratingTable.getSelectionModel().getSelectedItem(), nullValue());
instance.searchTextField.setText("b");
assertThat(instance.ratingTable.getItems(), hasSize(2));
assertThat(instance.ratingTable.getSelectionModel().getSelectedItem().getUsername(), is("Ab"));
}
@Test
public void testGetRoot() throws Exception {
assertThat(instance.getRoot(), is(instance.leaderboardRoot));
assertThat(instance.getRoot().getParent(), is(nullValue()));
}
}