package tv.dyndns.kishibe.qmaclone.server;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.isA;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.eclipse.jetty.websocket.api.Session;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import com.google.common.collect.ImmutableList;
import tv.dyndns.kishibe.qmaclone.client.packet.PacketPlayerSummary;
import tv.dyndns.kishibe.qmaclone.client.packet.PacketServerStatus;
import tv.dyndns.kishibe.qmaclone.server.database.Database;
import tv.dyndns.kishibe.qmaclone.server.websocket.MessageSender;
@RunWith(JUnit4.class)
public class ServerStatusManagerTest {
@Rule
public final MockitoRule mocks = MockitoJUnit.rule();
@Mock
private Database mockDatabase;
@Mock
private GameManager mockGameManager;
@Mock
private NormalModeProblemManager mockNormalModeProblemManager;
@Mock
private PlayerHistoryManager mockPlayerHistoryManager;
@Mock
private MessageSender<PacketServerStatus> mockServerStatusWebSockets;
@Mock
private ThreadPool mockThreadPool;
@Mock
private Session mockSession;
private ServerStatusManager manager;
@Before
public void setUp() throws Exception {
when(mockDatabase.loadPageView()).thenReturn(new PageView());
when(mockDatabase.getNumberOfActiveUsers()).thenReturn(12345);
when(mockGameManager.getNumberOfPlayersInWhole()).thenReturn(1);
when(mockNormalModeProblemManager.getNumberOfProblem()).thenReturn(210000);
when(mockPlayerHistoryManager.get()).thenReturn(ImmutableList.of(new PacketPlayerSummary()));
manager = new ServerStatusManager(mockDatabase, mockGameManager, mockNormalModeProblemManager,
mockPlayerHistoryManager, mockServerStatusWebSockets, mockThreadPool);
}
@Test
public void testLogin() throws Exception {
int numberOfPageView = manager.getServerStatus().numberOfPageView;
manager.login();
manager.updateServerStatus();
assertThat(manager.getServerStatus().numberOfPageView).isEqualTo(numberOfPageView + 1);
verify(mockServerStatusWebSockets, times(2)).send(isA(PacketServerStatus.class));
}
@Test
public void testGetServerStatus() throws Exception {
assertThat(manager.getServerStatus()).isNotNull();
}
@Test
@Ignore
public void testSaveServerStatus() {
fail("Not yet implemented");
}
@Test
public void testKeepAlive() {
manager.keepAlive(123456789);
assertThat((Iterable<Integer>) manager.loginUserCodes).contains(123456789);
verify(mockServerStatusWebSockets).send(isA(PacketServerStatus.class));
}
@Test
@Ignore
public void testGetLoginUsers() {
fail("Not yet implemented");
}
@Test
@Ignore
public void testChangeStatics() {
fail("Not yet implemented");
}
@Test
public void updateServerStatusShouldNotUpdateFieldIfNoChange() throws Exception {
PacketServerStatus status = manager.getServerStatus();
manager.updateServerStatus();
assertThat(manager.getServerStatus()).isSameAs(status);
verify(mockServerStatusWebSockets).send(isA(PacketServerStatus.class));
}
@Test
public void updateServerStatusShouldUpdateFieldIfChangeExists() throws Exception {
PacketServerStatus status = manager.getServerStatus();
manager.login();
manager.updateServerStatus();
assertThat(manager.getServerStatus()).isNotEqualTo(status);
verify(mockServerStatusWebSockets, times(2)).send(isA(PacketServerStatus.class));
}
@Test
public void getServerStatusMessageSenderReturnsInstance() {
assertThat(manager.getServerStatusMessageSender()).isNotNull();
}
}