1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.dbunit.operation;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.junit.jupiter.api.Assertions.assertThrows;
25
26 import java.io.Reader;
27
28 import org.dbunit.AbstractDatabaseIT;
29 import org.dbunit.dataset.Column;
30 import org.dbunit.dataset.Columns;
31 import org.dbunit.dataset.DataSetUtils;
32 import org.dbunit.dataset.IDataSet;
33 import org.dbunit.dataset.ITable;
34 import org.dbunit.dataset.ITableMetaData;
35 import org.dbunit.dataset.NoSuchColumnException;
36 import org.dbunit.dataset.xml.XmlDataSet;
37 import org.dbunit.testutil.TestUtils;
38 import org.junit.jupiter.api.Test;
39
40
41
42
43
44
45 class AbstractBatchOperationIT extends AbstractDatabaseIT
46 {
47
48 @Test
49 void testGetOperationMetaData_withMissingDataSetColumns_returnsMetaDataFromDatabase() throws Exception
50 {
51 final Reader in = TestUtils.getFileReader("xml/missingColumnTest.xml");
52 final IDataSet xmlDataSet = new XmlDataSet(in);
53
54 final ITable[] xmlTables = DataSetUtils.getTables(xmlDataSet);
55 for (int i = 0; i < xmlTables.length; i++)
56 {
57 final ITable xmlTable = xmlTables[i];
58 final ITableMetaData xmlMetaData = xmlTable.getTableMetaData();
59 final String tableName = xmlMetaData.getTableName();
60
61 final ITable databaseTable =
62 _connection.createDataSet().getTable(tableName);
63 final ITableMetaData databaseMetaData =
64 databaseTable.getTableMetaData();
65
66
67
68 assertThat(xmlMetaData.getColumns())
69 .as(tableName + " missing columns")
70 .hasSizeLessThan(databaseMetaData.getColumns().length);
71
72 final ITableMetaData resultMetaData = AbstractBatchOperation
73 .getOperationMetaData(_connection, xmlMetaData);
74
75
76
77 final Column[] resultColumns = resultMetaData.getColumns();
78 assertThat(resultColumns).as("result columns count")
79 .hasSameSizeAs(xmlMetaData.getColumns());
80 for (int j = 0; j < resultColumns.length; j++)
81 {
82 final Column resultColumn = resultColumns[j];
83 final Column databaseColumn =
84 Columns.getColumn(resultColumn.getColumnName(),
85 databaseMetaData.getColumns());
86 final Column xmlColumn = xmlMetaData.getColumns()[j];
87
88 assertThat(resultColumn.getColumnName()).as("column name")
89 .isEqualTo(convertString(xmlColumn.getColumnName()));
90 assertThat(databaseColumn).as("column instance")
91 .isSameAs(resultColumn);
92 }
93
94
95 final Column[] resultPrimaryKeys = resultMetaData.getPrimaryKeys();
96 assertThat(resultPrimaryKeys).as("key count")
97 .hasSameSizeAs(databaseMetaData.getPrimaryKeys());
98 for (int j = 0; j < resultPrimaryKeys.length; j++)
99 {
100 final Column resultPrimaryKey = resultPrimaryKeys[j];
101 final Column databasePrimaryKey =
102 databaseMetaData.getPrimaryKeys()[j];
103 assertThat(resultPrimaryKey).as("key instance")
104 .isSameAs(databasePrimaryKey);
105 }
106 }
107 }
108
109 @Test
110 void testGetOperationMetaData_withUnknownColumn_throwsNoSuchColumnException() throws Exception
111 {
112 final String tableName = "PK_TABLE";
113 final Reader in = TestUtils.getFileReader("xml/unknownColumnTest.xml");
114 final IDataSet xmlDataSet = new XmlDataSet(in);
115
116 final ITable xmlTable = xmlDataSet.getTable(tableName);
117
118 assertThrows(NoSuchColumnException.class,
119 () -> AbstractBatchOperation.getOperationMetaData(_connection,
120 xmlTable.getTableMetaData()),
121 "Should throw a NoSuchColumnException");
122 }
123
124 }