/*
* 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.persistence.mappers.db;
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.eurekastreams.server.domain.stream.LikedSharedResource;
import org.eurekastreams.server.domain.stream.SharedResource;
import org.eurekastreams.server.persistence.mappers.MapperTest;
import org.eurekastreams.server.persistence.mappers.requests.SetSharedResourceLikeMapperRequest;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.junit.Before;
import org.junit.Test;
/**
* Test fixture for SetLikedSharedResourceStatusDbMapper.
*/
public class SetLikedSharedResourceStatusDbMapperTest extends MapperTest
{
/**
* Context for building mock objects.
*/
private final Mockery context = new JUnit4Mockery()
{
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
/**
* System under test.
*/
private SetLikedSharedResourceStatusDbMapper sut;
/**
* Person id to use.
*/
private final long personId = 42L;
/**
* ID of the shared resource link.
*/
private final long likedLinkId = 5L;
/**
* ID of the shared resource link.
*/
private final long unlikedLinkId = 6L;
/**
* Shared resource mock that's followed by the user.
*/
private final SharedResource likedSr = context.mock(SharedResource.class, "followed");
/**
* Shared resource mock that's not followed by the user.
*/
private final SharedResource unlikedSr = context.mock(SharedResource.class, "not followed");
/**
* Setup method.
*/
@Before
public void setup()
{
sut = new SetLikedSharedResourceStatusDbMapper();
sut.setEntityManager(getEntityManager());
context.checking(new Expectations()
{
{
allowing(likedSr).getId();
will(returnValue(likedLinkId));
allowing(unlikedSr).getId();
will(returnValue(unlikedLinkId));
}
});
}
/**
* Test unliking a shared resource when the person liked it.
*/
@Test
public void testUnlikeWhenLiked()
{
List<LikedSharedResource> likedResources = getEntityManager().createQuery(
"FROM LikedSharedResource where pk.personId = :personId AND pk.sharedResourceId = :sharedResourceId")
.setParameter("personId", personId).setParameter("sharedResourceId", likedLinkId).getResultList();
assertEquals(1, likedResources.size());
getEntityManager().clear();
sut.execute(new SetSharedResourceLikeMapperRequest(personId, likedSr, false));
likedResources = getEntityManager().createQuery(
"FROM LikedSharedResource where pk.personId = :personId AND pk.sharedResourceId = :sharedResourceId")
.setParameter("personId", personId).setParameter("sharedResourceId", likedLinkId).getResultList();
assertEquals(0, likedResources.size());
}
/**
* Test unliking a shared resource when when not previously liked.
*/
@Test
public void testUnlikeWhenNotLiked()
{
List<LikedSharedResource> likedResources = getEntityManager().createQuery(
"FROM LikedSharedResource where pk.personId = :personId AND pk.sharedResourceId = :sharedResourceId")
.setParameter("personId", personId).setParameter("sharedResourceId", unlikedLinkId).getResultList();
assertEquals(0, likedResources.size());
getEntityManager().clear();
sut.execute(new SetSharedResourceLikeMapperRequest(personId, unlikedSr, false));
likedResources = getEntityManager().createQuery(
"FROM LikedSharedResource where pk.personId = :personId AND pk.sharedResourceId = :sharedResourceId")
.setParameter("personId", personId).setParameter("sharedResourceId", unlikedLinkId).getResultList();
assertEquals(0, likedResources.size());
}
/**
* Test liking a resource when not previously liked.
*/
@Test
public void testLikeWhenNotLiked()
{
List<LikedSharedResource> likedResources = getEntityManager().createQuery(
"FROM LikedSharedResource where pk.personId = :personId AND pk.sharedResourceId = :sharedResourceId")
.setParameter("personId", personId).setParameter("sharedResourceId", unlikedLinkId).getResultList();
assertEquals(0, likedResources.size());
getEntityManager().clear();
sut.execute(new SetSharedResourceLikeMapperRequest(personId, unlikedSr, true));
likedResources = getEntityManager().createQuery(
"FROM LikedSharedResource where pk.personId = :personId AND pk.sharedResourceId = :sharedResourceId")
.setParameter("personId", personId).setParameter("sharedResourceId", unlikedLinkId).getResultList();
assertEquals(1, likedResources.size());
}
/**
* Test liking a resource that was already liked.
*/
@Test
public void testLikeWhenLiked()
{
List<LikedSharedResource> likedResources = getEntityManager().createQuery(
"FROM LikedSharedResource where pk.personId = :personId AND pk.sharedResourceId = :sharedResourceId")
.setParameter("personId", personId).setParameter("sharedResourceId", likedLinkId).getResultList();
assertEquals(1, likedResources.size());
getEntityManager().clear();
sut.execute(new SetSharedResourceLikeMapperRequest(personId, likedSr, true));
likedResources = getEntityManager().createQuery(
"FROM LikedSharedResource where pk.personId = :personId AND pk.sharedResourceId = :sharedResourceId")
.setParameter("personId", personId).setParameter("sharedResourceId", likedLinkId).getResultList();
assertEquals(1, likedResources.size());
}
}