package tap.core;
import static org.junit.Assert.*;
import org.apache.avro.Schema;
import org.junit.Test;
import tap.Phase;
public class ColPhaseTests {
String one =
"{\"name\" : \"one\", \"type\":\"string\"}".replaceAll(" ", "");
String fields = "\"fields\":[" + one + "," +
"{\"name\" : \"two\", \"type\":\"int\"},"+
"{\"name\" : \"three\", \"type\":\"int\"},"+
"{\"name\" : \"four\", \"type\":\"int\"},"+
"{\"name\" : \"five\", \"type\":\"int\"}"+
"]";
Schema schema = Schema.parse("{\"name\":\"test\", \"type\":\"record\", "+fields+"}");
@Test
public void groupSchemas() {
Schema groupSchema = Phase.group(schema, "one , two", "three,four,five");
assertTrue(groupSchema.toString().contains(fields.replaceAll(" ", "")));
}
@Test
public void groupSchemaWithSortOrdering() {
Schema groupSchema = Phase.group(schema, "one , two desc");
assertEquals(2, groupSchema.getFields().size());
Schema.Field one = groupSchema.getField("one");
Schema.Field two = groupSchema.getField("two");
assertNotNull(one);
assertNotNull(two);
assertEquals(Schema.Field.Order.ASCENDING, one.order());
assertEquals(Schema.Field.Order.DESCENDING, two.order());
}
@Test
public void willTagSortByFields() {
Schema generated = Phase.groupAndSort(schema, "one", "two desc");
assertEquals(2, generated.getFields().size());
Schema.Field one = generated.getField("one");
Schema.Field two = generated.getField("two");
assertNotNull(one);
assertNotNull(two);
assertEquals(Schema.Field.Order.ASCENDING, one.order());
assertEquals(Schema.Field.Order.DESCENDING, two.order());
assertNull(one.getProp("x-sort"));
assertEquals("true", two.getProp("x-sort"));
}
@Test
public void willHandleFieldSpecifiedInBothGroupAndSortBy() {
Schema generated = Phase.groupAndSort(schema, "one", "one desc");
assertEquals(1, generated.getFields().size());
Schema.Field one = generated.getField("one");
assertNotNull(one);
assertEquals(Schema.Field.Order.DESCENDING, one.order());
assertNull(one.getProp("x-sort"));
}
@Test
public void groupSchemaOneMultiList() {
Schema groupSchema = Phase.group(schema, " one , two");
assertTrue(groupSchema.toString().contains(one));
assertTrue(groupSchema.toString().contains("two"));
assertFalse(groupSchema.toString().contains("three"));
}
@Test
public void groupSchemaOneList() {
Schema groupSchema = Phase.group(schema, " one ");
assertTrue(groupSchema.toString().contains(one));
assertFalse(groupSchema.toString().contains("two"));
}
@Test
public void groupSchemaOneAndNullList() {
Schema groupSchema = Phase.group(schema, " one ", null);
assertTrue(groupSchema.toString().contains(one));
assertFalse(groupSchema.toString().contains("two"));
}
@Test
public void groupSchemaNullAndOneList() {
Schema groupSchema = Phase.group(schema, null, " one ");
assertTrue(groupSchema.toString().contains(one));
assertFalse(groupSchema.toString().contains("two"));
}
@Test
public void groupSchemaOneItem() {
Schema groupSchema = Phase.group(schema, " one ");
assertTrue(groupSchema.toString().contains(one));
assertFalse(groupSchema.toString().contains("two"));
}
@Test
public void groupSchemaNoItems() {
Schema groupSchema = Phase.group(schema);
assertTrue(groupSchema.toString().contains("\"fields\":[]"));
}
@Test
public void groupInvalidField() {
try {
Schema schema = Schema.parse("{\"name\":\"test\", \"type\":\"record\", \"fields\":[]}");
System.out.println(Phase.group(schema, "missing"));
} catch (IllegalArgumentException e) {
assertTrue(e.getMessage().contains("missing"));
}
}
}