package org.vaadin.smartgwt.server.util; import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import java.util.HashMap; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.vaadin.rpc.server.ServerSideHandler; import org.vaadin.rpc.server.ServerSideProxy; import org.vaadin.smartgwt.server.util.SC.ServerSideProxyFactory; import com.google.common.collect.Maps; public class SCTest { private SC sc; private ServerSideProxy serverSideProxy; @Before public void before() { final ServerSideProxyFactory serverSideProxyFactory = mock(ServerSideProxyFactory.class); serverSideProxy = mock(ServerSideProxy.class); when(serverSideProxyFactory.newServerSideProxy(any(ServerSideHandler.class))).thenReturn(serverSideProxy); sc = new SC(serverSideProxyFactory); } @Test public void test_sendsConfirmationRequest() { final String message = "message"; sc.confirm(message, null); verify(serverSideProxy).call(eq("confirm"), anyInt(), eq(message), anyString()); } @Test public void test_sendsConfirmationRequestWithTitle() { final String title = "title"; final String message = "message"; sc.confirm(title, message, null); verify(serverSideProxy).call(eq("confirm"), anyInt(), eq(message), eq(title)); } @Test public void test_confirmationRequestCallsCallbackOnVariablesChange() { final BooleanCallback callback = mock(BooleanCallback.class); final ArgumentCaptor<Integer> keyCaptor = ArgumentCaptor.forClass(Integer.class); final HashMap<String, Object> variables = Maps.newHashMap(); final Boolean clientResult = true; sc.confirm(null, callback); verify(serverSideProxy, atLeastOnce()).call(anyString(), keyCaptor.capture(), anyString(), anyString()); variables.put("callbackKey", keyCaptor.getValue()); variables.put("callback", clientResult); sc.changeVariables(null, variables); verify(callback).execute(clientResult); } @Test public void test_confirmationRequestsCallsCallbackOnVariablesChangeWithNullResult() { final BooleanCallback callback = mock(BooleanCallback.class); final ArgumentCaptor<Integer> keyCaptor = ArgumentCaptor.forClass(Integer.class); final HashMap<String, Object> variables = Maps.newHashMap(); final Boolean clientResult = null; sc.confirm(null, callback); verify(serverSideProxy, atLeastOnce()).call(anyString(), keyCaptor.capture(), anyString(), anyString()); variables.put("callbackKey", keyCaptor.getValue()); variables.put("callback", clientResult); sc.changeVariables(null, variables); verify(callback).execute(clientResult); } @Test public void test_callsCallbackOnConfirmationRequestWithPendingRequests() { final BooleanCallback callback = mock(BooleanCallback.class); final ArgumentCaptor<Integer> keyCaptor = ArgumentCaptor.forClass(Integer.class); final HashMap<String, Object> variables = Maps.newHashMap(); final Boolean clientResult = true; sc.confirm(null, mock(BooleanCallback.class)); sc.confirm(null, callback); verify(serverSideProxy, atLeastOnce()).call(anyString(), keyCaptor.capture(), anyString(), anyString()); sc.confirm(null, mock(BooleanCallback.class)); variables.put("callbackKey", keyCaptor.getValue()); variables.put("callback", clientResult); sc.changeVariables(null, variables); verify(callback).execute(clientResult); } @Test public void test_ask_sendsAskRequest() { final String message = "message"; sc.ask(message, null); verify(serverSideProxy).call(eq("ask"), anyInt(), anyString(), eq(message)); } @Test public void test_ask_sendsAskRequestWithTitle() { final String title = "title"; final String message = "message"; sc.ask(title, message, null); verify(serverSideProxy).call(eq("ask"), anyInt(), eq(title), eq(message)); } @Test public void test_ask_AskRequestCallsCallbackOnVariablesChange() { final BooleanCallback callback = mock(BooleanCallback.class); final ArgumentCaptor<Integer> keyCaptor = ArgumentCaptor.forClass(Integer.class); final HashMap<String, Object> variables = Maps.newHashMap(); final Boolean clientResult = true; sc.ask(null, callback); verify(serverSideProxy, atLeastOnce()).call(anyString(), keyCaptor.capture(), anyString(), anyString()); variables.put("callbackKey", keyCaptor.getValue()); variables.put("callback", clientResult); sc.changeVariables(null, variables); verify(callback).execute(clientResult); } @Test public void test_ask_AskRequestsCallsCallbackOnVariablesChangeWithNullResult() { final BooleanCallback callback = mock(BooleanCallback.class); final ArgumentCaptor<Integer> keyCaptor = ArgumentCaptor.forClass(Integer.class); final HashMap<String, Object> variables = Maps.newHashMap(); final Boolean clientResult = null; sc.ask(null, callback); verify(serverSideProxy, atLeastOnce()).call(anyString(), keyCaptor.capture(), anyString(), anyString()); variables.put("callbackKey", keyCaptor.getValue()); variables.put("callback", clientResult); sc.changeVariables(null, variables); verify(callback).execute(clientResult); } @Test public void test_ask_callsCallbackOnAskRequestWithPendingRequests() { final BooleanCallback callback = mock(BooleanCallback.class); final ArgumentCaptor<Integer> keyCaptor = ArgumentCaptor.forClass(Integer.class); final HashMap<String, Object> variables = Maps.newHashMap(); final Boolean clientResult = true; sc.ask(null, mock(BooleanCallback.class)); sc.ask(null, callback); verify(serverSideProxy, atLeastOnce()).call(anyString(), keyCaptor.capture(), anyString(), anyString()); sc.ask(null, mock(BooleanCallback.class)); variables.put("callbackKey", keyCaptor.getValue()); variables.put("callback", clientResult); sc.changeVariables(null, variables); verify(callback).execute(clientResult); } }