package net.rrm.ehour.persistence.database;
import net.rrm.ehour.persistence.database.ConfigurationException;
import net.rrm.ehour.persistence.database.Database;
import net.rrm.ehour.persistence.database.DatabaseConfig;
import net.rrm.ehour.persistence.database.DatabaseConfigFactory;
import org.junit.Test;
import java.net.URISyntaxException;
import static org.junit.Assert.*;
public class DatabaseConfigFactoryTest {
@Test
public void should_extract_credentials_from_url() throws URISyntaxException {
DatabaseConfigFactory factory = new DatabaseConfigFactory();
DatabaseConfig config = factory.createDatabaseConfig("mysql",
null,
"mysql://user:pass@127.0.0.1:3306/ehour",
null, null);
assertEquals("user", config.username);
assertEquals("pass", config.password);
assertEquals("jdbc:mysql://127.0.0.1:3306/ehour", config.url);
}
@Test
public void should_append_query_parameters() throws URISyntaxException {
DatabaseConfigFactory factory = new DatabaseConfigFactory();
DatabaseConfig config = factory.createDatabaseConfig("mysql",
null,
"mysql://user:pass@127.0.0.1:3306/ehour?ssl=true",
null, null);
assertEquals("jdbc:mysql://127.0.0.1:3306/ehour?ssl=true", config.url);
}
@Test(expected = ConfigurationException.class)
public void should_fail_without_credentials() throws URISyntaxException {
DatabaseConfigFactory factory = new DatabaseConfigFactory();
factory.createDatabaseConfig("mysql",
null,
"mysql://27.0.0.1:3306/ehour",
null, null);
fail("Should have thrown ConfigurationException");
}
@Test
public void should_use_default_driver_when_none_supplied() throws URISyntaxException {
DatabaseConfigFactory factory = new DatabaseConfigFactory();
DatabaseConfig config = factory.createDatabaseConfig("mysql",
null,
"mysql://user:pass@127.0.0.1:3306/ehour?zeroDateTimeBehavior=convertToNull&useOldAliasMetadataBehavior=true",
null, null);
assertEquals(Database.MYSQL.defaultDriver, config.driver);
assertEquals("pass", config.password);
}
}