Package org.eurekastreams.server.action.execution

Source Code of org.eurekastreams.server.action.execution.GenerateDailyUsageSummaryExecutionTest

/*
* Copyright (c) 2010-2011 Lockheed Martin Corporation
*
* 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.eurekastreams.server.action.execution;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.eurekastreams.commons.actions.context.TaskHandlerActionContext;
import org.eurekastreams.commons.date.DateDayExtractor;
import org.eurekastreams.commons.date.DayOfWeekStrategy;
import org.eurekastreams.commons.date.GetDateFromDaysAgoStrategy;
import org.eurekastreams.commons.test.IsEqualInternally;
import org.eurekastreams.server.domain.DailyUsageSummary;
import org.eurekastreams.server.domain.dto.StreamDiscoverListsDTO;
import org.eurekastreams.server.persistence.mappers.DomainMapper;
import org.eurekastreams.server.persistence.mappers.requests.PersistenceRequest;
import org.eurekastreams.server.service.actions.requests.UsageMetricDailyStreamInfoRequest;
import org.eurekastreams.server.service.actions.requests.UsageMetricStreamSummaryRequest;
import org.jmock.Expectations;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.junit.Assert;
import org.junit.Test;

/**
* Test fixture for GenerateDailyUsageSummaryExecution.
*/
public class GenerateDailyUsageSummaryExecutionTest
{
    /** Used for mocking objects. */
    private final JUnit4Mockery context = new JUnit4Mockery()
    {
        {
            setImposteriser(ClassImposteriser.INSTANCE);
        }
    };

    /**
     * Strategy to get a Date from a day ago.
     */
    private final GetDateFromDaysAgoStrategy daysAgoDateStrategy = context.mock(GetDateFromDaysAgoStrategy.class);

    /**
     * Mapper to get a single day's DailyUsageSummary.
     */
    private final DomainMapper<UsageMetricDailyStreamInfoRequest, DailyUsageSummary> //
    getDailyUsageSummaryByDateMapper = context.mock(DomainMapper.class, "getDailyUsageSummaryByDateMapper");

    /**
     * Mapper to get a day's message count.
     */
    private final DomainMapper<UsageMetricDailyStreamInfoRequest, Long> getDailyMessageCountMapper = context.mock(
            DomainMapper.class, "getDailyMessageCountMapper");

    /**
     * Mapper to get a day's page view count.
     */
    private final DomainMapper<Date, Long> getDailyPageViewCountMapper = context.mock(DomainMapper.class,
            "getDailyPageViewCountMapper");

    /**
     * Mapper to get a day's stream contributor count.
     */
    private final DomainMapper<UsageMetricDailyStreamInfoRequest, Long> getDailyStreamContributorCountMapper = context
            .mock(DomainMapper.class, "getDailyStreamContributorCountMapper");

    /**
     * Mapper to get a day's stream view count.
     */
    private final DomainMapper<UsageMetricDailyStreamInfoRequest, Long> getDailyStreamViewCountMapper = context.mock(
            DomainMapper.class, "getDailyStreamViewCountMapper");

    /**
     * Mapper to get a day's stream viewer count.
     */
    private final DomainMapper<UsageMetricDailyStreamInfoRequest, Long> getDailyStreamViewerCountMapper = context
            .mock(DomainMapper.class, "getDailyStreamViewerCountMapper");

    /**
     * Mapper to get a day's unique visitor count.
     */
    private final DomainMapper<Date, Long> getDailyUniqueVisitorCountMapper = context.mock(DomainMapper.class,
            "getDailyUniqueVisitorCountMapper");

    /**
     * Mapper to insert the DailyUsageSummary entity.
     */
    private final InsertMapperFake insertMapper = new InsertMapperFake();

    /**
     * Mapper to delete old UsageMetric data.
     */
    private final DomainMapper<Serializable, Serializable> usageMetricDataCleanupMapper = context.mock(
            DomainMapper.class, "usageMetricDataCleanupMapper");

    /**
     * Mapper to get day's average activity response time (for those that had responses).
     */
    private final DomainMapper<Date, Long> getDailyMessageResponseTimeMapper = context.mock(DomainMapper.class,
            "getDailyMessageResponseTimeMapper");

    /**
     * Mapper to get stream scope ids to generate metrics for.
     */
    private final DomainMapper<Date, List<Long>> streamScopeIdsMapper = context.mock(DomainMapper.class,
            "streamScopeIdsMapper");
    /**
     * Mapper to get the total number of activities posted to a stream.
     */
    private final DomainMapper<UsageMetricDailyStreamInfoRequest, Long> getTotalActivityCountMapper = context.mock(
            DomainMapper.class, "getTotalActivityCountMapper");

