
com.github.tonivade.zeromock.server.URIOMockHttpServer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of zeromock-server Show documentation
Show all versions of zeromock-server Show documentation
Mock Http Server (mostly) without dependencies
The newest version!
/*
* Copyright (c) 2018-2024, Antonio Gabriel Muñoz Conejo
* Distributed under the terms of the MIT License
*/
package com.github.tonivade.zeromock.server;
import static com.github.tonivade.zeromock.api.PreFilterK.filter;
import static com.github.tonivade.zeromock.server.ResponseInterpreterK.*;
import static java.util.Objects.requireNonNull;
import com.github.tonivade.purefun.core.Matcher1;
import com.github.tonivade.purefun.core.Producer;
import com.github.tonivade.purefun.data.Sequence;
import com.github.tonivade.purefun.effect.URIO;
import com.github.tonivade.purefun.typeclasses.Instances;
import com.github.tonivade.zeromock.api.HttpRequest;
import com.github.tonivade.zeromock.api.HttpRouteBuilderK;
import com.github.tonivade.zeromock.api.HttpURIOService;
import com.github.tonivade.zeromock.api.PostFilter;
import com.github.tonivade.zeromock.api.PostFilterK;
import com.github.tonivade.zeromock.api.PreFilter;
import com.github.tonivade.zeromock.api.PreFilterK;
import com.github.tonivade.zeromock.api.RequestHandlerK;
import com.github.tonivade.zeromock.server.MockHttpServerK.BuilderK;
public final class URIOMockHttpServer implements HttpServer, HttpRouteBuilderK, URIOMockHttpServer> {
private final MockHttpServerK> serverK;
public URIOMockHttpServer(com.sun.net.httpserver.HttpServer server, Producer env) {
this(new MockHttpServerK<>(server, Instances.monad(), urio(env)));
}
private URIOMockHttpServer(MockHttpServerK> serverK) {
this.serverK = requireNonNull(serverK);
}
@Override
public int getPort() {
return serverK.getPort();
}
@Override
public String getPath() {
return serverK.getPath();
}
public static BuilderK, URIOMockHttpServer> builder(Producer factory) {
return builder(urio(factory));
}
public static URIOMockHttpServer listenAt(R env, int port) {
return builder(Producer.cons(env)).port(port).build();
}
public static URIOMockHttpServer listenAt(R env, String host, int port) {
return builder(Producer.cons(env)).host(host).port(port).build();
}
public URIOMockHttpServer mount(String path, HttpURIOService other) {
serverK.mount(path, other.build());
return this;
}
public URIOMockHttpServer exec(RequestHandlerK> handler) {
serverK.exec(handler);
return this;
}
public ThenStepK, URIOMockHttpServer> preFilter(Matcher1 matcher) {
return new ThenStepK<>(serverK.monad(), handler -> addPreFilter(matcher, handler));
}
public URIOMockHttpServer preFilter(PreFilter filter) {
return preFilter(filter.lift(serverK.monad()));
}
public URIOMockHttpServer preFilter(PreFilterK> filter) {
serverK.preFilter(filter);
return this;
}
public URIOMockHttpServer postFilter(PostFilter filter) {
return postFilter(filter.lift(serverK.monad()));
}
public URIOMockHttpServer postFilter(PostFilterK> filter) {
serverK.postFilter(filter);
return this;
}
public URIOMockHttpServer addMapping(Matcher1 matcher, RequestHandlerK> handler) {
serverK.addMapping(matcher, handler);
return this;
}
public URIOMockHttpServer addPreFilter(Matcher1 matcher, RequestHandlerK> handler) {
serverK.preFilter(filter(serverK.monad(), matcher, handler));
return this;
}
@Override
public ThenStepK, URIOMockHttpServer> when(Matcher1 matcher) {
return new ThenStepK<>(serverK.monad(), handler -> addMapping(matcher, handler));
}
@Override
public URIOMockHttpServer start() {
serverK.start();
return this;
}
@Override
public void stop() {
serverK.stop();
}
@Override
public URIOMockHttpServer verify(Matcher1 matcher) {
serverK.verify(matcher);
return this;
}
@Override
public URIOMockHttpServer verifyNot(Matcher1 matcher) {
serverK.verifyNot(matcher);
return this;
}
@Override
public Sequence getUnmatched() {
return serverK.getUnmatched();
}
@Override
public void reset() {
serverK.reset();
}
private static BuilderK, URIOMockHttpServer> builder(
ResponseInterpreterK> urioAsync) {
return new BuilderK<>(Instances.monad(), urioAsync) {
@Override
public URIOMockHttpServer build() {
return new URIOMockHttpServer<>(buildK());
}
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy