Package org.apache.wink.common.model.wadl

Source Code of org.apache.wink.common.model.wadl.WADLGeneratorTest$NotAResourceWithPath

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*   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.apache.wink.common.model.wadl;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.HttpMethod;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

import org.apache.wink.common.internal.registry.metadata.ClassMetadata;
import org.apache.wink.common.internal.registry.metadata.MethodMetadata;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.junit.Assert;
import org.junit.Test;

public class WADLGeneratorTest {

    @Test
    public void testInit() throws Exception {
        new WADLGenerator();
    }

    private void marshalIt(Application app) throws JAXBException {
        Marshaller marshaller = JAXBContext.newInstance(ObjectFactory.class).createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        marshaller.marshal(app, System.out);
    }

    @Test
    public void testGenerateEmptyApp() throws Exception {
        WADLGenerator generator = new WADLGenerator();
        Application app = generator.generate(null, null);
        Assert.assertNotNull(app);

        Assert.assertEquals(0, app.getAny().size());
        Assert.assertEquals(0, app.getDoc().size());
        Assert.assertEquals(0, app.getResources().size());
        Assert.assertEquals(0, app.getResourceTypeOrMethodOrRepresentation().size());
        Assert.assertNull(app.getGrammars());
    }

    @Path("resource1/{pp}")
    @Consumes(value = {MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN})
    @WADLDoc(value = "this is resource1 title", content = "this is resource1 content")
    static class Resource1 {

        @GET
        @WADLDoc("this is the hello method with only default title value and no content")
        public String hello(@WADLDoc("request doc") String abcd,
                            @WADLDoc("q2 parameter doc") @QueryParam("q2") String q,
                            @QueryParam("q3") int q2,
                            @HeaderParam("h1234") String h1,
                            @PathParam("pp") String somePath) {
            return null;
        }

    }

    @Path("resource2")
    static class Resource2 {
        @GET
        public String world() {
            return null;
        }

        @POST
        public String post() {
            return null;
        }
    }

    @Path("resourcePath")
    static class ResourceNoMethods {
    }

    static class NotAResourceWithPath {
        @GET
        public String world() {
            return null;
        }
    }

    static class BasicResourceWithVoidReturn {

        @GET
        public void basicReturn() {

        }
    }

    @Path("some/path/{id}")
    static interface MyInterface {

        @GET
        public void somePath(@PathParam("id") String someId);
    }

    @Test
    public void testBuildClassMetadataResource1() {
        WADLGenerator generator = new WADLGenerator();
        Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(Resource1.class);
        Set<ClassMetadata> metadataSet = generator.buildClassMetdata(classes);
        Assert.assertEquals(1, metadataSet.size());

        ClassMetadata metadata = metadataSet.iterator().next();
        assertEquals(Resource1.class.getAnnotation(Path.class).value(), metadata.getPath());

        List<MethodMetadata> methodMetadata = metadata.getResourceMethods();
        assertEquals(1, methodMetadata.size());
        assertEquals(HttpMethod.GET, methodMetadata.get(0).getHttpMethod());
    }

    @Test
    public void testBuildClassMetadataResource2() {
        WADLGenerator generator = new WADLGenerator();
        Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(Resource2.class);
        Set<ClassMetadata> metadataSet = generator.buildClassMetdata(classes);
        Assert.assertEquals(1, metadataSet.size());

        ClassMetadata metadata = metadataSet.iterator().next();
        assertEquals(Resource2.class.getAnnotation(Path.class).value(), metadata.getPath());

        List<MethodMetadata> methodMetadata = metadata.getResourceMethods();
        assertEquals(2, methodMetadata.size());
        assertEquals(HttpMethod.GET, methodMetadata.get(0).getHttpMethod());
        assertEquals(HttpMethod.POST, methodMetadata.get(1).getHttpMethod());
    }

    @Test
    public void testBuildClassMetadata2Resources() {
        WADLGenerator generator = new WADLGenerator();
        Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(Resource1.class);
        classes.add(Resource2.class);
        Set<ClassMetadata> metadataSet = generator.buildClassMetdata(classes);
        Assert.assertEquals(2, metadataSet.size());
    }

    @Test
    public void testBuildClassMetadataNoResources() {
        WADLGenerator generator = new WADLGenerator();
        Set<Class<?>> classes = new HashSet<Class<?>>();
        Set<ClassMetadata> metadataSet = generator.buildClassMetdata(classes);
        Assert.assertEquals(0, metadataSet.size());

        classes.add(NotAResourceWithPath.class);
        metadataSet = generator.buildClassMetdata(classes);
        Assert.assertEquals(0, metadataSet.size());
    }

