blob: d4f56faf6dc8284e971095020a08ada4b25b0853 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2008 Oracle. 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:
* dclarke - SimpleDynamicMap Example - Bug 277731
* http://wiki.eclipse.org/EclipseLink/Examples/JPA/Dynamic/SimpleDynamicMap
*
* This code is being developed under INCUBATION and is not currently included
* in the automated EclipseLink build. The API in this code may change, or
* may never be included in the product. Please provide feedback through mailing
* lists or the bug database.
******************************************************************************/
package testing;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import java.util.List;
import java.util.Map;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.expressions.ExpressionBuilder;
import org.eclipse.persistence.mappings.DirectToFieldMapping;
import org.eclipse.persistence.queries.ReportQuery;
import org.eclipse.persistence.sessions.DatabaseSession;
import org.eclipse.persistence.sessions.Session;
import org.junit.AfterClass;
import org.junit.Test;
import example.SimpleDynamicMap_NativeExample;
public class SimpleDynamicMap_NativeExample_Tests {
private static SimpleDynamicMap_NativeExample example = new SimpleDynamicMap_NativeExample();
private static DatabaseSession session;
@AfterClass
public static void logoutSession() {
if (session != null && session.isConnected()) {
session.logout();
}
}
private static DatabaseSession getSession() {
if (session == null) {
session = example.createSession();
assertNotNull(session);
assertTrue(session.isConnected());
assertEquals(0, session.getDescriptors().size());
createSimpleType();
}
assertNotNull("No session returned from createSession", session);
return session;
}
private static ClassDescriptor getDescriptor(String alias) {
ClassDescriptor descriptor = getSession().getClassDescriptorForAlias(alias);
assertNotNull("No descriptor found for alias: " + alias, descriptor);
return descriptor;
}
private static void createSimpleType() {
ClassDescriptor descriptor = example.createDynamicType(getSession());
assertNotNull(descriptor);
assertEquals(1, session.getDescriptors().size());
assertEquals("model.SimpleType", descriptor.getJavaClassName());
assertEquals("SimpleType", descriptor.getAlias());
assertEquals("DYNAMIC_SIMPLE", descriptor.getTableName());
assertEquals(1, descriptor.getPrimaryKeyFieldNames().size());
assertEquals("DYNAMIC_SIMPLE.ID", descriptor.getPrimaryKeyFieldNames().get(0));
assertEquals(2, descriptor.getMappings().size());
DirectToFieldMapping mapping = (DirectToFieldMapping) descriptor.getMappingForAttributeName("id");
assertNotNull(mapping);
assertEquals("DYNAMIC_SIMPLE.ID", mapping.getFieldName());
assertEquals(Integer.class, mapping.getAttributeClassification());
mapping = (DirectToFieldMapping) descriptor.getMappingForAttributeName("value");
assertNotNull(mapping);
assertEquals("DYNAMIC_SIMPLE.VALUE", mapping.getFieldName());
assertEquals(String.class, mapping.getAttributeClassification());
}
@Test
public void persistSimpleTypeInstances() {
ClassDescriptor descriptor = getDescriptor("SimpleType");
Map newEntity = example.persistDynamicInstances(getSession(), descriptor);
assertNotNull(newEntity);
Session session = getSession();
ReportQuery rq = new ReportQuery(descriptor.getJavaClass(), new ExpressionBuilder());
rq.addCount();
rq.setShouldReturnSingleValue(true);
int count = ((Number) session.executeQuery(rq)).intValue();
assertEquals(1, count);
}
@Test
public void querySimpleTypeInstances() {
ClassDescriptor descriptor = getDescriptor("SimpleType");
List<Map> entities = example.queryDynamicInstances(getSession(), descriptor);
assertNotNull(entities);
assertEquals(1, entities.size());
assertEquals(1, entities.get(0).get("id"));
assertEquals("value-1", entities.get(0).get("value"));
}
@Test
public void updateSimpleTypeInstances() {
ClassDescriptor descriptor = getDescriptor("SimpleType");
Map entity = example.updateDyanmicInstances(getSession(), descriptor);
assertNotNull(entity);
assertEquals(1, entity.get("id"));
assertEquals("value-1+", entity.get("value"));
}
@Test
public void deleteSimpleTypeInstances() {
ClassDescriptor descriptor = getDescriptor("SimpleType");
example.deleteDynamicInstances(getSession(), descriptor);
Session session = getSession();
ReportQuery rq = new ReportQuery(descriptor.getJavaClass(), new ExpressionBuilder());
rq.addCount();
rq.setShouldReturnSingleValue(true);
int count = ((Number) session.executeQuery(rq)).intValue();
assertEquals(0, count);
}
@Test
public void removeSimpleType() {
ClassDescriptor descriptor = getDescriptor("SimpleType");
example.removeDynamicType(getSession(), descriptor);
descriptor = getSession().getDescriptorForAlias("SimpleType");
assertNull(descriptor);
assertEquals(0, getSession().getDescriptors().size());
}
}