package nl.ipo.cds.etl.reporting.velocity; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import java.io.StringWriter; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import nl.idgis.commons.jobexecutor.Job; import nl.ipo.cds.domain.EtlJob; import nl.ipo.cds.domain.JobLog; import nl.ipo.cds.domain.ValidateJob; import nl.ipo.cds.etl.reporting.DefaultLogWriterContext; import nl.ipo.cds.etl.reporting.WriterException; import org.apache.velocity.VelocityContext; import org.apache.velocity.context.Context; import org.junit.Before; import org.junit.Test; public class VelocityJobFaseLogWriterTest { private static String[] messages = { "Message 1", "Message 2", "Message 3", "Message 4" }; private VelocityJobFaseLogWriter writer; private EtlJob job; @SuppressWarnings("unused") private EtlJob etlJob; private List<JobLog> jobFaseLogs; @Before public void setupLogWriter () { // Create a job: job = new ValidateJob (); job.setCreateTime (new Timestamp (System.currentTimeMillis ())); job.setStatus (Job.Status.FINISHED); jobFaseLogs = new ArrayList<JobLog> (); for (String message: messages) { JobLog log = new JobLog (); log.setJob (job); log.setMessage (message); log.setTime (new Timestamp (System.currentTimeMillis ())); jobFaseLogs.add (log); } // Create a writer: writer = new VelocityJobFaseLogWriter (); writer.setTemplatePath ("nl/ipo/cds/etl/reporting/templates"); writer.setDefaultContext ("text"); } public @Test void testPrintTemplate () throws Exception { final Context context = new VelocityContext (); final StringWriter stringWriter = new StringWriter (); writer.getVelocityEngine ().mergeTemplate ("nl/ipo/cds/etl/reporting/templates/test.text.vm", "UTF-8", context, stringWriter); assertEquals ("Hello, world!", stringWriter.toString ()); } public @Test void testFaseMessagesOutput () throws Exception { String result = writer.write (new DefaultLogWriterContext (jobFaseLogs), "testFaseMessages"); ArrayList<String> expectedResult = new ArrayList<String> (); for (String message: messages) { expectedResult.add (String.format ("%s;%s\r", job, message)); } String[] lines = result.split ("\n"); assertArrayEquals (expectedResult.toArray (), lines); } public @Test void testParameterOutput () throws Exception { DefaultLogWriterContext context = new DefaultLogWriterContext (jobFaseLogs); context.set ("title", "Hello, world!"); assertEquals ("Hello, world!", writer.write (context, "testTitle")); } public @Test void testHtmlOutput () throws Exception { DefaultLogWriterContext context = new DefaultLogWriterContext (jobFaseLogs); context.set ("title", "Hello, world!"); assertEquals ("<title>Hello, world!</title>", writer.write (context, "testTitle", "html")); } public @Test(expected=WriterException.class) void testTemplateParseError () throws Exception { DefaultLogWriterContext context = new DefaultLogWriterContext (jobFaseLogs); context.set ("title", "Hello, world!"); assertEquals ("<title>Hello, world!</title>", writer.write (context, "testParseError")); } public @Test void testWriterOutput () throws Exception { final DefaultLogWriterContext context = new DefaultLogWriterContext (jobFaseLogs); final StringWriter stringWriter = new StringWriter (); context.set ("title", "Hello, world!"); writer.write (context, "testTitle", stringWriter); assertEquals ("Hello, world!", stringWriter.toString ()); } }