package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.resources.support;
import com.jaspersoft.jasperserver.dto.resources.ClientMondrianConnection;
import com.jaspersoft.jasperserver.dto.resources.ClientReportUnit;
import com.jaspersoft.jasperserver.dto.resources.ClientSecureMondrianConnection;
import com.jaspersoft.jasperserver.dto.resources.ClientSemanticLayerDataSource;
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.resources.support.builder.DomainResourceBuilder;
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.resources.support.builder.MondrianConnectionResourceBuilder;
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.resources.support.builder.ReportUnitResourceBuilder;
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.resources.support.builder.SecureMondrianConnectionResourceBuilder;
import com.jaspersoft.jasperserver.jaxrs.client.core.SessionStorage;
import org.mockito.Mock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.testng.PowerMockTestCase;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
import static org.mockito.MockitoAnnotations.initMocks;
import static org.powermock.api.mockito.PowerMockito.verifyNew;
import static org.powermock.api.mockito.PowerMockito.whenNew;
import static org.testng.Assert.assertSame;
@PrepareForTest({ResourceBuilderFactory.class})
public class ResourceBuilderFactoryTest extends PowerMockTestCase {
@Mock
private SessionStorage sessionStorageMock;
@Mock
private DomainResourceBuilder domainBuilderMock;
@Mock
private MondrianConnectionResourceBuilder mondrianConnectionBuilderMock;
@Mock
private SecureMondrianConnectionResourceBuilder secureMondrianConnectionBuilderMock;
@Mock
private ReportUnitResourceBuilder reportUnitBuilderMock;
@BeforeMethod
public void before() {
initMocks(this);
}
@Test
public void should_invoke_proper_constructor_and_return_DomainResourceBuilder_instance() throws Exception {
/* Given */
ClientSemanticLayerDataSource dataSource = new ClientSemanticLayerDataSource();
whenNew(DomainResourceBuilder.class)
.withParameterTypes(ClientSemanticLayerDataSource.class, SessionStorage.class)
.withArguments(dataSource, sessionStorageMock).thenReturn(domainBuilderMock);
/* When */
DomainResourceBuilder retrieved = ResourceBuilderFactory.getBuilder(dataSource, sessionStorageMock);
/* Then */
assertSame(retrieved, domainBuilderMock);
verifyNew(DomainResourceBuilder.class, times(1))
.withArguments(dataSource, sessionStorageMock);
}
@Test
public void should_invoke_proper_constructor_and_return_ReportUnitResourceBuilder_instance() throws Exception {
/* Given */
ClientReportUnit reportUnit = new ClientReportUnit();
whenNew(ReportUnitResourceBuilder.class)
.withParameterTypes(ClientReportUnit.class, SessionStorage.class)
.withArguments(reportUnit, sessionStorageMock).thenReturn(reportUnitBuilderMock);
/* When */
ReportUnitResourceBuilder retrieved = ResourceBuilderFactory.getBuilder(reportUnit, sessionStorageMock);
/* Then */
assertSame(retrieved, reportUnitBuilderMock);
verifyNew(ReportUnitResourceBuilder.class, times(1))
.withArguments(reportUnit, sessionStorageMock);
}
@Test
public void should_invoke_proper_constructor_and_return_SecureMondrianConnectionResourceBuilder_instance() throws Exception {
/* Given */
ClientSecureMondrianConnection connection = new ClientSecureMondrianConnection();
whenNew(SecureMondrianConnectionResourceBuilder.class)
.withParameterTypes(ClientSecureMondrianConnection.class, SessionStorage.class)
.withArguments(connection, sessionStorageMock).thenReturn(secureMondrianConnectionBuilderMock);
/* When */
SecureMondrianConnectionResourceBuilder retrieved = ResourceBuilderFactory.getBuilder(connection, sessionStorageMock);
/* Then */
assertSame(retrieved, secureMondrianConnectionBuilderMock);
verifyNew(SecureMondrianConnectionResourceBuilder.class, times(1))
.withArguments(connection, sessionStorageMock);
}
@Test
public void should_invoke_proper_constructor_and_return_MondrianConnectionResourceBuilder_instance() throws Exception {
/* Given */
ClientMondrianConnection mondrianConnection = new ClientMondrianConnection();
whenNew(MondrianConnectionResourceBuilder.class)
.withParameterTypes(ClientMondrianConnection.class, SessionStorage.class)
.withArguments(mondrianConnection, sessionStorageMock).thenReturn(mondrianConnectionBuilderMock);
/* When */
MondrianConnectionResourceBuilder retrieved = ResourceBuilderFactory.getBuilder(mondrianConnection, sessionStorageMock);
/* Then */
assertSame(retrieved, mondrianConnectionBuilderMock);
verifyNew(MondrianConnectionResourceBuilder.class, times(1))
.withArguments(mondrianConnection, sessionStorageMock);
}
@AfterMethod
public void after() {
reset(sessionStorageMock, domainBuilderMock, mondrianConnectionBuilderMock,
secureMondrianConnectionBuilderMock, reportUnitBuilderMock);
}
}