public void testSimpleHyperWithDefaultSchema() throws Exception {
    HyperSchemaFactoryWrapper personVisitor = new HyperSchemaFactoryWrapper();
    personVisitor.setIgnoreDefaults(false);
    ObjectMapper mapper = new ObjectMapper();

    mapper.acceptJsonFormatVisitor(Person.class, personVisitor);
    JsonSchema personSchema = personVisitor.finalSchema();

    HyperSchemaFactoryWrapper petVisitor = new HyperSchemaFactoryWrapper();
    mapper.acceptJsonFormatVisitor(Pet.class, petVisitor);
    JsonSchema petSchema = petVisitor.finalSchema();

    assertTrue("schema should be an objectSchema.", personSchema.isObjectSchema());
    LinkDescriptionObject[] links = personSchema.asObjectSchema().getLinks();
    assertNotNull(links);
    assertEquals(links.length, 2);
    LinkDescriptionObject selfLink = links[0];
    assertEquals("/persons/{name}", selfLink.getHref());
    assertEquals("self", selfLink.getRel());
    assertEquals("application/json", selfLink.getEnctype());
    assertEquals("GET", selfLink.getMethod());

    LinkDescriptionObject petLink = links[1];
    assertEquals("/persons/{name}/pet", petLink.getHref());
    assertEquals("pet", petLink.getRel());
    assertEquals("application/json", petLink.getEnctype());
    assertEquals("GET", petLink.getMethod());
    assertEquals(petSchema, petLink.getTargetSchema());
  }
  public void testSimpleHyperWithoutDefaultSchema() throws Exception {
    final ObjectMapper mapper = new ObjectMapper();

    /*
    HyperSchemaFactoryWrapper personVisitor = new HyperSchemaFactoryWrapper();

    mapper.acceptJsonFormatVisitor(Person.class, personVisitor);
    JsonSchema personSchema = personVisitor.finalSchema();
    */
    JsonSchema personSchema =
        new JsonSchemaGenerator(mapper, new HyperSchemaFactoryWrapper())
            .generateSchema(Person.class);

    HyperSchemaFactoryWrapper petVisitor = new HyperSchemaFactoryWrapper();
    mapper.acceptJsonFormatVisitor(Pet.class, petVisitor);
    JsonSchema petSchema = petVisitor.finalSchema();

    assertTrue("schema should be an objectSchema.", personSchema.isObjectSchema());
    LinkDescriptionObject[] links = personSchema.asObjectSchema().getLinks();
    assertNotNull(links);
    assertEquals(links.length, 2);
    LinkDescriptionObject selfLink = links[0];
    assertEquals("/persons/{name}", selfLink.getHref());
    assertEquals("self", selfLink.getRel());
    assertEquals(null, selfLink.getEnctype());
    assertEquals(null, selfLink.getMethod());

    LinkDescriptionObject petLink = links[1];
    assertEquals("/persons/{name}/pet", petLink.getHref());
    assertEquals("pet", petLink.getRel());
    assertEquals(null, petLink.getEnctype());
    assertEquals(null, petLink.getMethod());
    assertEquals(petSchema, petLink.getTargetSchema());
  }
  private String getSchemaFor(Class<?> clazz) throws JsonProcessingException {
    ObjectMapper m = new ObjectMapper();
    SchemaFactoryWrapper visitor = new SchemaFactoryWrapper();
    m.acceptJsonFormatVisitor(m.constructType(clazz), visitor);
    JsonSchema jsonSchema = visitor.finalSchema();

    StringBuilder sb = new StringBuilder();
    sb.append(clazz.getSimpleName()).append(": ");
    sb.append(m.writeValueAsString(jsonSchema));

    return sb.toString();
  }