Package com.eviware.soapui.impl.wsdl

Source Code of com.eviware.soapui.impl.wsdl.WsdlProjectLoadAndSaveTest

package com.eviware.soapui.impl.wsdl;

import com.eviware.soapui.impl.WorkspaceImpl;
import com.eviware.soapui.model.project.Project;
import com.eviware.soapui.model.project.SaveStatus;
import com.eviware.soapui.support.SoapUIException;
import com.eviware.soapui.utils.StubbedDialogsTestBase;
import com.google.common.io.Files;
import org.apache.commons.io.FileUtils;
import org.apache.xmlbeans.XmlException;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

public class WsdlProjectLoadAndSaveTest extends StubbedDialogsTestBase {
    private static final String PROJECT_NAME = "Project";
    private static final File TEMPORARY_FOLDER = Files.createTempDir();
    private static final String SAMPLE_PROJECT_RELATIVE_PATH = "/sample-soapui-project.xml";
    private static final String SAMPLE_PROJECT_ABSOLUTE_PATH
            = WsdlProjectLoadAndSaveTest.class.getResource(SAMPLE_PROJECT_RELATIVE_PATH).getPath();

    private final InputStream sampleProjectInputSteam = getClass().getResourceAsStream(SAMPLE_PROJECT_RELATIVE_PATH);

    @Before
    public void setup() throws IOException {
        resetSampleProjectFileToWritable();
    }

    @AfterClass
    public static void teardown() throws IOException {
        FileUtils.deleteDirectory(TEMPORARY_FOLDER);
    }

    @Test
    public void projectLoadedFromInputStreamCanBeSaved() throws IOException {
        Project project = new WsdlProject(sampleProjectInputSteam, null);
        answerYesWhenTheOverwriteDialogIsShown();
        SaveStatus status = project.save();
        assertThat(status, is(SaveStatus.SUCCESS));
    }

    @Test
    public void projectLoadedFromFileCanBeSaved() throws IOException {
        Project project = new WsdlProject(SAMPLE_PROJECT_ABSOLUTE_PATH, (WorkspaceImpl) null);
        SaveStatus status = project.save();
        assertThat(status, is(SaveStatus.SUCCESS));
    }

    @Test
    public void newlyCreatedProjectCanBeSaved() throws XmlException, IOException, SoapUIException {
        WsdlProject project = createTemporaryProject();
        SaveStatus status = project.saveIn(createTemporaryProjectFile());
        assertThat(status, is(SaveStatus.SUCCESS));
    }

    @Test
    public void userIsPromptedForSaveLocationWhenSavingProjectLoadedFromInputStream() throws IOException {
        Project project = new WsdlProject(sampleProjectInputSteam, null);
        answerYesWhenTheOverwriteDialogIsShown();
        project.save();
        verifyThatTheSaveAsDialogIsShown();
    }

    @Test
    public void newlyCreatedProjectIsNotSavedIfUserOptsNotToSave() throws XmlException, IOException, SoapUIException {
        Project project = createTemporaryProject();
        cancelWhenTheSaveAsFileDialogIsShown();
        SaveStatus status = project.save();
        assertThat(status, is(not(SaveStatus.SUCCESS)));
    }

    @Test
    public void projectIsNotSavedIfSaveAsDialogIsCancelled() throws IOException {
        Project project = new WsdlProject(sampleProjectInputSteam, null);
        answerYesWhenTheOverwriteDialogIsShown();
        cancelWhenTheSaveAsFileDialogIsShown();
        SaveStatus status = project.save();
        assertThat(status, is(SaveStatus.CANCELLED));
    }

    @Test
    public void existingFileIsNotSavedIfNotWritableAndWeDontWantToSave() throws IOException {
        setFileWritePermission(SAMPLE_PROJECT_ABSOLUTE_PATH, false);
        Project project = new WsdlProject(SAMPLE_PROJECT_ABSOLUTE_PATH, (WorkspaceImpl) null);
        answerNoWhenTheDoYouWantToWriteToNewFileDialogIsShown();
        SaveStatus status = project.save();
        assertThat(status, is(SaveStatus.DONT_SAVE));
    }

    @Test
    public void existingFileIsCancelledIfNotWritableAndNoNewFileSelected() throws IOException {
        setFileWritePermission(SAMPLE_PROJECT_ABSOLUTE_PATH, false);
        Project project = new WsdlProject(SAMPLE_PROJECT_ABSOLUTE_PATH, (WorkspaceImpl) null);
        answerYesWhenTheDoYouWantToWriteToNewFileDialogIsShown();
        cancelWhenTheSaveAsFileDialogIsShown();
        SaveStatus status = project.save();
        assertThat(status, is(SaveStatus.CANCELLED));
    }


    private void answerYesWhenTheOverwriteDialogIsShown() {
        stubbedDialogs.mockConfirmWithReturnValue(true);
    }

    private void answerYesWhenTheDoYouWantToWriteToNewFileDialogIsShown() {

        stubbedDialogs.mockConfirmWithReturnValue(true);
    }

    private void answerNoWhenTheDoYouWantToWriteToNewFileDialogIsShown() {
        stubbedDialogs.mockConfirmWithReturnValue(false);
    }

    private void cancelWhenTheSaveAsFileDialogIsShown() {
        when(mockedFileDialogs.saveAs(anyObject(), anyString(), anyString(), anyString(), isA(File.class))).thenReturn(null);
    }

    private void verifyThatTheSaveAsDialogIsShown() {
        verify(mockedFileDialogs).saveAs(anyObject(), anyString(), anyString(), anyString(), isA(File.class));
    }

    private File createTemporaryProjectFile() {
        return new File(TEMPORARY_FOLDER + File.separator + UUID.randomUUID() + "-soapui-project.xml");
    }

    private WsdlProject createTemporaryProject() throws XmlException, IOException, SoapUIException {
        WsdlProject project = new WsdlProject();
        project.setName(PROJECT_NAME);
        return project;
    }

    private void setFileWritePermission(String projectFilePath, boolean writable) throws IOException {
        boolean couldSetWritable = new File(projectFilePath).setWritable(writable);
        if (!couldSetWritable) {
            throw new IOException("Can't set project file '" + projectFilePath + "' to writable");
        }
    }

    private void resetSampleProjectFileToWritable() throws IOException {
        setFileWritePermission(SAMPLE_PROJECT_ABSOLUTE_PATH, true);
    }
}
TOP

Related Classes of com.eviware.soapui.impl.wsdl.WsdlProjectLoadAndSaveTest

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.