test.phoenixnap.oss.plugin.naming.RamlStyleCheckerTest.java Source code

Java tutorial

Introduction

Here is the source code for test.phoenixnap.oss.plugin.naming.RamlStyleCheckerTest.java

Source

/*
 * Copyright 2002-2016 the original author or authors.
 * 
 * Licensed 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 test.phoenixnap.oss.plugin.naming;

import com.phoenixnap.oss.ramlapisync.generation.RamlGenerator;
import com.phoenixnap.oss.ramlapisync.generation.RamlVerifier;
import com.phoenixnap.oss.ramlapisync.parser.SpringMvcResourceParser;
import com.phoenixnap.oss.ramlapisync.raml.RamlRoot;
import com.phoenixnap.oss.ramlapisync.style.checkers.ActionSecurityResponseChecker;
import com.phoenixnap.oss.ramlapisync.style.checkers.RequestBodySchemaStyleChecker;
import com.phoenixnap.oss.ramlapisync.style.checkers.ResourceCollectionPluralisationChecker;
import com.phoenixnap.oss.ramlapisync.style.checkers.ResourceUrlStyleChecker;
import com.phoenixnap.oss.ramlapisync.style.checkers.ResponseBodySchemaStyleChecker;
import com.phoenixnap.oss.ramlapisync.style.checkers.ResponseCodeDefinitionStyleChecker;
import com.phoenixnap.oss.ramlapisync.verification.Issue;
import com.phoenixnap.oss.ramlapisync.verification.IssueLocation;
import com.phoenixnap.oss.ramlapisync.verification.IssueSeverity;
import com.phoenixnap.oss.ramlapisync.verification.IssueType;
import org.junit.Test;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;

import java.util.Collections;

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

/**
 * Unit tests for the Style Checkers
 * 
 * @author Kurt Paris
 * @since 0.0.2
 *
 */
public class RamlStyleCheckerTest {

    SpringMvcResourceParser parser = new SpringMvcResourceParser(null, "0.0.1", "test-type", false);
    RamlGenerator generator = new RamlGenerator(parser);

