package com.webobjects.eoaccess;
import java.net.URL;
import junit.framework.Assert;
import com.webobjects.eocontrol.EOClassDescription;
import com.webobjects.eocontrol.EOEditingContext;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSDictionary;
import com.webobjects.foundation.NSPropertyListSerialization;
import com.webobjects.foundation.NSSet;
import er.erxtest.ERXTestCase;
import er.extensions.eof.ERXModelGroup;
import er.extensions.eof.ERXEC;
/* Test the ERXEntity methods. These tests are extremely minimal.
* This class exists in order to deal with some issues in inheritance, and
* this system is not configured to use models that use inheritance yet.
*
* @author Ray Kiddy, ray@ganymede.org
*/
public class ERXEntityTest extends ERXTestCase {
static String buildRoot;
static {
buildRoot = System.getProperty("build.root");
}
EOEditingContext ec;
String adaptorName = "Memory";
String modelName;
EOModel model;
@Override
public void setUp() throws Exception {
super.setUp();
// if (ec != null) ec.dispose();
// if (model != null) model.dispose();
//
// EOModelGroup.setDefaultGroup(new EOModelGroup());
//
// modelName = "ERXTest";
//
// URL modelUrl = ERXFileUtilities.pathURLForResourceNamed(modelName+".eomodeld", null, null);
//
// EOModelGroup.defaultGroup().addModel(new EOModel(modelUrl));
//
// model = EOModelGroup.defaultGroup().modelNamed(modelName);
// model.setConnectionDictionary(ERExtensionsTest.connectionDict(adaptorName));
model = EOModelGroup.defaultGroup().modelNamed("ERXTest");
ec = ERXEC.newEditingContext();
}
public void testConstructor() {
ERXEntity entity = new ERXEntity();
Assert.assertNotNull(entity);
}
public void testPlistConstructor() {
URL entityUrl = null;
try {
entityUrl = new java.net.URL(model.pathURL()+"/Company.plist");
} catch (java.net.MalformedURLException e) { throw new IllegalArgumentException(e.getMessage()); }
NSDictionary plist = (NSDictionary)NSPropertyListSerialization.propertyListWithPathURL(entityUrl);
Assert.assertNotNull(new ERXEntity(plist, model));
}
public void _testAnyAttributeNamed() {
// Should this not return just a "new ERXEntity()"? It returns null.
//
//Assert.assertNotNull(new ERXEntity(null, null));
}
public void testClassAttributes() {
NSArray<EOAttribute> attrs = ((ERXEntity)ERXModelGroup.defaultGroup().entityNamed("Employee")).classAttributes();
@SuppressWarnings("unchecked")
NSSet<String> foundAttrs = new NSSet<>((NSArray<String>)attrs.valueForKey("name"));
NSSet<String> expectedAttrs = new NSSet<>(new String[] {
"address1", "address2", "bestSalesTotal", "city", "firstName", "lastName", "manager", "state", "zipcode"
} );
Assert.assertEquals(expectedAttrs, foundAttrs);
}
public void testClassRelationships() {
NSArray<EORelationship> rels = ((ERXEntity)ERXModelGroup.defaultGroup().entityNamed("Employee")).classRelationships();
@SuppressWarnings("unchecked")
NSSet<String> foundRels = new NSSet<>((NSArray<String>)rels.valueForKey("name"));
NSSet<String> expectedRels = new NSSet<>(new String[] { "company", "department", "paychecks", "roles" } );
Assert.assertEquals(expectedRels, foundRels);
}
public void testHasExternalName() {
URL entityUrl = null;
try {
entityUrl = new java.net.URL(model.pathURL()+"/Company.plist");
} catch (java.net.MalformedURLException e) { throw new IllegalArgumentException(e.getMessage()); }
NSDictionary plist = (NSDictionary)NSPropertyListSerialization.propertyListWithPathURL(entityUrl);
ERXEntity erxentity = new ERXEntity(plist, model);
Assert.assertTrue(erxentity.hasExternalName());
}
public void testSetClassDescription() {
EOEntity entity1 = EOModelGroup.defaultGroup().entityNamed("Company");
EOClassDescription desc = entity1.classDescriptionForInstances();
Assert.assertNotNull(desc);
URL entityUrl = null;
try {
entityUrl = new java.net.URL(model.pathURL()+"/Employee.plist");
} catch (java.net.MalformedURLException e) { throw new IllegalArgumentException(e.getMessage()); }
NSDictionary plist = (NSDictionary)NSPropertyListSerialization.propertyListWithPathURL(entityUrl);
ERXEntity entity2 = new ERXEntity(plist, model);
// Using a mis-matched EOClassDescription here, but doing that on purpose so we can verify the superclass did not just ignore the set.
//
entity2.setClassDescription(desc);
//Assert.assertTrue(ERExtensionsTest.equalsForEOAccessObjects(desc, entity2.classDescriptionForInstances()));
}
}