Refactor client name and add peek operation

This commit is contained in:
Dominik Przybysz 2015-01-21 14:44:26 +01:00
parent 8d4fd26273
commit a9a896827e
10 changed files with 287 additions and 90 deletions

View file

@ -60,6 +60,14 @@ class ContextExecutor {
return []
}
List<MockEvent> peekMock(String name) {
Mock mock = mocks.find { it.name == name }
if (mock) {
return mock.history
}
return []
}
void addMock(Mock mock) {
mocks << mock
}

View file

@ -31,6 +31,8 @@ class HttpMockServer {
addMock(request, ex)
} else if (request.name() == 'removeMock') {
removeMock(request, ex)
} else if (request.name() == 'peekMock') {
peekMock(request, ex)
} else {
throw new RuntimeException('Unknown request')
}
@ -109,44 +111,66 @@ class HttpMockServer {
createResponse(ex, createMockRemovedResponse(mockEvents), 200)
}
private void peekMock(GPathResult request, HttpExchange ex) {
String name = request.name
if (!(name in mockNames)) {
throw new RuntimeException('mock not registered')
}
log.info("Peeking mock $name")
List<MockEvent> mockEvents = childServers.collect { it.peekMock(name) }.flatten()
createResponse(ex, createMockPeekedResponse(mockEvents), 200)
}
private static String createMockRemovedResponse(List<MockEvent> mockEvents) {
StringWriter sw = new StringWriter()
MarkupBuilder builder = new MarkupBuilder(sw)
builder.mockRemoved {
mockEvents.each { MockEvent m ->
builder.mockEvent {
builder.request {
text m.request.text
headers {
m.request.headers.each {
builder.param(name: it.key, it.value)
}
}
query {
m.request.query.each {
builder.param(name: it.key, it.value)
}
}
path {
m.request.path.each {
builder.elem it
}
mockEventsToXml(mockEvents, builder)
}
return sw.toString()
}
private static String createMockPeekedResponse(List<MockEvent> mockEvents) {
StringWriter sw = new StringWriter()
MarkupBuilder builder = new MarkupBuilder(sw)
builder.mockPeeked {
mockEventsToXml(mockEvents, builder)
}
return sw.toString()
}
private static void mockEventsToXml(List<MockEvent> events, MarkupBuilder builder) {
events.each { MockEvent event ->
builder.mockEvent {
builder.request {
text event.request.text
headers {
event.request.headers.each {
builder.param(name: it.key, it.value)
}
}
builder.response {
text m.response.text
headers {
m.response.headers.each {
builder.param(name: it.key, it.value)
}
query {
event.request.query.each {
builder.param(name: it.key, it.value)
}
statusCode m.response.statusCode
}
path {
event.request.path.each {
builder.elem it
}
}
}
builder.response {
text event.response.text
headers {
event.response.headers.each {
builder.param(name: it.key, it.value)
}
}
statusCode event.response.statusCode
}
}
}
String string = sw.toString()
return string
}
private static void createErrorResponse(HttpExchange ex, Exception e) {

View file

@ -48,6 +48,10 @@ class HttpServerWraper {
return executors.collect { it.removeMock(name) }.flatten()
}
List<MockEvent> peekMock(String name) {
return executors.collect { it.peekMock(name) }.flatten()
}
List<Mock> getMocks() {
return executors.collect { it.mocks }.flatten()
}