package siena.base.test; import static siena.Json.map; import java.lang.reflect.Modifier; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import siena.Model; import siena.base.test.model.Address; import siena.base.test.model.AutoInc; import siena.base.test.model.BigDecimalDoubleModelStringId; import siena.base.test.model.BigDecimalModel; import siena.base.test.model.BigDecimalModelNoPrecisionStringId; import siena.base.test.model.BigDecimalModelStringId; import siena.base.test.model.BigDecimalStringModelStringId; import siena.base.test.model.Contact; import siena.base.test.model.DataTypes; import siena.base.test.model.PersonStringID; import siena.base.test.model.DataTypes.EnumLong; import siena.base.test.model.DiscoveryStringId; import siena.base.test.model.EnumTest; import siena.base.test.model.MultipleKeys; import siena.base.test.model.PersonUUID; import siena.base.test.model.PolymorphicModel; import siena.base.test.model.PolymorphicModelStringId; public abstract class BaseTestNoAutoInc_4_SPECIALS extends BaseTestNoAutoInc_BASE { public void createClasses(List<Class<?>> classes) { classes.add(PersonStringID.class); classes.add(DiscoveryStringId.class); classes.add(PersonUUID.class); classes.add(DiscoveryStringId.class); classes.add(DataTypes.class); classes.add(BigDecimalModelStringId.class); classes.add(BigDecimalStringModelStringId.class); classes.add(BigDecimalModelNoPrecisionStringId.class); classes.add(BigDecimalDoubleModelStringId.class); classes.add(PolymorphicModel.class); classes.add(PolymorphicModelStringId.class); classes.add(EnumTest.class); } public void postInit() { for (Class<?> clazz : classes) { if(!Modifier.isAbstract(clazz.getModifiers())){ pm.createQuery(clazz).delete(); } } } public void testGetObjectNotFound() { try { getPersonUUID(""); fail(); } catch(Exception e) { System.out.println("Everything is OK"); } assertNull(pm.createQuery(PersonUUID.class).filter("firstName", "John").get()); } public void testDeleteObjectNotFound() { try { PersonUUID p = new PersonUUID(); pm.delete(p); fail(); } catch(Exception e) { System.out.println("Everything is OK"); } } public void testAutoincrement() { if(!supportsAutoincrement()) return; AutoInc first = new AutoInc(); first.name = "first"; pm.insert(first); assertTrue(first.id > 0); AutoInc second = new AutoInc(); second.name = "second"; pm.insert(second); assertTrue(second.id > 0); assertTrue(second.id > first.id); } public void testRelationship() { DiscoveryStringId radioactivity = new DiscoveryStringId("Radioactivity", StringID_CURIE); DiscoveryStringId relativity = new DiscoveryStringId("Relativity", StringID_EINSTEIN); DiscoveryStringId teslaCoil = new DiscoveryStringId("Tesla Coil", StringID_TESLA); pm.insert(radioactivity); pm.insert(relativity); pm.insert(teslaCoil); DiscoveryStringId relativity2 = pm.createQuery(DiscoveryStringId.class).filter("discoverer", StringID_EINSTEIN).get(); assertTrue(relativity.name.equals(relativity2.name)); } public void testMultipleKeys() { if(!supportsMultipleKeys()) return; MultipleKeys a = new MultipleKeys(); a.id1 = "aid1"; a.id2 = "aid2"; a.name = "first"; a.parent = null; pm.insert(a); MultipleKeys b = new MultipleKeys(); b.id1 = "bid1"; b.id2 = "bid2"; b.name = "second"; b.parent = null; pm.insert(b); b.parent = a; pm.update(b); } public void testDataTypesNull() { DataTypes dataTypes = new DataTypes(); pm.insert(dataTypes); assertEqualsDataTypes(dataTypes, pm.createQuery(DataTypes.class).get()); } public void testDataTypesNotNull() { char[] c = new char[501]; Arrays.fill(c, 'x'); DataTypes dataTypes = new DataTypes(); dataTypes.typeByte = 1; dataTypes.typeShort = 2; dataTypes.typeInt = 3; dataTypes.typeLong = 4; dataTypes.typeFloat = 5; dataTypes.typeDouble = 6; dataTypes.typeDate = new Date(); dataTypes.typeString = "hello"; dataTypes.typeLargeString = new String(c); dataTypes.typeJson = map().put("foo", "bar"); dataTypes.addresses = new ArrayList<Address>(); dataTypes.addresses.add(new Address("Castellana", "Madrid")); dataTypes.addresses.add(new Address("Diagonal", "Barcelona")); dataTypes.contacts = new HashMap<String, Contact>(); dataTypes.contacts.put("id1", new Contact("Somebody", Arrays.asList("foo", "bar"))); dataTypes.shortShort = Short.MAX_VALUE; dataTypes.intInt = Integer.MAX_VALUE; dataTypes.longLong = Long.MAX_VALUE; dataTypes.boolBool = Boolean.TRUE; // Blob dataTypes.typeBlob = new byte[] { (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, (byte)0x10, (byte)0X11, (byte)0xF0, (byte)0xF1, (byte)0xF9, (byte)0xFF }; dataTypes.typeEnum = EnumLong.ALPHA; pm.insert(dataTypes); // to test that fields are read back correctly pm.createQuery(DataTypes.class).filter("id", dataTypes.id).get(); DataTypes same = pm.createQuery(DataTypes.class).get(); assertEqualsDataTypes(dataTypes, same); } public void testBigDecimal() { BigDecimalModelStringId bigdec = new BigDecimalModelStringId("test", new BigDecimal("123456789.0123456890")); pm.insert(bigdec); BigDecimalModelStringId bigdec2 = pm.getByKey(BigDecimalModelStringId.class, bigdec.id); assertEquals(bigdec, bigdec2); bigdec = new BigDecimalModelStringId("test2", new BigDecimal("999999999.9999999999")); pm.insert(bigdec); bigdec2 = pm.getByKey(BigDecimalModelStringId.class, bigdec.id); assertEquals(bigdec, bigdec2); //-100.5 bigdec = new BigDecimalModelStringId("test3", new BigDecimal("-100.5000000000")); pm.insert(bigdec); bigdec2 = pm.getByKey(BigDecimalModelStringId.class, bigdec.id); assertEquals(bigdec, bigdec2); } public void testBigDecimalNoPrecision() { BigDecimalModelNoPrecisionStringId bigdec = new BigDecimalModelNoPrecisionStringId("test", new BigDecimal("123456789.01")); pm.insert(bigdec); BigDecimalModelNoPrecisionStringId bigdec2 = pm.getByKey(BigDecimalModelNoPrecisionStringId.class, bigdec.id); assertEquals(bigdec, bigdec2); bigdec = new BigDecimalModelNoPrecisionStringId( "test2", new BigDecimal("999999999.99")); pm.insert(bigdec); bigdec2 = pm.getByKey(BigDecimalModelNoPrecisionStringId.class, bigdec.id); assertEquals(bigdec, bigdec2); //-100.5 bigdec = new BigDecimalModelNoPrecisionStringId("test3", new BigDecimal("-100.50")); pm.insert(bigdec); bigdec2 = pm.getByKey(BigDecimalModelNoPrecisionStringId.class, bigdec.id); assertEquals(bigdec, bigdec2); } public void testBigDecimalString() { BigDecimalStringModelStringId bigdec = new BigDecimalStringModelStringId("test", new BigDecimal("123456789.0123456890")); pm.insert(bigdec); BigDecimalStringModelStringId bigdec2 = pm.getByKey(BigDecimalStringModelStringId.class, bigdec.id); assertEquals(bigdec, bigdec2); bigdec = new BigDecimalStringModelStringId( "test2", new BigDecimal("999999999.9999999999")); pm.insert(bigdec); bigdec2 = pm.getByKey(BigDecimalStringModelStringId.class, bigdec.id); assertEquals(bigdec, bigdec2); //-100.5 bigdec = new BigDecimalStringModelStringId("test3", new BigDecimal("-100.5000000000")); pm.insert(bigdec); bigdec2 = pm.getByKey(BigDecimalStringModelStringId.class, bigdec.id); assertEquals(bigdec, bigdec2); } public void testBigDecimalDouble() { BigDecimalDoubleModelStringId bigdec = new BigDecimalDoubleModelStringId("test", new BigDecimal("123456789.012345")); pm.insert(bigdec); BigDecimalDoubleModelStringId bigdec2 = pm.getByKey(BigDecimalDoubleModelStringId.class, bigdec.id); assertEquals(bigdec, bigdec2); bigdec = new BigDecimalDoubleModelStringId( "test2", new BigDecimal("999999999.9999999999")); pm.insert(bigdec); bigdec2 = pm.getByKey(BigDecimalDoubleModelStringId.class, bigdec.id); assertEquals(bigdec, bigdec2); //-100.5 bigdec = new BigDecimalDoubleModelStringId("test3", new BigDecimal("-100.5000000000")); pm.insert(bigdec); bigdec2 = pm.getByKey(BigDecimalDoubleModelStringId.class, bigdec.id); assertEquals(bigdec, bigdec2); } public void testPolymorphic() { PolymorphicModelStringId<String> poly = new PolymorphicModelStringId<String>("test", "test2"); pm.insert(poly); PolymorphicModelStringId poly2 = pm.getByKey(PolymorphicModelStringId.class, poly.id); assertEquals(poly, poly2); } public void testPolymorphic2() { List<String> arr = new ArrayList<String>(); arr.add("alpha"); arr.add("beta"); PolymorphicModelStringId<List<String>> poly = new PolymorphicModelStringId<List<String>>("test", arr); pm.insert(poly); PolymorphicModelStringId<List<String>> poly2 = pm.getByKey(PolymorphicModelStringId.class, poly.id); assertEquals(poly, poly2); } public void testEnum() { EnumTest e = new EnumTest(); e.role = EnumTest.UserRole.ADMIN; e.insert(); List<EnumTest> es = Model.all(EnumTest.class).filter("role", EnumTest.UserRole.ADMIN).fetch(); assertTrue(!es.isEmpty()); assertEquals(e, es.get(0)); } }