@Test
  public void convertsJodaTimeTypesCorrectly() {

    List<Converter<?, ?>> converters = new ArrayList<Converter<?, ?>>();
    converters.add(new LocalDateToDateConverter());
    converters.add(new DateToLocalDateConverter());

    List<Class<?>> customSimpleTypes = new ArrayList<Class<?>>();
    customSimpleTypes.add(LocalDate.class);
    mappingContext.setCustomSimpleTypes(customSimpleTypes);

    converter = new MappingMongoConverter(mappingContext);
    converter.setConverters(converters);
    converter.afterPropertiesSet();

    Person person = new Person();
    person.birthDate = new LocalDate();

    DBObject dbObject = new BasicDBObject();
    converter.write(person, dbObject);

    assertTrue(dbObject.get("birthDate") instanceof Date);

    Person result = converter.read(Person.class, dbObject);
    assertThat(result.birthDate, is(notNullValue()));
  }
  /** @see DATADOC-128 */
  @Test
  public void ignoresDocumentsStoredTypeIfCompletelyDifferentTypeRequested() {

    DBObject dbObject = new BasicDBObject();
    dbObject.put("birthDate", new LocalDate());
    dbObject.put(MappingMongoConverter.CUSTOM_TYPE_KEY, Person.class.getName());

    assertThat(converter.read(BirthDateContainer.class, dbObject), is(BirthDateContainer.class));
  }
  /** @see DATADOC-128 */
  @Test
  public void usesDocumentsStoredTypeIfSubtypeOfRequest() {

    DBObject dbObject = new BasicDBObject();
    dbObject.put("birthDate", new LocalDate());
    dbObject.put(MappingMongoConverter.CUSTOM_TYPE_KEY, Person.class.getName());

    assertThat(converter.read(Contact.class, dbObject), is(Person.class));
  }