/tst/org/diffkit/db/tst/TestDBDatabase.groovy

http://diffkit.googlecode.com/ · Groovy · 144 lines · 109 code · 17 blank · 18 comment · 6 complexity · beb77a218a0e3990203b5893aeb7fc0b MD5 · raw file

  1. /**
  2. * Copyright 2010-2011 Joseph Panico
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.diffkit.db.tst
  17. import org.diffkit.db.DKDBColumn
  18. import org.diffkit.db.DKDBConnectionInfo;
  19. import org.diffkit.db.DKDBType;
  20. import org.diffkit.db.DKDatabase
  21. import org.diffkit.db.DKDBFlavor;
  22. import org.diffkit.db.DKDBPrimaryKey
  23. import org.diffkit.db.DKDBTable;
  24. import groovy.util.GroovyTestCase;
  25. /**
  26. * @author jpanico
  27. */
  28. public class TestDBDatabase extends GroovyTestCase {
  29. public void testConcreteKeyTypeInfos() {
  30. }
  31. public void testGenerateUpdate() {
  32. DKDBConnectionInfo connectionInfo = ['test', DKDBFlavor.H2,"mem:test", null, null, 'test', 'test']
  33. println "connectionInfo->$connectionInfo"
  34. DKDatabase database = [connectionInfo]
  35. DKDBTable table = this.createCustomerMetaTable()
  36. assert table
  37. Object[] row = ['bob', 'smith', 'update-addr1', 'city', 'update-country', 55]
  38. int[] updateIndices = [2,4]
  39. def updateSQLString = database.generateUpdateDML(row, updateIndices, table)
  40. println "updateSQLString->$updateSQLString"
  41. assert updateSQLString == "UPDATE CUSTOMER\nSET address='update-addr1', country='update-country'\nWHERE (first_name='bob' ) AND (last_name='smith' )"
  42. }
  43. public void testGenerateDelete() {
  44. DKDBConnectionInfo connectionInfo = ['test', DKDBFlavor.H2,"mem:test", null, null, 'test', 'test']
  45. println "connectionInfo->$connectionInfo"
  46. DKDatabase database = [connectionInfo]
  47. DKDBTable table = this.createCustomerMetaTable()
  48. assert table
  49. Object[] row = ['bob', 'smith', 'addr1', 'city', 'country', 55]
  50. def deleteSQLString = database.generateDeleteDML(row, table)
  51. println "deleteSQLString->$deleteSQLString"
  52. assert deleteSQLString == "DELETE FROM CUSTOMER\nWHERE (first_name='bob' ) AND (last_name='smith' )"
  53. }
  54. public void testKeyTypeInfos() {
  55. DKDBConnectionInfo connectionInfo = ['test', DKDBFlavor.H2,"mem:test", null, null, 'test', 'test']
  56. println "connectionInfo->$connectionInfo"
  57. DKDatabase database = [connectionInfo]
  58. DKDBTable table = this.createCustomerMetaTable()
  59. assert table
  60. def keyTypeInfos = database.getKeyConcreteTypeInfos(table)
  61. assert keyTypeInfos
  62. assert keyTypeInfos.length ==2
  63. assert keyTypeInfos[0].type == DKDBType.VARCHAR
  64. assert keyTypeInfos[1].type == DKDBType.VARCHAR
  65. }
  66. public void testGenerateInsert() {
  67. DKDBConnectionInfo connectionInfo = ['test', DKDBFlavor.H2,"mem:test", null, null, 'test', 'test']
  68. println "connectionInfo->$connectionInfo"
  69. DKDatabase database = [connectionInfo]
  70. DKDBTable table = this.createCustomerMetaTable()
  71. assert table
  72. Object[] row = ['bob', 'smith', 'addr1', 'city', 'country', 55]
  73. def insertSQLString = database.generateInsertDML(row, table)
  74. assert insertSQLString == "INSERT INTO CUSTOMER (first_name, last_name, address, city, country, age)\nVALUES ('bob', 'smith', 'addr1', 'city', 'country', 55)"
  75. }
  76. public void testSupportsType() {
  77. DKDBConnectionInfo connectionInfo = ['test', DKDBFlavor.H2,"mem:test", null, null, 'test', 'test']
  78. println "connectionInfo->$connectionInfo"
  79. DKDatabase database = [connectionInfo]
  80. assert database.canConnect()
  81. assert database.supportsType('VARCHAR')
  82. assert database.supportsType('BOOLEAN')
  83. }
  84. public void testCanConnect(){
  85. DKDBConnectionInfo connectionInfo = ['test', DKDBFlavor.H2,"mem:test", null, null, 'test', 'test']
  86. println "connectionInfo->$connectionInfo"
  87. DKDatabase database = [connectionInfo]
  88. assert database.canConnect()
  89. }
  90. public void testTableExists(){
  91. DKDBConnectionInfo connectionInfo = ['test', DKDBFlavor.H2,"mem:test;DB_CLOSE_DELAY=-1", null, null, 'test', 'test']
  92. DKDatabase database = [connectionInfo]
  93. def table = this.createCustomerMetaTable()
  94. assert table
  95. if(database.tableExists(table))
  96. database.dropTable(table)
  97. assert !database.tableExists(table)
  98. assert database.createTable(table)
  99. assert database.tableExists(table)
  100. assert database.dropTable(table)
  101. assert !database.tableExists(table)
  102. }
  103. public void testH2(){
  104. DKDBConnectionInfo connectionInfo = ['test', DKDBFlavor.H2,"mem:test", null, null, 'test', 'test']
  105. println "connectionInfo->$connectionInfo"
  106. DKDatabase database = [connectionInfo]
  107. def connection = database.connection
  108. println "connection->$connection"
  109. assert connection
  110. def meta = connection.metaData
  111. println "meta->$meta"
  112. assert meta
  113. }
  114. private DKDBTable createCustomerMetaTable(){
  115. DKDBColumn column1 = ['first_name', 1, 'VARCHAR', 20, true]
  116. DKDBColumn column2 = ['last_name', 2, 'VARCHAR', -1, true]
  117. DKDBColumn column3 = ['address', 2, 'VARCHAR', -1, true]
  118. DKDBColumn column4 = ['city', 2, 'VARCHAR', -1, true]
  119. DKDBColumn column5 = ['country', 2, 'VARCHAR', -1, true]
  120. DKDBColumn column6 = ['age', 2, 'INTEGER', -1, true]
  121. DKDBColumn[] columns = [column1, column2, column3, column4, column5, column6]
  122. String[] pkColNames = ['first_name', 'last_name']
  123. DKDBPrimaryKey pk = ['pk_customer', pkColNames]
  124. DKDBTable table = [ null, null, 'CUSTOMER', columns, pk]
  125. return table
  126. }
  127. }