/*
Copyright 2011 Jose Maria Arranz Santamaria
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package unittest;
import example.CreateDBModel;
import example.DataSourceFactoryOfLoaderJDBC;
import example.DataSourceLoader;
import example.dao.CompanyDAO;
import example.dao.ContactDAO;
import example.dao.ContactDAOSelectorBase;
import example.dao.PersonDAO;
import example.model.Company;
import example.model.Contact;
import example.model.Person;
import javax.sql.DataSource;
import jepl.*;
import org.junit.*;
import static org.junit.Assert.assertTrue;
import unittest.shared.TestDAOShared;
/**
*
* @author jmarranz
*/
public class TestDAOSelectors
{
public TestDAOSelectors()
{
}
@BeforeClass
public static void setUpClass() throws Exception
{
}
@AfterClass
public static void tearDownClass() throws Exception
{
}
@Before
public void setUp()
{
}
@After
public void tearDown()
{
}
@Test
public void someTest()
{
DataSourceLoader[] dsFactoryArr =
DataSourceFactoryOfLoaderJDBC.getDataSourceFactoryOfLoaderJDBC().getDataSourceLoaderList();
for(int i = 0; i < dsFactoryArr.length; i++)
{
DataSourceLoader dsFactory = dsFactoryArr[i];
try
{
System.out.println("PROVIDER: " + dsFactory.getName());
DataSource ds = dsFactory.getDataSource();
CreateDBModel.createDB(ds);
execTest(ds);
}
finally
{
dsFactory.destroy();
}
}
}
public void execTest(DataSource ds)
{
JEPLBootNonJTA boot = JEPLBootRoot.get().createJEPLBootNonJTA();
JEPLNonJTADataSource jds;
try
{
jds = boot.createJEPLNonJTADataSource(ds);
jds.setDefaultAutoCommit(false);
operations(jds,new PersonDAO(jds),new CompanyDAO(jds),new ContactDAO(jds));
jds = boot.createJEPLNonJTADataSource(ds);
jds.setDefaultAutoCommit(true);
operations(jds,new PersonDAO(jds),new CompanyDAO(jds),new ContactDAO(jds));
jds = boot.createJEPLNonJTADataSource(ds);
final JEPLDataSource jds2 = jds;
JEPLTask<Object> task = new JEPLTask<Object>()
{
@Override
public Object exec() throws Exception
{
operations(jds2,new PersonDAO(jds2),new CompanyDAO(jds2),new ContactDAO(jds2));
return null;
}
};
jds.exec(task,true); // No transaction
jds.exec(task,false); // Transaction
}
catch(AssertionError ex)
{
ex.printStackTrace(); // To show the stack fully
throw ex;
}
catch(Exception ex)
{
ex.printStackTrace(); // To show the stack fully
throw new RuntimeException(ex);
}
}
public void operations(JEPLDataSource jds,PersonDAO personDao,CompanyDAO companyDao,ContactDAO contactDao)
{
// Tables empty initialization
// because delete actions are tricky, doing manually (testing delete later)
JEPLDAL dal = jds.createJEPLDAL();
dal.createJEPLDALQuery("DELETE FROM PERSON").executeUpdate();
dal.createJEPLDALQuery("DELETE FROM COMPANY").executeUpdate();
dal.createJEPLDALQuery("DELETE FROM CONTACT").executeUpdate();
// Inserting a Contact a Person and a Company
{
Contact contact = TestDAOShared.createContact();
Contact contact2;
ContactDAOSelectorBase contactDAOSingle = ContactDAOSelectorBase.createContactDAOSelectorBase(contact,jds);
// Test ContactDAOSelectorBase insert
contactDAOSingle.insert();
contact2 = contactDao.selectById(contact.getId());
assertTrue(contact2 instanceof Contact);
assertTrue(!(contact2 instanceof Company));
assertTrue(!(contact2 instanceof Person));
// Test ContactDAOSelectorBase update
contact.setName("A Contact object CHANGED");
contactDAOSingle.update();
contact2 = contactDao.selectById(contact.getId());
assertTrue(contact2.getName().equals("A Contact object CHANGED"));
// Test ContactDAOSelectorBase delete
contactDAOSingle.delete();
contact2 = contactDao.selectById(contact.getId());
assertTrue(contact2 == null);
}
{
Person person = TestDAOShared.createPerson();
Person person2;
ContactDAOSelectorBase personDAOSingle = ContactDAOSelectorBase.createContactDAOSelectorBase(person,jds);
// Test ContactDAOSelectorBase insert
personDAOSingle.insert();
person2 = personDao.selectById(person.getId());
assertTrue(person2 instanceof Person);
// Test ContactDAOSelectorBase update
person.setName("A Person object CHANGED");
personDAOSingle.update();
person2 = personDao.selectById(person.getId());
assertTrue(person2.getName().equals("A Person object CHANGED"));
// Test ContactDAOSelectorBase delete
personDAOSingle.delete();
person2 = personDao.selectById(person.getId());
assertTrue(person2 == null);
}
{
Company company = TestDAOShared.createCompany();
Company company2;
ContactDAOSelectorBase companyDAOSingle = ContactDAOSelectorBase.createContactDAOSelectorBase(company,jds);
// Test ContactDAOSelectorBase insert
companyDAOSingle.insert();
company2 = companyDao.selectById(company.getId());
assertTrue(company2 instanceof Company);
// Test ContactDAOSelectorBase update
company.setName("A Company object CHANGED");
companyDAOSingle.update();
company2 = companyDao.selectById(company.getId());
assertTrue(company2.getName().equals("A Company object CHANGED"));
// Test ContactDAOSelectorBase delete
companyDAOSingle.delete();
company2 = companyDao.selectById(company.getId());
assertTrue(company2 == null);
}
}
}