Package org.jasig.portal.events.aggr

Source Code of org.jasig.portal.events.aggr.PortalEventDimensionPopulatorImplTest

/**
* Licensed to Jasig under one or more contributor license
* agreements. See the NOTICE file distributed with this work
* for additional information regarding copyright ownership.
* Jasig 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.jasig.portal.events.aggr;

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;

import java.util.Collections;
import java.util.List;

import org.jasig.portal.events.aggr.dao.DateDimensionDao;
import org.jasig.portal.events.aggr.dao.IEventAggregationManagementDao;
import org.jasig.portal.events.aggr.dao.TimeDimensionDao;
import org.jasig.portal.events.handlers.db.IPortalEventDao;
import org.joda.time.DateMidnight;
import org.joda.time.DateTime;
import org.joda.time.LocalTime;
import org.joda.time.Period;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;


@RunWith(MockitoJUnitRunner.class)
public class PortalEventDimensionPopulatorImplTest {
    @InjectMocks private PortalEventDimensionPopulatorImpl portalEventDimensionPopulator = new PortalEventDimensionPopulatorImpl() {
        @Override
        DateTime getNow() {
            return new DateTime(1325881376117l);
        }
    };
    @Mock TimeDimensionDao timeDimensionDao;
    @Mock DateDimensionDao dateDimensionDao;
    @Mock IPortalEventDao portalEventDao;
    @Mock AggregationIntervalHelper aggregationIntervalHelper;
    @Mock IEventAggregationManagementDao eventAggregationManagementDao;
   
   
    protected TimeDimension createMockTimeDimension(LocalTime time) {
        final TimeDimension td = mock(TimeDimension.class);
       
        when(td.getTime()).thenReturn(time.minuteOfHour().roundFloorCopy()); //truncate at minute level
        when(td.getHour()).thenReturn(time.getHourOfDay());
        when(td.getMinute()).thenReturn(time.getMinuteOfHour());
        when(td.getFiveMinuteIncrement()).thenReturn(time.getMinuteOfHour() / 5);
       
        return td;
    }

    @Test
    public void populateAllTimeDimensions() {
        when(timeDimensionDao.getTimeDimensions()).thenReturn(Collections.<TimeDimension>emptyList());

        this.portalEventDimensionPopulator.doPopulateTimeDimensions();
       
        verify(timeDimensionDao).getTimeDimensions();
        verify(timeDimensionDao, times(60 * 24)).createTimeDimension(Matchers.<LocalTime>anyObject());
        verifyNoMoreInteractions(timeDimensionDao, dateDimensionDao);
    }

    @Test
    public void populateSomeTimeDimensions() {
        final Builder<Object> existingTimeDimensionBuilder = ImmutableList.builder();
       
        TimeDimension td = mock(TimeDimension.class);
        when(td.getTime()).thenReturn(new LocalTime(0, 1));
        existingTimeDimensionBuilder.add(td);
       
        final List<TimeDimension> existingTimeDimensions = ImmutableList.of(
                createMockTimeDimension(new LocalTime(0, 1)),
                createMockTimeDimension(new LocalTime(0, 2)),
                createMockTimeDimension(new LocalTime(0, 3)),
                createMockTimeDimension(new LocalTime(0, 4)),
                createMockTimeDimension(new LocalTime(0, 7)),
                createMockTimeDimension(new LocalTime(0, 8)),
                createMockTimeDimension(new LocalTime(0, 9)),
                createMockTimeDimension(new LocalTime(1, 23)),
                createMockTimeDimension(new LocalTime(23, 58))
            );
       
        when(timeDimensionDao.getTimeDimensions()).thenReturn(existingTimeDimensions);
       
        this.portalEventDimensionPopulator.doPopulateTimeDimensions();
       
        verify(timeDimensionDao).getTimeDimensions();
        verify(timeDimensionDao, times((60 * 24) - existingTimeDimensions.size())).createTimeDimension(Matchers.<LocalTime>anyObject());
        verifyNoMoreInteractions(timeDimensionDao, dateDimensionDao);
    }
   
   
    @Test
    public void populateDefaultDateDimensions() {
        final DateTime now = new DateTime(1325881376117l);
        final Period dimensionBuffer = Period.days(30);
        final DateTime oldestPortalEvent = now.minusDays(30);
        final DateTime newestPortalEvent = now;
        final DateTime dimensionStart = oldestPortalEvent.minus(dimensionBuffer);
        final DateTime dimensionEnd = newestPortalEvent.plus(dimensionBuffer);
       
        when(dateDimensionDao.getDateDimensionsBetween(any(DateMidnight.class), any(DateMidnight.class))).thenReturn(Collections.<DateDimension>emptyList());
        when(portalEventDao.getOldestPortalEventTimestamp()).thenReturn(oldestPortalEvent);
        when(portalEventDao.getOldestPortalEventTimestamp()).thenReturn(oldestPortalEvent);

        final AggregationIntervalInfo startIntervalInfo = mock(AggregationIntervalInfo.class);
        when(startIntervalInfo.getStart()).thenReturn(dimensionStart.year().roundFloorCopy());
       
        final AggregationIntervalInfo endIntervalInfo = mock(AggregationIntervalInfo.class);
        when(endIntervalInfo.getEnd()).thenReturn(dimensionStart.year().roundCeilingCopy());
       
        when(aggregationIntervalHelper.getIntervalInfo(AggregationInterval.YEAR, dimensionStart)).thenReturn(startIntervalInfo);
        when(aggregationIntervalHelper.getIntervalInfo(AggregationInterval.YEAR, dimensionEnd)).thenReturn(endIntervalInfo);
       
        when(eventAggregationManagementDao.getAcademicTermDetails()).thenReturn(Collections.<AcademicTermDetail>emptyList());
        when(eventAggregationManagementDao.getQuartersDetails()).thenReturn(EventDateTimeUtils.createStandardQuarters());
       
        portalEventDimensionPopulator.setDimensionBuffer(dimensionBuffer);
        portalEventDimensionPopulator.doPopulateDateDimensions();
       
        verify(dateDimensionDao).getDateDimensionsBetween(any(DateMidnight.class), any(DateMidnight.class));
       
        verify(dateDimensionDao, times(365)).createDateDimension(Matchers.<DateMidnight>anyObject(), anyInt(), anyString());
        verifyNoMoreInteractions(timeDimensionDao, dateDimensionDao);
    }
}
TOP

Related Classes of org.jasig.portal.events.aggr.PortalEventDimensionPopulatorImplTest

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.