Package com.impetus.client.twitter

Source Code of com.impetus.client.twitter.TwitterTestBaseMongo

/*******************************************************************************
* * 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.twitter;

import java.util.List;

import junit.framework.TestCase;

import org.junit.Assert;

import com.impetus.client.twitter.dao.Twitter;
import com.impetus.client.twitter.dao.TwitterService;
import com.impetus.client.twitter.entities.ExternalLinkMongo;
import com.impetus.client.twitter.entities.PersonalDetailMongo;
import com.impetus.client.twitter.entities.PreferenceMongo;
import com.impetus.client.twitter.entities.TweetMongo;
import com.impetus.client.twitter.entities.UserMongo;

/**
* Test case for MongoDB.
*
* @author amresh.singh
*/
public abstract class TwitterTestBaseMongo extends TestCase
{
    public static final boolean RUN_IN_EMBEDDED_MODE = true;

    public static final boolean AUTO_MANAGE_SCHEMA = true;

    /** The user id1. */
    String userId1;

    /** The user id2. */
    String userId2;

    /** The twitter. */
    protected Twitter twitter;

    /**
     * Sets the up internal.
     *
     * @param persistenceUnitName
     *            the new up internal
     * @throws Exception
     *             the exception
     */
    protected void setUpInternal(String persistenceUnitName) throws Exception
    {
        userId1 = "0001";
        userId2 = "0002";

        // Start Cassandra Server
        if (RUN_IN_EMBEDDED_MODE)
        {
            startServer();
        }

        twitter = new TwitterService(persistenceUnitName);

        // Create Schema
        if (AUTO_MANAGE_SCHEMA)
        {
            createSchema();
        }
    }

    /*
     * (non-Javadoc)
     *
     * @see junit.framework.TestCase#tearDown()
     */
    /**
     * Tear down internal.
     *
     * @throws Exception
     *             the exception
     */
    protected void tearDownInternal() throws Exception
    {
        if (twitter != null)
        {
            twitter.close();
        }

        if (AUTO_MANAGE_SCHEMA)
        {
            deleteSchema();
        }

        // Stop Server
        if (RUN_IN_EMBEDDED_MODE)
        {
            stopServer();
        }
    }

    /**
     * Execute suite.
     */
    protected void executeTestSuite()
    {
        // Insert, Find and Update
        addAllUserInfo();
        getUserById();
        updateUser();

        // Queries
        getAllUsers();
        getAllTweets();

        // Remove Users
        removeUser();

    }

    protected void addAllUserInfo()
    {
        UserMongo user1 = buildUser1();
        UserMongo user2 = buildUser2();

        twitter.createEntityManager();
        twitter.addUser(user1);
        twitter.closeEntityManager();

        twitter.createEntityManager();
        twitter.addUser(user2);
        twitter.closeEntityManager();
    }

    protected void getUserById()
    {
        twitter.createEntityManager();
        UserMongo user1 = twitter.findUserById(userId1);
        assertUser1(user1);

        UserMongo user2 = twitter.findUserById(userId2);
        assertUser2(user2);

    }

    protected void updateUser()
    {
        twitter.createEntityManager();
        UserMongo user1 = twitter.findUserById(userId1);
        assertUser1(user1);

        user1.setPersonalDetail(new PersonalDetailMongo("Vivek", "unknown", "Married"));
        user1.addTweet(new TweetMongo("My Third Tweet", "iPhone"));
        twitter.mergeUser(user1);

        UserMongo user1AfterMerge = twitter.findUserById(userId1);

        assertUpdatedUser1(user1AfterMerge);

        twitter.closeEntityManager();
    }

    protected void removeUser()
    {
        twitter.createEntityManager();
        UserMongo user1 = twitter.findUserById(userId1);
        // TODO: this needs to uncomment only after fixing update issue on
        // associations
        // assertUpdatedUser1(user1);

        twitter.removeUser(user1);

        UserMongo user1AfterRemoval = twitter.findUserById(userId1);
        Assert.assertNull(user1AfterRemoval);

        UserMongo user2 = twitter.findUserById(userId2);
        // TODO: this needs to uncomment only after fixing update issue on
        // associations
        // assertUpdatedUser1(user1);

        twitter.removeUser(user2);

        UserMongo user2AfterRemoval = twitter.findUserById(userId2);
        Assert.assertNull(user2AfterRemoval);

        twitter.closeEntityManager();

    }

    protected void getAllUsers()
    {
        twitter.createEntityManager();
        List<UserMongo> users = twitter.getAllUsers();
        Assert.assertNotNull(users);
        Assert.assertFalse(users.isEmpty());
        Assert.assertEquals(2, users.size());

        for (UserMongo u : users)
        {
            Assert.assertNotNull(u);
            if (u.getUserId().equals(userId1))
            {
                // TODO: this needs to uncomment only after fixing update issue
                // on associations
                // assertUpdatedUser1(u);
            }
            else if (u.getUserId().equals(userId2))
            {
                // assertUser2(u);
            }
        }
        twitter.closeEntityManager();
    }

