/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Oracle - initial API and implementation from Oracle TopLink ******************************************************************************/ package org.eclipse.persistence.testing.tests.insurance; import org.eclipse.persistence.queries.ReadObjectQuery; import org.eclipse.persistence.sessions.UnitOfWork; import org.eclipse.persistence.testing.framework.*; import org.eclipse.persistence.tools.schemaframework.PopulationManager; import org.eclipse.persistence.internal.helper.Helper; import org.eclipse.persistence.testing.models.insurance.*; /** * This model tests reading/writing/deleting through using the insurance demo. */ public class InsuranceBasicTestModel extends TestModel { /** * Return the JUnit suite to allow JUnit runner to find it. * Unfortunately JUnit only allows suite methods to be static, * so it is not possible to generically do this. */ public static junit.framework.TestSuite suite() { return new InsuranceBasicTestModel(); } public InsuranceBasicTestModel() { setDescription("This model tests reading/writing/deleting using the insurance demo."); } public void addRequiredSystems() { addRequiredSystem(new InsuranceSystem()); } public void addTests() { addTest(getReadObjectTestSuite()); addTest(getReadAllTestSuite()); addTest(getInsertObjectTestSuite()); addTest(getUpdateObjectTestSuite()); addTest(getDeleteObjectTestSuite()); addTest(getDeletePrivateOwnedTestSuite()); } /** * Return an example policy holder instance. */ public static PolicyHolder buildExamplePolicyHolder() { PolicyHolder holder = new PolicyHolder(); holder.setFirstName("Bobby"); holder.setLastName("Jones"); holder.setMale(); holder.setSsn(12345); holder.setBirthDate(Helper.dateFromString("1950/04/30")); holder.setOccupation("Software Engineer"); holder.setAddress(Address.example1()); return holder; } public static TestSuite getDeleteObjectTestSuite() { TestSuite suite = new TestSuite(); suite.setName("InsuranceDeleteObjectTestSuite"); suite.setDescription("This suite tests the deletion of each object in the insurance demo."); Class holderClass = PolicyHolder.class; PopulationManager manager = PopulationManager.getDefaultManager(); suite.addTest(new DeleteObjectTest(manager.getObject(holderClass, "example1"))); suite.addTest(new DeleteObjectTest(manager.getObject(holderClass, "example2"))); suite.addTest(new DeleteObjectTest(manager.getObject(holderClass, "example3"))); suite.addTest(new DeleteObjectTest(manager.getObject(holderClass, "example4"))); return suite; } public static TestSuite getDeletePrivateOwnedTestSuite() { TestSuite suite = new TestSuite(); suite.setName("InsuranceDeletePrivateOwnedTestSuite"); suite.setDescription("This suite tests the deletion of privately owned objects."); suite.addTest(new RemovePrivatelyOwnedTestCase()); return suite; } public static TestSuite getInsertObjectTestSuite() { TestSuite suite = new TestSuite(); suite.setName("InsuranceInsertObjectTestSuite"); suite.setDescription("This suite tests the insertion of each object in the insurance demo."); suite.addTest(new InsertObjectTest(buildExamplePolicyHolder())); return suite; } public static TestSuite getReadAllTestSuite() { TestSuite suite = new TestSuite(); suite.setName("InsuranceReadAllTestSuite"); suite.setDescription("This suite tests the reading of all the objects of each class in the insurance demo."); PopulationManager manager = PopulationManager.getDefaultManager(); suite.addTest(new ReadAllTest(PolicyHolder.class, 4)); suite.addTest(new ReadAllTest(Policy.class, 5)); suite.addTest(new ReadAllTest(Claim.class, 7)); return suite; } public static TestSuite getReadObjectTestSuite() { TestSuite suite = new TestSuite(); suite.setName("InsuranceReadObjectTestSuite"); suite.setDescription("This suite test the reading of each object in the insurance demo."); Class holderClass = PolicyHolder.class; PopulationManager manager = PopulationManager.getDefaultManager(); suite.addTest(new ReadObjectTest(manager.getObject(holderClass, "example1"))); suite.addTest(new ReadObjectTest(manager.getObject(holderClass, "example2"))); suite.addTest(new ReadObjectTest(manager.getObject(holderClass, "example3"))); suite.addTest(new ReadObjectTest(manager.getObject(holderClass, "example4"))); return suite; } public static TestSuite getUpdateObjectTestSuite() { TestSuite suite = new TestSuite(); suite.setName("InsuranceUpdateObjectTestSuite"); suite.setDescription("This suite tests the updating of each object in the insurance demo."); Class holderClass = PolicyHolder.class; PopulationManager manager = PopulationManager.getDefaultManager(); suite.addTest(new WriteObjectTest(manager.getObject(holderClass, "example1"))); suite.addTest(new UnitOfWorkBasicUpdateObjectTest(manager.getObject(holderClass, "example1"))); suite.addTest(new UnitOfWorkBasicUpdateObjectTest(manager.getObject(holderClass, "example2"))); suite.addTest(new UnitOfWorkBasicUpdateObjectTest(manager.getObject(holderClass, "example3"))); suite.addTest(new UnitOfWorkBasicUpdateObjectTest(manager.getObject(holderClass, "example4"))); return suite; } public static class RemovePrivatelyOwnedTestCase extends TestCase { public RemovePrivatelyOwnedTestCase() { setName("RemovePrivatelyOwnedTestCase"); } public void test() { // setup UnitOfWork uow = getSession().acquireUnitOfWork(); BicyclePolicy policy = BicyclePolicy.example1(); uow.registerObject(policy); uow.commit(); long policyNumber = policy.getPolicyNumber(); int nClaims = policy.getClaims().size(); // test uow = getSession().acquireUnitOfWork(); BicyclePolicy policyClone = (BicyclePolicy)uow.registerObject(policy); Claim claimToRemove = (Claim)policyClone.getClaims().get(0); policyClone.getClaims().remove(claimToRemove); uow.commit(); // verify cache ReadObjectQuery query = new ReadObjectQuery(claimToRemove); query.shouldCheckCacheOnly(); Claim claimToRemoveCache = (Claim)getSession().executeQuery(query); int nClaimsNewCache = policy.getClaims().size(); // verify db getSession().getIdentityMapAccessor().initializeAllIdentityMaps(); Claim claimToRemoveDb = (Claim)getSession().readObject(claimToRemove); policy = (BicyclePolicy)getSession().readObject(policy); int nClaimsNewDb = policy.getClaims().size(); // clean up uow = getSession().acquireUnitOfWork(); uow.deleteObject(policy); uow.commit(); String errorMsg = ""; if (nClaims == nClaimsNewCache) { errorMsg += "Cache: claim has not been removed from policy; "; } if (claimToRemoveCache != null) { errorMsg += "Cache: claim has not been deleted; "; } if (nClaims == nClaimsNewDb || claimToRemoveDb != null) { errorMsg += "DB: Claim has not been deleted"; } if (errorMsg.length() > 0) { throw new TestErrorException(errorMsg); } } } }