Package com.impetus.client.crud.compositeType.association

Source Code of com.impetus.client.crud.compositeType.association.UserInfoTest

/*******************************************************************************
* * Copyright 2012 Impetus Infotech.
*  *
*  * 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 com.impetus.client.crud.compositeType.association;

import java.lang.reflect.Field;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

import junit.framework.Assert;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.impetus.client.crud.compositeType.MongoCompositeTypeTest;
import com.impetus.client.crud.compositeType.MongoCompoundKey;
import com.impetus.client.crud.compositeType.MongoPrimeUser;
import com.impetus.client.mongodb.MongoDBClient;
import com.impetus.kundera.client.Client;
import com.mongodb.DB;

/**
* @author vivek.mishra
*
*/
public class UserInfoTest
{

    private EntityManagerFactory emf;

    private static final Logger logger = LoggerFactory.getLogger(MongoCompositeTypeTest.class);

    /**
     * @throws java.lang.Exception
     */
    @Before
    public void setUp() throws Exception
    {
        emf = Persistence.createEntityManagerFactory("mongoTest");
    }

    @Test
    public void onCRUD()
    {
        EntityManager em = emf.createEntityManager();

        // Persist
        UUID timeLineId = UUID.randomUUID();
        Date currentDate = new Date();
        MongoCompoundKey key = new MongoCompoundKey("mevivs", 1, timeLineId);
        MongoPrimeUser timeLine = new MongoPrimeUser(key);
        timeLine.setTweetBody("my first tweet");
        timeLine.setTweetDate(currentDate);

        UserInfo userInfo = new UserInfo("mevivs_info", "Vivek", "Mishra", 31, timeLine);
        em.persist(userInfo);
        em.clear();

        // Find
        UserInfo result = em.find(UserInfo.class, "mevivs_info");
        Assert.assertNotNull(result);
        Assert.assertEquals(currentDate, result.getTimeLine().get(0).getTweetDate());
        Assert.assertEquals(timeLineId, result.getTimeLine().get(0).getKey().getTimeLineId());
        Assert.assertEquals("Vivek", result.getFirstName());
        Assert.assertEquals(31, result.getAge());

        result.setFirstName("Kuldeep");
        result.setAge(23);

        em.merge(result);

        em.clear();

        // Find
        result = null;
        result = em.find(UserInfo.class, "mevivs_info");
        Assert.assertNotNull(result);
        Assert.assertEquals(currentDate, result.getTimeLine().get(0).getTweetDate());
        Assert.assertEquals(timeLineId, result.getTimeLine().get(0).getKey().getTimeLineId());
        Assert.assertEquals("Kuldeep", result.getFirstName());
        Assert.assertEquals(23, result.getAge());

        em.remove(result);

        em.clear();
        result = em.find(UserInfo.class, "mevivs_info");
        Assert.assertNull(result);

    }

    @Test
    public void onQuery()
    {
        EntityManager em = emf.createEntityManager();

        // Persist
        UUID timeLineId = UUID.randomUUID();
        Date currentDate = new Date();
        MongoCompoundKey key = new MongoCompoundKey("mevivs", 1, timeLineId);
        MongoPrimeUser timeLine = new MongoPrimeUser(key);
        timeLine.setTweetBody("my first tweet");
        timeLine.setTweetDate(new Date());

        UserInfo userInfo = new UserInfo("mevivs_info", "Vivek", "Mishra", 31, timeLine);
        em.persist(userInfo);

        em.clear(); // optional,just to clear persistence cache.
        final String noClause = "Select u from UserInfo u";

        final String withClauseOnNoncomposite = "Select u from UserInfo u where u.age = ?1";

        // NOSQL Intelligence to teach that query is invalid because partition
        // key is not present?
        final String withAllCompositeColClause = "Select u from UserInfo u where u.userInfoId = :id";

        // query over 1 composite and 1 non-column

        // query with no clause.
        Query q = em.createQuery(noClause);
        List<UserInfo> results = q.getResultList();
        Assert.assertEquals(1, results.size());
        Assert.assertEquals(31, results.get(0).getAge());
        Assert.assertEquals("Vivek", results.get(0).getFirstName());
        Assert.assertEquals("Mishra", results.get(0).getLastName());
        Assert.assertEquals("mevivs_info", results.get(0).getUserInfoId());
        Assert.assertEquals(currentDate.getTime(), results.get(0).getTimeLine().get(0).getTweetDate().getTime());
        Assert.assertEquals(timeLineId, results.get(0).getTimeLine().get(0).getKey().getTimeLineId());

        // Query with composite key clause.
        q = em.createQuery(withClauseOnNoncomposite);
        q.setParameter(1, 31);
        results = q.getResultList();
        Assert.assertEquals(1, results.size());
        Assert.assertEquals(31, results.get(0).getAge());
        Assert.assertEquals("Vivek", results.get(0).getFirstName());
        Assert.assertEquals("Mishra", results.get(0).getLastName());
        Assert.assertEquals("mevivs_info", results.get(0).getUserInfoId());
        Assert.assertEquals(currentDate, results.get(0).getTimeLine().get(0).getTweetDate());
        Assert.assertEquals(timeLineId, results.get(0).getTimeLine().get(0).getKey().getTimeLineId());

        // Query with composite key clause.
        q = em.createQuery(withAllCompositeColClause);
        q.setParameter("id", "mevivs_info");
        results = q.getResultList();
        Assert.assertEquals(1, results.size());
        Assert.assertEquals(31, results.get(0).getAge());
        Assert.assertEquals("Vivek", results.get(0).getFirstName());
        Assert.assertEquals("Mishra", results.get(0).getLastName());
        Assert.assertEquals("mevivs_info", results.get(0).getUserInfoId());
        Assert.assertEquals(currentDate, results.get(0).getTimeLine().get(0).getTweetDate());
        Assert.assertEquals(timeLineId, results.get(0).getTimeLine().get(0).getKey().getTimeLineId());

        final String selectiveColumnTweetBodyWithAllCompositeColClause = "Select u.firstName from UserInfo u where u.userInfoId = :id";
        // Query with composite key clause.
        q = em.createQuery(selectiveColumnTweetBodyWithAllCompositeColClause);
        q.setParameter("id", "mevivs_info");
        results = q.getResultList();
        Assert.assertEquals(1, results.size());
        Assert.assertEquals(0, results.get(0).getAge());
        Assert.assertEquals("Vivek", results.get(0).getFirstName());
        Assert.assertEquals(null, results.get(0).getLastName());
        Assert.assertEquals("mevivs_info", results.get(0).getUserInfoId());

        final String selectiveColumnTweetDateWithAllCompositeColClause = "Select u.lastName from UserInfo u where u.userInfoId = :id";
        // Query with composite key clause.
        q = em.createQuery(selectiveColumnTweetDateWithAllCompositeColClause);
        q.setParameter("id", "mevivs_info");
        results = q.getResultList();
        Assert.assertEquals(1, results.size());
        Assert.assertEquals(0, results.get(0).getAge());
        Assert.assertEquals(null, results.get(0).getFirstName());
        Assert.assertEquals("Mishra", results.get(0).getLastName());
        Assert.assertEquals("mevivs_info", results.get(0).getUserInfoId());

        em.remove(userInfo);

        em.clear();// optional,just to clear persistence cache.
    }

