1. Project Clover database Fri Jul 17 2026 06:10:26 UTC
  2. Package guru.mikelue.foxglove.setting

File LayeredDataSettingTest.java

 

Code metrics

2
18
6
1
146
103
7
0.39
3
6
1.17

Classes

Class Line # Actions
LayeredDataSettingTest 24 18 0% 7 0
1.0100%
 

Contributing tests

This file is covered by 4 tests. .

Source view

1    package guru.mikelue.foxglove.setting;
2   
3    import org.assertj.core.api.InstanceOfAssertFactories;
4    import org.junit.jupiter.api.AfterEach;
5    import org.junit.jupiter.api.BeforeEach;
6    import org.junit.jupiter.api.Test;
7    import org.junit.jupiter.params.ParameterizedTest;
8    import org.junit.jupiter.params.provider.CsvSource;
9   
10    import java.sql.JDBCType;
11    import java.sql.PreparedStatement;
12    import java.sql.SQLException;
13    import java.util.function.Supplier;
14   
15    import guru.mikelue.foxglove.ColumnMeta;
16    import guru.mikelue.foxglove.jdbc.CustomStatementSetter;
17    import guru.mikelue.misc.testlib.AbstractTestBase;
18    import mockit.Mocked;
19    import mockit.Verifications;
20   
21    import static guru.mikelue.foxglove.ColumnMetaTestUtils.newColumnMeta;
22    import static org.assertj.core.api.Assertions.assertThat;
23   
 
24    public class LayeredDataSettingTest extends AbstractTestBase {
25    private final static DataSettingInfo firstSetting = new DataSetting()
26    .setDefaultNumberOfRows(34)
27    .<String>givenType(JDBCType.VARCHAR)
28    .useSupplier(gen().string().length(16))
29    .addStatementSetter(
30    meta -> meta.name().equals("col_1"),
31    (stmt, index, meta, value) -> stmt.setInt(index, 30)
32    );
33    private final static DataSettingInfo secondSetting = new DataSetting()
34    .<Integer>givenType(JDBCType.INTEGER)
35    .useSupplier(gen().ints().range(1, 100))
36    .<String>givenType(JDBCType.VARCHAR) // Should get overridden
37    .useSupplier(gen().string().length(4))
38    .addStatementSetter(
39    meta -> meta.name().equals("col_1"),
40    (stmt, index, meta, value) -> stmt.setInt(index, 37)
41    )
42    .addStatementSetter(
43    meta -> meta.name().equals("col_2"),
44    (stmt, index, meta, value) -> stmt.setInt(index, 42)
45    );
46   
47    private DataSettingInfo testedSetting = null;
48   
 
49  4 toggle public LayeredDataSettingTest() {}
50   
 
51  4 toggle @BeforeEach
52    void setup()
53    {
54  4 testedSetting = new LayeredDataSetting(
55    firstSetting, secondSetting
56    );
57    }
58   
 
59  4 toggle @AfterEach
60    void tearDown() {}
61   
62    /**
63    * Tests the overriding behavior for {@link LayeredDataSetting#resolveSupplier(ColumnMeta)}.
64    */
 
65  1 toggle @Test
66    void resolveSupplier()
67    {
68  1 var varcharColumnMeta = newColumnMeta(
69    "cl_varchar", JDBCType.VARCHAR, 12
70    );
71  1 var intColumnMeta = newColumnMeta(
72    "cl_int", JDBCType.INTEGER
73    );
74   
75    /*
76    * Get overridden by 1st setting
77    */
78  1 var testedSupplier = testedSetting
79    .<String>resolveSupplier(varcharColumnMeta);
80   
81  1 assertThat(testedSupplier)
82    .isPresent()
83    .get().extracting(Supplier::get, InstanceOfAssertFactories.STRING)
84    .hasSize(16); // From first setting
85    // :~)
86   
87    /*
88    * Get fallback value spec from 2nd setting
89    */
90  1 var testedFallbackSupplier = testedSetting
91    .<Integer>resolveSupplier(intColumnMeta);
92   
93  1 assertThat(testedFallbackSupplier)
94    .isPresent();
95    // :~)
96   
97    /*
98    * Use the fallback setting for 2nd one
99    */
100  1 assertThat(testedSetting.getDefaultNumberOfRows())
101    .isEqualTo(34);
102    // :~)
103    }
104   
105    /**
106    * Tests the getting of CustomStatementSetter.
107    */
 
108  3 toggle @SuppressWarnings("unchecked")
109    @ParameterizedTest
110    @CsvSource({
111    "col_1, 30", // Use 1st DataSetting(overriding 2nd's statement setter)
112    "col_2, 42", // Use 2nd DataSetting
113    "col_3,", // Null(doesn't have statement setter of custom)
114    })
115    void getStatementSetter(
116    String columnName,
117    Integer expectedValueOfSetInt,
118    @Mocked PreparedStatement mockStat
119    ) throws SQLException {
120  3 var columnMeta = newColumnMeta(columnName);
121   
122  3 var setterAssertion = assertThat(testedSetting.getStatementSetter(columnMeta));
123   
124  3 if (expectedValueOfSetInt == null) {
125  1 setterAssertion.isEmpty();
126  1 return;
127    }
128   
129  2 var testedSetter = (CustomStatementSetter<Integer>)setterAssertion
130    .isPresent()
131    .get().actual();
132   
133  2 testedSetter.setParameter(
134    mockStat, 1, columnMeta, Integer.valueOf(-1)
135    );
136   
137    /*
138    * Verifies the retrieved statement setter
139    */
 
140  2 toggle new Verifications() {{
141  2 mockStat.setInt(1, expectedValueOfSetInt);
142  2 times = 1;
143    }};
144    // :~)
145    }
146    }