package gov.samhsa.consent2share.service.report;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import gov.samhsa.consent2share.infrastructure.report.AbstractReportConfig;
import gov.samhsa.consent2share.infrastructure.report.ReportParameterConfigurerTask;
import gov.samhsa.consent2share.infrastructure.report.ReportProps;
import gov.samhsa.consent2share.service.report.exception.SqlScriptFileException;
import java.util.List;
import java.util.function.Supplier;
import javax.servlet.ServletContext;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.util.StringUtils;
@RunWith(MockitoJUnitRunner.class)
public class ClasspathSqlScriptProviderTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
@Mock
private TestReportConfig reportConfig;
private ClasspathSqlScriptProvider sut;
@Test
public void testGetSqlScript() {
// Arrange
final ReportProps reportProps = mock(ReportProps.class);
final String sqlScriptFileLocation = "report/sql/testReport.sql";
when(reportProps.getSqlScriptFileLocation()).thenReturn(
sqlScriptFileLocation);
when(reportConfig.getReportProps()).thenReturn(reportProps);
sut = new ClasspathSqlScriptProvider(reportConfig);
// Act
final String sqlScript = sut.getSqlScript();
// Assert
assertTrue(StringUtils.hasText(sqlScript));
}
@Test
public void testGetSqlScript_Throws_SqlScriptFileException() {
// Arrange
thrown.expect(SqlScriptFileException.class);
final ReportProps reportProps = mock(ReportProps.class);
final String sqlScriptFileLocation = "report/sql/invalidFile.sql";
when(reportProps.getSqlScriptFileLocation()).thenReturn(
sqlScriptFileLocation);
when(reportConfig.getReportProps()).thenReturn(reportProps);
sut = new ClasspathSqlScriptProvider(reportConfig);
// Act
final String sqlScript = sut.getSqlScript();
// Assert
assertTrue(StringUtils.hasText(sqlScript));
}
public class TestReportConfig extends AbstractReportConfig {
public TestReportConfig(
ServletContext servletContext,
List<Supplier<ReportParameterConfigurerTask>> reportParameterConfigurerChain) {
super(servletContext, reportParameterConfigurerChain);
}
@Override
public String getReportConfigName() {
return null;
}
@Override
public String getReportDataProviderName() {
return null;
}
@Override
public String getReportName() {
return null;
}
}
}