package org.jentrata.validation.extension; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.any; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import hk.hku.cecid.piazza.commons.spa.Extension; import hk.hku.cecid.piazza.commons.spa.Plugin; import hk.hku.cecid.piazza.commons.spa.PluginException; import java.util.Properties; import javax.xml.soap.AttachmentPart; import org.jentrata.validation.ValidationException; import org.jentrata.validation.Validator; import org.jentrata.validation.ValidatorComponent; import org.junit.Before; import org.junit.Test; public class PayloadValidationExtensionPointHanderTest { protected PayloadValidationExtensionPointHander ep; protected ValidatorComponent mockValidatorComponent; @Before public void setup() { ep = spy(new PayloadValidationExtensionPointHander()); mockValidatorComponent = mock(ValidatorComponent.class); doReturn(mockValidatorComponent).when(ep).getComponent(); } @Test public void testRegisterExtensionPointDefault() throws Exception { Properties config = new Properties(); config.setProperty("class", "org.jentrata.validation.extension.PayloadValidationExtensionPointHanderTest.MockValidator"); config.setProperty("cpaId", "test"); assertRegisterExtensionPoint(config); verify(mockValidatorComponent).registerDefault(eq("test"), eq(MockValidator.class),isA(Properties.class)); } @Test public void testRegisterExtensionPointWithContentType() throws Exception { Properties config = new Properties(); config.setProperty("class", "org.jentrata.validation.extension.PayloadValidationExtensionPointHanderTest.MockValidator"); config.setProperty("cpaId", "test"); config.setProperty("contentType", "text/plain"); assertRegisterExtensionPoint(config); verify(mockValidatorComponent).register(eq("test"), eq("text/plain"), eq(MockValidator.class),isA(Properties.class)); } @Test(expected=PluginException.class) public void testRegisterExtensionPointMissingCpaId() throws Exception { Properties config = new Properties(); config.setProperty("class", "org.jentrata.validation.extension.PayloadValidationExtensionPointHanderTest.MockValidator"); config.setProperty("contentType", "text/plain"); assertRegisterExtensionPoint(config); } @Test(expected=PluginException.class) public void testRegisterExtensionPointMissingClass() throws Exception { Properties config = new Properties(); config.setProperty("cpaId", "test"); config.setProperty("contentType", "text/plain"); assertRegisterExtensionPoint(config); } protected void assertRegisterExtensionPoint(Properties config) throws Exception { Extension ext = spy(new Extension(null, "org.jentrata.validator", "test", config)); doReturn(mockPlugin()).when(ext).getPlugin(); ep.processExtension(ext); } protected Plugin mockPlugin() throws Exception { Plugin mockPlugin = mock(Plugin.class); doReturn(MockValidator.class).when(mockPlugin).loadClass("org.jentrata.validation.extension.PayloadValidationExtensionPointHanderTest.MockValidator"); return mockPlugin; } public static class MockValidator implements Validator { public void init(Properties config) { } public void validate(AttachmentPart payload) throws ValidationException { } } }