    @Test
    public void testBuildResourceWithNoMethodsWithMock() throws Exception {
        WADLGenerator generator = new WADLGenerator();
        Mockery mockContext = new Mockery() {
            {
                setImposteriser(ClassImposteriser.INSTANCE);
            }
        };

        final ClassMetadata metadata = mockContext.mock(ClassMetadata.class);

        mockContext.checking(new Expectations() {
            {
                oneOf(metadata).getResourceClass();
                will(returnValue(null));

                oneOf(metadata).getPath();
                will(returnValue("myPath"));

                oneOf(metadata).getResourceMethods();
                will(returnValue(null));

                oneOf(metadata).getInjectableFields();
                will(returnValue(null));

                oneOf(metadata).getSubResourceMethods();
                will(returnValue(null));

                oneOf(metadata).getSubResourceLocators();
                will(returnValue(null));
            }
        });

        Resource actualRes = generator.buildResource(metadata);
        assertNull(actualRes.getId());
        assertEquals(MediaType.APPLICATION_FORM_URLENCODED, actualRes.getQueryType());
        assertEquals(0, actualRes.getType().size());
        assertEquals(0, actualRes.getDoc().size());
        assertEquals("myPath", actualRes.getPath());
        assertEquals(0, actualRes.getParam().size());
        assertEquals(0, actualRes.getMethodOrResource().size());

        mockContext.assertIsSatisfied();
    }

    @Test
    public void testBuildResourceWithMock() throws Exception {
        WADLGenerator generator = new WADLGenerator();
        Mockery mockContext = new Mockery() {
            {
                setImposteriser(ClassImposteriser.INSTANCE);
            }
        };

        final ClassMetadata metadata = mockContext.mock(ClassMetadata.class);
        final MethodMetadata methodMeta = mockContext.mock(MethodMetadata.class);
        final java.lang.reflect.Method method =
            BasicResourceWithVoidReturn.class.getMethod("basicReturn");

        mockContext.checking(new Expectations() {
            {
                oneOf(metadata).getResourceClass();
                will(returnValue(BasicResourceWithVoidReturn.class));

                oneOf(metadata).getPath();
                will(returnValue("myResourcePath"));

                oneOf(metadata).getResourceMethods();
                will(returnValue(Collections.singletonList(methodMeta)));

                oneOf(methodMeta).getHttpMethod();
                will(returnValue(HttpMethod.GET));

                oneOf(methodMeta).getFormalParameters();
                will(returnValue(Collections.emptyList()));

                oneOf(methodMeta).getProduces();
                will(returnValue(Collections.emptySet()));

                exactly(2).of(methodMeta).getReflectionMethod();
                will(returnValue(method));

                oneOf(methodMeta).getFormalParameters();
                will(returnValue(null));

                oneOf(metadata).getInjectableFields();
                will(returnValue(null));

                oneOf(metadata).getSubResourceMethods();
                will(returnValue(null));

                oneOf(metadata).getSubResourceLocators();
                will(returnValue(null));
            }
        });

        Resource actualRes = generator.buildResource(metadata);
        assertNull(actualRes.getId());
        assertEquals(MediaType.APPLICATION_FORM_URLENCODED, actualRes.getQueryType());
        assertEquals(0, actualRes.getType().size());
        assertEquals(0, actualRes.getDoc().size());
        assertEquals("myResourcePath", actualRes.getPath());
        assertEquals(0, actualRes.getParam().size());

        /* method */
        assertEquals(1, actualRes.getMethodOrResource().size());
        Method m = ((Method)actualRes.getMethodOrResource().get(0));
        assertEquals(HttpMethod.GET, m.getName());
        assertNull(m.getId());
        assertEquals(0, m.getDoc().size());
        assertNull(m.getHref());
        assertNull(m.getRequest());
        assertEquals(1, m.getResponse().size());
        List<Response> resps = m.getResponse();
        assertEquals(Collections.singletonList(Long.valueOf(204)), resps.get(0).getStatus());
        assertEquals(0, resps.get(0).getAny().size());
        assertEquals(0, resps.get(0).getDoc().size());
        assertEquals(0, resps.get(0).getOtherAttributes().size());
        assertEquals(0, resps.get(0).getParam().size());

        mockContext.assertIsSatisfied();
    }