    @Test
    public void onNamedQueryTest()
    {
        updateNamed();
        deleteNamed();

    }

    /**
     * @return
     */
    private void updateNamed()
    {
        EntityManager em = emf.createEntityManager();

        // Persist
        UUID timeLineId = UUID.randomUUID();
        Date currentDate = new Date();
        MongoCompoundKey key = new MongoCompoundKey("mevivs", 1, timeLineId);
        MongoPrimeUser timeLine = new MongoPrimeUser(key);
        timeLine.setTweetBody("my first tweet");
        timeLine.setTweetDate(currentDate);

        UserInfo userInfo = new UserInfo("mevivs_info", "Vivek", "Mishra", 31, timeLine);
        em.persist(userInfo);

        em = emf.createEntityManager();

        String updateQuery = "Update UserInfo u SET u.firstName=Kuldeep where u.firstName= :beforeUpdate";
        Query q = em.createQuery(updateQuery);
        q.setParameter("beforeUpdate", "Vivek");
        q.executeUpdate();

        UserInfo result = em.find(UserInfo.class, "mevivs_info");
        Assert.assertNotNull(result);
        Assert.assertEquals(currentDate, result.getTimeLine().get(0).getTweetDate());
        Assert.assertEquals(timeLineId, result.getTimeLine().get(0).getKey().getTimeLineId());
        Assert.assertEquals("Kuldeep", result.getFirstName());
        Assert.assertEquals(31, result.getAge());
        em.close();
    }

    /**
     *
     */
    private void deleteNamed()
    {
        UUID timeLineId = UUID.randomUUID();
        Date currentDate = new Date();
        MongoCompoundKey key = new MongoCompoundKey("mevivs", 1, timeLineId);

        String deleteQuery = "Delete From UserInfo u where u.firstName= :firstName";
        EntityManager em = emf.createEntityManager();
        Query q = em.createQuery(deleteQuery);
        q.setParameter("firstName", "Kuldeep");
        q.executeUpdate();

        UserInfo result = em.find(UserInfo.class, "mevivs_info");
        Assert.assertNull(result);
        em.close();
    }

    /**
     * @throws java.lang.Exception
     */
    @After
    public void tearDown() throws Exception
    {
        truncateMongo();
        emf.close();
    }

    /**
     *
     */
    private void truncateMongo()
    {
        EntityManager em = emf.createEntityManager();

        Map<String, Client> clients = (Map<String, Client>) em.getDelegate();
        MongoDBClient client = (MongoDBClient) clients.get("mongoTest");
        if (client != null)
        {
            try
            {
                Field db = client.getClass().getDeclaredField("mongoDb");
                if (!db.isAccessible())
                {
                    db.setAccessible(true);
                }
                DB mongoDB = (DB) db.get(client);
                mongoDB.dropDatabase();
            }
            catch (SecurityException e)
            {
                logger.error("Error while truncating db",e);
            }
            catch (NoSuchFieldException e)
            {
                logger.error("Error while truncating db",e);
            }
            catch (IllegalArgumentException e)
            {
                logger.error("Error while truncating db",e);
            }
            catch (IllegalAccessException e)
            {
                logger.error("Error while truncating db",e);
            }
        }

    }

}
TOP

Related Classes of com.impetus.client.crud.compositeType.association.UserInfoTest

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.