    /**
     * Adds the users.
     */
    protected void addUsers()
    {
        twitter.createEntityManager();
        twitter.addUser(userId1, "Amresh", "password1", "married");
        twitter.closeEntityManager();

        twitter.createEntityManager();
        twitter.addUser(userId2, "Saurabh", "password2", "single");
        twitter.closeEntityManager();
    }

    /**
     * Save preference.
     */
    protected void savePreference()
    {
        twitter.createEntityManager();
        twitter.savePreference(userId1, new PreferenceMongo("P1", "Motif", "2"));
        twitter.closeEntityManager();

        twitter.createEntityManager();
        twitter.savePreference(userId2, new PreferenceMongo("P2", "High Contrast", "3"));
        twitter.closeEntityManager();
    }

    /**
     * Adds the external links.
     */
    protected void addExternalLinks()
    {
        twitter.createEntityManager();
        twitter.addExternalLink(userId1, "L1", "Facebook", "http://facebook.com/coolnerd");
        twitter.closeEntityManager();

        twitter.createEntityManager();
        twitter.addExternalLink(userId1, "L2", "LinkedIn", "http://linkedin.com/in/devilmate");
        twitter.closeEntityManager();

        twitter.createEntityManager();
        twitter.addExternalLink(userId2, "L3", "GooglePlus", "http://plus.google.com/inviteme");
        twitter.closeEntityManager();

        twitter.createEntityManager();
        twitter.addExternalLink(userId2, "L4", "Yahoo", "http://yahoo.com/profiles/itsmeamry");
        twitter.closeEntityManager();
    }

    /**
     * Adds the tweets.
     */
    protected void addTweets()
    {
        twitter.createEntityManager();
        twitter.addTweet(userId1, "Here is my first tweet", "Web");
        twitter.closeEntityManager();

        twitter.createEntityManager();
        twitter.addTweet(userId1, "Second Tweet from me", "Mobile");
        twitter.closeEntityManager();

        twitter.createEntityManager();
        twitter.addTweet(userId2, "Saurabh tweets for the first time", "Phone");
        twitter.closeEntityManager();

        twitter.createEntityManager();
        twitter.addTweet(userId2, "Another tweet from Saurabh", "text");
        twitter.closeEntityManager();
    }

    /**
     * User1 follows user2.
     */
    protected void user1FollowsUser2()
    {
        twitter.createEntityManager();
        twitter.startFollowing(userId1, userId2);
        twitter.closeEntityManager();
    }

    /**
     * User1 adds user2 as follower.
     */
    protected void user1AddsUser2AsFollower()
    {
        twitter.createEntityManager();
        twitter.addFollower(userId1, userId2);
        twitter.closeEntityManager();
    }

    /**
     * Gets the all tweets.
     *
     * @return the all tweets
     */
    protected void getAllTweets()
    {
        twitter.createEntityManager();

        List<TweetMongo> tweetsUser1 = twitter.getAllTweets(userId1);
        List<TweetMongo> tweetsUser2 = twitter.getAllTweets(userId2);

        twitter.closeEntityManager();

        assertNotNull(tweetsUser1);
        assertNotNull(tweetsUser2);

        assertFalse(tweetsUser1.isEmpty());
        assertFalse(tweetsUser2.isEmpty());

        // TODO : uncomment
        assertEquals(3, tweetsUser1.size());
        // assertEquals(2, tweetsUser1.size());
        assertEquals(2, tweetsUser2.size());
    }

    /**
     * Gets the tweets by body.
     *
     * @return the tweets by body
     */
    public void getTweetsByBody()
    {
        twitter.createEntityManager();
        List<TweetMongo> user1Tweet = twitter.findTweetByBody("Here");
        List<TweetMongo> user2Tweet = twitter.findTweetByBody("Saurabh");

        twitter.closeEntityManager();

        assertNotNull(user1Tweet);
        assertNotNull(user2Tweet);
        assertEquals(1, user1Tweet.size());
        assertEquals(1, user2Tweet.size());
    }

    /**
     * Gets the tweet by device.
     *
     * @return the tweet by device
     */
    public void getTweetsByDevice()
    {
        twitter.createEntityManager();
        List<TweetMongo> webTweets = twitter.findTweetByDevice("Web");
        List<TweetMongo> mobileTweets = twitter.findTweetByDevice("Mobile");

        twitter.closeEntityManager();

        assertNotNull(webTweets);
        assertNotNull(mobileTweets);
        assertEquals(1, webTweets.size());
        assertEquals(1, mobileTweets.size());

    }

