public void testTopBottomCanBeFlippedOnIgnoreMalformed() {
    GeoBoundingBoxQueryBuilder builder = createTestQueryBuilder();
    double top = builder.topLeft().getLat();
    double left = builder.topLeft().getLon();
    double bottom = builder.bottomRight().getLat();
    double right = builder.bottomRight().getLon();

    assumeTrue("top should not be equal to bottom for flip check", top != bottom);
    builder
        .setValidationMethod(GeoValidationMethod.IGNORE_MALFORMED)
        .setCorners(bottom, left, top, right);
  }
  public void testLeftRightCanBeFlipped() {
    GeoBoundingBoxQueryBuilder builder = createTestQueryBuilder();
    double top = builder.topLeft().getLat();
    double left = builder.topLeft().getLon();
    double bottom = builder.bottomRight().getLat();
    double right = builder.bottomRight().getLon();

    builder
        .setValidationMethod(GeoValidationMethod.IGNORE_MALFORMED)
        .setCorners(top, right, bottom, left);
    builder.setValidationMethod(GeoValidationMethod.STRICT).setCorners(top, right, bottom, left);
  }
  public void testTopBottomCannotBeFlipped() {
    GeoBoundingBoxQueryBuilder builder = createTestQueryBuilder();
    double top = builder.topLeft().getLat();
    double left = builder.topLeft().getLon();
    double bottom = builder.bottomRight().getLat();
    double right = builder.bottomRight().getLon();

    assumeTrue("top should not be equal to bottom for flip check", top != bottom);
    logger.info("top: {} bottom: {}", top, bottom);
    builder.setValidationMethod(GeoValidationMethod.STRICT);
    IllegalArgumentException e =
        expectThrows(
            IllegalArgumentException.class, () -> builder.setCorners(bottom, left, top, right));
    assertThat(e.getMessage(), containsString("top is below bottom corner:"));
  }
 public void testFromJson() throws IOException {
   String json =
       "{\n"
           + "  \"geo_bounding_box\" : {\n"
           + "    \"pin.location\" : {\n"
           + "      \"top_left\" : [ -74.1, 40.73 ],\n"
           + "      \"bottom_right\" : [ -71.12, 40.01 ]\n"
           + "    },\n"
           + "    \"validation_method\" : \"STRICT\",\n"
           + "    \"type\" : \"MEMORY\",\n"
           + "    \"ignore_unmapped\" : false,\n"
           + "    \"boost\" : 1.0\n"
           + "  }\n"
           + "}";
   GeoBoundingBoxQueryBuilder parsed = (GeoBoundingBoxQueryBuilder) parseQuery(json);
   checkGeneratedJson(json, parsed);
   assertEquals(json, "pin.location", parsed.fieldName());
   assertEquals(json, -74.1, parsed.topLeft().getLon(), 0.0001);
   assertEquals(json, 40.73, parsed.topLeft().getLat(), 0.0001);
   assertEquals(json, -71.12, parsed.bottomRight().getLon(), 0.0001);
   assertEquals(json, 40.01, parsed.bottomRight().getLat(), 0.0001);
   assertEquals(json, 1.0, parsed.boost(), 0.0001);
   assertEquals(json, GeoExecType.MEMORY, parsed.type());
 }
 @Override
 public void fillIn(double coordinate, GeoBoundingBoxQueryBuilder qb) {
   qb.setCorners(
       qb.topLeft().getLat(), qb.topLeft().getLon(), qb.bottomRight().getLat(), coordinate);
 }