package org.mamute.infra.rss;

import static br.com.caelum.vraptor.environment.EnvironmentType.DEVELOPMENT;
import static org.junit.Assert.assertTrue;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Arrays;

import org.joda.time.DateTimeUtils;
import org.junit.Test;
import org.mamute.builder.QuestionBuilder;
import org.mamute.dao.TestCase;
import org.mamute.infra.rss.write.QuestionRssEntryFactory;
import org.mamute.infra.rss.write.RssFeedFactory;
import org.mamute.model.Question;
import org.mamute.model.User;
import org.mamute.model.interfaces.RssContent;

import br.com.caelum.vraptor.environment.DefaultEnvironment;
import br.com.caelum.vraptor.environment.EnvironmentType;

public class RssFeedFactoryTest extends TestCase {
	
	@Test
	public void should_generate_feed() throws IOException {
		DefaultEnvironment env = new DefaultEnvironment(new EnvironmentType("mamute"));
		QuestionRssEntryFactory factory = new QuestionRssEntryFactory(env);
		RssFeedFactory rssFeedFactory = new RssFeedFactory(env, factory);
		
		QuestionBuilder builder = new QuestionBuilder();
		
		DateTimeUtils.setCurrentMillisFixed(100);
		User user1 = user("author1", "author@email");
		user1.setPhotoUri(new URL("http://imagemsuser1.com"));
		Question question1 = builder.withAuthor(user1)
			.withTitle("first question")
			.withDescription("question")
			.withId(1l)
			.build();
		
		User user2 = user("author2", "author@email");
		user2.setPhotoUri(new URL("http://imagemsuser2.com"));
		Question question2 = builder.withId(2l)
			.withTitle("second question")
			.withAuthor(user2)
			.build();
		
		ByteArrayOutputStream output = new ByteArrayOutputStream();
		rssFeedFactory.build(Arrays.<RssContent>asList(question1, question2), output, "title", "description");
		output.close();
		String xml = new String(output.toByteArray());
		assertTrue(xml.contains("first question"));
		assertTrue(xml.contains("second question"));
		assertTrue(xml.contains("http://imagemsuser1.com"));
		assertTrue(xml.contains("http://imagemsuser2.com"));
		DateTimeUtils.setCurrentMillisSystem();
	}
}