Package org.apache.wink.server.categories

Source Code of org.apache.wink.server.categories.CollectionCategoriesTest

/*******************************************************************************
* 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.server.categories;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MultivaluedMap;

import org.apache.wink.common.annotations.Workspace;
import org.apache.wink.common.categories.Categories;
import org.apache.wink.common.categories.CollectionCategories;
import org.apache.wink.common.internal.MultivaluedMapImpl;
import org.apache.wink.common.internal.utils.MediaTypeUtils;
import org.apache.wink.common.model.atom.AtomCategory;
import org.apache.wink.server.internal.servlet.MockServletInvocationTest;
import org.apache.wink.test.diff.DiffIgnoreUpdateWithAttributeQualifier;
import org.apache.wink.test.mock.MockRequestConstructor;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;

public class CollectionCategoriesTest extends MockServletInvocationTest {

    private String ATOM_CATEGORIES_DUCUMENT = "collection_categories_document.xml";

    @Override
    protected Class<?>[] getClasses() {
        return new Class[] {CategoriesDocResource.class, CategoriesResource.class};
    }

    @Path("/cat")
    @Workspace(workspaceTitle = "Workspace", collectionTitle = "Title")
    public static class CategoriesDocResource implements CollectionCategories {

        public List<Categories> getCategories() {

            List<Categories> catsList = new ArrayList<Categories>();
            CategoriesResource categoriesResource = new CategoriesResource();

            // Defect severity categories are defined in stand-alone Categories
            // Document
            // created by CategoriesResource
            Categories severityCategories = new Categories();
            MultivaluedMap<String, String> variables = new MultivaluedMapImpl<String, String>();
            variables.add(CategoriesResource.CategoryParamCN, CategoriesResource.SeverityCN);
            severityCategories.setHref(categoriesResource, variables);
            catsList.add(severityCategories);

            Categories severityCategoriesClass = new Categories();
            MultivaluedMap<String, String> variables4Class =
                new MultivaluedMapImpl<String, String>();
            variables4Class.add(CategoriesResource.CategoryParamCN, CategoriesResource.SeverityCN);
            severityCategoriesClass.setHref(CategoriesResource.class, variables4Class);
            catsList.add(severityCategoriesClass);

            // Build defect status categories object for ServiceDocument
            Categories statusCategories = CategoriesResource.buildStatusCategoriesDocument();
            statusCategories.setFixed(true);

            if (!statusCategories.contains("Deffered", "urn:com:hp:qadefects:categories:status")) {
                statusCategories.addCategory("urn:com:hp:qadefects:categories:status",
                                             "Deffered",
                                             "Deffered");
            }
            if (!statusCategories.contains("Approved")) {
                statusCategories.addCategory("Approved");
            }

            catsList.add(statusCategories);

            return catsList;

        }
    }

    public void testAtomCategoriesSerialization() throws Exception {

        MockHttpServletRequest mockRequest =
            MockRequestConstructor.constructMockRequest("GET",
                                                        "/",
                                                        MediaTypeUtils.ATOM_SERVICE_DOCUMENT);

        MockHttpServletResponse response = invoke(mockRequest);
        String content = response.getContentAsString();

        String expectedSerialization = null;
        try {
            expectedSerialization = readCategoriesDocumentFromFile();
        } catch (IOException e) {
            fail("Failed to read " + ATOM_CATEGORIES_DUCUMENT);
        }

        DiffIgnoreUpdateWithAttributeQualifier diff;
        try {
            diff = new DiffIgnoreUpdateWithAttributeQualifier(expectedSerialization, content);
        } catch (Exception e) {
            fail("Failed to perform diff");
            throw e;
        }

        assertTrue("Expected atom feed documents to be similar" + " "
            + diff.toString()
            + "\nexpected:\n"
            + expectedSerialization
            + "\nresult:\n"
            + content, diff.similar());
    }

    private String readCategoriesDocumentFromFile() throws IOException {
        // Read expected Entry from file
        InputStream is =
            CollectionCategoriesTest.class.getResourceAsStream(ATOM_CATEGORIES_DUCUMENT);
        byte[] b = new byte[4096];
        int read = is.read(b);
        String expectedSerialization = new String(b, 0, read);
        return expectedSerialization;
    }

    @Path("/categories/{category_name}")
    public static class CategoriesResource {

        public static final String StatusCN        = "status";
        public static final String SeverityCN      = "severity";
        public static final String AllCatgoriesCN  = "all";
        public static final String CategoryParamCN = "category_name";
        public static final String CategoriesURL   = "categories";

        /**
         * This method will be invoked to get Categories Document
         *
         * @param categoryName
         * @return CategoriesDocumentResource
         */
        @GET
        @Produces(MediaTypeUtils.ATOM_CATEGORIES_DOCUMENT)
        public Categories getCategoriesDocument(@PathParam(CategoryParamCN) String categoryName) {

            Categories cats = null;
            if (categoryName.equals(SeverityCN)) {
                cats = buildSeverityCategoryDocument();
            } else if (categoryName.equals(StatusCN)) {
                cats = buildStatusCategoriesDocument();
            } else if (categoryName.equals(AllCatgoriesCN)) {
                cats = buildCompleteCategoriesDocument();
            }
            return cats;
        }

        private Categories buildCompleteCategoriesDocument() {
            Categories severityCategoryDocument = buildSeverityCategoryDocument();
            Categories statusCategoriesDocument = buildStatusCategoriesDocument();

            List<AtomCategory> categories = severityCategoryDocument.getCategories();
            List<AtomCategory> categories2 = statusCategoriesDocument.getCategories();
            List<AtomCategory> categoriesAll = new ArrayList<AtomCategory>();
            categoriesAll.addAll(categories);
            categoriesAll.addAll(categories2);
            Categories allCategories = new Categories(categoriesAll);
            allCategories.setScheme("urn:com:hp:qadefects:categories");
            return allCategories;
        }

        public static Categories buildSeverityCategoryDocument() {
            Categories cats = new Categories();
            cats.setScheme("urn:com:hp:qadefects:categories:severity");
            cats.setFixed(true);

            AtomCategory severityCritical = new AtomCategory();
            severityCritical.setLabel("critical");
            severityCritical.setScheme("urn:com:hp:qadefects:categories:severity");
            severityCritical.setTerm("1-critical");
            cats.addCategory(severityCritical);

            AtomCategory severityHigh = new AtomCategory();
            severityHigh.setLabel("high");
            severityHigh.setScheme("urn:com:hp:qadefects:categories:severity");
            severityHigh.setTerm("2-high");
            cats.addCategory(severityHigh);

            AtomCategory severityMidium = new AtomCategory();
            severityMidium.setLabel("medium");
            severityMidium.setScheme("urn:com:hp:qadefects:categories:severity");
            severityMidium.setTerm("3-medium");
            cats.addCategory(severityMidium);

            AtomCategory severityMinor = new AtomCategory();
            severityMinor.setLabel("minor");
            severityMinor.setScheme("urn:com:hp:qadefects:categories:severity");
            severityMinor.setTerm("4-minor");
            cats.addCategory(severityMinor);

            return cats;
        }

        public static Categories buildStatusCategoriesDocument() {
            Categories statusCategories = new Categories();
            statusCategories.setScheme("urn:com:hp:qadefects:categories:status");

            AtomCategory assigned = new AtomCategory();
            assigned.setLabel("Assigned");
            assigned.setScheme("urn:com:hp:qadefects:categories:status");
            assigned.setTerm("Assigned");
            statusCategories.addCategory(assigned);

            AtomCategory statusFixed = new AtomCategory();
            statusFixed.setLabel("Fixed");
            statusFixed.setScheme("urn:com:hp:qadefects:categories:status");
            statusFixed.setTerm("Fixed");
            statusCategories.addCategory(statusFixed);

            AtomCategory statusNew = new AtomCategory();
            statusNew.setLabel("New");
            statusNew.setScheme("urn:com:hp:qadefects:categories:status");
            statusNew.setTerm("New");
            statusCategories.addCategory(statusNew);

            AtomCategory statusRejected = new AtomCategory();
            statusRejected.setLabel("Rejected");
            statusRejected.setScheme("urn:com:hp:qadefects:categories:status");
            statusRejected.setTerm("Rejected");
            statusCategories.addCategory(statusRejected);

            return statusCategories;
        }
    }

}
TOP

Related Classes of org.apache.wink.server.categories.CollectionCategoriesTest

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.