blob: 1a7fd0a79ddc1d268345f6a0ee5ff241353a5db6 [file] [log] [blame]
/*******************************************************************************
* 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());
}
}