/***************************************************************** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. ****************************************************************/ package org.apache.cayenne.map; import org.apache.cayenne.configuration.server.ServerRuntime; import org.apache.cayenne.di.Inject; import org.apache.cayenne.exp.Expression; import org.apache.cayenne.exp.ExpressionFactory; import org.apache.cayenne.unit.di.server.CayenneProjects; import org.apache.cayenne.unit.di.server.ServerCase; import org.apache.cayenne.unit.di.server.UseServerRuntime; import org.apache.cayenne.util.Util; import org.junit.Test; import java.util.Collection; import static org.junit.Assert.*; @UseServerRuntime(CayenneProjects.TESTMAP_PROJECT) public class DbEntityIT extends ServerCase { @Inject private ServerRuntime runtime; @Test public void testSerializability() throws Exception { DbEntity entity = new DbEntity("entity"); DbAttribute pk = new DbAttribute("pk"); pk.setPrimaryKey(true); entity.addAttribute(pk); DbAttribute generated = new DbAttribute("generated"); generated.setGenerated(true); entity.addAttribute(generated); DbEntity d2 = Util.cloneViaSerialization(entity); assertNotNull(d2.getPrimaryKeys()); assertEquals(entity.getPrimaryKeys().size(), d2.getPrimaryKeys().size()); DbAttribute pk2 = d2.getAttribute(pk.getName()); assertNotNull(pk2); assertTrue(d2.getPrimaryKeys().contains(pk2)); assertNotNull(d2.getGeneratedAttributes()); assertEquals(entity.getGeneratedAttributes().size(), d2.getGeneratedAttributes().size()); DbAttribute generated2 = d2.getAttribute(generated.getName()); assertNotNull(generated2); assertTrue(d2.getGeneratedAttributes().contains(generated2)); } @Test public void testConstructor1() { DbEntity ent = new DbEntity(); assertNull(ent.getName()); } @Test public void testConstructor2() { DbEntity ent = new DbEntity("abc"); assertEquals("abc", ent.getName()); } @Test public void testCatalog() { String tstName = "tst_name"; DbEntity ent = new DbEntity("abc"); ent.setCatalog(tstName); assertEquals(tstName, ent.getCatalog()); } @Test public void testSchema() { String tstName = "tst_name"; DbEntity ent = new DbEntity("abc"); ent.setSchema(tstName); assertEquals(tstName, ent.getSchema()); } @Test public void testFullyQualifiedName() { DbEntity e1 = new DbEntity("e1"); assertEquals("e1", e1.getFullyQualifiedName()); DbEntity e2 = new DbEntity("e2"); e2.setSchema("s2"); assertEquals("e2", e2.getName()); assertEquals("s2.e2", e2.getFullyQualifiedName()); DbEntity e3 = new DbEntity("e3"); e3.setSchema("s3"); e3.setCatalog("c3"); assertEquals("e3", e3.getName()); assertEquals("c3.s3.e3", e3.getFullyQualifiedName()); DbEntity e4 = new DbEntity("e4"); e4.setCatalog("c4"); assertEquals("e4", e4.getName()); assertEquals("c4.e4", e4.getFullyQualifiedName()); } @Test public void testGetPrimaryKey() { DbEntity ent = new DbEntity("abc"); DbAttribute a1 = new DbAttribute(); a1.setName("a1"); a1.setPrimaryKey(false); ent.addAttribute(a1); DbAttribute a2 = new DbAttribute(); a2.setName("a2"); a2.setPrimaryKey(true); ent.addAttribute(a2); Collection<DbAttribute> pk = ent.getPrimaryKeys(); assertNotNull(pk); assertEquals(1, pk.size()); assertSame(a2, pk.iterator().next()); } @Test public void testAddPKAttribute() { DbEntity ent = new DbEntity("abc"); DbAttribute a1 = new DbAttribute(); a1.setName("a1"); a1.setPrimaryKey(false); assertTrue(ent.getPrimaryKeys().isEmpty()); ent.addAttribute(a1); assertTrue(ent.getPrimaryKeys().isEmpty()); } @Test public void testChangeAttributeToPK() { DbEntity ent = new DbEntity("abc"); DbAttribute a1 = new DbAttribute(); a1.setName("a1"); a1.setPrimaryKey(false); ent.addAttribute(a1); assertFalse(ent.getPrimaryKeys().contains(a1)); a1.setPrimaryKey(true); assertTrue(ent.getPrimaryKeys().contains(a1)); } @Test public void testChangePKAttribute() { DbEntity ent = new DbEntity("abc"); DbAttribute a1 = new DbAttribute(); a1.setName("a1"); a1.setPrimaryKey(true); ent.addAttribute(a1); assertTrue(ent.getPrimaryKeys().contains(a1)); a1.setPrimaryKey(false); assertFalse(ent.getPrimaryKeys().contains(a1)); } @Test public void testRemoveAttribute() { DbEntity ent = new DbEntity("abc"); DataMap map = new DataMap("map"); ent.setName("ent"); map.addDbEntity(ent); DbAttribute a1 = new DbAttribute(); a1.setName("a1"); a1.setPrimaryKey(false); ent.addAttribute(a1); DbEntity otherEntity = new DbEntity("22ent1"); assertNotNull(otherEntity.getName()); map.addDbEntity(otherEntity); DbAttribute a11 = new DbAttribute(); a11.setName("a11"); a11.setPrimaryKey(false); otherEntity.addAttribute(a11); DbRelationship rel = new DbRelationship("relfrom"); ent.addRelationship(rel); rel.setTargetEntityName(otherEntity); rel.addJoin(new DbJoin(rel, "a1", "a11")); DbRelationship rel1 = new DbRelationship("relto"); otherEntity.addRelationship(rel1); rel1.setTargetEntityName(ent); rel1.addJoin(new DbJoin(rel1, "a11", "a1")); // check that the test case is working assertSame(a1, ent.getAttribute(a1.getName())); assertSame(rel, ent.getRelationship(rel.getName())); // test removal ent.removeAttribute(a1.getName()); assertNull(ent.getAttribute(a1.getName())); assertEquals(0, rel1.getJoins().size()); assertEquals(0, rel.getJoins().size()); } @Test public void testTranslateToRelatedEntityIndependentPath() { DbEntity artistE = runtime.getDataDomain().getEntityResolver().getDbEntity("ARTIST"); Expression e1 = ExpressionFactory.exp("db:paintingArray"); Expression translated = artistE.translateToRelatedEntity(e1, "artistExhibitArray"); assertEquals("failure: " + translated, ExpressionFactory.exp("db:toArtist.paintingArray"), translated); } @Test public void testTranslateToRelatedEntityTrimmedPath() { DbEntity artistE = runtime.getDataDomain().getEntityResolver().getDbEntity("ARTIST"); Expression e1 = ExpressionFactory.exp("db:artistExhibitArray.toExhibit"); Expression translated = artistE.translateToRelatedEntity(e1, "artistExhibitArray"); assertEquals("failure: " + translated, ExpressionFactory.exp("db:toArtist.artistExhibitArray.toExhibit"), translated); } @Test public void testTranslateToRelatedEntitySplitHalfWay() { DbEntity artistE = runtime.getDataDomain().getEntityResolver().getDbEntity("ARTIST"); Expression e1 = ExpressionFactory.exp("db:paintingArray.toPaintingInfo.TEXT_REVIEW"); Expression translated = artistE.translateToRelatedEntity(e1, "paintingArray.toGallery"); assertEquals("failure: " + translated, ExpressionFactory.exp("db:paintingArray.toArtist.paintingArray.toPaintingInfo.TEXT_REVIEW"), translated); } @Test public void testTranslateToRelatedEntityMatchingPath() { DbEntity artistE = runtime.getDataDomain().getEntityResolver().getDbEntity("ARTIST"); Expression e1 = ExpressionFactory.exp("db:artistExhibitArray.toExhibit"); Expression translated = artistE.translateToRelatedEntity(e1, "artistExhibitArray.toExhibit"); assertEquals("failure: " + translated, ExpressionFactory.exp("db:artistExhibitArray.toArtist.artistExhibitArray.toExhibit"), translated); } @Test public void testTranslateToRelatedEntityToOne() { DbEntity paintingE = runtime.getDataDomain().getEntityResolver().getDbEntity("PAINTING"); Expression e1 = ExpressionFactory.exp("db:toArtist.ARTIST_NAME = 'aa'"); Expression translated = paintingE.translateToRelatedEntity(e1, "toArtist"); assertEquals("failure: " + translated, ExpressionFactory.exp("db:ARTIST_NAME = 'aa'"), translated); } }