1
2
3
4
5 package com.eviware.soapui.impl.wsdl.actions.request;
6
7 import com.eviware.soapui.SoapUI;
8 import com.eviware.soapui.config.CompressedStringConfig;
9 import com.eviware.soapui.config.MockResponseStepConfig;
10 import com.eviware.soapui.config.TestStepConfig;
11 import com.eviware.soapui.impl.wsdl.WsdlOperation;
12 import com.eviware.soapui.impl.wsdl.WsdlRequest;
13 import com.eviware.soapui.impl.wsdl.actions.support.AbstractAddToTestCaseAction;
14 import com.eviware.soapui.impl.wsdl.support.CompressedStringSupport;
15 import com.eviware.soapui.impl.wsdl.support.HelpUrls;
16 import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase;
17 import com.eviware.soapui.impl.wsdl.teststeps.WsdlMockResponseTestStep;
18 import com.eviware.soapui.impl.wsdl.teststeps.assertions.basic.SchemaComplianceAssertion;
19 import com.eviware.soapui.impl.wsdl.teststeps.registry.WsdlMockResponseStepFactory;
20 import com.eviware.soapui.settings.WsdlSettings;
21 import com.eviware.soapui.support.UISupport;
22 import com.eviware.soapui.ui.desktop.SoapUIDesktop;
23 import com.eviware.x.form.XFormDialog;
24 import com.eviware.x.form.support.ADialogBuilder;
25 import com.eviware.x.form.support.AField;
26 import com.eviware.x.form.support.AField.AFieldType;
27 import com.eviware.x.form.support.AForm;
28
29 public class AddRequestAsMockResponseStepAction extends AbstractAddToTestCaseAction<WsdlRequest>
30 {
31 public static final String SOAPUI_ACTION_ID = "AddRequestAsMockResponseStepAction";
32 private XFormDialog dialog;
33
34 public AddRequestAsMockResponseStepAction()
35 {
36 super( "Add as MockResponse Step", "Creates a MockResponseStep from this Request" );
37 }
38
39 public void perform( WsdlRequest request, Object param )
40 {
41 WsdlTestCase testCase = getTargetTestCase( request.getOperation().getInterface().getProject() );
42 if( testCase != null )
43 addMockResponse( testCase, request );
44 }
45
46 protected boolean addMockResponse(WsdlTestCase testCase, WsdlRequest request)
47 {
48 String title = getName();
49 boolean create = false;
50
51 if( dialog == null )
52 dialog = ADialogBuilder.buildDialog( Form.class );
53
54 WsdlOperation operation = request.getOperation();
55 dialog.setValue( Form.STEP_NAME, operation.getName() );
56 dialog.setBooleanValue( Form.CLOSE_REQUEST, true );
57 dialog.setBooleanValue( Form.SHOW_TESTCASE, true );
58 dialog.setIntValue( Form.PORT, 8181 );
59 dialog.setValue( Form.PATH, "/" + operation.getName() );
60
61 SoapUIDesktop desktop = SoapUI.getDesktop();
62 dialog.getFormField( Form.CLOSE_REQUEST ).setEnabled(
63 desktop != null && desktop.hasDesktopPanel( request ));
64
65 if( !dialog.show())
66 return false;
67
68 TestStepConfig config = WsdlMockResponseStepFactory.createConfig( operation, request, false );
69 MockResponseStepConfig mockResponseStepConfig = ((MockResponseStepConfig)config.getConfig());
70
71 config.setName( dialog.getValue( Form.STEP_NAME ) );
72 mockResponseStepConfig.setPath( dialog.getValue( Form.PATH ) );
73 mockResponseStepConfig.setPort( dialog.getIntValue( Form.PORT, 8181 ) );
74 CompressedStringConfig responseContent = mockResponseStepConfig.getResponse().getResponseContent();
75
76 if( request.getResponse() == null && !request.getOperation().isOneWay() )
77 {
78 create = UISupport.confirm( "Request is missing response, create default mock response instead?", title );
79 }
80
81 if( create )
82 {
83 String response = operation.createResponse( operation.getSettings().getBoolean( WsdlSettings.XML_GENERATION_ALWAYS_INCLUDE_OPTIONAL_ELEMENTS ) );
84 CompressedStringSupport.setString( responseContent, response );
85 }
86 else if( request.getResponse() != null )
87 {
88 String response = request.getResponse().getContentAsString();
89 CompressedStringSupport.setString( responseContent, response );
90 }
91
92 WsdlMockResponseTestStep testStep = (WsdlMockResponseTestStep) testCase.addTestStep( config );
93
94 if( dialog.getBooleanValue( Form.ADD_SCHEMA_ASSERTION ))
95 testStep.addAssertion( SchemaComplianceAssertion.ID );
96
97 UISupport.selectAndShow( testStep );
98
99 if( dialog.getBooleanValue( Form.CLOSE_REQUEST ) && desktop != null )
100 {
101 desktop.closeDesktopPanel( request );
102 }
103
104 if( dialog.getBooleanValue( Form.SHOW_TESTCASE ) )
105 {
106 UISupport.selectAndShow( testCase );
107 }
108
109 return true;
110 }
111
112 @AForm( name="Add MockResponse to TestCase", description="Options for adding this requests response to a TestCase",
113 helpUrl= HelpUrls.ADDREQUESTASMOCKRESPONSESTEP_HELP_URL, icon=UISupport.OPTIONS_ICON_PATH )
114 private interface Form
115 {
116 @AField( name="Name", description="Unique name of MockResponse Step")
117 public final static String STEP_NAME = "Name";
118
119 @AField( name="Path", description="Path to listen on" )
120 public final static String PATH = "Path";
121
122 @AField( name="Port", description="Port to listen on", type=AFieldType.INT )
123 public final static String PORT = "Port";
124
125 @AField( name="Add Schema Assertion", description="Adds SchemaCompliance Assertion for request", type=AFieldType.BOOLEAN )
126 public final static String ADD_SCHEMA_ASSERTION = "Add Schema Assertion";
127
128 @AField( name="Close Request Window", description="Closes the request editor if visible", type=AFieldType.BOOLEAN )
129 public final static String CLOSE_REQUEST = "Close Request Window";
130
131 @AField( name="Shows TestCase Editor", description="Shows the target steps TestCase editor", type=AFieldType.BOOLEAN )
132 public final static String SHOW_TESTCASE = "Shows TestCase Editor";
133 }
134 }