1   package com.atlassian.maven.plugins.amps.codegen.prompter.jira;
2   
3   import com.atlassian.maven.plugins.amps.codegen.prompter.AbstractModulePrompter;
4   import com.atlassian.maven.plugins.amps.codegen.prompter.AbstractPrompterTest;
5   import com.atlassian.maven.plugins.amps.codegen.prompter.PluginModulePrompter;
6   import com.atlassian.plugins.codegen.modules.jira.RPCProperties;
7   
8   import org.codehaus.plexus.components.interactivity.Prompter;
9   import org.codehaus.plexus.components.interactivity.PrompterException;
10  import org.junit.Before;
11  import org.junit.Test;
12  
13  import static com.atlassian.maven.plugins.amps.codegen.prompter.AbstractModulePrompter.MODULE_DESCRIP_PROMPT;
14  import static com.atlassian.maven.plugins.amps.codegen.prompter.AbstractModulePrompter.MODULE_KEY_PROMPT;
15  import static com.atlassian.maven.plugins.amps.codegen.prompter.AbstractModulePrompter.MODULE_NAME_PROMPT;
16  import static org.junit.Assert.*;
17  import static org.mockito.Mockito.mock;
18  import static org.mockito.Mockito.when;
19  
20  /**
21   * @since 3.6
22   */
23  public class RPCPrompterTest extends AbstractPrompterTest
24  {
25      public static final String PACKAGE = "com.atlassian.plugins.jira.rpc";
26      public static final String SOAP_CLASSNAME = "MySoapEndpointImpl";
27      public static final String SOAP_INTERFACE = "MySoapEndpoint";
28      public static final String SOAP_MODULE_NAME = "My Soap Endpoint";
29      public static final String SOAP_MODULE_KEY = "my-soap-endpoint";
30      public static final String SOAP_DESCRIPTION = "The My Soap Endpoint Plugin";
31      public static final String SOAP_I18N_NAME_KEY = "my-soap-endpoint.name";
32      public static final String SOAP_I18N_DESCRIPTION_KEY = "my-soap-endpoint.description";
33      public static final String SOAP_PATH = "mysoapservice-v1";
34  
35      public static final String XML_CLASSNAME = "MyXmlEndpointImpl";
36      public static final String XML_INTERFACE = "MyXmlEndpoint";
37      public static final String XML_MODULE_NAME = "My Xml Endpoint";
38      public static final String XML_MODULE_KEY = "my-xml-endpoint";
39      public static final String XML_DESCRIPTION = "The My Xml Endpoint Plugin";
40      public static final String XML_I18N_NAME_KEY = "my-xml-endpoint.name";
41      public static final String XML_I18N_DESCRIPTION_KEY = "my-xml-endpoint.description";
42      public static final String XML_PATH = "myxmlservice-v1";
43  
44      public static final String ADV_MODULE_NAME = "My Awesome Plugin";
45      public static final String ADV_MODULE_KEY = "awesome-module";
46      public static final String ADV_DESCRIPTION = "The Awesomest Plugin Ever";
47      public static final String ADV_I18N_NAME_KEY = "awesome-plugin.name";
48      public static final String ADV_I18N_DESCRIPTION_KEY = "pluginus-awesomeous.description";
49  
50      Prompter prompter;
51  
52      @Before
53      public void setup()
54      {
55          prompter = mock(Prompter.class);
56      }
57  
58      @Test
59      public void basicSoapPropertiesAreValid() throws PrompterException
60      {
61          when(prompter.prompt("[S]OAP or [X]ML-RPC?", RPCPrompter.RPC_ANSWERS, "S")).thenReturn("S");
62          when(prompter.prompt("Enter Interface name", "MYSoapEndpoint")).thenReturn(SOAP_INTERFACE);
63          when(prompter.prompt("Enter Interface package", AbstractModulePrompter.DEFAULT_BASE_PACKAGE + ".jira.rpc")).thenReturn(PACKAGE);
64          when(prompter.prompt("Enter Class name", "MySoapEndpointImpl")).thenReturn(SOAP_CLASSNAME);
65          when(prompter.prompt("Enter Package Name", PACKAGE)).thenReturn(PACKAGE);
66          when(prompter.prompt("Enter Service Path", "mysoapendpoint-v1")).thenReturn(SOAP_PATH);
67          when(prompter.prompt("Show Advanced Setup?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
68          when(prompter.prompt("Include Example Code?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
69  
70          RPCPrompter modulePrompter = new RPCPrompter(prompter);
71          modulePrompter.setUseAnsiColor(false);
72          RPCProperties props = modulePrompter.getModulePropertiesFromInput(moduleLocation);
73  
74          assertEquals("wrong interface", SOAP_INTERFACE, props.getInterfaceId().getName());
75          assertEquals("wrong interface package", PACKAGE, props.getInterfaceId().getPackage());
76          assertEquals("wrong class", SOAP_CLASSNAME, props.getClassId().getName());
77          assertEquals("wrong class package", PACKAGE, props.getClassId().getPackage());
78          assertEquals("wrong service path", SOAP_PATH, props.getServicePath());
79          assertEquals("wrong module name", SOAP_MODULE_NAME, props.getModuleName());
80          assertEquals("wrong module key", SOAP_MODULE_KEY, props.getModuleKey());
81          assertEquals("wrong description", SOAP_DESCRIPTION, props.getDescription());
82          assertEquals("wrong i18n name key", SOAP_I18N_NAME_KEY, props.getNameI18nKey());
83          assertEquals("wrong i18n desc key", SOAP_I18N_DESCRIPTION_KEY, props.getDescriptionI18nKey());
84          assertTrue("isSoap should be true", props.isSoap());
85      }
86  
87      @Test
88      public void advancedSoapPropertiesAreValid() throws PrompterException
89      {
90          when(prompter.prompt("[S]OAP or [X]ML-RPC?", RPCPrompter.RPC_ANSWERS, "S")).thenReturn("S");
91          when(prompter.prompt("Enter Interface name", "MYSoapEndpoint")).thenReturn(SOAP_INTERFACE);
92          when(prompter.prompt("Enter Interface package", AbstractModulePrompter.DEFAULT_BASE_PACKAGE + ".jira.rpc")).thenReturn(PACKAGE);
93          when(prompter.prompt("Enter Class name", "MySoapEndpointImpl")).thenReturn(SOAP_CLASSNAME);
94          when(prompter.prompt("Enter Package Name", PACKAGE)).thenReturn(PACKAGE);
95          when(prompter.prompt("Enter Service Path", "mysoapendpoint-v1")).thenReturn(SOAP_PATH);
96          when(prompter.prompt("Show Advanced Setup?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("Y");
97  
98          when(prompter.prompt(MODULE_NAME_PROMPT, SOAP_MODULE_NAME)).thenReturn(ADV_MODULE_NAME);
99          when(prompter.prompt(MODULE_KEY_PROMPT, SOAP_MODULE_KEY)).thenReturn(ADV_MODULE_KEY);
100         when(prompter.prompt(MODULE_DESCRIP_PROMPT, SOAP_DESCRIPTION)).thenReturn(ADV_DESCRIPTION);
101         when(prompter.prompt("i18n Name Key", SOAP_I18N_NAME_KEY)).thenReturn(ADV_I18N_NAME_KEY);
102         when(prompter.prompt("i18n Description Key", SOAP_I18N_DESCRIPTION_KEY)).thenReturn(ADV_I18N_DESCRIPTION_KEY);
103 
104         when(prompter.prompt("Include Example Code?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
105 
106         RPCPrompter modulePrompter = new RPCPrompter(prompter);
107         modulePrompter.setUseAnsiColor(false);
108         RPCProperties props = modulePrompter.getModulePropertiesFromInput(moduleLocation);
109 
110         assertEquals("wrong adv interface", SOAP_INTERFACE, props.getInterfaceId().getName());
111         assertEquals("wrong adv interface package", PACKAGE, props.getInterfaceId().getPackage());
112         assertEquals("wrong adv class", SOAP_CLASSNAME, props.getClassId().getName());
113         assertEquals("wrong adv package", PACKAGE, props.getClassId().getPackage());
114         assertEquals("wrong adv service path", SOAP_PATH, props.getServicePath());
115         assertEquals("wrong adv module name", ADV_MODULE_NAME, props.getModuleName());
116         assertEquals("wrong adv module key", ADV_MODULE_KEY, props.getModuleKey());
117         assertEquals("wrong adv description", ADV_DESCRIPTION, props.getDescription());
118         assertEquals("wrong adv i18n name key", ADV_I18N_NAME_KEY, props.getNameI18nKey());
119         assertEquals("wrong adv i18n desc key", ADV_I18N_DESCRIPTION_KEY, props.getDescriptionI18nKey());
120         assertTrue("isSoap should be true", props.isSoap());
121     }
122 
123     @Test
124     public void basicXmlPropertiesAreValid() throws PrompterException
125     {
126         when(prompter.prompt("[S]OAP or [X]ML-RPC?", RPCPrompter.RPC_ANSWERS, "S")).thenReturn("x");
127         when(prompter.prompt("Enter Interface name", "MYXmlEndpoint")).thenReturn(XML_INTERFACE);
128         when(prompter.prompt("Enter Interface package", AbstractModulePrompter.DEFAULT_BASE_PACKAGE + ".jira.rpc")).thenReturn(PACKAGE);
129         when(prompter.prompt("Enter Class name", "MyXmlEndpointImpl")).thenReturn(XML_CLASSNAME);
130         when(prompter.prompt("Enter Package Name", PACKAGE)).thenReturn(PACKAGE);
131         when(prompter.prompt("Enter Service Path", "myxmlendpoint-v1")).thenReturn(XML_PATH);
132         when(prompter.prompt("Show Advanced Setup?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
133         when(prompter.prompt("Include Example Code?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
134 
135         RPCPrompter modulePrompter = new RPCPrompter(prompter);
136         modulePrompter.setUseAnsiColor(false);
137         RPCProperties props = modulePrompter.getModulePropertiesFromInput(moduleLocation);
138 
139         assertEquals("wrong interface", XML_INTERFACE, props.getInterfaceId().getName());
140         assertEquals("wrong interface package", PACKAGE, props.getInterfaceId().getPackage());
141         assertEquals("wrong class", XML_CLASSNAME, props.getClassId().getName());
142         assertEquals("wrong class package", PACKAGE, props.getClassId().getPackage());
143         assertEquals("wrong service path", XML_PATH, props.getServicePath());
144         assertEquals("wrong module name", XML_MODULE_NAME, props.getModuleName());
145         assertEquals("wrong module key", XML_MODULE_KEY, props.getModuleKey());
146         assertEquals("wrong description", XML_DESCRIPTION, props.getDescription());
147         assertEquals("wrong i18n name key", XML_I18N_NAME_KEY, props.getNameI18nKey());
148         assertEquals("wrong i18n desc key", XML_I18N_DESCRIPTION_KEY, props.getDescriptionI18nKey());
149         assertFalse("isSoap should be false", props.isSoap());
150     }
151 
152     @Test
153     public void advancedXmlPropertiesAreValid() throws PrompterException
154     {
155         when(prompter.prompt("[S]OAP or [X]ML-RPC?", RPCPrompter.RPC_ANSWERS, "S")).thenReturn("X");
156         when(prompter.prompt("Enter Interface name", "MYXmlEndpoint")).thenReturn(XML_INTERFACE);
157         when(prompter.prompt("Enter Interface package", AbstractModulePrompter.DEFAULT_BASE_PACKAGE + ".jira.rpc")).thenReturn(PACKAGE);
158         when(prompter.prompt("Enter Class name", "MyXmlEndpointImpl")).thenReturn(XML_CLASSNAME);
159         when(prompter.prompt("Enter Package Name", PACKAGE)).thenReturn(PACKAGE);
160         when(prompter.prompt("Enter Service Path", "myxmlendpoint-v1")).thenReturn(XML_PATH);
161         when(prompter.prompt("Show Advanced Setup?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("Y");
162 
163         when(prompter.prompt(MODULE_NAME_PROMPT, XML_MODULE_NAME)).thenReturn(ADV_MODULE_NAME);
164         when(prompter.prompt(MODULE_KEY_PROMPT, XML_MODULE_KEY)).thenReturn(ADV_MODULE_KEY);
165         when(prompter.prompt(MODULE_DESCRIP_PROMPT, XML_DESCRIPTION)).thenReturn(ADV_DESCRIPTION);
166         when(prompter.prompt("i18n Name Key", XML_I18N_NAME_KEY)).thenReturn(ADV_I18N_NAME_KEY);
167         when(prompter.prompt("i18n Description Key", XML_I18N_DESCRIPTION_KEY)).thenReturn(ADV_I18N_DESCRIPTION_KEY);
168 
169         when(prompter.prompt("Include Example Code?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
170 
171         RPCPrompter modulePrompter = new RPCPrompter(prompter);
172         modulePrompter.setUseAnsiColor(false);
173         RPCProperties props = modulePrompter.getModulePropertiesFromInput(moduleLocation);
174 
175         assertEquals("wrong adv interface", XML_INTERFACE, props.getInterfaceId().getName());
176         assertEquals("wrong adv interface package", PACKAGE, props.getInterfaceId().getPackage());
177         assertEquals("wrong adv class", XML_CLASSNAME, props.getClassId().getName());
178         assertEquals("wrong adv package", PACKAGE, props.getClassId().getPackage());
179         assertEquals("wrong adv service path", XML_PATH, props.getServicePath());
180         assertEquals("wrong adv module name", ADV_MODULE_NAME, props.getModuleName());
181         assertEquals("wrong adv module key", ADV_MODULE_KEY, props.getModuleKey());
182         assertEquals("wrong adv description", ADV_DESCRIPTION, props.getDescription());
183         assertEquals("wrong adv i18n name key", ADV_I18N_NAME_KEY, props.getNameI18nKey());
184         assertEquals("wrong adv i18n desc key", ADV_I18N_DESCRIPTION_KEY, props.getDescriptionI18nKey());
185         assertFalse("isSoap should be false", props.isSoap());
186     }
187 }