Package org.apache.cayenne.map

Source Code of org.apache.cayenne.map.EntityResolverTest

/*****************************************************************
*   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 java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

import org.apache.cayenne.CayenneDataObject;
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.query.MockQuery;
import org.apache.cayenne.query.Query;
import org.apache.cayenne.testdo.mt.ClientMtTable1;
import org.apache.cayenne.testdo.mt.MtTable1;
import org.apache.cayenne.testdo.testmap.Artist;
import org.apache.cayenne.unit.AccessStack;
import org.apache.cayenne.unit.CayenneCase;
import org.apache.cayenne.unit.CayenneResources;

public class EntityResolverTest extends CayenneCase {

    public void testObjEntityLookupDuplicates() {
        AccessStack stack = CayenneResources
                .getResources()
                .getAccessStack("GenericStack");

        DataMap generic = stack.getDataDomain().getDataMap("generic");
        EntityResolver resolver = new EntityResolver(Collections.singleton(generic));

        ObjEntity g1 = resolver.getObjEntity("Generic1");
        assertNotNull(g1);

        ObjEntity g2 = resolver.getObjEntity("Generic2");
        assertNotNull(g2);

        assertNotSame(g1, g2);
        assertNull(resolver.lookupObjEntity(Object.class));

        try {
            resolver.lookupObjEntity(CayenneDataObject.class);
            fail("two entities mapped to the same class... resolver must have thrown.");
        }
        catch (CayenneRuntimeException e) {
            // expected
        }
    }

    public void testGetClientEntityResolver() {

        AccessStack stack = CayenneResources.getResources().getAccessStack(
                MULTI_TIER_ACCESS_STACK);

        EntityResolver resolver = new EntityResolver(stack.getDataDomain().getDataMaps());
        EntityResolver clientResolver = resolver.getClientEntityResolver();
        assertNotNull(clientResolver);

        // make sure that client entities got translated properly...

        try {
            assertNotNull(clientResolver.getObjEntity("MtTable1"));
        }
        catch (CayenneRuntimeException e) {
            fail("'MtTable1' entity is not mapped. All entities: "
                    + clientResolver.getObjEntities());
        }

        assertNotNull(clientResolver.lookupObjEntity(ClientMtTable1.class));
        assertNull(clientResolver.lookupObjEntity(MtTable1.class));
    }

    public void testGetObjEntity() {
        EntityResolver resolver = new EntityResolver(getDomain().getDataMaps());
        assertIsArtistObjEntity(resolver.getObjEntity("Artist"));
    }

    public void testLookupObjEntityByClass() {
        EntityResolver resolver = new EntityResolver(getDomain().getDataMaps());
        assertIsArtistObjEntity(resolver.lookupObjEntity(Artist.class));
    }

    public void testLookupObjEntityByInstance() {
        EntityResolver resolver = new EntityResolver(getDomain().getDataMaps());
        assertIsArtistObjEntity(resolver.lookupObjEntity(new Artist()));
    }

    public void testLookupObjEntityByDataobject() {
        EntityResolver resolver = new EntityResolver(getDomain().getDataMaps());
        Artist artist = (Artist) this.createDataContext().newObject("Artist");
        assertIsArtistObjEntity(resolver.lookupObjEntity(artist));
    }

    public void testGetDataMapList() {
        DataMap m1 = new DataMap();
        DataMap m2 = new DataMap();
        List list = new ArrayList();
        list.add(m1);
        list.add(m2);

        EntityResolver resolver = new EntityResolver(list);
        Collection maps = resolver.getDataMaps();
        assertNotNull(maps);
        assertEquals(2, maps.size());
        assertTrue(maps.containsAll(list));
    }

    public void testAddDataMap() {

        // create empty resolver
        EntityResolver resolver = new EntityResolver();
        assertEquals(0, resolver.getDataMaps().size());
        assertNull(resolver.lookupObjEntity(Object.class));

        DataMap m1 = new DataMap();
        ObjEntity oe1 = new ObjEntity("test");
        oe1.setClassName(Object.class.getName());
        m1.addObjEntity(oe1);

        resolver.addDataMap(m1);

        assertEquals(1, resolver.getDataMaps().size());
        assertSame(oe1, resolver.lookupObjEntity(Object.class));
        assertEquals(resolver, m1.getNamespace());
    }

    public void testRemoveDataMap() {
        // create a resolver with a single map
        DataMap m1 = new DataMap();
        ObjEntity oe1 = new ObjEntity("test");
        oe1.setClassName(Object.class.getName());
        m1.addObjEntity(oe1);
        List list = new ArrayList();
        list.add(m1);
        EntityResolver resolver = new EntityResolver(list);

        assertEquals(1, resolver.getDataMaps().size());
        assertSame(oe1, resolver.lookupObjEntity(Object.class));

        resolver.removeDataMap(m1);

        assertEquals(0, resolver.getDataMaps().size());
        assertNull(resolver.lookupObjEntity(Object.class));
    }

    public void testAddObjEntity() {
        // create a resolver with a single map
        DataMap m1 = new DataMap();
        ObjEntity oe1 = new ObjEntity("test1");
        oe1.setClassName(Object.class.getName());
        m1.addObjEntity(oe1);
        List list = new ArrayList();
        list.add(m1);
        EntityResolver resolver = new EntityResolver(list);

        assertSame(oe1, resolver.lookupObjEntity(Object.class));

        ObjEntity oe2 = new ObjEntity("test2");
        oe2.setClassName(String.class.getName());
        m1.addObjEntity(oe2);

        assertSame(oe2, resolver.lookupObjEntity(String.class));
    }

    public void testGetQuery() {
        // create a resolver with a single map
        DataMap m1 = new DataMap();
        Query q = new MockQuery("query1");
        m1.addQuery(q);

        EntityResolver resolver = new EntityResolver(Collections.singleton(m1));
        assertSame(q, resolver.getQuery("query1"));

        // check that the query added on-the-fly will be recognized
        assertNull(resolver.getQuery("query2"));

        Query q2 = new MockQuery("query2");
        m1.addQuery(q2);
        assertSame(q2, resolver.getQuery("query2"));
    }

    private void assertIsArtistDbEntity(DbEntity ae) {
        assertNotNull(ae);
        assertEquals(ae, getDbEntity("ARTIST"));
    }

    private void assertIsArtistObjEntity(ObjEntity ae) {
        assertNotNull(ae);
        assertEquals(ae, getObjEntity("Artist"));
    }

}
TOP

Related Classes of org.apache.cayenne.map.EntityResolverTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.