@@ -245,6 +245,86 @@ public void should_generate_working_insert() {
245245 .hasNumberOfRows (1 );
246246 }
247247
248+ @ RepeatedTest (9 ) public void
249+ should_sort_insert_statements_following_primary_keys () {
250+
251+ // GIVEN
252+ TestTable table =
253+ buildUniqueTable (DATA_SOURCE
254+ , "comp_pk"
255+ , "col_id1 integer," +
256+ "col_id2 integer, " +
257+ "colA varchar(20), " +
258+ "colB varchar(20), " +
259+ "constraint comp_pk_pk" + generateRandomPositiveInt () + " primary key (col_id2, col_id1)"
260+ )
261+ .create ()
262+ .insertValues ("1, 2, 'colA_r1_value', 'colB_r1_value'" )
263+ .insertValues ("1, 1, 'colA_r1_value', 'colB_r1_value'" )
264+ .insertValues ("2, 2, 'colA_r1_value', 'colB_r1_value'" )
265+ .insertValues ("2, 1, 'colA_r1_value', 'colB_r1_value'" );
266+
267+ // WHEN
268+ String selectAll = "SELECT * FROM " + table .getTableName ();
269+ SqlTestDataGenerator sqlTestDataGenerator = SqlTestDataGenerator .buildFrom (DATA_SOURCE );
270+ List <String > insertStatements = sqlTestDataGenerator .generateInsertListFor (selectAll );
271+
272+ // THEN
273+ String insertQueriesAsString = insertStatements .toString ();
274+
275+ String firstInsert = insertStatements .get (0 );
276+ Assertions .assertThat (firstInsert ).as (insertQueriesAsString ).contains ("VALUES(1, 1" );
277+
278+ String secondInsert = insertStatements .get (1 );
279+ Assertions .assertThat (secondInsert ).as (insertQueriesAsString ).contains ("VALUES(2, 1" );
280+
281+ String thirdInsert = insertStatements .get (2 );
282+ Assertions .assertThat (thirdInsert ).as (insertQueriesAsString ).contains ("VALUES(1, 2" );
283+
284+ String fourthInsert = insertStatements .get (3 );
285+ Assertions .assertThat (fourthInsert ).as (insertQueriesAsString ).contains ("VALUES(2, 2" );
286+
287+ }
288+
289+ // Not possible to both repeat and parameterize a JUnit 5 test
290+ @ ParameterizedTest
291+ @ ValueSource (strings = {"INTEGER" , "SMALLINT" })
292+ public void
293+ should_sort_insert_statements_following_an_integer_primary_key (String intType ) {
294+
295+ TestTable table =
296+ buildUniqueTable (DATA_SOURCE
297+ , "table_with_int_pk"
298+ , "col_id " + intType + "," +
299+ "colA varchar(20), " +
300+ "colB varchar(20), " +
301+ "constraint int_pk" + generateRandomPositiveInt () + " primary key (col_id)"
302+ )
303+ .create ()
304+ .insertValues ("2, 'A', 'B'" )
305+ .insertValues ("10, 'C', 'D'" )
306+ .insertValues ("1, 'E', 'F'" );
307+
308+ String selectAll = "SELECT * FROM " + table .getTableName ();
309+ SqlTestDataGenerator sqlTestDataGenerator = SqlTestDataGenerator .buildFrom (DATA_SOURCE );
310+
311+ // WHEN
312+ List <String > insertStatements = sqlTestDataGenerator .generateInsertListFor (selectAll );
313+
314+ // THEN
315+ String insertStatementsAsString = insertStatements .toString ();
316+
317+ String firstQuery = insertStatements .get (0 );
318+ Assertions .assertThat (firstQuery ).as (insertStatementsAsString ).contains ("VALUES(1" );
319+
320+ String secondQuery = insertStatements .get (1 );
321+ Assertions .assertThat (secondQuery ).as (insertStatementsAsString ).contains ("VALUES(2" );
322+
323+ String thirdQuery = insertStatements .get (2 );
324+ Assertions .assertThat (thirdQuery ).as (insertStatementsAsString ).contains ("VALUES(10" );
325+
326+ }
327+
248328 private int generateRandomPositiveInt () {
249329 Random random = new Random ();
250330 return Math .abs (random .nextInt ());
0 commit comments