    /**
     * Mapper to get the total number of comments posted to a stream.
     */
    private final DomainMapper<UsageMetricDailyStreamInfoRequest, Long> getTotalCommentCountMapper = context.mock(
            DomainMapper.class, "getTotalCommentCountMapper");

    /**
     * Mapper to get the total number of contributors to a stream by stream scope id.
     */
    private final DomainMapper<UsageMetricDailyStreamInfoRequest, Long> getTotalStreamContributorMapper = context
            .mock(DomainMapper.class, "getTotalStreamContributorMapper");

    /**
     * Day of week strategy.
     */
    private final DayOfWeekStrategy dayOfWeekStrategy = context.mock(DayOfWeekStrategy.class);

    /**
     * Mapper to clear the entity manager.
     */
    private final DomainMapper<Serializable, Boolean> clearEntityManagerMapper = context.mock(DomainMapper.class,
            "clearEntityManagerMapper");

    /**
     * Mapper to get the lists for the discover page - this should be a cache refreshing mapper, b/c that's how it's
     * used.
     */
    private final DomainMapper<Serializable, StreamDiscoverListsDTO> discoverPageListsCacheRefreshingMapper = context
            .mock(DomainMapper.class, "discoverPageListsCacheRefreshingMapper");

    /**
     * Mapper to get the summary data for a stream, or all streams - used for caching.
     */
    private final DomainMapper<UsageMetricStreamSummaryRequest, List<DailyUsageSummary>> summaryDataMapper = context
            .mock(DomainMapper.class, "summaryDataMapper");

    /**
     * The number of days to cache summary data for.
     */
    private final int numberOfDaysToCacheSummaryDataFor = 38;

    /**
     * Input to mapper.
     */
    private final TaskHandlerActionContext actionContext = context.mock(TaskHandlerActionContext.class);

    /**
     * Test execute when we already have data from yesterday.
     */
    @Test
    public void testExecuteWithDataAlreadyExisting()
    {
        GenerateDailyUsageSummaryExecution sut = new GenerateDailyUsageSummaryExecution(1, daysAgoDateStrategy,
                getDailyUsageSummaryByDateMapper, getDailyMessageCountMapper, getDailyPageViewCountMapper,
                getDailyStreamContributorCountMapper, getDailyStreamViewCountMapper, getDailyStreamViewerCountMapper,
                getDailyUniqueVisitorCountMapper, getDailyMessageResponseTimeMapper, insertMapper,
                usageMetricDataCleanupMapper, dayOfWeekStrategy, streamScopeIdsMapper, getTotalActivityCountMapper,
                getTotalCommentCountMapper, getTotalStreamContributorMapper, clearEntityManagerMapper,
                summaryDataMapper, discoverPageListsCacheRefreshingMapper, numberOfDaysToCacheSummaryDataFor);

        final DailyUsageSummary existingSummary = context.mock(DailyUsageSummary.class);
        final Date date = new Date(2011, 1, 22);

        context.checking(new Expectations()
        {
            {
                oneOf(daysAgoDateStrategy).execute(with(1));
                will(returnValue(date));

                oneOf(getDailyUsageSummaryByDateMapper).execute(
                        with(IsEqualInternally.equalInternally(new UsageMetricDailyStreamInfoRequest(DateDayExtractor
                                .getStartOfDay(date), null))));
                will(returnValue(existingSummary));

                oneOf(dayOfWeekStrategy).isWeekday(with(DateDayExtractor.getStartOfDay(date)));
                will(returnValue(true));

                oneOf(usageMetricDataCleanupMapper).execute(null);

                allowing(clearEntityManagerMapper).execute(null);

                oneOf(discoverPageListsCacheRefreshingMapper).execute(null);
            }
        });

        sut.execute(actionContext);

        context.assertIsSatisfied();
    }

