/*
* Copyright (c) 2009-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;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertTrue;
import java.util.Date;
import java.util.UUID;
import org.eurekastreams.server.domain.GadgetDefinition;
import org.eurekastreams.server.domain.GalleryItemCategory;
import org.eurekastreams.server.domain.PagedSet;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
/**
* This class is responsible for testing the gadget mapping in the domain model.
*
*/
public class GadgetDefinitionMapperTest extends DomainEntityMapperTest
{
/**
* Test instance of the Gadget Mapper that is wired up by Spring.
*/
@Autowired
private GadgetDefinitionMapper jpaGadgetDefinitionMapper;
/**
* Simple test to be sure that a gadget can be inserted correctly.
*/
@Test
public void testInsert()
{
String gadgetUrl = "http://www.example.com";
String uuid = UUID.randomUUID().toString();
GadgetDefinition testGadgetDefinition = new GadgetDefinition(gadgetUrl, uuid);
testGadgetDefinition.setCategory(new GalleryItemCategory("somecategory"));
jpaGadgetDefinitionMapper.insert(testGadgetDefinition);
assertTrue(testGadgetDefinition.getId() > 0);
assertEquals(uuid, testGadgetDefinition.getUUID());
}
/**
* Test deleting a gadget def.
*/
// public void testDelete()
// {
// final long gadgetDefId = 1831L;
// GadgetDefinition gadgetDef = jpaGadgetDefinitionMapper.findById(gadgetDefId);
// jpaGadgetDefinitionMapper.delete(gadgetDef);
//
// gadgetDef = jpaGadgetDefinitionMapper.findById(gadgetDefId);
//
// assertTrue("The gadget def was not deleted", gadgetDef == null);
// }
/**
* Test to ensure that the dbunit dataset is correctly constructed.
*/
@Test
public void testDBUnitDataSet()
{
String gadgetUrl1 = "http://www.example.com/gadget1.xml";
String gadgetUrl2 = "http://www.example.com/gadget2.xml";
GadgetDefinition googleGadgetDefinition = jpaGadgetDefinitionMapper.findById(gadgetDefinitionId1);
GadgetDefinition exampleGadgetDefinition = jpaGadgetDefinitionMapper.findById(gadgetDefinitionId2);
assertEquals("DB Unit database not correct for gadget " + gadgetDefinitionId1, gadgetUrl1,
googleGadgetDefinition.getUrl());
assertEquals("DB Unit database not correct for Example gadget " + gadgetDefinitionId2, gadgetUrl2,
exampleGadgetDefinition.getUrl());
}
/**
* Tests findbyUUID.
*/
@Test
public void findByUUID()
{
// UUID of the Example Gadget Definition
String uuid = "129d4fae-7dec-11d0-a765-00a0c91e6bf6";
GadgetDefinition gadgetDef = jpaGadgetDefinitionMapper.findByUUID(uuid);
final long defId = 1831L;
assertEquals(defId, gadgetDef.getId());
}
/**
* Tests the findSortedGadgetDefinitionsForCategory method.
*/
@Test
public void testFindGadgetDefinitionsForCategorySortedByPopularity()
{
// verify that it returns results.
PagedSet<GadgetDefinition> results = jpaGadgetDefinitionMapper.findForCategorySortedByPopularity("News", 0, 1);
assertEquals(2, results.getPagedSet().size());
assertEquals(2, results.getPagedSet().size());
int firstNumberOfUsers = results.getPagedSet().get(0).getNumberOfUsers();
int secondNumberOfUsers = results.getPagedSet().get(1).getNumberOfUsers();
assertTrue(firstNumberOfUsers > secondNumberOfUsers);
}
/**
* Tests the findAll method.
*/
@Test
public void testFindAllGadgetDefinitions()
{
// verify that it returns results.
PagedSet<GadgetDefinition> results = jpaGadgetDefinitionMapper.findAll(0, 1);
assertEquals(2, results.getPagedSet().size());
assertEquals(2, results.getPagedSet().size());
}
/**
* Tests the findSortedGadgetDefinitionsForCategory method.
*/
@Test
public void testFindGadgetDefinitionsForCategorySortedByRecent()
{
// verify that it returns results.
PagedSet<GadgetDefinition> results = jpaGadgetDefinitionMapper.findForCategorySortedByRecent("News", 0, 1);
assertEquals(2, results.getPagedSet().size());
Date firstDate = results.getPagedSet().get(0).getCreated();
Date secondDate = results.getPagedSet().get(1).getCreated();
assertTrue(firstDate.after(secondDate));
}
/**
* Tests that the findSortedGadgetDefinitionsSortedByRecentForCategory method returns only gadget defs of the
* specified category.
*/
@Test
public void testFindGadgetDefinitionsForCategorySortedByRecentReturnsRightCategory()
{
// verify that it returns results.
PagedSet<GadgetDefinition> results = jpaGadgetDefinitionMapper.findForCategorySortedByRecent("News", 0, 1);
assertEquals(2, results.getPagedSet().size());
GalleryItemCategory firstCategory = results.getPagedSet().get(0).getCategory();
GalleryItemCategory secondCategory = results.getPagedSet().get(1).getCategory();
assertEquals(firstCategory.getName(), "News");
assertEquals(secondCategory.getName(), "News");
}
/**
* Tests that the findSortedGadgetDefinitionsSortedByPopularityForCategory method returns only gadget defs of the
* specified category.
*/
@Test
public void testFindGadgetDefinitionsForCategorySortedByPopularityReturnsRightCategory()
{
// verify that it returns results.
PagedSet<GadgetDefinition> results = jpaGadgetDefinitionMapper.findForCategorySortedByPopularity("Weather", 0,
1);
assertEquals(2, results.getPagedSet().size());
GalleryItemCategory firstCategory = results.getPagedSet().get(0).getCategory();
GalleryItemCategory secondCategory = results.getPagedSet().get(1).getCategory();
assertEquals(firstCategory.getName(), "Weather");
assertEquals(secondCategory.getName(), "Weather");
}
/**
* Tests that the findSortedGadgetDefinitionsSortedByPopularityForCategory method returns gadget defs of any
* category when category parameter is empty.
*/
@Test
public void testFindGadgetDefinitionsForCategorySortedByPopularityReturnsAll()
{
// verify that it returns results.
PagedSet<GadgetDefinition> results = jpaGadgetDefinitionMapper.findSortedByPopularity(0, 3);
assertEquals(4, results.getPagedSet().size());
int firstNumberOfUsers = results.getPagedSet().get(0).getNumberOfUsers();
int secondNumberOfUsers = results.getPagedSet().get(1).getNumberOfUsers();
int thirdNumberOfUsers = results.getPagedSet().get(2).getNumberOfUsers();
int forthNumberOfUsers = results.getPagedSet().get(3).getNumberOfUsers();
assertTrue(firstNumberOfUsers > secondNumberOfUsers);
assertTrue(secondNumberOfUsers > thirdNumberOfUsers);
assertTrue(thirdNumberOfUsers > forthNumberOfUsers);
}
/**
* Tests that the Refresh method updates the gadget user counts appropriately.
*/
@Test
public void testRefreshGadgetDefinitionUserCounts()
{
PagedSet<GadgetDefinition> results = jpaGadgetDefinitionMapper.findSortedByPopularity(0, 3);
assertEquals("Size of result set is invalid", 4, results.getPagedSet().size());
assertEquals("Most popular before refresh is not 4", 4, results.getPagedSet().get(0)
.getNumberOfUsers());
assertEquals("Most popular before refresh is not 3", 3, results.getPagedSet().get(1)
.getNumberOfUsers());
assertEquals("Most popular before refresh is not 2", 2, results.getPagedSet().get(2)
.getNumberOfUsers());
assertEquals("Most popular before refresh is not 1", 1, results.getPagedSet().get(3)
.getNumberOfUsers());
jpaGadgetDefinitionMapper.refreshGadgetDefinitionUserCounts();
getEntityManager().clear();
PagedSet<GadgetDefinition> refreshedResults = jpaGadgetDefinitionMapper.findSortedByPopularity(0, 3);
assertEquals("Size of refreshed result set is invalid", 4, refreshedResults.getPagedSet().size());
assertEquals("Most popular after refresh is not 4", 3, refreshedResults.getPagedSet().get(0)
.getNumberOfUsers());
assertEquals("Most popular after refresh is not 4", 2, refreshedResults.getPagedSet().get(1)
.getNumberOfUsers());
assertEquals("Most popular after refresh is not 1", 1, refreshedResults.getPagedSet().get(2)
.getNumberOfUsers());
assertEquals("Most popular after refresh is not 0", 0, refreshedResults.getPagedSet().get(3)
.getNumberOfUsers());
}
/**
* Tests that the findSortedGadgetDefinitionsSortedByPopularityForCategory method returns gadget defs of any
* category when category parameter is empty.
*/
@Test
public void testFindGadgetDefinitionsForCategorySortedByRecentReturnsAll()
{
// verify that it returns results.
PagedSet<GadgetDefinition> results = jpaGadgetDefinitionMapper.findSortedByRecent(0, 3);
assertEquals(4, results.getPagedSet().size());
}
/**
* Test the findOrCreate() method using a theme that is in the database.
*/
@Test
public void findByUrlWithExistingUrl()
{
GadgetDefinition gd = jpaGadgetDefinitionMapper.findByUrl("http://www.example.com/gadget1.xml");
assertNotNull("Did not find the gadget def", gd);
}
/**
* Test the findOrCreate() method using a theme that is in the database.
*/
@Test
public void findByUrlWithNonExistingUrl()
{
GadgetDefinition gd = jpaGadgetDefinitionMapper.findByUrl("http://www.nonexistentgadgetdef.com");
assertEquals("found the theme , but it should not exist", null, gd);
}
}