blob: 8d5fcb646dad5c6a9771a4b3efdc51643e27f295 [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.transparentindirection;
import java.util.*;
import org.eclipse.persistence.expressions.*;
import org.eclipse.persistence.queries.ReadAllQuery;
import org.eclipse.persistence.sessions.*;
import org.eclipse.persistence.testing.models.transparentindirection.*;
/**
* Test the IndirectList with assorted DatabaseSessions and UnitsOfWork.
* @author: Big Country
*/
public class IndirectListTestDatabase extends IndirectContainerTestDatabase {
int orderId;
public IndirectListTestDatabase(String name) {
super(name);
}
protected AbstractOrder buildOrderShell() {
return new Order();
}
protected AbstractOrder buildTestOrderShell(String customerName) {
return new Order(customerName);
}
protected AbstractOrderLine newOrderLine(String item, int quanity) {
return new OrderLine(item, quanity);
}
protected AbstractSalesRep newSalesRep(String name) {
return new SalesRep(name);
}
/**
* build the TopLink project
*/
public Project setUpProjectFromCode() {
return new IndirectListProject();
}
/**
* set up test fixtures:
* log in to database
*/
protected void setUp() {
super.setUp();
AbstractOrder order = this.buildTestOrder3();
this.writeNewOrder(order);
orderId = order.id;
this.getSession().getIdentityMapAccessor().initializeAllIdentityMaps();
}
public void tearDown() {
Order order = new Order();
order.id = orderId;
getAbstractSession().deleteObject(order);
this.getSession().getIdentityMapAccessor().initializeAllIdentityMaps();
super.tearDown();
}
/**
* Bug#4530516 Test the combination of TransparentIndirectionPolicy with conform and anyOf...isNull
*/
public void testConformWithAnyOfIsNull() {
UnitOfWork uow = getSession().acquireUnitOfWork();
readNullName(uow);
readNullName(uow);
}
private void readNullName(UnitOfWork uow)
{
ReadAllQuery readAllQuery = new ReadAllQuery(Order.class);
ExpressionBuilder expressionBuilder = new ExpressionBuilder();
Expression e = expressionBuilder.anyOf("lines").get("itemName").isNull();
readAllQuery.setSelectionCriteria(e);
readAllQuery.conformResultsInUnitOfWork();
Vector vector = (Vector) uow.executeQuery(readAllQuery);
assertEquals("Result should have one element", 1, vector.size());
Order order = (Order) vector.get(0);
AbstractOrderLine line = (AbstractOrderLine) ((Collection)order.getLineContainer()).toArray()[0];
assertEquals("itemName in OrderLine should be null", line.getKey(), null);
}
}