package org.jooby;
import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertEquals;
import java.io.File;
import org.jooby.test.MockUnit;
import org.jooby.test.MockUnit.Block;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import com.typesafe.config.Config;
@RunWith(PowerMockRunner.class)
@PrepareForTest({Jooby.class, File.class })
public class LogbackConfTest {
@Test
public void withConfigFile() throws Exception {
new MockUnit(Config.class)
.expect(conflog(true))
.expect(unit -> {
Config config = unit.get(Config.class);
expect(config.getString("logback.configurationFile")).andReturn("logback.xml");
})
.run(unit -> {
assertEquals("logback.xml", Jooby.logback(unit.get(Config.class)));
});
}
@Test
public void rootFile() throws Exception {
new MockUnit(Config.class)
.expect(conflog(false))
.expect(env(null))
.expect(unit -> {
File dir = unit.constructor(File.class)
.args(String.class)
.build(System.getProperty("user.dir"));
File conf = unit.constructor(File.class)
.args(File.class, String.class)
.build(dir, "conf");
File rlogback = unit.constructor(File.class)
.args(File.class, String.class)
.build(dir, "logback.xml");
expect(rlogback.exists()).andReturn(false);
File clogback = unit.constructor(File.class)
.args(File.class, String.class)
.build(conf, "logback.xml");
expect(clogback.exists()).andReturn(false);
})
.run(unit -> {
assertEquals("logback.xml", Jooby.logback(unit.get(Config.class)));
});
}
@Test
public void rootFileFound() throws Exception {
new MockUnit(Config.class)
.expect(conflog(false))
.expect(env(null))
.expect(unit -> {
File dir = unit.constructor(File.class)
.args(String.class)
.build(System.getProperty("user.dir"));
File conf = unit.constructor(File.class)
.args(File.class, String.class)
.build(dir, "conf");
File rlogback = unit.constructor(File.class)
.args(File.class, String.class)
.build(dir, "logback.xml");
expect(rlogback.exists()).andReturn(true);
expect(rlogback.getAbsolutePath()).andReturn("foo/logback.xml");
unit.constructor(File.class)
.args(File.class, String.class)
.build(conf, "logback.xml");
})
.run(unit -> {
assertEquals("foo/logback.xml", Jooby.logback(unit.get(Config.class)));
});
}
@Test
public void confFile() throws Exception {
new MockUnit(Config.class)
.expect(conflog(false))
.expect(env("foo"))
.expect(unit -> {
File dir = unit.constructor(File.class)
.args(String.class)
.build(System.getProperty("user.dir"));
File conf = unit.constructor(File.class)
.args(File.class, String.class)
.build(dir, "conf");
File relogback = unit.constructor(File.class)
.args(File.class, String.class)
.build(dir, "logback.foo.xml");
expect(relogback.exists()).andReturn(false);
File rlogback = unit.constructor(File.class)
.args(File.class, String.class)
.build(dir, "logback.xml");
expect(rlogback.exists()).andReturn(false);
File clogback = unit.constructor(File.class)
.args(File.class, String.class)
.build(conf, "logback.xml");
expect(clogback.exists()).andReturn(false);
File celogback = unit.constructor(File.class)
.args(File.class, String.class)
.build(conf, "logback.foo.xml");
expect(celogback.exists()).andReturn(false);
})
.run(unit -> {
assertEquals("logback.xml", Jooby.logback(unit.get(Config.class)));
});
}
@Test
public void confFileFound() throws Exception {
new MockUnit(Config.class)
.expect(conflog(false))
.expect(env("foo"))
.expect(unit -> {
File dir = unit.constructor(File.class)
.args(String.class)
.build(System.getProperty("user.dir"));
File conf = unit.constructor(File.class)
.args(File.class, String.class)
.build(dir, "conf");
File relogback = unit.constructor(File.class)
.args(File.class, String.class)
.build(dir, "logback.foo.xml");
expect(relogback.exists()).andReturn(false);
unit.constructor(File.class)
.args(File.class, String.class)
.build(dir, "logback.xml");
File celogback = unit.constructor(File.class)
.args(File.class, String.class)
.build(conf, "logback.foo.xml");
expect(celogback.exists()).andReturn(true);
expect(celogback.getAbsolutePath()).andReturn("logback.foo.xml");
unit.constructor(File.class)
.args(File.class, String.class)
.build(conf, "logback.xml");
})
.run(unit -> {
assertEquals("logback.foo.xml", Jooby.logback(unit.get(Config.class)));
});
}
private Block env(final String env) {
return unit -> {
Config config = unit.get(Config.class);
expect(config.hasPath("application.env")).andReturn(env != null);
if (env != null) {
expect(config.getString("application.env")).andReturn(env);
}
};
}
private Block conflog(final boolean b) {
return unit -> {
Config config = unit.get(Config.class);
expect(config.hasPath("logback.configurationFile")).andReturn(b);
};
}
}