Package com.eviware.soapui.impl.rest.actions.service

Source Code of com.eviware.soapui.impl.rest.actions.service.GenerateRestMockServiceActionTest

/*
* Copyright 2004-2014 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.eviware.soapui.impl.rest.actions.service;

import com.eviware.soapui.SoapUI;
import com.eviware.soapui.config.RestResourceConfig;
import com.eviware.soapui.impl.rest.RestMethod;
import com.eviware.soapui.impl.rest.RestResource;
import com.eviware.soapui.impl.rest.RestService;
import com.eviware.soapui.impl.rest.mock.RestMockAction;
import com.eviware.soapui.impl.rest.mock.RestMockService;
import com.eviware.soapui.impl.rest.support.RestParamProperty;
import com.eviware.soapui.model.mock.MockOperation;
import com.eviware.soapui.settings.HttpSettings;
import com.eviware.soapui.support.SoapUIException;
import com.eviware.soapui.utils.ModelItemFactory;
import com.eviware.x.form.XFormDialog;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.internal.matchers.NotNull;
import org.mockito.internal.matchers.Null;

import static java.lang.Boolean.FALSE;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static com.eviware.soapui.impl.rest.RestRequestInterface.HttpMethod;

public class GenerateRestMockServiceActionTest {

    private RestService restService;
    private String restMockServiceName;
    private XFormDialog dialog;
    private GenerateRestMockServiceAction action;

    @Before
    public void setUp() throws Exception {
        restService = ModelItemFactory.makeRestService();
        restMockServiceName = "My Mock Service";
        action = new GenerateRestMockServiceAction();

        mockFormDialog();

        SoapUI.getSettings().setBoolean(HttpSettings.START_MOCK_SERVICE, FALSE);
        SoapUI.getSettings().setBoolean(HttpSettings.LEAVE_MOCKENGINE, FALSE);
    }

    @After
    public void tearDown() {
        RestMockService restMockService = getResultingRestMockService();

        if (restMockService != null && restMockService.getMockRunner() != null) {
            restMockService.getMockRunner().stop();
        }
    }

    public void mockFormDialog() {
        dialog = mock(XFormDialog.class);
        when(dialog.getValue(GenerateRestMockServiceAction.Form.MOCKSERVICE_NAME)).thenReturn(restMockServiceName);
        when(dialog.show()).thenReturn(true).thenReturn(false);
        action.setFormDialog(dialog);
    }

    @Test
    public void shouldGenerateRestMockService() throws SoapUIException {
        action.perform(restService, null);

        RestMockService restMockService = getResultingRestMockService();
        assertThat(restMockService, is(NotNull.NOT_NULL));
        assertThat(restMockService.getName(), is(restMockServiceName));
    }

    @Test
    public void shouldGenerateNonStartedRestMockServiceIfSettingIsOff() throws SoapUIException {
        SoapUI.getSettings().setBoolean(HttpSettings.START_MOCK_SERVICE, FALSE);

        action.perform(restService, null);

        RestMockService restMockService = getResultingRestMockService();
        assertThat(restMockService.getMockRunner(), is(Null.NULL));
    }

    public RestMockService getResultingRestMockService() {
        return restService.getProject().getRestMockServiceByName(restMockServiceName);
    }

    @Test
    public void shouldGenerateRestMockServiceWithResources() {
        restService.addNewResource("one", "/one");
        restService.addNewResource("two", "/two");

        action.perform(restService, null);

        RestMockService restMockService = getResultingRestMockService();
        assertThat(restMockService.getMockOperationCount(), is(2));
        assertThat(restMockService.getMockOperationAt(1).getName(), is("/two"));

        for (MockOperation mockAction : restMockService.getMockOperationList()) {
            assertThat(mockAction.getMockResponseCount(), is(1));
        }
    }

    @Test
    public void shouldGenerateRestMockServiceForNestedResources() {
        RestResource one = restService.addNewResource("one", "/one{version}");

        RestParamProperty path = one.addProperty("version");
        path.setValue("v1");

        RestResourceConfig nestedResourceConfig = one.getConfig().addNewResource();
        nestedResourceConfig.setPath("/path/again");

        RestResource three = one.addNewChildResource("three", "/will/be/overwritten");
        three.setConfig(nestedResourceConfig);

        restService.addNewResource("two", "/two");

        action.perform(restService, null);

        RestMockService restMockService = getResultingRestMockService();
        assertThat(restMockService.getMockOperationCount(), is(3));
        assertMockActionWithPath(restMockService, "/onev1");
        assertMockActionWithPath(restMockService, "/one/path/again");
        assertMockActionWithPath(restMockService, "/two");
    }

    @Test
    public void shouldGenerateRestMockServiceForResourceWithSeveralMethods() {
        RestResource resource = restService.addNewResource("one", "/one");

        addMethod(resource, HttpMethod.GET);
        addMethod(resource, HttpMethod.POST);

        action.perform(restService, null);

        RestMockService restMockService = getResultingRestMockService();
        assertThat(restMockService.getMockOperationCount(), is(2));

        assertMockAction(HttpMethod.GET, "/one", restMockService.getMockOperationAt(0));
        assertMockAction(HttpMethod.POST, "/one", restMockService.getMockOperationAt(1));
    }

    @Test
    public void shouldExpandPathParamForEmptyRestMethod() {
        RestResource resource = restService.addNewResource("one", "/one{version}");
        RestParamProperty path = resource.addProperty("version");
        path.setValue("v1");

        addMethod(resource, HttpMethod.GET);

        action.perform(restService, null);

        assertMockAction(HttpMethod.GET, "/onev1", getResultingRestMockService().getMockOperationAt(0));
    }

    private void assertMockAction(HttpMethod method, String path, RestMockAction mockAction) {
        assertThat(mockAction.getMethod(), is(method));
        assertThat(mockAction.getResourcePath(), is(path));
    }

    private void addMethod(RestResource one, HttpMethod method) {
        RestMethod restMethod = one.addNewMethod(method.name());
        restMethod.setMethod(method);
    }

    private void assertMockActionWithPath(RestMockService restMockService, String expectedPath) {
        boolean foundMatch = false;

        for (MockOperation mockOperation : restMockService.getMockOperationList()) {
            RestMockAction mockAction = (RestMockAction) mockOperation;

            if (mockAction.getResourcePath().equals(expectedPath)) {
                foundMatch = true;
                break;
            }
        }
        assertTrue("Did not find a match for " + expectedPath, foundMatch);
    }


}
TOP

Related Classes of com.eviware.soapui.impl.rest.actions.service.GenerateRestMockServiceActionTest

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.