1   /*
2    * Copyright (c) 2004 International Decision Systems, Inc.  All Rights Reserved.
3    *
4    * By using this Software, You acknowledge that the Software is a valuable asset
5    * and trade secret of either International Decision Systems, Inc. ("IDSI") or a
6    * third party supplier of IDSI and constitutes confidential and proprietary
7    * information.
8    *
9    * NEITHER IDSI NOR ANY AGENT OR PERSON ACTING FOR OR WITH IDSI HAS MADE OR DOES
10   * MAKE ANY STATEMENTS, AFFIRMATIONS, REPRESENTATIONS OR WARRANTIES WHATSOEVER
11   * TO YOU, WHETHER EXPRESS OR IMPLIED, AS TO THE SOFTWARE, THE QUALITY OR
12   * CONDITION OF THE SOFTWARE, OR THE OPERATING CHARACTERISTICS OR RELIABILITY OF
13   * THE SOFTWARE, OR ITS SUITABILITY FOR ANY GENERAL OR PARTICULAR PURPOSE, OR AS
14   * TO ANY OTHER MATTER WHATSOEVER; ANY AND ALL OTHER WARRANTIES INCLUDING
15   * WITHOUT LIMITATION ANY WARRANTIES IMPLIED BY LAW, SUCH AS THE IMPLIED
16   * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND TITLE,
17   * USE AND NON-INFRINGEMENT; ARE HEREBY EXPRESSLY DISCLAIMED AND EXCLUDED.
18  */
19  package net.sourceforge.addam.ddlgen;
20  
21  import com.mockrunner.jdbc.JDBCTestCaseAdapter;
22  import com.mockrunner.mock.jdbc.MockConnection;
23  import com.mockrunner.mock.jdbc.MockDatabaseMetaData;
24  import com.mockrunner.mock.jdbc.MockResultSet;
25  
26  import net.sourceforge.addam.ddlgen.GenerateTask;
27  import net.sourceforge.addam.ddlgen.GeneratorSpec;
28  import net.sourceforge.addam.ddlgen.Table;
29  
30  import org.apache.tools.ant.BuildException;
31  import org.apache.tools.ant.Project;
32  import org.apache.tools.ant.types.Path;
33  
34  import java.io.File;
35  import java.sql.Connection;
36  import java.sql.DatabaseMetaData;
37  import java.sql.ResultSet;
38  import java.sql.SQLException;
39  
40  /**
41   * User: mkrishna
42   * Date: Nov 10, 2004
43   */
44  public class DDLGenTaskUTEST extends JDBCTestCaseAdapter {
45      private Project project;
46      private GenerateTaskMock task;
47      private MockConnection connection;
48  
49      protected void setUp() throws Exception {
50          super.setUp();
51          project = new Project();
52          task = new GenerateTaskMock();
53          Path path = new Path(project);
54          path.setLocation(new File("lib/classes12.jar"));
55          task.setClasspath(path);
56          task.setUrl("jdbc:oracle:thin:@cambria:1521:nxgil");
57          task.setDriver("oracle.jdbc.driver.OracleDriver");
58          task.setUserid("krishna");
59          task.setPassword("krishna");
60          task.setSchema("KRISHNA");
61          GeneratorSpec constraintsSpec = new GeneratorSpec();
62          constraintsSpec.setDir("build/test/constraintsSpec");
63          constraintsSpec.setExtension(".sql");
64          task.addGenerator(constraintsSpec);
65      }
66  
67      public void testGenerationOfSQLDoesntThrowException() {
68          GenerateTask task = new GenerateTask();
69          Path path = new Path(project);
70          task.setClasspath(path);
71          task.setUrl("jdbc:oracle:thin:@cambria:1521:nxgil");
72          task.setDriver("oracle.jdbc.driver.OracleDriver");
73          task.setUserid("krishna");
74          task.setPassword("krishna");
75          task.setSchema("KRISHNA");
76          GeneratorSpec constraintsSpec = new GeneratorSpec();
77          constraintsSpec.setDir("build/test/constraintsSpec");
78          constraintsSpec.setPrefix("foreignKeys");
79          constraintsSpec.setExtension(".sql");
80          task.addGenerator(constraintsSpec);
81  
82          GeneratorSpec insertsSpec = new GeneratorSpec();
83          insertsSpec.setDir("build/test/seed");
84          insertsSpec.setExtension(".sql");
85  
86          addTableFileSpec(insertsSpec);
87  
88          task.addGenerator(insertsSpec);
89          task.setCatalog(null);
90          task.setProject(project);
91          GeneratorSpec tablesSpec = new GeneratorSpec();
92          tablesSpec.setDir("build/test/tablesSpec");
93          tablesSpec.setExtension(".sql");
94          task.addGenerator(tablesSpec);
95          try {
96              task.execute();
97          } catch (BuildException e) {
98              e.printStackTrace();
99              fail("Build Exception was thrown");
100         }
101     }
102 
103     public void testGenerationOfSQLDoesntThrowExceptionInSqlServer() {
104         GenerateTask task = new GenerateTask();
105         Path path = new Path(project);
106         task.setClasspath(path);
107         task.setUrl("jdbc:bea:sqlserver://CK1\\Dev:1433");
108         task.setDriver("weblogic.jdbc.sqlserver.SQLServerDriver");
109         task.setUserid("krishna");
110         task.setPassword("krishna");
111 //        task.setSchema("KRISHNA");
112         GeneratorSpec constraintsSpec = new GeneratorSpec();
113         constraintsSpec.setDir("build/test/constraintsSpec");
114         constraintsSpec.setPrefix("foreignKeys");
115         constraintsSpec.setExtension(".sql");
116         task.addGenerator(constraintsSpec);
117 
118         GeneratorSpec insertsSpec = new GeneratorSpec();
119         insertsSpec.setDir("build/test/seed");
120         insertsSpec.setExtension(".sql");
121 
122         addTableFileSpec(insertsSpec);
123 
124         task.addGenerator(insertsSpec);
125         task.setCatalog(null);
126         task.setProject(project);
127         GeneratorSpec tablesSpec = new GeneratorSpec();
128         tablesSpec.setDir("build/test/tablesSpec");
129         tablesSpec.setExtension(".sql");
130         Table dtprops = new Table();
131         dtprops.setName("dtproperties");
132         tablesSpec.addConfiguredExclude(dtprops);
133         task.addGenerator(tablesSpec);
134         try {
135             task.execute();
136         } catch (BuildException e) {
137             e.printStackTrace();
138             fail("Build Exception was thrown");
139         }
140     }
141 
142     private void addTableFileSpec(GeneratorSpec data) {
143         Table seedTable1 = new Table();
144         seedTable1.setName("ADDRESS");
145         data.addConfiguredInclude(seedTable1);
146 
147         Table seedTable2 = new Table();
148         seedTable2.setName("ADDRESSUSAGE");
149         data.addConfiguredInclude(seedTable2);
150 
151         Table seedTable3 = new Table();
152         seedTable3.setName("CODE");
153         data.addConfiguredInclude(seedTable3);
154 
155         Table seedTable4 = new Table();
156         seedTable4.setName("COUNTRY");
157         data.addConfiguredInclude(seedTable4);
158 
159         Table seedTable5 = new Table();
160         seedTable5.setName("CREDITREASONCODE");
161         data.addConfiguredInclude(seedTable5);
162 
163         Table seedTable6 = new Table();
164         seedTable6.setName("EOLOPTIONTYPEFORPRODUCT");
165         data.addConfiguredInclude(seedTable6);
166 
167         Table seedTable7 = new Table();
168         seedTable7.setName("EXEMPTIONREASON");
169         data.addConfiguredInclude(seedTable7);
170 
171         Table seedTable8 = new Table();
172         seedTable8.setName("INVOICEFORMATFIELDNAME");
173         data.addConfiguredInclude(seedTable8);
174 
175         Table seedTable9 = new Table();
176         seedTable9.setName("LANGUAGE");
177         data.addConfiguredInclude(seedTable9);
178 
179         Table seedTable10 = new Table();
180         seedTable10.setName("ORGANIZATION");
181         data.addConfiguredInclude(seedTable10);
182 
183         Table seedTable11 = new Table();
184         seedTable11.setName("PAYMENTREVERSALREASONCODE");
185         data.addConfiguredInclude(seedTable11);
186 
187         Table seedTable12 = new Table();
188         seedTable12.setName("PRODUCT");
189         data.addConfiguredInclude(seedTable12);
190 
191         Table seedTable13 = new Table();
192         seedTable13.setName("REASONCODE");
193         data.addConfiguredInclude(seedTable13);
194 
195         Table seedTable14 = new Table();
196         seedTable14.setName("REASONCODETYPE");
197         data.addConfiguredInclude(seedTable14);
198 
199         Table seedTable15 = new Table();
200         seedTable15.setName("RULEATTRIBUTEDESCRIPTOR");
201         data.addConfiguredInclude(seedTable15);
202 
203         Table seedTable16 = new Table();
204         seedTable16.setName("RULEDESCRIPTOR");
205         data.addConfiguredInclude(seedTable16);
206 
207         Table seedTable17 = new Table();
208         seedTable17.setName("SIC");
209         data.addConfiguredInclude(seedTable17);
210 
211         Table seedTable18 = new Table();
212         seedTable18.setName("STATE");
213         data.addConfiguredInclude(seedTable18);
214 
215         Table seedTable19 = new Table();
216         seedTable19.setName("VALIDPRODUCTCODE");
217         data.addConfiguredInclude(seedTable19);
218 
219         Table seedTable20 = new Table();
220         seedTable20.setName("PROFSETUPDATA");
221         data.addConfiguredInclude(seedTable20);
222 
223         Table seedTable21 = new Table();
224         seedTable21.setName("CHARTOFACCOUNTMASKINGFORMAT");
225         data.addConfiguredInclude(seedTable21);
226 
227         Table seedTable22 = new Table();
228         seedTable22.setName("CHARGETYPECOAMATRIX");
229         data.addConfiguredInclude(seedTable22);
230 
231         Table seedTable23 = new Table();
232         seedTable23.setName("IDCRULECOAMATRIX");
233         data.addConfiguredInclude(seedTable23);
234 
235         Table seedTable24 = new Table();
236         seedTable24.setName("PROGRAMCOAMATRIX");
237         data.addConfiguredInclude(seedTable24);
238 
239         Table seedTable25 = new Table();
240         seedTable25.setName("REASONCODECOAMATRIX");
241         data.addConfiguredInclude(seedTable25);
242 
243         Table seedTable26 = new Table();
244         seedTable26.setName("REMITTOCOAMATRIX");
245         data.addConfiguredInclude(seedTable26);
246 
247         Table seedTable27 = new Table();
248         seedTable27.setName("PROFVERSION");
249         data.addConfiguredInclude(seedTable27);
250 
251         Table seedTable28 = new Table();
252         seedTable28.setName("CHARGETYPECOADETAILS");
253         data.addConfiguredInclude(seedTable28);
254 
255     }
256 
257     public void testGenerateCallsTableAndForeignKeyGenerator() throws SQLException {
258         connection = getJDBCMockObjectFactory().getMockConnection();
259         MockDatabaseMetaData mockDatabaseMetaData = new MockDatabaseMetaData();
260         MockResultSet mockResultSet = new MockResultSet("tablesSpec");
261         mockResultSet.addRow(new Object[]{new Object(), new Object()});
262         mockResultSet.addRow(new Object[]{new Object(), new Object()});
263         mockDatabaseMetaData.setTables(mockResultSet);
264         connection.setMetaData(mockDatabaseMetaData);
265 
266         task.setCatalog(null);
267         task.setProject(project);
268         GeneratorSpec tablesSpec = new GeneratorSpec();
269         tablesSpec.setDir("build/test/tablesSpec");
270         tablesSpec.setExtension(".sql");
271         task.addGenerator(tablesSpec);
272         task.execute();
273 
274         assertEquals(2, task.numberOfTimesGenerateTableDDLWasCalled);
275         assertEquals(2, task.numberOfTimesAddToForeignDDLWasCalled);
276         assertTrue(task.generateForeignKeyFileCalled);
277         assertTrue(task.generateTableFileSpecCalled);
278         verifyAllResultSetsClosed();
279         verifyAllStatementsClosed();
280         verifyConnectionClosed();
281     }
282 
283     class GenerateTaskMock extends GenerateTask {
284         private int numberOfTimesGenerateTableDDLWasCalled = 0;
285         private int numberOfTimesAddToForeignDDLWasCalled = 0;
286         private boolean generateForeignKeyFileCalled;
287         private boolean generateTableFileSpecCalled;
288 
289         protected Connection getConnection() {
290             return connection;
291         }
292 
293         protected void generateConstraintDDL() throws SQLException {
294             generateForeignKeyFileCalled = true;
295         }
296 
297         protected void addForeignKeyInfoForTable(DatabaseMetaData dbmd, ResultSet tablesResultSet) throws SQLException {
298             numberOfTimesAddToForeignDDLWasCalled++;
299         }
300 
301         protected void generateInsertSQL(GeneratorSpec generatorSpec, Connection connection) {
302             generateTableFileSpecCalled = true;
303         }
304     }
305 }