    @Test
    public void test_UrlStyleChecker_Success() {
        RamlRoot published = RamlVerifier.loadRamlFromFile("test-style-success.raml");

        RamlVerifier verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new ResourceUrlStyleChecker()));
        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertFalse("Check that implementation matches rules", verifier.hasWarnings());

    }

    @Test
    public void test_PluralChecker_Success() {
        RamlRoot published = RamlVerifier.loadRamlFromFile("test-style-pluralised-success.raml");

        RamlVerifier verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new ResourceCollectionPluralisationChecker()));
        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertFalse("Check that implementation matches rules", verifier.hasWarnings());

    }

    @Test
    public void test_PluralChecker_Fails() {
        RamlRoot published = RamlVerifier.loadRamlFromFile("test-style-pluralised-singularcollection.raml");

        RamlVerifier verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new ResourceCollectionPluralisationChecker()));
        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertTrue("Check that implementation matches rules", verifier.hasWarnings());
        assertEquals("Check that implementation shuld have 2 warnings", 2, verifier.getWarnings().size());
        TestHelper.verifyIssuesUnordered(verifier.getWarnings(),
                new Issue[] {
                        new Issue(IssueSeverity.WARNING, IssueLocation.CONTRACT, IssueType.STYLE,
                                ResourceCollectionPluralisationChecker.DESCRIPTION, "/ignored/house"),
                        new Issue(IssueSeverity.WARNING, IssueLocation.CONTRACT, IssueType.STYLE,
                                ResourceCollectionPluralisationChecker.DESCRIPTION, "/ignored/ball") });

    }

    @Test
    public void test_ActionSecurityResponseCheck_Success() {
        RamlRoot published = RamlVerifier.loadRamlFromFile("test-style-actionsecurity-success.raml");

        RamlVerifier verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new ActionSecurityResponseChecker()));
        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertFalse("Check that implementation matches rules", verifier.hasWarnings());
    }

    @Test
    public void test_ActionSecurityResponseCheck_Fails() {
        RamlRoot published = RamlVerifier.loadRamlFromFile("test-style-actionsecurity-fails.raml");

        RamlVerifier verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new ActionSecurityResponseChecker()));
        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertTrue("Check that implementation matches rules", verifier.hasWarnings());
        assertEquals("Check that implementation shuld have 2 warnings", 2, verifier.getWarnings().size());
        TestHelper.verifyIssuesUnordered(verifier.getWarnings(),
                new Issue[] {
                        new Issue(IssueSeverity.WARNING, IssueLocation.CONTRACT, IssueType.STYLE,
                                ActionSecurityResponseChecker.DESCRIPTION, "GET /ignored/houses/{houseId}"),
                        new Issue(IssueSeverity.WARNING, IssueLocation.CONTRACT, IssueType.STYLE,
                                ActionSecurityResponseChecker.DESCRIPTION, "GET /ignored/houses") });
    }

    @Test
    public void test_RequestBodyCheck_Success() {
        RamlRoot published = RamlVerifier.loadRamlFromFile("test-style-missing-request-bodies.raml");

        RamlVerifier verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new RequestBodySchemaStyleChecker("PUT,POST")));
        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertFalse("Check that implementation matches rules", verifier.hasWarnings());

        //Check string parse resilience
        verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new RequestBodySchemaStyleChecker("PUT,  ,POSTIX,  POST  ,, ")));
        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertFalse("Check that implementation matches rules", verifier.hasWarnings());

        verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new RequestBodySchemaStyleChecker(null)));
        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertFalse("Check that implementation matches rules", verifier.hasWarnings());
    }

    @Test
    public void test_RequestBodyCheck_Fails() {
        RamlRoot published = RamlVerifier.loadRamlFromFile("test-style-missing-request-bodies-fails.raml");

        RamlVerifier verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new RequestBodySchemaStyleChecker("PUT,POST")));
        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertTrue("Check that implementation matches rules", verifier.hasWarnings());
        assertEquals("Check that implementation shuld have 2 warnings", 2, verifier.getWarnings().size());
        TestHelper.verifyIssuesUnordered(verifier.getWarnings(),
                new Issue[] {
                        new Issue(IssueSeverity.WARNING, IssueLocation.CONTRACT, IssueType.STYLE,
                                String.format(RequestBodySchemaStyleChecker.DESCRIPTION, "PUT"),
                                "PUT /base/endpointThatWillBoom"),
                        new Issue(IssueSeverity.WARNING, IssueLocation.CONTRACT, IssueType.STYLE,
                                String.format(RequestBodySchemaStyleChecker.DESCRIPTION, "POST"),
                                "POST /base/endpointThatWillBoom") });
    }

    @Test
    public void test_ResponseBodyCheck_Success() {
        RamlRoot published = RamlVerifier.loadRamlFromFile("test-style-missing-response-bodies.raml");

        RamlVerifier verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new ResponseBodySchemaStyleChecker("GET,POST")));
        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertFalse("Check that implementation matches rules", verifier.hasWarnings());

        //Check string parse resilience
        verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new ResponseBodySchemaStyleChecker("GET,  ,POSTIX,  POST  ,, ")));
        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertFalse("Check that implementation matches rules", verifier.hasWarnings());

        verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new ResponseBodySchemaStyleChecker(null)));
        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertFalse("Check that implementation matches rules", verifier.hasWarnings());
    }

    @Test
    public void test_ResponseBodyCheck_Fails() {
        RamlRoot published = RamlVerifier.loadRamlFromFile("test-style-missing-response-bodies-fails.raml");

        RamlVerifier verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new ResponseBodySchemaStyleChecker("GET,POST")));
        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertTrue("Check that implementation matches rules", verifier.hasWarnings());
        assertEquals("Check that implementation shuld have 2 warnings", 2, verifier.getWarnings().size());
        TestHelper.verifyIssuesUnordered(verifier.getWarnings(),
                new Issue[] {
                        new Issue(IssueSeverity.WARNING, IssueLocation.CONTRACT, IssueType.STYLE,
                                String.format(ResponseBodySchemaStyleChecker.DESCRIPTION, "GET"),
                                "GET /base/endpointThatWillBoom"),
                        new Issue(IssueSeverity.WARNING, IssueLocation.CONTRACT, IssueType.STYLE,
                                String.format(ResponseBodySchemaStyleChecker.DESCRIPTION, "POST"),
                                "POST /base/endpointThatWillBoom") });
    }

    @Test
    public void test_Get404Check_Success() {
        RamlRoot published = RamlVerifier.loadRamlFromFile("test-style-missing-get404.raml");
        MultiValueMap<String, HttpStatus> statusChecks = new LinkedMultiValueMap<>();
        statusChecks.add(HttpMethod.GET.name(), HttpStatus.NOT_FOUND);
        RamlVerifier verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new ResponseCodeDefinitionStyleChecker(statusChecks)));
        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertFalse("Check that implementation matches rules", verifier.hasWarnings());
    }

    @Test
    public void test_Get404Check_Fails() {
        RamlRoot published = RamlVerifier.loadRamlFromFile("test-style-missing-get404-fails.raml");
        MultiValueMap<String, HttpStatus> statusChecks = new LinkedMultiValueMap<>();
        HttpStatus status = HttpStatus.NOT_FOUND;
        statusChecks.add(HttpMethod.GET.name(), status);
        RamlVerifier verifier = new RamlVerifier(published, null, Collections.emptyList(), null, null,
                Collections.singletonList(new ResponseCodeDefinitionStyleChecker(statusChecks)));

        assertFalse("Check that raml passes rules", verifier.hasErrors());
        assertTrue("Check that implementation matches rules", verifier.hasWarnings());
        assertEquals("Check that implementation shuld have 1 warnings", 1, verifier.getWarnings().size());
        TestHelper
                .verifyIssuesUnordered(verifier.getWarnings(),
                        new Issue[] {
                                new Issue(IssueSeverity.WARNING, IssueLocation.CONTRACT, IssueType.STYLE,
                                        String.format(ResponseCodeDefinitionStyleChecker.DESCRIPTION, "GET",
                                                status.name(), status.value()),
                                        "GET /base/endpointThatWillBoom") });
    }

}