/* * $HeadURL$ * $Id$ * * Copyright (c) 2006-2011 by Public Library of Science * http://plos.org * http://ambraproject.org * * 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.ambraproject.service.trackback; import org.ambraproject.action.BaseTest; import org.ambraproject.models.Article; import org.ambraproject.models.Trackback; import org.ambraproject.views.LinkbackView; import org.springframework.beans.factory.annotation.Autowired; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEqualsNoOrder; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; /** * @author Alex Kudlick Date: 5/5/11 * <p/> * org.ambraproject.annotation.service */ public class TrackbackServiceTest extends BaseTest { @Autowired protected TrackbackService trackbackService; @Test public void testSaveTrackback() throws Exception { Article article = new Article("id://trackback-annotates"); dummyDataStore.store(article); String url = "http://someblog.net/foo"; String title = "A cool blog title"; String blogName = "My Cool Blog"; String excerpt = "Tyler tries to embarrass Stefan by throwing a football at him during practice. " + "However, Stefan's super-skills of catching a football impresses Mr. Tanner who tries to persuade " + "Stefan to join the school's football team."; Long trackbackId = trackbackService.createTrackback( article.getDoi(), url, title, blogName, excerpt); assertNotNull(trackbackId, "Returned null trackback id"); Trackback storedTrackback = dummyDataStore.get(Trackback.class, trackbackId); assertNotNull(storedTrackback, "trackback didn't get stored to the database"); assertEquals(storedTrackback.getArticleID(), article.getID(), "Trackback had incorrect article id"); assertEquals(storedTrackback.getUrl(), url, "Trackback had incorrect url"); assertEquals(storedTrackback.getTitle(), title, "Trackback had incorrect title"); assertEquals(storedTrackback.getBlogName(), blogName, "Trackback had incorrect blog name"); assertEquals(storedTrackback.getExcerpt(), excerpt, "Trackback had incorrect excerpt"); int existingNumberOfTrackbacks = dummyDataStore.getAll(Trackback.class).size(); try { trackbackService.createTrackback( article.getDoi(), url, title, blogName, excerpt); fail("Trackback service failed to throw exception when creating duplicate trackback"); } catch (DuplicateTrackbackException e) { //expected } assertEquals(dummyDataStore.getAll(Trackback.class).size(), existingNumberOfTrackbacks, "Trackback service created a new trackback on duplicate save"); } @DataProvider(name = "articleTrackbacks") public Object[][] getArticleTrackbacks() { Article article1 = new Article("id:doi-for-trackbackServiceTest1"); article1.setTitle("Test Article1 for TrackbackServiceTest"); dummyDataStore.store(article1); //make different created dates so we can check ordering Calendar lastYear = Calendar.getInstance(); lastYear.add(Calendar.YEAR, -1); Calendar lastMonth = Calendar.getInstance(); lastMonth.add(Calendar.MONTH, -1); List<LinkbackView> article1Trackbacks = new ArrayList<LinkbackView>(2); Trackback trackback1 = new Trackback(article1.getID(), "http://someblog.net/foo"); trackback1.setTitle("Unit Testing in Java With Mock Http Servers"); trackback1.setExcerpt("Sometimes you want to write a unit test for beans that make http requests."); trackback1.setBlogName("My Cool Blog"); trackback1.setCreated(Calendar.getInstance().getTime()); dummyDataStore.store(trackback1); article1Trackbacks.add(new LinkbackView(trackback1, article1.getDoi(), article1.getTitle())); Trackback trackback2 = new Trackback(article1.getID(), "http://someblog.net/bar"); trackback2.setTitle("How to Productively Refactor Code"); trackback2.setExcerpt("Sometimes you want to refactor code."); trackback2.setBlogName("My Cool Blog"); trackback2.setCreated(lastMonth.getTime()); dummyDataStore.store(trackback2); article1Trackbacks.add(new LinkbackView(trackback2, article1.getDoi(), article1.getTitle())); Trackback trackback3 = new Trackback(article1.getID(), "http://someblog.net/cookie"); trackback3.setTitle("Code that Never Works"); trackback3.setExcerpt("Sometimes you want code that works."); trackback3.setBlogName("My Cool Blog"); trackback3.setCreated(lastYear.getTime()); dummyDataStore.store(trackback3); article1Trackbacks.add(new LinkbackView(trackback3, article1.getDoi(), article1.getTitle())); Article article2 = new Article("id:doi-with-no-trackbacks"); article2.setTitle("Test Article2 for TrackbackServiceTest"); dummyDataStore.store(article2); return new Object[][]{ {article1, article1Trackbacks}, {article2, new ArrayList<LinkbackView>(0)} }; } @Test(dataProvider = "articleTrackbacks") public void testGetTrackbacksForArticle(Article article, List<LinkbackView> expectedTrackbacks) { List<LinkbackView> trackbacks = trackbackService.getTrackbacksForArticle(article.getDoi()); assertNotNull(trackbacks, "Returned null list of trackbacks"); assertEqualsNoOrder(trackbacks.toArray(), expectedTrackbacks.toArray(), "Returned incorrect trackbacks"); //check the ordering for (int i = 0; i < trackbacks.size() - 1; i++) { assertTrue(trackbacks.get(i).getCreated().after(trackbacks.get(i + 1).getCreated()), "Trackbacks were out of order;\nelement " + i + " had created date " + trackbacks.get(i).getCreated() + "\nelement " + (i + 1) + " had created date " + trackbacks.get(i + 1).getCreated()); } } @Test(dataProvider = "articleTrackbacks") public void testCountTrackbacks(Article article, List<LinkbackView> expectedTrackbacks) { assertEquals(trackbackService.countTrackbacksForArticle(article.getDoi()), expectedTrackbacks.size(), "Trackback service returned incorrect count of trackbacks"); } }