package com.flexpoker.core.chat; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.security.Principal; import java.util.Arrays; import java.util.UUID; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import com.flexpoker.core.api.chat.SendGameChatMessageCommand; import com.flexpoker.core.api.chat.SendGlobalChatMessageCommand; import com.flexpoker.core.api.chat.SendPersonalChatMessageCommand; import com.flexpoker.core.api.chat.SendTableChatMessageCommand; import com.flexpoker.model.chat.incoming.ChatMessage; import com.flexpoker.model.chat.outgoing.GameChatMessage; import com.flexpoker.model.chat.outgoing.GlobalChatMessage; import com.flexpoker.model.chat.outgoing.PersonalChatMessage; import com.flexpoker.model.chat.outgoing.TableChatMessage; public class SendChatMessageRouterCommandTest { private SendChatMessageRouterCommand command; @Mock private Principal mockPrincipal; @Mock private SendGlobalChatMessageCommand mockSendGlobalChatMessageCommand; @Mock private SendGameChatMessageCommand mockSendGameChatMessageCommand; @Mock private SendTableChatMessageCommand mockSendTableChatMessageCommand; @Mock private SendPersonalChatMessageCommand mockSendPersonalChatMessageCommand; @Before public void setup() { MockitoAnnotations.initMocks(this); when(mockPrincipal.getName()).thenReturn("testuser"); command = new SendChatMessageRouterCommand( mockSendGlobalChatMessageCommand, mockSendGameChatMessageCommand, mockSendTableChatMessageCommand, mockSendPersonalChatMessageCommand); } @Test public void testGlobalMessage() { ChatMessage globalMessage = new ChatMessage("global message", null, null, null); command.execute(globalMessage, mockPrincipal); ArgumentCaptor<GlobalChatMessage> argument = ArgumentCaptor.forClass(GlobalChatMessage.class); verify(mockSendGlobalChatMessageCommand).execute(argument.capture()); assertEquals("global message", argument.getValue().getMessage()); assertEquals("testuser", argument.getValue().getSenderUsername()); assertEquals(false, argument.getValue().isSystemMessage()); } @Test public void testGameMessage() { UUID gameId = UUID.randomUUID(); ChatMessage gameMessage = new ChatMessage("game message", null, gameId.toString(), null); command.execute(gameMessage, mockPrincipal); ArgumentCaptor<GameChatMessage> argument = ArgumentCaptor.forClass(GameChatMessage.class); verify(mockSendGameChatMessageCommand).execute(argument.capture()); assertEquals("game message", argument.getValue().getMessage()); assertEquals("testuser", argument.getValue().getSenderUsername()); assertEquals(false, argument.getValue().isSystemMessage()); assertEquals(gameId, argument.getValue().getGameId()); } @Test public void testTableMessage() { UUID gameId = UUID.randomUUID(); UUID tableId = UUID.randomUUID(); ChatMessage tableMessage = new ChatMessage("table message", null, gameId.toString(), tableId.toString()); command.execute(tableMessage, mockPrincipal); ArgumentCaptor<TableChatMessage> argument = ArgumentCaptor.forClass(TableChatMessage.class); verify(mockSendTableChatMessageCommand).execute(argument.capture()); assertEquals("table message", argument.getValue().getMessage()); assertEquals("testuser", argument.getValue().getSenderUsername()); assertEquals(false, argument.getValue().isSystemMessage()); assertEquals(tableId, argument.getValue().getTableId()); } @Test public void testPersonalMessage() { String[] receiverUsernames = {"receiver1", "receiver2"}; ChatMessage personalMessage = new ChatMessage("personal message", Arrays.asList(receiverUsernames), null, null); command.execute(personalMessage, mockPrincipal); ArgumentCaptor<PersonalChatMessage> argument = ArgumentCaptor.forClass(PersonalChatMessage.class); verify(mockSendPersonalChatMessageCommand).execute(argument.capture()); assertEquals("personal message", argument.getValue().getMessage()); assertEquals("testuser", argument.getValue().getSenderUsername()); assertEquals(false, argument.getValue().isSystemMessage()); assertEquals("receiver1", argument.getValue().getReceiverUsernames().get(0)); assertEquals("receiver2", argument.getValue().getReceiverUsernames().get(1)); } @Test(expected = IllegalArgumentException.class) public void testInvalid() { ChatMessage chatMessage = new ChatMessage(null, null, null, null); command.execute(chatMessage, mockPrincipal); } }