1 package org.dbunit.ext.postgresql;
2
3 import static org.assertj.core.api.Assertions.assertThat;
4 import static org.junit.jupiter.api.Assertions.fail;
5
6 import java.io.StringReader;
7 import java.sql.Statement;
8 import java.util.Objects;
9
10 import org.dbunit.DatabaseEnvironment;
11 import org.dbunit.database.IDatabaseConnection;
12 import org.dbunit.dataset.Column;
13 import org.dbunit.dataset.ReplacementDataSet;
14 import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
15 import org.dbunit.operation.DatabaseOperation;
16 import org.junit.jupiter.api.AfterEach;
17 import org.junit.jupiter.api.BeforeEach;
18 import org.junit.jupiter.api.Test;
19 import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
20 import org.xml.sax.InputSource;
21
22
23
24
25
26
27
28
29 @EnabledIfSystemProperty(named = "dbunit.profile", matches = "postgresql")
30 class SQLHelperDomainPostgreSQLIT
31 {
32 private IDatabaseConnection _connection;
33
34 private static final String xmlData = "<?xml version=\"1.0\"?>"
35 + "<dataset>" + "<T1 PK=\"1\" STATE=\"is_blabla\"/>" + "</dataset>";
36
37 @BeforeEach
38 protected void setUp() throws Exception
39 {
40
41 _connection = DatabaseEnvironment.getInstance().getConnection();
42 final Statement stat = _connection.getConnection().createStatement();
43
44 stat.execute("DROP TABLE IF EXISTS T1;");
45 stat.execute("DROP DOMAIN IF EXISTS MYSTATE;");
46 stat.execute("DROP DOMAIN IF EXISTS MYPK;");
47
48
49 stat.execute(
50 "CREATE DOMAIN MYSTATE AS VARCHAR(20) DEFAULT 'is_Valid';");
51 stat.execute("CREATE DOMAIN MYPK AS INTEGER DEFAULT 0;");
52 stat.execute(
53 "CREATE TABLE T1 (PK MYPK,STATE MYSTATE,PRIMARY KEY (PK));");
54 stat.close();
55 _connection.close();
56 _connection = DatabaseEnvironment.getInstance().getConnection();
57 }
58
59 @AfterEach
60 protected void tearDown() throws Exception
61 {
62 if (!Objects.isNull(_connection))
63 {
64 final Statement cleanStat =
65 _connection.getConnection().createStatement();
66
67 cleanStat.execute("DROP TABLE IF EXISTS T1;");
68 cleanStat.close();
69 _connection.close();
70
71 _connection = null;
72 }
73 }
74
75 @Test
76 void testDomainDataTypes_withCustomSqlDomains_mapsToUnderlyingSqlTypes() throws Exception
77 {
78 assertThat(_connection).as("didn't get a connection").isNotNull();
79
80 final ReplacementDataSet dataSet =
81 new ReplacementDataSet(new FlatXmlDataSetBuilder()
82 .build(new InputSource(new StringReader(xmlData))));
83 dataSet.addReplacementObject("[NULL]", null);
84 dataSet.setStrictReplacement(true);
85
86 DatabaseOperation.CLEAN_INSERT.execute(_connection, dataSet);
87
88
89 for (int i = 0; i < _connection.createDataSet()
90 .getTableMetaData("T1").getColumns().length; i++)
91 {
92 final Column c = _connection.createDataSet()
93 .getTableMetaData("T1").getColumns()[i];
94
95 if (c.getSqlTypeName().compareTo("mypk") == 0)
96 {
97 assertThat(c.getDataType().getSqlType())
98 .isEqualTo(java.sql.Types.INTEGER);
99 } else if (c.getSqlTypeName().compareTo("mystate") == 0)
100 {
101 assertThat(c.getDataType().getSqlType())
102 .isEqualTo(java.sql.Types.VARCHAR);
103 } else
104 {
105 fail("we should not be here");
106 }
107 }
108 }
109 }