1 package org.dbunit.ext.postgresql;
2
3 import static org.assertj.core.api.Assertions.assertThat;
4
5 import java.io.StringReader;
6 import java.sql.Statement;
7 import java.sql.Types;
8 import java.util.Objects;
9
10 import org.dbunit.DatabaseEnvironment;
11 import org.dbunit.database.DatabaseConfig;
12 import org.dbunit.database.IDatabaseConnection;
13 import org.dbunit.dataset.Column;
14 import org.dbunit.dataset.IDataSet;
15 import org.dbunit.dataset.ITable;
16 import org.dbunit.dataset.ITableMetaData;
17 import org.dbunit.dataset.ReplacementDataSet;
18 import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
19 import org.dbunit.operation.DatabaseOperation;
20 import org.junit.jupiter.api.AfterEach;
21 import org.junit.jupiter.api.BeforeEach;
22 import org.junit.jupiter.api.Test;
23 import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
24 import org.xml.sax.InputSource;
25
26
27
28
29
30
31 @EnabledIfSystemProperty(named = "dbunit.profile", matches = "postgresql")
32 class PostgresqlUuidIT
33 {
34 private IDatabaseConnection _connection;
35 private final String testTable = "t2";
36
37 private static final String xmlData = "<?xml version=\"1.0\"?>" +
38 "<dataset>" +
39 "<T2 ID=\"08004327-3f6c-4335-9738-0b2bf885cc43\" />" +
40 "<T2 ID=\"1a0e342a-02cc-43bf-9643-f9ea312dd349\" />" +
41 "</dataset>";
42
43
44 @BeforeEach
45 protected void setUp() throws Exception
46 {
47
48 _connection = DatabaseEnvironment.getInstance().getConnection();
49 final Statement stat = _connection.getConnection().createStatement();
50
51 stat.execute("DROP TABLE IF EXISTS " + testTable + ";");
52
53
54 stat.execute("CREATE TABLE " + testTable + "(ID uuid NOT NULL);");
55 stat.close();
56
57
58 _connection.close();
59 _connection = DatabaseEnvironment.getInstance().getConnection();
60 }
61
62 @AfterEach
63 protected void tearDown() throws Exception
64 {
65 if (!Objects.isNull(_connection))
66 {
67 final Statement stat =
68 _connection.getConnection().createStatement();
69
70 stat.execute("DROP TABLE IF EXISTS " + testTable + ";");
71 _connection.close();
72
73 _connection = null;
74 }
75 }
76
77 @Test
78 void testUuidDataType_withUuidColumn_roundTripsThroughDatabase() throws Exception
79 {
80 assertThat(_connection).as("didn't get a connection").isNotNull();
81 final DatabaseConfig config = _connection.getConfig();
82 config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,
83 new PostgresqlDataTypeFactory());
84
85 final ReplacementDataSet dataSet =
86 new ReplacementDataSet(new FlatXmlDataSetBuilder()
87 .build(new InputSource(new StringReader(xmlData))));
88 dataSet.addReplacementObject("[NULL]", null);
89 dataSet.setStrictReplacement(true);
90
91 IDataSet ids;
92 ids = _connection.createDataSet();
93 final ITableMetaData itmd = ids.getTableMetaData(testTable);
94 final Column[] cols = itmd.getColumns();
95 ids = _connection.createDataSet();
96 for (final Column col : cols)
97 {
98 assertThat(col.getDataType().getSqlType())
99 .isEqualTo(Types.OTHER);
100 assertThat(col.getSqlTypeName()).isEqualTo("uuid");
101 }
102
103 DatabaseOperation.CLEAN_INSERT.execute(_connection, dataSet);
104 ids = _connection.createDataSet();
105 final ITable it = ids.getTable(testTable);
106 assertThat(it.getValue(0, "ID")).isNotNull()
107 .isEqualTo("08004327-3f6c-4335-9738-0b2bf885cc43");
108 assertThat(it.getValue(1, "ID"))
109 .isEqualTo("1a0e342a-02cc-43bf-9643-f9ea312dd349");
110 }
111 }