package com.softwaremill.common.cdi.interceptor;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.testng.Arquillian;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ArchivePaths;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.ByteArrayAsset;
import org.jboss.shrinkwrap.api.container.ResourceContainer;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.testng.annotations.Test;
import javax.inject.Inject;
import static org.assertj.core.api.Assertions.assertThat;
/**
* @author Pawel Wrzeszcz (pawel [at] softwaremill . com)
*/
public class NullToEmptyStringParamsTest extends Arquillian {
@Deployment
public static JavaArchive createTestArchive() {
JavaArchive ar = ShrinkWrap.create(JavaArchive.class, "test.jar")
.addClass(BeanToIntercept.class)
.addClass(NullToEmptyStringParams.class)
.addClass(NullToEmptyStringParamsInterceptor.class);
ar = addTestBeansXml(ar);
return ar;
}
@Inject
private BeanToIntercept bean;
@Test
public void shouldConvertMethodParamsToEmptyStrings() throws Exception {
// When
String[] result = bean.method(null, null);
// Then
assertThat(result).containsOnly("","");
}
@Test
public void shouldNotChangeNonNulls() throws Exception {
// When
String[] result = bean.method("not null", "me too");
// Then
assertThat(result).containsOnly("not null", "me too");
}
@Test
public void shouldNotChangeNonStrings() throws Exception {
// When
Object[] result = bean.method2(null, null);
// Then
assertThat(result).containsOnly(null,"");
}
private static <T extends Archive<T> & ResourceContainer<T>> T addTestBeansXml(T archive) {
StringBuilder beansXmlBuilder = new StringBuilder();
beansXmlBuilder.append("<beans>");
beansXmlBuilder.append("<interceptors>");
beansXmlBuilder.append("<class>com.softwaremill.common.cdi.interceptor.NullToEmptyStringParamsInterceptor</class>");
beansXmlBuilder.append("</interceptors>");
beansXmlBuilder.append("</beans>");
return archive.addAsResource(
new ByteArrayAsset(beansXmlBuilder.toString().getBytes()),
ArchivePaths.create("META-INF/beans.xml"));
}
}