package nl.ipo.cds.etl.log;
import static org.junit.Assert.assertEquals;
import java.util.Properties;
import javax.inject.Inject;
import javax.inject.Named;
import nl.idgis.commons.jobexecutor.JobLogger.LogLevel;
import nl.ipo.cds.domain.EtlJob;
import nl.ipo.cds.domain.ImportJob;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
@ContextConfiguration(classes = { LogStringBuilderTest.Config.class })
public class LogStringBuilderTest extends AbstractJUnit4SpringContextTests {
@Configuration
public static class Config {
@Bean
@Inject
public LogStringBuilder<MessageKey> eventLogger (
final @Named ("listStringLogger") ListStringLogger listStringLogger,
final @Named ("testLogProperties") Properties logProperties) {
final LogStringBuilder<MessageKey> builder = new LogStringBuilder<MessageKey> ();
builder.setJobLogger (listStringLogger);
builder.setProperties (logProperties);
return builder;
}
@Bean
public ListStringLogger listStringLogger () {
return new ListStringLogger ();
}
@Configuration
public static class Messages {
@Bean
public PropertiesFactoryBean testLogProperties () {
final PropertiesFactoryBean properties = new PropertiesFactoryBean ();
properties.setLocation (new ClassPathResource ("nl/ipo/cds/etl/log/test.messages"));
return properties;
}
}
}
@Autowired
private LogStringBuilder<MessageKey> eventLogger;
@Autowired
private ListStringLogger listStringLogger;
private EtlJob job;
enum MessageKey {
MESSAGE0, MESSAGE1;
}
@Before
public void setUp() {
job = new ImportJob();
this.listStringLogger.reset();
}
@Test
public void testNoProperty() {
assertEquals(0, listStringLogger.getLog().size());
eventLogger.logEvent(job, MessageKey.MESSAGE0, LogLevel.ERROR);
assertEquals(1, listStringLogger.getLog().size());
assertEquals("MESSAGE0", listStringLogger.getLog().get(0));
eventLogger.logEvent(job, MessageKey.MESSAGE0, LogLevel.ERROR, "param0");
assertEquals(2, listStringLogger.getLog().size());
assertEquals("MESSAGE0: param0", listStringLogger.getLog().get(1));
eventLogger.logEvent(job, MessageKey.MESSAGE0, LogLevel.ERROR, "param0", "param1");
assertEquals(3, listStringLogger.getLog().size());
assertEquals("MESSAGE0: param0, param1", listStringLogger.getLog().get(2));
}
@Test
public void testProperty() {
eventLogger.logEvent(job, MessageKey.MESSAGE1, LogLevel.ERROR, "value0", "value1");
assertEquals(1, listStringLogger.getLog().size());
assertEquals("A nice text string for MESSAGE1, param1: value1, param0: value0, $", listStringLogger.getLog().get(0));
}
}