    @Test
    public void testBuildBasicMethodMetadataWithMock() throws Exception {
        WADLGenerator generator = new WADLGenerator();
        Mockery mockContext = new Mockery() {
            {
                setImposteriser(ClassImposteriser.INSTANCE);
            }
        };
        final MethodMetadata metadata = mockContext.mock(MethodMetadata.class);
        final ClassMetadata classMeta = mockContext.mock(ClassMetadata.class);
        final java.lang.reflect.Method method =
            BasicResourceWithVoidReturn.class.getMethod("basicReturn");

        mockContext.checking(new Expectations() {
            {
                oneOf(metadata).getHttpMethod();
                will(returnValue("myHttpMethod"));

                oneOf(metadata).getFormalParameters();
                will(returnValue(null));

                oneOf(metadata).getProduces();
                will(returnValue(Collections.emptySet()));

                exactly(2).of(metadata).getReflectionMethod();
                will(returnValue(method));
            }
        });

        Method m = generator.buildMethod(classMeta, metadata);
        assertEquals("myHttpMethod", m.getName());
        assertEquals(0, m.getDoc().size());
        assertEquals(0, m.getAny().size());
        assertNull(m.getHref());
        assertNull(m.getId());
        assertNull(m.getRequest());
        assertEquals(1, m.getResponse().size());
        List<Response> resps = m.getResponse();
        assertEquals(Collections.singletonList(Long.valueOf(204)), resps.get(0).getStatus());
        assertEquals(0, resps.get(0).getAny().size());
        assertEquals(0, resps.get(0).getDoc().size());
        assertEquals(0, resps.get(0).getOtherAttributes().size());
        assertEquals(0, resps.get(0).getParam().size());

        mockContext.assertIsSatisfied();
    }

    @Test
    public void testBuildBasicRequestWithMock() {
        WADLGenerator generator = new WADLGenerator();
        Mockery mockContext = new Mockery() {
            {
                setImposteriser(ClassImposteriser.INSTANCE);
            }
        };
        final MethodMetadata metadata = mockContext.mock(MethodMetadata.class);
        final ClassMetadata classMeta = mockContext.mock(ClassMetadata.class);

        mockContext.checking(new Expectations() {
            {
                oneOf(metadata).getFormalParameters();
                will(returnValue(null));
            }
        });

        Request r = generator.buildRequest(classMeta, metadata);
        /*
         * should be null otherwise a no-value request element might be added
         */
        assertNull(r);
        mockContext.assertIsSatisfied();
    }

    @Test
    public void testGenerate1Resource() throws Exception {
        WADLGenerator generator = new WADLGenerator();
        Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(Resource1.class);
        classes.add(Resource2.class);
        classes.add(MyInterface.class);
        Application app = generator.generate("", classes);
        Assert.assertNotNull(app);
        marshalIt(app);
    }

    @Test
    public void testWADLDocResource1() throws Exception {
        WADLGenerator generator = new WADLGenerator();
        Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(Resource1.class);
        Application app = generator.generate("", classes);
        Resource res = app.getResources().get(0).getResource().get(0);
        assertEquals(1, res.getDoc().size());
        assertEquals("this is resource1 title", res.getDoc().get(0).getTitle());
        assertEquals(res.getDoc().get(0).getContent().size(), 1);
        assertEquals("this is resource1 content", res.getDoc().get(0).getContent().get(0));
        Method m = (Method)res.getMethodOrResource().get(0);
        assertEquals(1, m.getDoc().size());
        assertEquals("this is the hello method with only default title value and no content", m.getDoc().get(0)
                .getTitle());
        assertEquals(0, m.getDoc().get(0).getContent().size());

        assertEquals(1, m.getRequest().getDoc().size());
        assertEquals("request doc", m.getRequest().getDoc().get(0).getTitle());

        boolean isFound = false;
        List<Param> params = m.getRequest().getParam();
        for (Param p : params) {
            if (p.getName().equals("q2")) {
                isFound = true;
                assertEquals(1, p.getDoc().size());
                assertEquals("q2 parameter doc", p.getDoc().get(0).getTitle());
            } else {
                assertEquals(0, p.getDoc().size());
            }
        }
        assertTrue(isFound);
    }
}
TOP

Related Classes of org.apache.wink.common.model.wadl.WADLGeneratorTest$NotAResourceWithPath

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.