/******************************************************************************* | |
* Copyright (c) 1998, 2013 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 java.util.*; | |
import org.eclipse.persistence.expressions.*; | |
import org.eclipse.persistence.testing.framework.*; | |
import org.eclipse.persistence.testing.tests.expressions.*; | |
import org.eclipse.persistence.testing.models.insurance.*; | |
import org.eclipse.persistence.testing.models.insurance.objectrelational.*; | |
/** | |
* Used to test object-relational features of oracle 8.1 and jdbc 2.0. | |
*/ | |
public class InsuranceObjectRelationalTestModel extends org.eclipse.persistence.testing.tests.insurance.InsuranceBasicTestModel { | |
public void addRequiredSystems() { | |
// Must logout to reset type information. | |
getDatabaseSession().logout(); | |
getDatabaseSession().login(); | |
if (getSession().getPlatform().isOracle9()) { | |
addRequiredSystem(new InsuranceORSystem()); | |
} | |
} | |
public void addTests() { | |
if (getSession().getPlatform().isOracle9()) { | |
super.addTests(); | |
addTest(getNestedTablesReadObjectTestSuite()); | |
addTest(getObjectArrayUpdateTestSuite()); | |
// This test suite added for bug 2730536 | |
addTest(getNullUpdatesTestSuite()); | |
} | |
} | |
protected static TestSuite getNestedTablesReadObjectTestSuite() { | |
TestSuite testSuite = new TestSuite(); | |
testSuite.setName("NestedTablesReadObjectTestSuite"); | |
testSuite.setDescription("nested tables read test"); | |
ExpressionBuilder builder = new ExpressionBuilder(); | |
Expression exp1 = builder.anyOf("policies").get("maxCoverage").greaterThan(30000); | |
// Should get 3, DISTINCT is not supported in Oracle8i, duplicate data is read in | |
ReadAllExpressionTest test1 = new ReadAllExpressionTest(PolicyHolder.class, 4); | |
test1.setName("nested tables read test (PolicyHoler)"); | |
test1.setExpression(exp1); | |
testSuite.addTest(test1); | |
builder = new ExpressionBuilder(); | |
Expression exp2 = builder.get("policyHolder").get("ssn").equal(1111); | |
ReadAllExpressionTest test2 = new ReadAllExpressionTest(Policy.class, 1); | |
test2.setName("nested tables read test (Policy)"); | |
test2.setExpression(exp2); | |
testSuite.addTest(test2); | |
builder = new ExpressionBuilder(); | |
Expression exp3 = builder.get("policy").get("policyNumber").equal(102); | |
ReadAllExpressionTest test3 = new ReadAllExpressionTest(Claim.class, 1); | |
test3.setName("nested tables read test(Claim)"); | |
test3.setExpression(exp3); | |
testSuite.addTest(test3); | |
builder = new ExpressionBuilder(); | |
Expression exp4 = builder.get("policyHolder").get("address").get("city").equal("Boston"); | |
ReadAllExpressionTest test4 = new ReadAllExpressionTest(Policy.class, 2); | |
test4.setName("nested tables read test(Address from PolicyHolder from Policy)"); | |
test4.setExpression(exp4); | |
testSuite.addTest(test4); | |
return testSuite; | |
} | |
/** | |
* For bug 2730536 try setting various object-relational fields to null. | |
* Test difficulties: setting values to null effectively triggers deletes on | |
* the database. This triggers database constraints and also errors as all this | |
* is done outside a unit of work. | |
* It was not possible to set an existing Ref to null, without also deleting | |
* what the ref pointed to. | |
*/ | |
protected static TestSuite getNullUpdatesTestSuite() { | |
TestSuite testSuite = new TestSuite(); | |
testSuite.setName("NullUpdatesTestSuite"); | |
testSuite.setDescription("Tests setting various object-relational fields to null."); | |
// Do not use Population manager, as it does not return clones and we are | |
// modifying the objects before the test. | |
PolicyHolder policyHolder; | |
Policy policy; | |
Claim claim; | |
WriteObjectTest test; | |
// Test 1: Setting arrays, object arrays and Structs to null. | |
policyHolder = PolicyHolder.example1(); | |
// Test setting an Array to null. | |
policyHolder.setChildrenNames(null); | |
// Test setting a Struct to null. | |
policyHolder.setAddress(null); | |
policyHolder.setOccupation(null); | |
// Test seting an ObjectArray to null. | |
policyHolder.setPhones(null); | |
test = new WriteObjectTest(policyHolder); | |
test.setShouldBindAllParameters(true); | |
test.setMakesTrivialUpdate(false); | |
test.setDescription("Tests setting null on Array, Structure, and ObjectArray mappings."); | |
testSuite.addTest(test); | |
// Test 2: Setting arrays and object arrays to empty vectors. | |
policyHolder = PolicyHolder.example1(); | |
// Test setting an Array to null. | |
policyHolder.setChildrenNames(new Vector()); | |
// Test seting an ObjectArray to null. | |
policyHolder.setPhones(new Vector()); | |
test = new WriteObjectTest(policyHolder); | |
test.setShouldBindAllParameters(true); | |
test.setMakesTrivialUpdate(false); | |
test.setDescription("Tests setting empty vectors on Array and NestedTable mappings."); | |
testSuite.addTest(test); | |
// Test 3: Setting nested tables and references to null. | |
// This policy does not exist on database and has null values for Ref and NestedTables. | |
policy = HousePolicy.example3(); | |
test = new WriteObjectTest(policy); | |
test.setShouldBindAllParameters(true); | |
test.setDescription("Tests setting null on Ref and NestedTable mappings."); | |
testSuite.addTest(test); | |
// Test 4: Setting a nested table to null, with non-trivial update. | |
policyHolder = PolicyHolder.example1(); | |
policy = (Policy)policyHolder.getPolicies().firstElement(); | |
// Test setting a nested table to null. | |
policy.setClaims(null); | |
test = new WriteObjectTest(policy); | |
test.setShouldBindAllParameters(true); | |
test.setMakesTrivialUpdate(false); | |
test.setDescription("Tests setting null on a Ref mapping."); | |
testSuite.addTest(test); | |
return testSuite; | |
} | |
protected static TestSuite getObjectArrayUpdateTestSuite() { | |
TestSuite testSuite = new TestSuite(); | |
testSuite.setName("ObjectArrayAddRemoveUoWTestSuite"); | |
testSuite.setDescription("ObjectArray update test"); | |
testSuite.addTest(new ObjectArrayMappingUpdateTest()); | |
return testSuite; | |
} | |
/** | |
* Remove the project as will conflict with normal insurance. | |
*/ | |
public void reset() { | |
getExecutor().removeConfigureSystem(new InsuranceSystem()); | |
} | |
} |