All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.tonivade.zeromock.server.URIOMockHttpServer Maven / Gradle / Ivy

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