1 package com.atlassian.maven.plugins.amps.codegen.prompter.common.web;
2
3 import java.util.Arrays;
4 import java.util.List;
5
6 import com.atlassian.maven.plugins.amps.codegen.prompter.AbstractModulePrompter;
7 import com.atlassian.maven.plugins.amps.codegen.prompter.AbstractPrompterTest;
8 import com.atlassian.maven.plugins.amps.codegen.prompter.PluginModulePrompter;
9 import com.atlassian.plugins.codegen.modules.common.Condition;
10 import com.atlassian.plugins.codegen.modules.common.Conditional;
11 import com.atlassian.plugins.codegen.modules.common.Conditions;
12 import com.atlassian.plugins.codegen.modules.common.Resource;
13 import com.atlassian.plugins.codegen.modules.common.web.WebResourceProperties;
14 import com.atlassian.plugins.codegen.modules.common.web.WebResourceTransformation;
15
16 import org.apache.commons.lang.StringUtils;
17 import org.codehaus.plexus.components.interactivity.Prompter;
18 import org.codehaus.plexus.components.interactivity.PrompterException;
19 import org.junit.Before;
20 import org.junit.Test;
21
22 import static org.junit.Assert.assertEquals;
23 import static org.junit.Assert.assertTrue;
24 import static org.mockito.Mockito.mock;
25 import static org.mockito.Mockito.when;
26
27
28
29
30 public class WebResourcePrompterTest extends AbstractPrompterTest
31 {
32 public static final String MODULE_NAME = "My Web Resource";
33 public static final String MODULE_KEY = "my-web-resource";
34 public static final String DESCRIPTION = "The My Web Resource Plugin";
35 public static final String I18N_NAME_KEY = "my-web-resource.name";
36 public static final String I18N_DESCRIPTION_KEY = "my-web-resource.description";
37
38 public static final String ADV_MODULE_NAME = "My Awesome Plugin";
39 public static final String ADV_MODULE_KEY = "awesome-module";
40 public static final String ADV_DESCRIPTION = "The Awesomest Plugin Ever";
41 public static final String ADV_I18N_NAME_KEY = "awesome-plugin.name";
42 public static final String ADV_I18N_DESCRIPTION_KEY = "pluginus-awesomeous.description";
43
44 public static final String RESOURCE_NAME = "resourceCSS";
45 public static final String RESOURCE_NAME_PATTERN = "templates/*.vm";
46 public static final String DOWNLOAD_TYPE = "download";
47 public static final String VELOCITY_TYPE = "velocity";
48 public static final String RESOURCE_CSS_PATH = "templates/resource.css";
49 public static final String RESOURCE_VM_PATH = "templates/resource.vm";
50 public static final String PARAM_KEY = "paramKey";
51 public static final String PARAM_VAL = "paramVal";
52 public static final String DEPENDENCY = "web.resources:ajs";
53
54 public static final String CUSTOM_CONTEXT = "my.context";
55 public static final String TRANS_EXTENSION = "css";
56 public static final String TRANS_KEY = "template";
57
58 public static final String CONDITIONS_TYPE = "AND";
59 public static final String CUSTOM_CONDITION = "com.atlassian.plugins.web.CustomCondition";
60
61 Prompter prompter;
62
63 @Before
64 public void setup()
65 {
66 prompter = mock(Prompter.class);
67 }
68
69 @Test
70 public void basicPropertiesAreValid() throws PrompterException
71 {
72 when(prompter.prompt("Enter Plugin Module Name", "My Web Resource")).thenReturn(MODULE_NAME);
73
74 when(prompter.prompt("Enter Resource Name (leave blank to use namePattern)")).thenReturn(RESOURCE_NAME)
75 .thenReturn("");
76 when(prompter.prompt("Enter Resource Name Pattern")).thenReturn(RESOURCE_NAME_PATTERN);
77 when(prompter.prompt("Enter Resource Type", "download")).thenReturn(DOWNLOAD_TYPE)
78 .thenReturn(VELOCITY_TYPE);
79 when(prompter.prompt("Enter Location (path to resource file)")).thenReturn(RESOURCE_CSS_PATH)
80 .thenReturn(RESOURCE_VM_PATH);
81 when(prompter.prompt("Add Resource Parameter?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("Y")
82 .thenReturn("N");
83 when(prompter.prompt("params:\nparamKey->paramVal\nAdd Resource Parameter?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
84 when(prompter.prompt("param name")).thenReturn(PARAM_KEY);
85 when(prompter.prompt("param value")).thenReturn(PARAM_VAL);
86 when(prompter.prompt("Add Resource", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("Y")
87 .thenReturn("N");
88
89 when(prompter.prompt("Show Advanced Setup?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
90 when(prompter.prompt("Include Example Code?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
91
92 WebResourcePrompter modulePrompter = new WebResourcePrompter(prompter);
93 modulePrompter.setUseAnsiColor(false);
94 WebResourceProperties props = modulePrompter.getModulePropertiesFromInput(moduleLocation);
95
96 assertEquals("wrong module name", MODULE_NAME, props.getModuleName());
97 assertEquals("wrong module key", MODULE_KEY, props.getModuleKey());
98 assertEquals("wrong description", DESCRIPTION, props.getDescription());
99 assertEquals("wrong i18n name key", I18N_NAME_KEY, props.getNameI18nKey());
100 assertEquals("wrong i18n desc key", I18N_DESCRIPTION_KEY, props.getDescriptionI18nKey());
101 }
102
103 @Test
104 public void advancedPropertiesAreValid() throws PrompterException
105 {
106 when(prompter.prompt("Enter Plugin Module Name", "My Web Resource")).thenReturn(MODULE_NAME);
107
108 when(prompter.prompt("Enter Resource Name (leave blank to use namePattern)")).thenReturn(RESOURCE_NAME)
109 .thenReturn("");
110 when(prompter.prompt("Enter Resource Name Pattern")).thenReturn(RESOURCE_NAME_PATTERN);
111 when(prompter.prompt("Enter Resource Type", "download")).thenReturn(DOWNLOAD_TYPE)
112 .thenReturn(VELOCITY_TYPE);
113 when(prompter.prompt("Enter Location (path to resource file)")).thenReturn(RESOURCE_CSS_PATH)
114 .thenReturn(RESOURCE_VM_PATH);
115 when(prompter.prompt("Add Resource Parameter?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("Y")
116 .thenReturn("N");
117 when(prompter.prompt("params:\nparamKey->paramVal\nAdd Resource Parameter?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
118 when(prompter.prompt("param name")).thenReturn(PARAM_KEY);
119 when(prompter.prompt("param value")).thenReturn(PARAM_VAL);
120 when(prompter.prompt("Add Resource", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("Y")
121 .thenReturn("N");
122
123 when(prompter.prompt("Show Advanced Setup?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("Y");
124
125 when(prompter.prompt("Plugin Key", MODULE_KEY)).thenReturn(ADV_MODULE_KEY);
126 when(prompter.prompt("Plugin Description", DESCRIPTION)).thenReturn(ADV_DESCRIPTION);
127 when(prompter.prompt("i18n Name Key", I18N_NAME_KEY)).thenReturn(ADV_I18N_NAME_KEY);
128 when(prompter.prompt("i18n Description Key", I18N_DESCRIPTION_KEY)).thenReturn(ADV_I18N_DESCRIPTION_KEY);
129
130 when(prompter.prompt("Add Dependency?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("Y");
131 when(prompter.prompt("Enter Dependency")).thenReturn(DEPENDENCY);
132 when(prompter.prompt("values:\nweb.resources:ajs\nAdd Dependency?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
133
134 when(prompter.prompt("Add Web Resource Context?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("Y")
135 .thenReturn("Y")
136 .thenReturn("N");
137 when(prompter.prompt("Choose A Context\n1: atl.general\n2: atl.admin\n3: atl.userprofile\n4: Custom Context\nChoose a number: ", Arrays.asList("1", "2", "3", "4"), "1")).thenReturn("2");
138 when(prompter.prompt("Choose A Context\n1: atl.general\n2: atl.userprofile\n3: Custom Context\nChoose a number: ", Arrays.asList("1", "2", "3"), "1")).thenReturn("3");
139 when(prompter.prompt("Enter Context")).thenReturn(CUSTOM_CONTEXT);
140
141 when(prompter.prompt("Add Web Resource Transformation?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("Y")
142 .thenReturn("N");
143 when(prompter.prompt("File Extension")).thenReturn(TRANS_EXTENSION);
144 when(prompter.prompt("Transformer Key")).thenReturn(TRANS_KEY);
145 when(prompter.prompt("Add Transformer Key?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
146
147 when(prompter.prompt("Add Conditions?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("Y")
148 .thenReturn("N");
149 when(prompter.prompt("Condition Type", PluginModulePrompter.ANDOR_ANSWERS, "AND")).thenReturn(CONDITIONS_TYPE);
150 when(prompter.prompt("Enter Fully Qualified Condition Class", AbstractModulePrompter.DEFAULT_BASE_PACKAGE + ".web.condition.MyCondition")).thenReturn(CUSTOM_CONDITION);
151 when(prompter.prompt("Add Condition?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
152 when(prompter.prompt("Add Condition Parameter?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("Y")
153 .thenReturn("N");
154 when(prompter.prompt("params:\nparamKey->paramVal\nAdd Condition Parameter?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
155 when(prompter.prompt("Invert Condition?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("Y");
156
157 when(prompter.prompt("Include Example Code?", PluginModulePrompter.YN_ANSWERS, "N")).thenReturn("N");
158
159 WebResourcePrompter modulePrompter = new WebResourcePrompter(prompter);
160 modulePrompter.setUseAnsiColor(false);
161 WebResourceProperties props = modulePrompter.getModulePropertiesFromInput(moduleLocation);
162
163 assertEquals("wrong adv module name", MODULE_NAME, props.getModuleName());
164 assertEquals("wrong adv module key", ADV_MODULE_KEY, props.getModuleKey());
165 assertEquals("wrong adv description", ADV_DESCRIPTION, props.getDescription());
166 assertEquals("wrong adv i18n name key", ADV_I18N_NAME_KEY, props.getNameI18nKey());
167 assertEquals("wrong adv i18n desc key", ADV_I18N_DESCRIPTION_KEY, props.getDescriptionI18nKey());
168
169
170 List<Resource> resources = props.getResources();
171 assertTrue("resources not found", !resources.isEmpty());
172 assertEquals("wrong number of resources", 2, resources.size());
173
174 Resource cssResource = resources.get(0);
175 Resource vmResource = resources.get(1);
176
177 assertEquals("wrong css resource name", RESOURCE_NAME, cssResource.getName());
178 assertTrue("css name pattern found when name is set", StringUtils.isBlank(cssResource.getNamePattern()));
179 assertEquals("wrong css resource type", DOWNLOAD_TYPE, cssResource.getType());
180 assertEquals("wrong css resource location", RESOURCE_CSS_PATH, cssResource.getLocation());
181 assertEquals("wrong number of css resource params", 1, cssResource.getParams()
182 .size());
183 assertTrue("css resource param key not found", cssResource.getParams()
184 .containsKey(PARAM_KEY));
185 assertEquals("wrong css resource param value", PARAM_VAL, cssResource.getParams()
186 .get(PARAM_KEY));
187
188 assertTrue("vm name found when name pattern is set", StringUtils.isBlank(vmResource.getName()));
189 assertEquals("wrong vm resource name pattern", RESOURCE_NAME_PATTERN, vmResource.getNamePattern());
190 assertEquals("wrong vm resource type", VELOCITY_TYPE, vmResource.getType());
191 assertEquals("wrong vm resource location", RESOURCE_VM_PATH, vmResource.getLocation());
192 assertEquals("wrong number of vm resource params", 0, vmResource.getParams()
193 .size());
194
195
196 List<String> dependencies = props.getDependencies();
197 assertEquals("wrong number of dependencies", 1, dependencies.size());
198 assertEquals("wronf dependency value", DEPENDENCY, dependencies.get(0));
199
200
201 List<String> contexts = props.getContexts();
202 assertEquals("wrong number of contexts", 2, contexts.size());
203 assertTrue("admin context not found", contexts.contains("atl.admin"));
204 assertTrue("custom context not found", contexts.contains(CUSTOM_CONTEXT));
205
206
207 List<WebResourceTransformation> transformations = props.getTransformations();
208 assertEquals("wrong number of transformations", 1, transformations.size());
209
210 WebResourceTransformation transformation = transformations.get(0);
211 assertEquals("wrong transformation extension", TRANS_EXTENSION, transformation.getExtension());
212
213 List<String> keys = transformation.getTransformerKeys();
214 assertEquals("wrong number of transfromer keys", 1, keys.size());
215 assertEquals("worng transformer key", TRANS_KEY, keys.get(0));
216
217
218 List<Conditional> conditionals = props.getConditions();
219 assertEquals("wrong number of conditionals", 1, conditionals.size());
220
221 Conditional conditional = conditionals.get(0);
222 assertTrue("first conditional is not Conditions", (conditional instanceof Conditions));
223
224 Conditions conditions = (Conditions) conditional;
225 assertEquals("wrong conditions type", CONDITIONS_TYPE, conditions.getType());
226
227 List<Conditional> nestedConditions = conditions.getConditions();
228 assertEquals("wrong number of nested conditiomals", 1, nestedConditions.size());
229
230 Conditional nestedConditional = nestedConditions.get(0);
231 assertTrue("nested conditional is not a Condition", (nestedConditional instanceof Condition));
232
233 Condition condition = (Condition) nestedConditional;
234 assertEquals("wrong number of condition params", 1, condition.getParams()
235 .size());
236 assertTrue("condition param key not found", condition.getParams()
237 .containsKey(PARAM_KEY));
238 assertEquals("wrong condition param value", PARAM_VAL, condition.getParams()
239 .get(PARAM_KEY));
240
241 assertTrue("condition should be inverted", condition.isInvert());
242
243
244 }
245 }