    /**
     * Gets the all followers.
     *
     * @return the all followers
     */
    protected void getAllFollowers()
    {
        twitter.createEntityManager();
        List<UserMongo> follower1 = twitter.getFollowers(userId1);
        twitter.closeEntityManager();

        twitter.createEntityManager();
        List<UserMongo> follower2 = twitter.getFollowers(userId2);
        twitter.closeEntityManager();

        assertNull(follower1);
        assertNotNull(follower2);
    }

    /**
     * @return
     */
    private UserMongo buildUser1()
    {
        UserMongo user1 = new UserMongo(userId1, "Amresh", "password1", "married");

        user1.setPreference(new PreferenceMongo("P1", "Motif", "2"));

        user1.addExternalLink(new ExternalLinkMongo("L1", "Facebook", "http://facebook.com/coolnerd"));
        user1.addExternalLink(new ExternalLinkMongo("L2", "LinkedIn", "http://linkedin.com/in/devilmate"));

        user1.addTweet(new TweetMongo("Here is my first tweet", "Web"));
        user1.addTweet(new TweetMongo("Second Tweet from me", "Mobile"));
        return user1;
    }

    /**
     * @return
     */
    private UserMongo buildUser2()
    {
        UserMongo user2 = new UserMongo(userId2, "Saurabh", "password2", "single");

        user2.setPreference(new PreferenceMongo("P2", "High Contrast", "3"));

        user2.addExternalLink(new ExternalLinkMongo("L3", "GooglePlus", "http://plus.google.com/inviteme"));
        user2.addExternalLink(new ExternalLinkMongo("L4", "Yahoo", "http://yahoo.com/profiles/itsmeamry"));

        user2.addTweet(new TweetMongo("Saurabh tweets for the first time", "Phone"));
        user2.addTweet(new TweetMongo("Another tweet from Saurabh", "text"));
        return user2;
    }

    private void assertUser1(UserMongo user1)
    {
        Assert.assertNotNull(user1);
        Assert.assertEquals(userId1, user1.getUserId());
        Assert.assertNotNull(user1.getPersonalDetail());
        Assert.assertEquals("Amresh", user1.getPersonalDetail().getName());
        Assert.assertNotNull(user1.getPreference());
        Assert.assertEquals("2", user1.getPreference().getPrivacyLevel());
        Assert.assertNotNull(user1.getTweets());
        Assert.assertFalse(user1.getTweets().isEmpty());
        Assert.assertEquals(2, user1.getTweets().size());
        Assert.assertNotNull(user1.getExternalLinks());
        Assert.assertFalse(user1.getExternalLinks().isEmpty());
        Assert.assertEquals(2, user1.getExternalLinks().size());
    }

    private void assertUser2(UserMongo user2)
    {
        Assert.assertNotNull(user2);
        Assert.assertEquals(userId2, user2.getUserId());
        Assert.assertNotNull(user2.getPersonalDetail());
        Assert.assertEquals("Saurabh", user2.getPersonalDetail().getName());
        Assert.assertNotNull(user2.getPreference());
        Assert.assertEquals("3", user2.getPreference().getPrivacyLevel());
        Assert.assertNotNull(user2.getTweets());
        Assert.assertFalse(user2.getTweets().isEmpty());
        Assert.assertEquals(2, user2.getTweets().size());
        Assert.assertNotNull(user2.getExternalLinks());
        Assert.assertFalse(user2.getExternalLinks().isEmpty());
        Assert.assertEquals(2, user2.getExternalLinks().size());
    }

    private void assertUpdatedUser1(UserMongo user1)
    {
        Assert.assertNotNull(user1);
        Assert.assertEquals(userId1, user1.getUserId());
        Assert.assertNotNull(user1.getPersonalDetail());
        Assert.assertEquals("Vivek", user1.getPersonalDetail().getName());
        Assert.assertEquals("unknown", user1.getPersonalDetail().getPassword());
        Assert.assertNotNull(user1.getPreference());
        Assert.assertEquals("2", user1.getPreference().getPrivacyLevel());
        Assert.assertNotNull(user1.getTweets());
        Assert.assertFalse(user1.getTweets().isEmpty());
        Assert.assertEquals(3, user1.getTweets().size());
        Assert.assertNotNull(user1.getExternalLinks());
        Assert.assertFalse(user1.getExternalLinks().isEmpty());
        Assert.assertEquals(2, user1.getExternalLinks().size());
    }

    abstract void startServer();

    abstract void stopServer();

    abstract void deleteSchema();

    abstract void createSchema();
}
TOP

Related Classes of com.impetus.client.twitter.TwitterTestBaseMongo

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.