package org.mockserver.client.server;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockserver.client.netty.websocket.WebSocketClient;
import org.mockserver.mock.Expectation;
import org.mockserver.mock.action.ExpectationCallback;
import org.mockserver.model.*;
import static org.mockito.Matchers.same;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
import static org.mockserver.model.HttpResponse.response;
import static org.mockserver.model.HttpForward.forward;
import static org.mockserver.model.HttpError.error;
import static org.mockserver.model.HttpClassCallback.callback;
public class ForwardChainExpectationTest {
private MockServerClient mockMockServerClient;
private Expectation mockExpectation;
@Mock
private WebSocketClient webSocketClient;
@InjectMocks
private ForwardChainExpectation forwardChainExpectation;
@Before
public void setupMocks() {
mockMockServerClient = mock(MockServerClient.class);
mockExpectation = mock(Expectation.class);
forwardChainExpectation = new ForwardChainExpectation(mockMockServerClient, mockExpectation);
initMocks(this);
}
@Test
public void shouldSetResponse() {
// given
HttpResponse response = response();
// when
forwardChainExpectation.respond(response);
// then
verify(mockExpectation).thenRespond(same(response));
verify(mockMockServerClient).sendExpectation(mockExpectation);
}
@Test
public void shouldSetForward() {
// given
HttpForward forward = forward();
// when
forwardChainExpectation.forward(forward);
// then
verify(mockExpectation).thenForward(same(forward));
verify(mockMockServerClient).sendExpectation(mockExpectation);
}
@Test
public void shouldSetError() {
// given
HttpError error = error();
// when
forwardChainExpectation.error(error);
// then
verify(mockExpectation).thenError(same(error));
verify(mockMockServerClient).sendExpectation(mockExpectation);
}
@Test
public void shouldSetClassCallback() {
// given
HttpClassCallback callback = callback();
// when
forwardChainExpectation.callback(callback);
// then
verify(mockExpectation).thenCallback(same(callback));
verify(mockMockServerClient).sendExpectation(mockExpectation);
}
@Test
public void shouldSetObjectCallback() {
// given
ExpectationCallback callback = new ExpectationCallback() {
@Override
public HttpResponse handle(HttpRequest httpRequest) {
return response();
}
};
// and
when(webSocketClient.registerExpectationCallback(callback)).thenReturn(webSocketClient);
when(webSocketClient.clientId()).thenReturn("some_client_id");
// when
forwardChainExpectation.callback(callback);
// then
verify(webSocketClient).registerExpectationCallback(same(callback));
verify(mockExpectation).thenCallback(new HttpObjectCallback().withClientId("some_client_id"));
verify(mockMockServerClient).sendExpectation(mockExpectation);
}
}