    /**
     * Test execute.
     */
    @Test
    public void executeWithNoDataAlreadyExisting()
    {
        GenerateDailyUsageSummaryExecution sut = new GenerateDailyUsageSummaryExecution(1, daysAgoDateStrategy,
                getDailyUsageSummaryByDateMapper, getDailyMessageCountMapper, getDailyPageViewCountMapper,
                getDailyStreamContributorCountMapper, getDailyStreamViewCountMapper, getDailyStreamViewerCountMapper,
                getDailyUniqueVisitorCountMapper, getDailyMessageResponseTimeMapper, insertMapper,
                usageMetricDataCleanupMapper, dayOfWeekStrategy, streamScopeIdsMapper, getTotalActivityCountMapper,
                getTotalCommentCountMapper, getTotalStreamContributorMapper, clearEntityManagerMapper,
                summaryDataMapper, discoverPageListsCacheRefreshingMapper, numberOfDaysToCacheSummaryDataFor);

        final Date dateRaw = new Date(2011, 1, 22);
        final Date date = DateDayExtractor.getStartOfDay(dateRaw);
        final long uniqueVisitorCount = 1L;
        final long pageViewCount = 2L;
        final long streamViewerCount = 3L;
        final long streamViewCount = 4L;
        final long streamContributorCount = 5L;
        final long messageCount = 6L;
        final long avgActivityResponseTime = 3L;

        final List<Long> streamScopeIds = new ArrayList<Long>();

        context.checking(new Expectations()
        {
            {
                oneOf(daysAgoDateStrategy).execute(with(1));
                will(returnValue(dateRaw));

                // no data found
                oneOf(getDailyUsageSummaryByDateMapper).execute(
                        with(IsEqualInternally.equalInternally(new UsageMetricDailyStreamInfoRequest(date, null))));
                will(returnValue(null));

                oneOf(getDailyUniqueVisitorCountMapper).execute(with(date));
                will(returnValue(uniqueVisitorCount));

                oneOf(getDailyPageViewCountMapper).execute(with(date));
                will(returnValue(pageViewCount));

                oneOf(getDailyStreamViewerCountMapper).execute(
                        with(IsEqualInternally.equalInternally(new UsageMetricDailyStreamInfoRequest(date, null))));
                will(returnValue(streamViewerCount));

                oneOf(getDailyStreamViewCountMapper).execute(
                        with(IsEqualInternally.equalInternally(new UsageMetricDailyStreamInfoRequest(date, null))));
                will(returnValue(streamViewCount));

                oneOf(getDailyStreamContributorCountMapper).execute(
                        with(IsEqualInternally.equalInternally(new UsageMetricDailyStreamInfoRequest(date, null))));
                will(returnValue(streamContributorCount));

                oneOf(getDailyMessageResponseTimeMapper).execute(with(date));
                will(returnValue(avgActivityResponseTime));

                oneOf(getDailyMessageCountMapper).execute(
                        with(IsEqualInternally.equalInternally(new UsageMetricDailyStreamInfoRequest(date, null))));
                will(returnValue(messageCount));

                oneOf(dayOfWeekStrategy).isWeekday(with(date));
                will(returnValue(true));

                oneOf(usageMetricDataCleanupMapper).execute(null);

                oneOf(streamScopeIdsMapper).execute(with(date));
                will(returnValue(streamScopeIds));

                oneOf(summaryDataMapper).execute(
                        with(IsEqualInternally.equalInternally(new UsageMetricStreamSummaryRequest(
                                numberOfDaysToCacheSummaryDataFor, null))));

                allowing(clearEntityManagerMapper).execute(null);

                oneOf(discoverPageListsCacheRefreshingMapper).execute(null);
            }
        });

        this.insertMapper.setRequest(null);
        sut.execute(actionContext);

        DailyUsageSummary ds = (DailyUsageSummary) insertMapper.getRequest().getDomainEnity();
        Assert.assertEquals(uniqueVisitorCount, ds.getUniqueVisitorCount());
        Assert.assertEquals(pageViewCount, ds.getPageViewCount());
        Assert.assertEquals(streamViewerCount, ds.getStreamViewerCount());
        Assert.assertEquals(streamViewCount, ds.getStreamViewCount());
        Assert.assertEquals(streamContributorCount, ds.getStreamContributorCount());
        Assert.assertEquals(avgActivityResponseTime, ds.getAvgActivityResponseTime());
        Assert.assertEquals(messageCount, ds.getMessageCount());
        Assert.assertEquals(date, ds.getUsageDate());
        Assert.assertEquals(new Long(date.getTime()), ds.getUsageDateTimeStampInMs());

        context.assertIsSatisfied();
    }

    /**
     * Fake class to hang onto the generated DailyUsageSummary so we can test the values.
     */
    private class InsertMapperFake implements DomainMapper<PersistenceRequest<DailyUsageSummary>, Boolean>
    {
        /**
         * The request.
         */
        private PersistenceRequest request;

        /**
         * execute.
         *
         * @param inRequest
         *            the request to persist.
         * @return true
         */
        @Override
        public Boolean execute(final PersistenceRequest<DailyUsageSummary> inRequest)
        {
            request = inRequest;
            return Boolean.TRUE;
        }

        /**
         * @return the request
         */
        public PersistenceRequest getRequest()
        {
            return request;
        }

        /**
         * @param inRequest
         *            the request to set
         */
        public void setRequest(final PersistenceRequest inRequest)
        {
            request = inRequest;
        }

    }
}
TOP

Related Classes of org.eurekastreams.server.action.execution.GenerateDailyUsageSummaryExecutionTest

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.