public static EntityInfoBuilder<SomeEntity> createBuilderForSomeEntity() { EntityInfoBuilder<SomeEntity> entityBuilder = new EntityInfoBuilder<>(SomeEntity.class); entityBuilder.addFields("name", "age"); return entityBuilder; }
@Test public void testNonExistentFieldInHierarchy() { EntityInfoBuilder<SimpleEntityEx> builder = new EntityInfoBuilder<>(SimpleEntityEx.class, "simple_entity"); assertThrows(NoSuchFieldException.class, () -> { builder.addField("noField", "someName"); }); }
@Test public void childColumnNamesCanCollision() { EntityInfoBuilder<Collision> builder = new EntityInfoBuilder<>(Collision.class, "collision_entity"); builder.addField("city_name"); assertThrows(RuntimeException.class, () -> { builder.addField("city.name"); }); }
@Test public void testImplicitColumnName() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addField("birthDay"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("birthday"); assertEquals("birthday", column.getColumnName()); assertEquals(simple.getBirthDay(), column.getAccessor().apply(simple)); }
@Test public void testImplicitColumnNameComposed() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addField("city.name"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("city_name"); assertEquals("city_name", column.getColumnName()); assertEquals(city.getName(), column.getAccessor().apply(simple)); }
@Test public void columnsMantainsDeclaredOrder() throws IOException { EntityInfoBuilder<SomeEntity> entityBuilder = new EntityInfoBuilder<>(SomeEntity.class); entityBuilder.addColumn("age", FieldTypeEnum.INT, SomeEntity::getAge); entityBuilder.addColumn("name", FieldTypeEnum.STRING, SomeEntity::getName); CsvConfiguration<SomeEntity> config = new CsvConfiguration<>(entityBuilder.build()); String result = writeCsvToString(config, new SomeEntity("John", 10)); assertEquals("age,name" + ls + "10,John" + ls, result); }
@Test public void testAddMultipleFields() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addFields("name", "birthDay"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo columnName = entityInfo.findColumn("name"); assertEquals("name", columnName.getColumnName()); assertEquals(simple.getName(), columnName.getAccessor().apply(simple)); ColumnInfo columnBirthday = entityInfo.findColumn("birthday"); assertEquals("birthday", columnBirthday.getColumnName()); assertEquals(simple.getBirthDay(), columnBirthday.getAccessor().apply(simple)); }
private static EntityInfo configureEntityMapping() { EntityInfoBuilder<Trip> entityInfo = new EntityInfoBuilder<>(Trip.class); entityInfo.addField("bikeId"); entityInfo.addField("tripduration"); entityInfo.addColumn("startdate", FieldTypeEnum.STRING, trip -> toDate(trip.getStarttime())); entityInfo.addField("startStationId"); entityInfo.addColumn("stopdate", FieldTypeEnum.STRING, trip -> toDate(trip.getStoptime())); entityInfo.addField("endStationId"); entityInfo.addField("userType"); entityInfo.addColumn("age", FieldTypeEnum.INT, trip -> getAge(trip.getBirthYear())); entityInfo.addColumn("gender", FieldTypeEnum.STRING, trip -> getGender(trip.getGender())); return entityInfo.build(); }
@Test public void testColumnCapturedValue() { String value = "Some Value"; EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addColumn("some_column", FieldTypeEnum.STRING, obj -> value); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("some_column"); assertEquals("some_column", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(value, column.getAccessor().apply(simple)); }
@Test public void canCreateSyntheticColumns() throws IOException { EntityInfoBuilder<SomeEntity> entityBuilder = new EntityInfoBuilder<>(SomeEntity.class); entityBuilder.addFields("name", "age"); entityBuilder.addColumn("adult", FieldTypeEnum.BOOLEAN, e -> e.getAge() >= 18); CsvConfiguration<SomeEntity> config = new CsvConfiguration<>(entityBuilder.build()); String result = writeCsvToString(config, new SomeEntity("John", 10), new SomeEntity("Amanda", 34)); assertEquals("name,age,adult" + ls + "John,10,false" + ls + "Amanda,34,true" + ls, result); }
@Test public void testExplicitDateField() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addField("birthDay", "birthday", FieldTypeEnum.DATE); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("birthday"); assertEquals("birthday", column.getColumnName()); assertEquals(FieldTypeEnum.DATE, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getBirthDay(), column.getAccessor().apply(simple)); }
@Test public void testExplicitEnumField() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addField("floor", "floor", FieldTypeEnum.ENUMSTRING); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("floor"); assertEquals("floor", column.getColumnName()); assertEquals(FieldTypeEnum.ENUMSTRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getFloor(), column.getAccessor().apply(simple)); }
@Test public void testExistentField() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addField("name", "name"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("name"); assertEquals("name", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getName(), column.getAccessor().apply(simple)); }
@Test public void testAnnotatedEnumField() { EntityInfoBuilder<SimpleEntityEx> builder = new EntityInfoBuilder<>(SimpleEntityEx.class, "simple_entity"); builder.addField("order", "order"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("order"); assertEquals("order", column.getColumnName()); assertEquals(FieldTypeEnum.ENUMORDINAL, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simpleEx.getOrder(), column.getAccessor().apply(simpleEx)); }
@Test public void testSimpleColumnDeclaration() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addColumn("name", FieldTypeEnum.STRING, SimpleEntity::getName); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("name"); assertEquals("name", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getName(), column.getAccessor().apply(simple)); }
@Test public void testExistentPathField() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addField("city.name", "city_name"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("city_name"); assertEquals("city_name", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(city.getName(), column.getAccessor().apply(simple)); }
@Test public void testExistentFieldInHierarchy() { EntityInfoBuilder<SimpleEntityEx> builder = new EntityInfoBuilder<>(SimpleEntityEx.class, "simple_entity"); builder.addField("height", "height"); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("height"); assertEquals("height", column.getColumnName()); assertEquals(FieldTypeEnum.INT, column.getFieldType().getFieldType()); assertTrue(column.getFieldType().isPrimitive()); assertEquals(simpleEx.getHeight(), column.getAccessor().apply(simpleEx)); }
@Test public void testColumnChildEntity() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addColumn("city_name", FieldTypeEnum.STRING, obj -> obj.getCity().getName()); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("city_name"); assertEquals("city_name", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getCity().getName(), column.getAccessor().apply(simple)); }
@Test public void accessorCanChangeType() throws IOException { EntityInfoBuilder<SomeEntity> entityBuilder = new EntityInfoBuilder<>(SomeEntity.class); entityBuilder.addField("name"); entityBuilder.addColumn("age", FieldTypeEnum.STRING, e -> e.getAge() + " years"); entityBuilder.addColumn("adult", FieldTypeEnum.STRING, e -> e.getAge() >= 18 ? "Si" : "No"); Builder<SomeEntity> config = new Builder<>(entityBuilder.build()); String result = writeCsvToString(config.build(), new SomeEntity("John", 10), new SomeEntity("Amanda", 34)); assertEquals("name,age,adult" + ls + "John,10 years,No" + ls + "Amanda,34 years,Si" + ls, result); }
@Test public void testSyntheticColumn() { EntityInfoBuilder<SimpleEntity> builder = new EntityInfoBuilder<>(SimpleEntity.class, "simple_entity"); builder.addColumn("city_code", FieldTypeEnum.STRING, obj -> obj.getCity().getId() + ": " + obj.getCity().getName()); EntityInfoHelper entityInfo = new EntityInfoHelper(builder); ColumnInfo column = entityInfo.findColumn("city_code"); assertEquals("city_code", column.getColumnName()); assertEquals(FieldTypeEnum.STRING, column.getFieldType().getFieldType()); assertFalse(column.getFieldType().isPrimitive()); assertEquals(simple.getCity().getId() + ": " + simple.getCity().getName(), column.getAccessor().apply(simple)); }