/******************************************************************************* | |
* 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.queries; | |
import java.util.*; | |
import org.eclipse.persistence.exceptions.QueryException; | |
import org.eclipse.persistence.testing.framework.*; | |
import org.eclipse.persistence.queries.DeleteAllQuery; | |
import org.eclipse.persistence.testing.models.employee.domain.Employee; | |
/** | |
* Tests the delete all query. | |
* When the query is called with an empty Vector, nothing should be deleted | |
* from the database. | |
* CR# 4286 ... 2612556 | |
* | |
* @author Guy Pelletier | |
* @version 1.0 October 10/02 | |
* | |
* Changed ailitche_ri_delete_all_query_050920 | |
* DeleteAllQuery now throws a specific exception in case | |
* the objects were set (even as an empty collection), | |
* but the selection criteria hasn't been provided. | |
*/ | |
public class DeleteAllQueryTest extends AutoVerifyTestCase { | |
private Exception exception; | |
public DeleteAllQueryTest() {} | |
public void reset() { | |
getSession().getIdentityMapAccessor().initializeIdentityMaps(); // clears the cache and stuff? | |
getAbstractSession().rollbackTransaction(); | |
} | |
protected void setup() { | |
exception = null; | |
getAbstractSession().beginTransaction(); | |
getSession().getIdentityMapAccessor().initializeIdentityMaps(); // clears the cache and stuff? | |
// no need to setup any data ... database should already be populated | |
// since we are in the feature test model which loads the employee demo | |
} | |
public void test () { | |
DeleteAllQuery deleteQuery = new DeleteAllQuery(); | |
deleteQuery.setReferenceClass(Employee.class); | |
deleteQuery.setObjects(new Vector()); // empty vector ... shouldn't delete anything | |
// This should throw QueryException.DELETE_ALL_QUERY_SPECIFIES_OBJECTS_BUT_NOT_SELECTION_CRITERIA // breaking the database integrity. Catch the error and check in verify(). | |
try { | |
getSession().executeQuery(deleteQuery); | |
} catch (Exception e) { | |
exception = e; | |
} | |
} | |
protected void verify() { | |
if (exception == null) { | |
throw new TestErrorException("No exception has been thrown"); | |
} else { | |
if(!(exception instanceof QueryException) || ((QueryException)exception).getErrorCode() != QueryException.DELETE_ALL_QUERY_SPECIFIES_OBJECTS_BUT_NOT_SELECTION_CRITERIA) { | |
throw new TestErrorException("Wrong exception thrown: ", exception); | |
} | |
} | |
Vector employees = getSession().readAllObjects(Employee.class); | |
// Ensure that our delete all didn't wack all the employees from the database | |
if (employees.size() == 0) { | |
throw new TestErrorException("The delete all query test failed. All the employees were deleted."); | |
} | |
} | |
} |