/*
* Copyright (c) 2010 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.persistence.mappers.db;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.eurekastreams.server.domain.stream.StreamHashTag;
import org.eurekastreams.server.persistence.mappers.MapperTest;
import org.junit.Test;
/**
* Test fixture for DeleteOldStreamHashTagRecordsDbMapper.
*/
public class DeleteOldStreamHashTagRecordsDbMapperTest extends MapperTest
{
/**
* test execute.
*/
@Test
public void testExecute()
{
DeleteOldStreamHashTagRecordsDbMapper sut = new DeleteOldStreamHashTagRecordsDbMapper();
sut.setEntityManager(getEntityManager());
final Integer hoursInDay = 24;
Calendar calTwoDaysAgo = Calendar.getInstance();
calTwoDaysAgo.add(Calendar.HOUR, -hoursInDay * 2);
Date twoDaysAgo = calTwoDaysAgo.getTime();
Calendar calOneDayAgo = Calendar.getInstance();
calOneDayAgo.add(Calendar.HOUR, -hoursInDay);
Date oneDayAgo = calOneDayAgo.getTime();
// set all activities to be two days old
getEntityManager().createQuery("UPDATE StreamHashTag SET activityDate = :activityDate").setParameter(
"activityDate", twoDaysAgo).executeUpdate();
// now set two to be 1 day old
getEntityManager().createQuery("UPDATE StreamHashTag SET activityDate = :activityDate WHERE id IN (15,16)")
.setParameter("activityDate", oneDayAgo).executeUpdate();
final Integer dayAndAHalfAgoHours = 36;
Calendar calDayAndAHalfAgo = Calendar.getInstance();
calDayAndAHalfAgo.add(Calendar.HOUR, -dayAndAHalfAgoHours);
Date dayAndAHalAgo = calDayAndAHalfAgo.getTime();
Long numberOfActivities = (Long) getEntityManager().createQuery("SELECT COUNT(*) FROM StreamHashTag")
.getSingleResult();
Long numberOfRecordsDeleted = new Long(sut.execute(dayAndAHalAgo));
assertEquals(new Long(numberOfActivities - 2L), numberOfRecordsDeleted);
List<StreamHashTag> streamHashTags = getEntityManager().createQuery("FROM StreamHashTag").getResultList();
assertEquals(2, streamHashTags.size());
final Long fifteen = 15L;
final Long sixteen = 16L;
boolean found15 = false;
boolean found16 = false;
for (StreamHashTag st : streamHashTags)
{
if (st.getId() == fifteen)
{
found15 = true;
}
if (st.getId() == sixteen)
{
found16 = true;
}
}
assertTrue(found15);
assertTrue(found16);
}
}