View Javadoc
1   package guru.mikelue.jdut.datagrain;
2   
3   import java.util.List;
4   import java.util.function.Supplier;
5   
6   import org.junit.jupiter.api.Test;
7   
8   import static org.junit.jupiter.api.Assertions.*;
9   
10  /**
11   * Tests RowsBuilderImpl.
12   */
13  public class DataGrainTest {
14  	public DataGrainTest() {}
15  
16  	/**
17  	 * Tests the build of object.
18  	 */
19  	@Test
20  	public void build()
21  	{
22  		DataGrain testedDataGrain = DataGrain.build(
23  			tableBuilder -> tableBuilder
24  				.name("tb_thing"),
25  			rowBuilder -> rowBuilder
26  				.implicitColumns("ct_1", "ct_2")
27  				/**
28  				 * Implicit data
29  				 */
30  				.addValues(1, "BANANA-01")
31  				.addValues(2, (Supplier<String>)() -> "BANANA-02")
32  				// :~)
33  				/**
34  				 * Explicit data
35  				 */
36  				.addFields(
37  					rowBuilder.newField("ct_1", 11),
38  					rowBuilder.newField("ct_2", "PINEAPPLE-02"),
39  					rowBuilder.newField("ct_3", (String)null)
40  				)
41  				.addFields(
42  					rowBuilder.newField("ct_1", 12),
43  					rowBuilder.newField("ct_3", () -> "PINEAPPLE-03")
44  				)
45  				.addValues(null, null)
46  				// :~)
47  		);
48  
49  		List<DataRow> testedRows = testedDataGrain.getRows();
50  		testedRows.forEach(
51  			row -> assertEquals("tb_thing", row.getTable().getName())
52  		);
53  		assertEquals(Integer.valueOf(1), testedRows.get(0).getData("ct_1"));
54  		assertEquals("BANANA-01", testedRows.get(0).getData("ct_2"));
55  		assertEquals(Integer.valueOf(2), testedRows.get(1).getData("ct_1"));
56  		assertEquals("BANANA-02", testedRows.get(1).getData("ct_2"));
57  		assertEquals(Integer.valueOf(11), testedRows.get(2).getData("ct_1"));
58  		assertEquals("PINEAPPLE-02", testedRows.get(2).getData("ct_2"));
59  		assertEquals((String)null, testedRows.get(2).getData("ct_3"));
60  		assertEquals(Integer.valueOf(12), testedRows.get(3).getData("ct_1"));
61  		assertEquals("PINEAPPLE-03", testedRows.get(3).getData("ct_3"));
62  		assertEquals((Integer)null, testedRows.get(4).getData("ct_1"));
63  		assertEquals((String)null, testedRows.get(4).getData("ct_2"));
64  	}
65  
66  	/**
67  	 * Tests aggregate.
68  	 */
69  	@Test
70  	public void aggregate()
71  	{
72  		DataGrain testedDataGrain = DataGrain.build(
73  			tableBuilder -> tableBuilder
74  				.name("tb_thing_1"),
75  			rowBuilder -> rowBuilder
76  				.implicitColumns("t1_c1", "t1_c2")
77  				.addValues(1, "OK-1")
78  		).aggregate(
79  			DataGrain.build(
80  				tableBuilder -> tableBuilder
81  					.name("tb_thing_2"),
82  				rowBuilder -> rowBuilder
83  					.implicitColumns("t2_c1", "t2_c2")
84  					.addValues(2, "OK-2")
85  			)
86  		);
87  
88  		List<DataRow> testedRows = testedDataGrain.getRows();
89  		assertEquals("tb_thing_1", testedRows.get(0).getTable().getName());
90  		assertEquals(Integer.valueOf(1), testedRows.get(0).getData("t1_c1"));
91  		assertEquals("OK-1", testedRows.get(0).getData("t1_c2"));
92  		assertEquals("tb_thing_2", testedRows.get(1).getTable().getName());
93  		assertEquals(Integer.valueOf(2), testedRows.get(1).getData("t2_c1"));
94  		assertEquals("OK-2", testedRows.get(1).getData("t2_c2"));
95  	}
96  
97  	/**
98  	 * Tests the decoration of data grain.
99  	 */
100 	@Test
101 	public void decorate()
102 	{
103 		DataGrain testedDataGrain = DataGrain.build(
104 			tableSchema -> tableSchema.name("tab_1"),
105 			rowsBuilder -> rowsBuilder
106 				.implicitColumns("col_1", "col_2")
107 				.addValues("v1", "v2")
108 				.addValues("v1", "v2") // Another row to be decorated
109 		);
110 
111 		testedDataGrain = testedDataGrain.decorate(
112 			rowBuilder -> rowBuilder
113 				.fieldOfValue("col_1", "v1-1") // Modifies existing field
114 				.fieldOfValue("col_3", "v3") // Adds new field
115 		);
116 
117 		assertEquals("v1-1", testedDataGrain.getRow(0).<String>getData("col_1")); // Modified field
118 		assertEquals("v2", testedDataGrain.getRow(0).<String>getData("col_2")); // Nothing changed
119 		assertEquals("v3", testedDataGrain.getRow(0).<String>getData("col_3")); // Added field
120 		assertEquals("v1-1", testedDataGrain.getRow(1).<String>getData("col_1")); // Modified field
121 		assertEquals("v2", testedDataGrain.getRow(1).<String>getData("col_2")); // Nothing changed
122 		assertEquals("v3", testedDataGrain.getRow(1).<String>getData("col_3")); // Added field
123 	}
124 }