1 package org.apache.archiva.rss; 2 3 /* 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 */ 21 22 import java.util.ArrayList; 23 import java.util.Date; 24 import java.util.List; 25 26 import org.codehaus.plexus.spring.PlexusInSpringTestCase; 27 28 import com.sun.syndication.feed.synd.SyndEntry; 29 import com.sun.syndication.feed.synd.SyndFeed; 30 31 /** 32 * @version 33 */ 34 public class RssFeedGeneratorTest 35 extends PlexusInSpringTestCase 36 { 37 private RssFeedGenerator generator; 38 39 public void setUp() 40 throws Exception 41 { 42 super.setUp(); 43 44 generator = (RssFeedGenerator) lookup( RssFeedGenerator.class ); 45 } 46 47 @SuppressWarnings("unchecked") 48 public void testNewFeed() 49 throws Exception 50 { 51 List<RssFeedEntry> entries = new ArrayList<RssFeedEntry>(); 52 RssFeedEntry entry = new RssFeedEntry( "Item 1" ); 53 54 Date whenGathered = new Date( System.currentTimeMillis() ); 55 56 entry.setDescription( "RSS 2.0 feed item 1." ); 57 entry.setPublishedDate( whenGathered ); 58 entries.add( entry ); 59 60 entry = new RssFeedEntry( "Item 2" ); 61 entry.setDescription( "RSS 2.0 feed item 2." ); 62 entry.setPublishedDate( whenGathered ); 63 entries.add( entry ); 64 65 entry = new RssFeedEntry( "Item 3" ); 66 entry.setDescription( "RSS 2.0 feed item 3." ); 67 entry.setPublishedDate( whenGathered ); 68 entries.add( entry ); 69 70 SyndFeed feed = 71 generator.generateFeed( "Test Feed", "The test feed from Archiva.", entries ); 72 73 assertEquals( "Test Feed", feed.getTitle() ); 74 assertEquals( "The test feed from Archiva.", feed.getDescription() ); 75 assertEquals( "en-us", feed.getLanguage() ); 76 assertEquals( entries.get( 2 ).getPublishedDate(), feed.getPublishedDate() ); 77 78 List<SyndEntry> syndEntries = feed.getEntries(); 79 assertEquals( 3, syndEntries.size() ); 80 assertEquals( "Item 1", syndEntries.get( 0 ).getTitle() ); 81 assertEquals( "Item 2", syndEntries.get( 1 ).getTitle() ); 82 assertEquals( "Item 3", syndEntries.get( 2 ).getTitle() ); 83 } 84 85 public void testNoDataEntries() 86 throws Exception 87 { 88 List<RssFeedEntry> entries = new ArrayList<RssFeedEntry>(); 89 SyndFeed feed = 90 generator.generateFeed( "Test Feed", "The test feed from Archiva.", entries ); 91 92 assertNull( feed ); 93 } 94 95 /* 96 * this test might need to be removed since 97 * no updates are happening in the feeds anymore since everything's processed from the db. 98 * 99 public void testUpdateFeed() 100 throws Exception 101 { 102 generator.setRssDirectory( getBasedir() + "/target/test-classes/rss-feeds/" ); 103 104 List<RssFeedEntry> entries = new ArrayList<RssFeedEntry>(); 105 RssFeedEntry entry = new RssFeedEntry( "Item 1" ); 106 107 entry.setDescription( "RSS 2.0 feed item 1." ); 108 entries.add( entry ); 109 110 entry = new RssFeedEntry( "Item 2" ); 111 entry.setDescription( "RSS 2.0 feed item 2." ); 112 entries.add( entry ); 113 114 generator.generateFeed( "Test Feed", "The test feed from Archiva.", entries, 115 "generated-test-update-rss2.0-feed.xml" ); 116 117 File outputFile = new File( getBasedir(), "/target/test-classes/rss-feeds/generated-test-update-rss2.0-feed.xml" ); 118 String generatedContent = FileUtils.readFileToString( outputFile ); 119 120 XMLAssert.assertXpathEvaluatesTo( "Test Feed", "//channel/title", generatedContent ); 121 XMLAssert.assertXpathEvaluatesTo( "http://localhost:8080/archiva/rss/generated-test-update-rss2.0-feed.xml", "//channel/link", generatedContent ); 122 XMLAssert.assertXpathEvaluatesTo( "The test feed from Archiva.", "//channel/description", generatedContent ); 123 XMLAssert.assertXpathEvaluatesTo( "en-us", "//channel/language", generatedContent ); 124 125 String expectedItem1 = 126 "<channel><item><title>Item 1</title></item><item><title>Item 2</title></item></channel>"; 127 128 XMLAssert.assertXpathsEqual( "//channel/item/title", expectedItem1, "//channel/item/title", generatedContent ); 129 130 //update existing rss feed 131 entries = new ArrayList<RssFeedEntry>(); 132 entry = new RssFeedEntry( "Item 3" ); 133 134 entry.setDescription( "RSS 2.0 feed item 3." ); 135 entries.add( entry ); 136 137 entry = new RssFeedEntry( "Item 4" ); 138 entry.setDescription( "RSS 2.0 feed item 4." ); 139 entries.add( entry ); 140 141 generator.generateFeed( "Test Feed", "The test feed from Archiva.", entries, 142 "generated-test-update-rss2.0-feed.xml" ); 143 144 outputFile = new File( getBasedir(), "/target/test-classes/rss-feeds/generated-test-update-rss2.0-feed.xml" ); 145 generatedContent = FileUtils.readFileToString( outputFile ); 146 147 XMLAssert.assertXpathEvaluatesTo( "Test Feed", "//channel/title", generatedContent ); 148 XMLAssert.assertXpathEvaluatesTo( "http://localhost:8080/archiva/rss/generated-test-update-rss2.0-feed.xml", "//channel/link", generatedContent ); 149 XMLAssert.assertXpathEvaluatesTo( "The test feed from Archiva.", "//channel/description", generatedContent ); 150 XMLAssert.assertXpathEvaluatesTo( "en-us", "//channel/language", generatedContent ); 151 152 expectedItem1 = 153 "<channel><item><title>Item 1</title></item><item><title>Item 2</title></item>" 154 + "<item><title>Item 3</title></item><item><title>Item 4</title></item></channel>"; 155 XMLAssert.assertXpathsEqual( "//channel/item/title", expectedItem1, "//channel/item/title", generatedContent ); 156 157 outputFile.deleteOnExit(); 158 } 159 */ 160 161 }