/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.cmp2.dbschema.relationship; import junit.framework.Test; import org.jboss.test.JBossTestCase; import org.jboss.test.cmp2.dbschema.util.DBSchemaHelper; import org.jboss.test.cmp2.dbschema.util.AbstractDBSchemaTest; import org.jboss.test.cmp2.dbschema.util.Column; import org.jboss.test.cmp2.dbschema.util.Table; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.Types; /** * The tests for generated database schema for entity beans from cmp2/relationship. * Each test method is named by the pattern: test${ejb-relationship-name} * * @author <a href="mailto:alex@jboss.org">Alex Loubyansky</a> */ public class RelationshipSchemaUnitTestCase extends AbstractDBSchemaTest { public static Test suite() throws Exception { return JBossTestCase.getDeploySetup(RelationshipSchemaUnitTestCase.class, "cmp2-dbschema.jar"); } public RelationshipSchemaUnitTestCase(String s) { super(s); } public void testAB_OneToOne_Bi_Table() throws Exception { assertTableMapping( "A_OneToOne_Bi_Table_EJB".toUpperCase(), "B_OneToOne_Bi_Table_EJB".toUpperCase(), "AB_OneToOneBi".toUpperCase() ); } public void testAB_OneToOne_Bi_FK() throws Exception { final String aTableName = "A_OneToOne_Bi_FK_EJB".toUpperCase(); final String bTableName = "B_OneToOne_Bi_FK_EJB".toUpperCase(); final String aFKName = "A"; final String bFKName = "B"; Connection con = null; try { con = getConnection(); DatabaseMetaData dbMD = con.getMetaData(); Table A = DBSchemaHelper.getTable(dbMD, aTableName); assertEquals(2, A.getColumnsNumber()); Column aId = A.getColumn("ID"); aId.assertTypeNotNull(Types.INTEGER, true); Column aB = A.getColumn(bFKName); aB.assertTypeNotNull(Types.INTEGER, false); Table B = DBSchemaHelper.getTable(dbMD, bTableName); assertEquals(2, B.getColumnsNumber()); Column bId = B.getColumn("ID"); bId.assertTypeNotNull(Types.INTEGER, true); Column bA = B.getColumn(aFKName); bA.assertTypeNotNull(Types.INTEGER, false); } finally { DBSchemaHelper.safeClose(con); } } public void testAB_OneToOne_Uni_Table() throws Exception { assertTableMapping( "A_OneToOne_Uni_Table_EJB".toUpperCase(), "B_OneToOne_Uni_Table_EJB".toUpperCase(), "AB_OneToOneUni".toUpperCase() ); } public void testAB_OneToOne_Uni_FK() throws Exception { assertFKMapping( "B_OneToOne_Uni_FK_EJB".toUpperCase(), "A_OneToOne_Uni_FK_EJB".toUpperCase(), "B".toUpperCase() ); } public void testAB_OneToMany_Bi_Table() throws Exception { assertTableMapping( "A_OneToMany_Bi_Table_EJB".toUpperCase(), "B_OneToMany_Bi_Table_EJB".toUpperCase(), "AB_OneToManyBi".toUpperCase() ); } public void testAB_OneToMany_Bi_FK() throws Exception { assertFKMapping( "A_OneToMany_Bi_FK_EJB".toUpperCase(), "B_OneToMany_Bi_FK_EJB".toUpperCase(), "A" ); } public void testAB_OneToMany_Uni_Table() throws Exception { assertTableMapping( "A_OneToMany_Uni_Table_EJB".toUpperCase(), "B_OneToMany_Uni_Table_EJB".toUpperCase(), "AB_OneToManyUni".toUpperCase() ); } public void testAB_OneToMany_Uni_FK() throws Exception { assertFKMapping( "A_OneToMany_Uni_FK_EJB".toUpperCase(), "B_OneToMany_Uni_FK_EJB".toUpperCase(), "A_OneToMany_Uni_FK_EJB_b".toUpperCase() ); } public void testAB_ManyToOne_Uni_Table() throws Exception { assertTableMapping( "A_ManyToOne_Uni_Table_EJB".toUpperCase(), "B_ManyToOne_Uni_Table_EJB".toUpperCase(), "AB_ManyToOneUni".toUpperCase() ); } public void testAB_ManyToOne_Uni_FK() throws Exception { assertFKMapping( "A_ManyToOne_Uni_FK_EJB".toUpperCase(), "B_ManyToOne_Uni_FK_EJB".toUpperCase(), "A" ); } public void testAB_ManyToMany_Bi() throws Exception { assertTableMapping( "A_ManyToMany_Bi_EJB".toUpperCase(), "B_ManyToMany_Bi_EJB".toUpperCase(), "AB_ManyToManyBi".toUpperCase() ); } public void testAB_ManyToMany_Uni() throws Exception { assertTableMapping( "A_ManyToMany_Uni_EJB".toUpperCase(), "B_ManyToMany_Uni_EJB".toUpperCase(), "AB_ManyToManyUni".toUpperCase() ); } // Private /** * Tests default schema generation for relationships with relation table */ private void assertTableMapping(String aTableName, String bTableName, String abTableName) throws Exception { Connection con = null; try { con = getConnection(); DatabaseMetaData dbMD = con.getMetaData(); Table A = DBSchemaHelper.getTable(dbMD, aTableName); assertEquals(1, A.getColumnsNumber()); Column aId = A.getColumn("ID"); aId.assertTypeNotNull(Types.INTEGER, true); Table B = DBSchemaHelper.getTable(dbMD, bTableName); assertEquals(1, B.getColumnsNumber()); Column bId = B.getColumn("ID"); bId.assertTypeNotNull(Types.INTEGER, true); Table AB = DBSchemaHelper.getTable(dbMD, abTableName); assertEquals(AB.getColumnsNumber(), 2); Column aFk = AB.getColumn(aTableName); aFk.assertTypeNotNull(Types.INTEGER, true); Column bFk = AB.getColumn(bTableName); bFk.assertTypeNotNull(Types.INTEGER, true); } finally { DBSchemaHelper.safeClose(con); } } /** * Tests default schema generation for relationships with foreign key mapping */ private void assertFKMapping(final String aTableName, final String bTableName, final String aFKName) throws Exception { Connection con = null; try { con = getConnection(); DatabaseMetaData dbMD = con.getMetaData(); Table A = DBSchemaHelper.getTable(dbMD, aTableName); assertEquals(1, A.getColumnsNumber()); Column aId = A.getColumn("ID"); aId.assertTypeNotNull(Types.INTEGER, true); Table B = DBSchemaHelper.getTable(dbMD, bTableName); assertEquals(2, B.getColumnsNumber()); Column bId = B.getColumn("ID"); bId.assertTypeNotNull(Types.INTEGER, true); Column bA = B.getColumn(aFKName); bA.assertTypeNotNull(Types.INTEGER, false); } finally { DBSchemaHelper.safeClose(con); } } }