package core.framework.impl.mongo;
import core.framework.api.util.ClasspathResources;
import org.bson.json.JsonReader;
import org.bson.types.ObjectId;
import org.junit.Assert;
import org.junit.Test;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import static org.junit.Assert.assertEquals;
/**
* @author neo
*/
public class EntityDecoderBuilderTest {
@Test
public void decode() {
EntityDecoderBuilder<TestEntity> builder = new EntityDecoderBuilder<>(TestEntity.class);
EntityDecoder<TestEntity> decoder = builder.build();
verifyGeneratedMethods(builder);
String entityJSON = ClasspathResources.text("mongo-test/entity.json");
TestEntity entity = decoder.decode(new JsonReader(entityJSON));
assertEquals(new ObjectId("5627b47d54b92d03adb9e9cf"), entity.id);
assertEquals("string", entity.stringField);
assertEquals(ZonedDateTime.of(LocalDateTime.of(2016, 9, 1, 11, 0, 0), ZoneId.of("America/New_York")).toInstant(), entity.zonedDateTimeField.toInstant());
assertEquals(TestEntityChild.TestEnum.ITEM1, entity.child.enumField);
assertEquals(2, entity.listField.size());
assertEquals("V1", entity.listField.get(0));
assertEquals("V2", entity.listField.get(1));
Assert.assertNull(entity.nullChild);
assertEquals("V1", entity.mapField.get("K1"));
assertEquals("V2", entity.mapField.get("K2"));
}
private void verifyGeneratedMethods(EntityDecoderBuilder<TestEntity> builder) {
String code = ClasspathResources.text("mongo-test/decoder-code.txt").replaceAll("\r\n", "\n");
StringBuilder stringBuilder = new StringBuilder();
builder.fields.forEach(stringBuilder::append);
builder.methods.values().forEach(stringBuilder::append);
assertEquals(code, stringBuilder.toString());
}
}