/*
* Copyright 2017 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kie.server.services.impl.marshal;
import static org.junit.Assert.*;
import java.util.HashSet;
import java.util.Set;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.junit.Test;
import org.kie.server.api.marshalling.MarshallingFormat;
import org.kie.server.api.model.definition.QueryFilterSpec;
import org.kie.server.api.util.QueryFilterSpecBuilder;
import org.kie.server.services.api.KieServerRegistry;
import org.mockito.Mockito;
import org.mockito.internal.matchers.apachecommons.ReflectionEquals;
import org.skyscreamer.jsonassert.JSONAssert;
import org.xmlunit.matchers.CompareMatcher;
public class MarshallerHelperTest {
@Test
public void testMarshallWithoutContainer() {
KieServerRegistry kieServerRegistryMock = Mockito.mock(KieServerRegistry.class);
MarshallerHelper helper = new MarshallerHelper(kieServerRegistryMock);
QueryFilterSpec queryFilterSpec = new QueryFilterSpecBuilder().get();
String marshalledQFS = helper.marshal(MarshallingFormat.JAXB.toString(), queryFilterSpec);
String expectedMarshalledQFS = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + "<query-filter-spec>"
+ "<order-asc>false</order-asc>" + "</query-filter-spec>";
assertThat(marshalledQFS, CompareMatcher.isIdenticalTo(expectedMarshalledQFS).ignoreWhitespace());
}
@Test
public void testMarshallWithoutContainerWithExtraClasses() {
KieServerRegistry kieServerRegistryMock = Mockito.mock(KieServerRegistry.class);
Set<Class<?>> extraClasses = new HashSet<>();
extraClasses.add(TestExtraClass.class);
Mockito.when(kieServerRegistryMock.getExtraClasses()).thenReturn(extraClasses);
MarshallerHelper helper = new MarshallerHelper(kieServerRegistryMock);
TestExtraClass extraClass = new TestExtraClass();
extraClass.setBla("hallo");
String marshalledQFS = helper.marshal(MarshallingFormat.JAXB.toString(), extraClass);
String expectedMarshalledTEC = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + "<test-extra-class>"
+ "<bla>hallo</bla>" + "</test-extra-class>";
assertThat(marshalledQFS, CompareMatcher.isIdenticalTo(expectedMarshalledTEC).ignoreWhitespace());
}
@Test
public void testJsonMarshallWithoutWithEmptyRegistry() throws Exception {
KieServerRegistry kieServerRegistryMock = Mockito.mock(KieServerRegistry.class);
Mockito.when(kieServerRegistryMock.getExtraClasses()).thenReturn(new HashSet<Class<?>>());
MarshallerHelper helper = new MarshallerHelper(kieServerRegistryMock);
QueryFilterSpec queryFilterSpec = new QueryFilterSpecBuilder().get();
String marshalledQFS = helper.marshal(MarshallingFormat.JSON.toString(), queryFilterSpec);
System.out.println(marshalledQFS);
String expectedMarshalledTEC = "{\"order-by\" : null, \"order-asc\" : false, \"query-params\" : null, \"result-column-mapping\" : null}";
//assertThat(marshalledQFS, equalToIgnoringWhiteSpace(expectedMarshalledTEC));
JSONAssert.assertEquals(expectedMarshalledTEC, marshalledQFS, false);
}
@Test
public void testJsonMarshallWithNullRegistry() throws Exception {
MarshallerHelper helper = new MarshallerHelper(null);
QueryFilterSpec queryFilterSpec = new QueryFilterSpecBuilder().get();
String marshalledQFS = helper.marshal(MarshallingFormat.JSON.toString(), queryFilterSpec);
System.out.println(marshalledQFS);
String expectedMarshalledTEC = "{\"order-by\" : null, \"order-asc\" : false, \"query-params\" : null, \"result-column-mapping\" : null}";
//assertThat(marshalledQFS, equalToIgnoringWhiteSpace(expectedMarshalledTEC));
JSONAssert.assertEquals(expectedMarshalledTEC, marshalledQFS, false);
}
/**
* Tests that MarshallerHelper can also be used when passing in a <code>null</code> KieServerRegistry.
*/
@Test
public void testMarshallWithNullRegistry() {
MarshallerHelper helper = new MarshallerHelper(null);
QueryFilterSpec queryFilterSpec = new QueryFilterSpecBuilder().get();
String marshalledQFS = helper.marshal(MarshallingFormat.JAXB.toString(), queryFilterSpec);
String expectedMarshalledQFS = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + "<query-filter-spec>"
+ "<order-asc>false</order-asc>" + "</query-filter-spec>";
assertThat(marshalledQFS, CompareMatcher.isIdenticalTo(expectedMarshalledQFS).ignoreWhitespace());
}
@Test
public void testUnmarshallWithoutContainer() {
KieServerRegistry kieServerRegistryMock = Mockito.mock(KieServerRegistry.class);
MarshallerHelper helper = new MarshallerHelper(kieServerRegistryMock);
QueryFilterSpec expectedQueryFilterSpec = new QueryFilterSpecBuilder().get();
String marshalledQFS = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + "<query-filter-spec>"
+ "<order-asc>false</order-asc>" + "</query-filter-spec>";
QueryFilterSpec unmarshalledQFS = helper.unmarshal(marshalledQFS, MarshallingFormat.JAXB.toString(), QueryFilterSpec.class);
// QueryFilterSpec does not implement equals method, so using Mockito ReflectionEquals.
assertThat(expectedQueryFilterSpec, new ReflectionEquals(unmarshalledQFS));
}
@Test
public void testUnmarshallWithoutContainerWithExtraClasses() {
KieServerRegistry kieServerRegistryMock = Mockito.mock(KieServerRegistry.class);
Set<Class<?>> extraClasses = new HashSet<>();
extraClasses.add(TestExtraClass.class);
Mockito.when(kieServerRegistryMock.getExtraClasses()).thenReturn(extraClasses);
MarshallerHelper helper = new MarshallerHelper(kieServerRegistryMock);
TestExtraClass expectedExtraClass = new TestExtraClass();
expectedExtraClass.setBla("hallo");
String marshalledTEC = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + "<test-extra-class>" + "<bla>hallo</bla>"
+ "</test-extra-class>";
TestExtraClass unmarshalledTEC = helper.unmarshal(marshalledTEC, MarshallingFormat.JAXB.toString(), TestExtraClass.class);
assertEquals(expectedExtraClass, unmarshalledTEC);
}
/**
* Tests that MarshallerHelper can also be used when passing in a <code>null</code> KieServerRegistry.
*/
@Test
public void testUnmarshallWithoutNullRegistry() {
MarshallerHelper helper = new MarshallerHelper(null);
QueryFilterSpec expectedQueryFilterSpec = new QueryFilterSpecBuilder().get();
String marshalledQFS = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + "<query-filter-spec>"
+ "<order-asc>false</order-asc>" + "</query-filter-spec>";
QueryFilterSpec unmarshalledQFS = helper.unmarshal(marshalledQFS, MarshallingFormat.JAXB.toString(), QueryFilterSpec.class);
// QueryFilterSpec does not implement equals method, so using Mockito ReflectionEquals.
assertThat(expectedQueryFilterSpec, new ReflectionEquals(unmarshalledQFS));
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "test-extra-class")
public static class TestExtraClass {
@XmlElement(name = "bla")
private String bla;
public String getBla() {
return bla;
}
public void setBla(String bla) {
this.bla = bla;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj.getClass() != getClass()) {
return false;
}
TestExtraClass rhs = (TestExtraClass) obj;
return new EqualsBuilder().append(bla, rhs.bla).isEquals();
}
}
}