Package org.internna.iwebmvc.spring.services.dwr

Source Code of org.internna.iwebmvc.spring.services.dwr.RemoteEntityManagerImplTest

/*
* Copyright 2002-2007 the original author or authors.
*
* Licensed 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.internna.iwebmvc.spring.services.dwr;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import mock.MockUserManager;
import mock.OwnedEntity;
import org.hibernate.validator.InvalidValue;
import org.internna.iwebmvc.crypto.Decipherer;
import org.internna.iwebmvc.dao.DAO;
import org.internna.iwebmvc.dao.SecurityDAO;
import org.internna.iwebmvc.javascript.EntityParser;
import org.internna.iwebmvc.model.DomainEntity;
import org.internna.iwebmvc.model.I18nText;
import org.internna.iwebmvc.model.Link;
import org.internna.iwebmvc.model.UUID;
import org.internna.iwebmvc.model.security.RoleImpl;
import org.internna.iwebmvc.model.security.UserImpl;
import org.internna.iwebmvc.model.ui.Filter;
import org.internna.iwebmvc.model.ui.Sort;
import org.internna.iwebmvc.parsers.LinkParser;
import org.internna.iwebmvc.utils.CollectionUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
import static org.junit.Assert.*;

@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/dao.xml"})
@TransactionConfiguration(defaultRollback = true)
public class RemoteEntityManagerImplTest {

    private UUID generatedID;
    private LinkParser linkParser =  new LinkParser(null);

    @Autowired private DAO dao;
    @Autowired private SecurityDAO securityDAO;
    @Autowired private MockUserManager userManager;
    private RemoteEntityManagerImpl impl = new RemoteEntityManagerImpl();

    @Before
    public void init() throws Exception {
        Link l = new Link();
        l.setReadableText(new I18nText());
        l.getReadableText().add(Locale.CANADA, "a");
        l.setTooltipText(new I18nText());
        l.getReadableText().add(Locale.UK, "b");
        l.setUrl("http://www.google.com");
        dao.create(l);
        generatedID = l.getId();
        securityDAO.createAuthority("registered_user");
        UserImpl john = new UserImpl();
        john.setUsername("john");
        john.setName("Jopn Smith");
        john.setPassword("john");
        john.addRole((RoleImpl) securityDAO.findAuthority("registered_user"));
        securityDAO.createUser(john);
        assertNotNull(securityDAO.findUser("john"));
        List<EntityParser<?>> parsers = new ArrayList();
        parsers.add(linkParser);
        impl.setParsers(parsers);
        impl.setDao(dao);
        impl.setUserManager(userManager);
        impl.setDecipherer(new Decipherer() {

            @Override public String decrypt(String encText) {
                return encText;
            }

            @Override public boolean isEncrypted(String test) {
                return true;
            }
        });
    }

    @Test
    public void testGetParser() {
        assertNull(impl.getParser(null, null));
        assertNull(impl.getParser(Object.class, null));
        assertNull(impl.getParser(null, new Object()));
        assertNotNull(impl.getParser(Link.class, null));
    }

    @Test(expected = UnsupportedOperationException.class)
    public void testMapFilters() throws Exception {
        assertTrue(CollectionUtils.isEmpty(impl.mapFilters(null, null, null)));
        List<Filter> filterList = new ArrayList<Filter>(2);
        filterList.add(new Filter());
        assertTrue(CollectionUtils.isEmpty(impl.mapFilters(null, filterList, null)));
        filterList.get(0).setFrom("1");
        assertTrue(CollectionUtils.isEmpty(impl.mapFilters(null, filterList, null)));
        filterList.get(0).setPath("rel");
        filterList.get(0).setType("TEXT");
        Map<String, Object> filters = impl.mapFilters(null, filterList, null);
        assertTrue(filters.size() == 1);
        assertTrue(filters.containsKey("rel"));
        assertTrue(filters.containsValue("1%"));
        filterList.get(0).setType("ENUM");
        filters = impl.mapFilters(Link.class, filterList, null);
        assertTrue(filters.size() == 1);
        assertTrue(filters.containsValue(Link.REL_TYPES.BOOKMARK));
        filterList.get(0).setType("TEXT");
        filterList.get(0).setTo("2");
        filters = impl.mapFilters(null, filterList, null);
        assertTrue(filters.size() == 2);
        assertTrue(filters.containsValue("2%"));
        filterList.get(0).setPath("rel.first");
        filterList.get(0).setType("DATE");
        Date date = new Date();
        filterList.get(0).setFrom(String.valueOf(date.getTime()));
        filterList.add(new Filter());
        filterList.get(1).setPath("rel.none");
        Double doubles = new Double("3.47");
        filterList.get(1).setType("DOUBLE");
        filterList.get(1).setTo(String.valueOf(doubles));
        filters = impl.mapFilters(null, filterList, null);
        assertTrue(filters.size() == 3);
        assertTrue(filters.containsKey("rel_first"));
        assertTrue(filters.containsKey("rel_none_max"));
        assertTrue(filters.containsValue(date));
        assertTrue(filters.containsValue(doubles));
        filterList.add(new Filter());
        filterList.get(2).setType("ENTITY");
        filterList.get(2).setPath("readableText");
        filterList.get(2).setFrom("0000aa000000aa000000aa000000aa00");
        filters = impl.mapFilters(Link.class, filterList, null);
        assertTrue(filters.size() == 4);
        assertTrue(filters.containsValue(new UUID("0000aa000000aa000000aa000000aa00")));
        userManager.setName("guest");
        assertNull(impl.mapFilters(OwnedEntity.class, null, null).entrySet().iterator().next().getValue());
        userManager.setName("john");
        assertTrue(CollectionUtils.isNotEmpty(impl.mapFilters(OwnedEntity.class, null, new MockHttpServletRequest())));
        Map<String, Object> params = impl.mapFilters(OwnedEntity.class, null, new MockHttpServletRequest());
        Object o = params.entrySet().iterator().next().getValue();
        assertTrue("Param is a user", o instanceof UserImpl);
        filterList.clear();
        filterList.add(new Filter());
        filterList.get(0).setType("COLLECTION");
        filterList.get(0).setPath("xxx");
        filterList.get(0).setEntityClass(Link.class.getName());
        filterList.get(0).setFrom(generatedID.toString());
        Map<String, Object> paramsCol = impl.mapFilters(Link.class, filterList, null);
        assertTrue(CollectionUtils.isNotEmpty(paramsCol));
        assertEquals("The collection is filtered by an UUID", generatedID, ((DomainEntity) paramsCol.get("xxx")).getId());
        filters.put("x", "x");
    }

    @Test
    public void testGetQuery() throws Exception {
        assertEquals("SELECT e FROM Link e", impl.getQuery(Link.class, null, null).trim());
        List<Filter> filterList = new ArrayList<Filter>(2);
        assertEquals("SELECT e FROM Link e", impl.getQuery(Link.class, filterList, null).trim());
        filterList.add(new Filter());
        assertEquals("SELECT e FROM Link e", impl.getQuery(Link.class, filterList, null).trim());
        filterList.get(0).setType("TEXT");
        filterList.get(0).setPath("rel.x");
        filterList.get(0).setFrom("a");
        assertEquals("SELECT e FROM Link e WHERE ( LOWER(e.rel.x) LIKE :rel_x )", impl.getQuery(Link.class, filterList, null).trim());
        filterList.get(0).setEmbedded("entity");
        assertEquals("SELECT e FROM Link e WHERE ( LOWER(e.entity.rel.x) LIKE :rel_x )", impl.getQuery(Link.class, filterList, null).trim());
        filterList.get(0).setRange(true);
        filterList.get(0).setTo("b");
        assertEquals("SELECT e FROM Link e WHERE ( LOWER(e.entity.rel.x) >= :rel_x ) AND ( LOWER(e.entity.rel.x) <= :rel_x_max )", impl.getQuery(Link.class, filterList, null).trim());
        filterList.get(0).setEmbedded(null);
        filterList.add(new Filter());
        filterList.get(1).setPath("whatever");
        filterList.get(1).setType("NUMBER");
        filterList.get(1).setFrom("2");
        assertEquals("SELECT e FROM Link e WHERE ( LOWER(e.rel.x) >= :rel_x ) AND ( LOWER(e.rel.x) <= :rel_x_max ) AND ( e.whatever = :whatever )", impl.getQuery(Link.class, filterList, null).trim());
        filterList.get(1).setTo("3");
        filterList.get(1).setRange(true);
        assertEquals("SELECT e FROM Link e WHERE ( LOWER(e.rel.x) >= :rel_x ) AND ( LOWER(e.rel.x) <= :rel_x_max ) AND ( e.whatever >= :whatever ) AND ( e.whatever <= :whatever_max )", impl.getQuery(Link.class, filterList, null).trim());
        filterList.clear();
        filterList.add(new Filter());
        filterList.get(0).setType("DATE");
        filterList.get(0).setPath("xxx");
        filterList.get(0).setFrom(String.valueOf(new Date().getTime()));
        assertEquals("SELECT e FROM Link e WHERE ( LOWER(e.xxx) >= :xxx )", impl.getQuery(Link.class, filterList, null).trim());
        filterList.add(new Filter());
        filterList.get(1).setType("I18N");
        filterList.get(1).setPath("yyy");
        filterList.get(1).setFrom("a");
        filterList.get(1).setTo("a");
        filterList.get(1).setRange(true);
        assertEquals("SELECT e FROM Link e WHERE ( LOWER(e.xxx) >= :xxx ) AND ( LOWER(yyy) BETWEEN :yyy AND :yyy_max )", impl.getQuery(Link.class, filterList, null).trim());
        assertEquals("SELECT e FROM OwnedEntity e WHERE ( ( e.publicView = true ) OR ( :viewer IN ELEMENTS(e.viewers) ) )", impl.getQuery(OwnedEntity.class, null, null).trim());
        filterList.clear();
        filterList.add(new Filter());
        filterList.get(0).setType("COLLECTION");
        filterList.get(0).setPath("xxx");
        filterList.get(0).setFrom("00aa00aa00aa00aa00aa00aa00aa00aa");
        assertEquals("SELECT e FROM Link e WHERE ( :xxx IN ELEMENTS (e.xxx) )", impl.getQuery(Link.class, filterList, null).trim());
        Sort sort = new Sort();
        sort.setAttribute("xxx");
        assertEquals("SELECT e FROM Link e WHERE ( :xxx IN ELEMENTS (e.xxx) ) ORDER BY e.xxx", impl.getQuery(Link.class, filterList, sort).trim());
        sort.setDescending(true);
        filterList.get(0).setInvert(true);
        assertEquals("SELECT e FROM Link e WHERE ( :xxx NOT IN ELEMENTS (e.xxx) ) ORDER BY e.xxx DESC", impl.getQuery(Link.class, filterList, sort).trim());
        filterList.get(0).setNullValue(true);
        assertEquals("SELECT e FROM Link e WHERE ( e.xxx != NULL ) ORDER BY e.xxx DESC", impl.getQuery(Link.class, filterList, sort).trim());
    }

    @Test
    public void testFilterErrors() {
        InvalidValue[] invalidValues = null;
        assertEquals("No values filtered for null", 0, impl.filterErrors(invalidValues).length);
        invalidValues = new InvalidValue[0];
        assertEquals("No values filtered for empty", 0, impl.filterErrors(invalidValues).length);
        invalidValues = new InvalidValue[1];
        assertEquals("Nulls are handled", 0, impl.filterErrors(invalidValues).length);
        invalidValues[0] = new InvalidValue(null, null, "owners", null, null);
        assertEquals("Security error removed", 0, impl.filterErrors(invalidValues).length);
        invalidValues[0] = new InvalidValue(null, null, "any", null, null);
        assertEquals("No other errors removed", 1, impl.filterErrors(invalidValues).length);
    }

}
TOP

Related Classes of org.internna.iwebmvc.spring.services.dwr.RemoteEntityManagerImplTest

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.