content: package integration.params;
  
  import com.github.aesteve.vertx.nubes.utils.DateUtils;
  import integration.VertxNubesTestBase;
  import io.vertx.ext.unit.Async;
  import io.vertx.ext.unit.TestContext;
  import org.junit.Before;
  import org.junit.Test;
  
  import java.util.Date;
  
  public class HeadersParametersTest extends VertxNubesTestBase {
  
    @Before
    public void setUp(TestContext context) throws Exception {
      super.setUp(context);
    }
  
    @Test
    public void nonMandatoryParamPresent(TestContext context) {
      Async async = context.async();
      Date now = new Date();
      client().get("/headers/facultative", response -> {
        context.assertEquals(200, response.statusCode());
        response.bodyHandler(buffer -> {
          context.assertEquals(Long.toString(now.getTime()), buffer.toString("UTF-8"));
          async.complete();
        });
      }).putHeader("X-Date", DateUtils.INSTANCE.formatIso8601(now)).end();
    }
  
    @Test
    public void nonMandatoryParamAbsent(TestContext context) {
      Async async = context.async();
      client().get("/headers/facultative", response -> {
        context.assertEquals(200, response.statusCode());
        response.bodyHandler(buffer -> {
          context.assertEquals("null", buffer.toString("UTF-8"));
          async.complete();
        });
      }).end();
    }
  
    @Test
    public void mandatoryParamAbsent(TestContext context) {
      Async async = context.async();
      client().get("/headers/mandatory", response -> {
        context.assertEquals(400, response.statusCode());
        response.bodyHandler(buff -> {
          String msg = buff.toString("UTF-8");
          context.assertTrue(msg.contains("mandatory"));
          async.complete();
        });
      }).end();
    }
  
    @Test
    public void echoByName(TestContext context) {
      Async async = context.async();
      String value = "Pluto";
      client().get("/headers/echoByName", response -> {
        context.assertEquals(200, response.statusCode());
        response.bodyHandler(buffer -> {
          context.assertEquals(value, buffer.toString("UTF-8"));
          async.complete();
        });
      }).putHeader("someHeader", value).end();
    }
  
    @Test
    public void wrongHeaderType(TestContext context) {
      Async async = context.async();
      String header = "X-Date";
      String value = "invalidDate";
      client().get("/headers/facultative", response -> {
        context.assertEquals(400, response.statusCode());
        response.bodyHandler(buffer -> {
          System.out.println(buffer.toString("UTF-8"));
          context.assertEquals("Invalid value : " + value + " for header : " + header, buffer.toString("UTF-8"));
          async.complete();
        });
      }).putHeader(header, value).end();
  
    }
  
    @Test
    public void wrongHeadersType(TestContext context) {
      Async async = context.async();
      String header = "X-Date";
      String value = "invalidDate";
      client().get("/headers/wrongHeaders", response -> {
        context.assertEquals(500, response.statusCode());
        async.complete();
      }).putHeader(header, value).end();
  
    }
  
  }
  