1 package com.atlassian.plugins.codegen.modules.jira;
2
3 import java.io.File;
4 import java.util.List;
5 import java.util.regex.Matcher;
6
7 import com.atlassian.plugins.codegen.AbstractCodegenTestCase;
8 import com.atlassian.plugins.codegen.modules.PluginModuleLocation;
9
10 import org.dom4j.Document;
11 import org.dom4j.Node;
12 import org.junit.Before;
13 import org.junit.Test;
14
15 import static org.junit.Assert.*;
16
17
18
19
20 public class WebworkTest extends AbstractCodegenTestCase<WebworkProperties>
21 {
22 public static final String PACKAGE_NAME = "com.atlassian.plugins.jira.webwork";
23
24 @Before
25 public void runGenerator() throws Exception
26 {
27 setCreator(new WebworkModuleCreator());
28 setModuleLocation(new PluginModuleLocation.Builder(srcDir)
29 .resourcesDirectory(resourcesDir)
30 .testDirectory(testDir)
31 .templateDirectory(templateDir)
32 .build());
33
34 setProps(new WebworkProperties("My Webwork"));
35
36 props.setIncludeExamples(false);
37
38 }
39
40 @Test
41 public void singleActionFilesAreGenerated() throws Exception
42 {
43 ActionProperties action = new ActionProperties(PACKAGE_NAME + ".ActionOne");
44 props.addAction(action);
45 creator.createModule(moduleLocation, props);
46
47 String packagePath = PACKAGE_NAME.replaceAll("\\.", Matcher.quoteReplacement(File.separator));
48 assertTrue("action class not generated", new File(srcDir, packagePath + File.separator + "ActionOne.java").exists());
49 assertTrue("action test class not generated", new File(testDir, packagePath + File.separator + "ActionOneTest.java").exists());
50 assertTrue("plugin.xml not generated", new File(resourcesDir, "atlassian-plugin.xml").exists());
51
52 }
53
54 @Test
55 public void multipleActionFilesAreGenerated() throws Exception
56 {
57 ActionProperties action1 = new ActionProperties(PACKAGE_NAME + ".ActionOne");
58 ActionProperties action2 = new ActionProperties(PACKAGE_NAME + ".ActionTwo");
59 props.addAction(action1);
60 props.addAction(action2);
61 creator.createModule(moduleLocation, props);
62
63 String packagePath = PACKAGE_NAME.replaceAll("\\.", Matcher.quoteReplacement(File.separator));
64 assertTrue("action one class not generated", new File(srcDir, packagePath + File.separator + "ActionOne.java").exists());
65 assertTrue("action one test class not generated", new File(testDir, packagePath + File.separator + "ActionOneTest.java").exists());
66 assertTrue("action two class not generated", new File(srcDir, packagePath + File.separator + "ActionTwo.java").exists());
67 assertTrue("action two test class not generated", new File(testDir, packagePath + File.separator + "ActionTwoTest.java").exists());
68 assertTrue("plugin.xml not generated", new File(resourcesDir, "atlassian-plugin.xml").exists());
69
70 }
71
72 @Test
73 public void singleActionSingleViewModuleIsValid() throws Exception
74 {
75 String actionOneFQName = PACKAGE_NAME + ".ActionOne";
76 ActionProperties action = new ActionProperties(actionOneFQName);
77 View successView = new View("success", "templates/success.vm");
78 action.addView(successView);
79 props.addAction(action);
80 creator.createModule(moduleLocation, props);
81
82 String webworkXpath = "/atlassian-plugin/webwork1[@name='My Webwork' and @key='my-webwork' and @i18n-name-key='my-webwork.name']";
83
84 creator.createModule(moduleLocation, props);
85 Document pluginDoc = getXmlDocument(pluginXml);
86 Node webworkNode = pluginDoc.selectSingleNode(webworkXpath);
87
88 assertNotNull("valid webwork not found", webworkNode);
89
90 List<Node> actions = webworkNode.selectNodes("actions/action");
91 assertEquals("wrong number of actions found", 1, actions.size());
92
93 Node actionOneNode = webworkNode.selectSingleNode("actions/action[@name='" + actionOneFQName + "' and @alias='ActionOne']");
94 assertNotNull("action node not found", actionOneNode);
95
96 List<Node> views = actionOneNode.selectNodes("view");
97 assertEquals("wrong number of views", 1, views.size());
98
99 Node successNode = actionOneNode.selectSingleNode("view[@name='success' and text()='templates/success.vm']");
100 assertNotNull("success view not found", successNode);
101
102 File successFile = new File(moduleLocation.getTemplateDirectory(), "success.vm");
103 assertTrue("view file does not exist!", successFile.exists());
104 }
105
106 @Test
107 public void singleActionMultipleViewModuleIsValid() throws Exception
108 {
109 String actionOneFQName = PACKAGE_NAME + ".ActionOne";
110 ActionProperties action = new ActionProperties(actionOneFQName);
111 View successView = new View("success", "templates/success.vm");
112 View errorView = new View("error", "templates/error.vm");
113 action.addView(successView);
114 action.addView(errorView);
115 props.addAction(action);
116 creator.createModule(moduleLocation, props);
117
118 String webworkXpath = "/atlassian-plugin/webwork1[@name='My Webwork' and @key='my-webwork' and @i18n-name-key='my-webwork.name']";
119
120 creator.createModule(moduleLocation, props);
121 Document pluginDoc = getXmlDocument(pluginXml);
122 Node webworkNode = pluginDoc.selectSingleNode(webworkXpath);
123
124 assertNotNull("valid webwork not found", webworkNode);
125
126 List<Node> actions = webworkNode.selectNodes("actions/action");
127 assertEquals("wrong number of actions found", 1, actions.size());
128
129 Node actionOneNode = webworkNode.selectSingleNode("actions/action[@name='" + actionOneFQName + "' and @alias='ActionOne']");
130 assertNotNull("action node not found", actionOneNode);
131
132 List<Node> views = actionOneNode.selectNodes("view");
133 assertEquals("wrong number of views", 2, views.size());
134
135 Node successNode = actionOneNode.selectSingleNode("view[@name='success' and text()='templates/success.vm']");
136 assertNotNull("success view not found", successNode);
137
138 File successFile = new File(moduleLocation.getTemplateDirectory(), "success.vm");
139 assertTrue("success file does not exist!", successFile.exists());
140
141 Node errorNode = actionOneNode.selectSingleNode("view[@name='error' and text()='templates/error.vm']");
142 assertNotNull("error view not found", errorNode);
143
144 File errorFile = new File(moduleLocation.getTemplateDirectory(), "error.vm");
145 assertTrue("error file does not exist!", errorFile.exists());
146 }
147
148 @Test
149 public void multipleActionMultipleViewModuleIsValid() throws Exception
150 {
151 String actionOneFQName = PACKAGE_NAME + ".ActionOne";
152 String actionTwoFQName = PACKAGE_NAME + ".ActionTwo";
153
154 ActionProperties actionOne = new ActionProperties(actionOneFQName);
155 View successView = new View("success", "/templates/subdir/success.vm");
156 View errorView = new View("error", "templates/subdir/error.vm");
157 actionOne.addView(successView);
158 actionOne.addView(errorView);
159
160 ActionProperties actionTwo = new ActionProperties(actionTwoFQName);
161 View inputView = new View("input", "templates/input.vm");
162 actionTwo.addView(inputView);
163
164 props.addAction(actionOne);
165 props.addAction(actionTwo);
166 creator.createModule(moduleLocation, props);
167
168 String webworkXpath = "/atlassian-plugin/webwork1[@name='My Webwork' and @key='my-webwork' and @i18n-name-key='my-webwork.name']";
169
170 creator.createModule(moduleLocation, props);
171 Document pluginDoc = getXmlDocument(pluginXml);
172 Node webworkNode = pluginDoc.selectSingleNode(webworkXpath);
173
174 assertNotNull("valid webwork not found", webworkNode);
175
176 List<Node> actions = webworkNode.selectNodes("actions/action");
177 assertEquals("wrong number of actions found", 2, actions.size());
178
179 Node actionOneNode = webworkNode.selectSingleNode("actions/action[@name='" + actionOneFQName + "' and @alias='ActionOne']");
180 Node actionTwoNode = webworkNode.selectSingleNode("actions/action[@name='" + actionTwoFQName + "' and @alias='ActionTwo']");
181
182 assertNotNull("action one node not found", actionOneNode);
183 assertNotNull("action two node not found", actionTwoNode);
184
185 List<Node> viewsOne = actionOneNode.selectNodes("view");
186 assertEquals("actionOne - wrong number of views", 2, viewsOne.size());
187
188 List<Node> viewsTwo = actionTwoNode.selectNodes("view");
189 assertEquals("actionTwo - wrong number of views", 1, viewsTwo.size());
190
191 Node successNode = actionOneNode.selectSingleNode("view[@name='success' and text()='/templates/subdir/success.vm']");
192 assertNotNull("success view not found", successNode);
193
194 File successFile = new File(moduleLocation.getTemplateDirectory(), "subdir/success.vm");
195 assertTrue("success file does not exist!", successFile.exists());
196
197 Node errorNode = actionOneNode.selectSingleNode("view[@name='error' and text()='templates/subdir/error.vm']");
198 assertNotNull("error view not found", errorNode);
199
200 File errorFile = new File(moduleLocation.getTemplateDirectory(), "subdir/error.vm");
201 assertTrue("error file does not exist!", errorFile.exists());
202
203 Node inputNode = actionTwoNode.selectSingleNode("view[@name='input' and text()='templates/input.vm']");
204 assertNotNull("input view not found", inputNode);
205
206 File inputFile = new File(moduleLocation.getTemplateDirectory(), "input.vm");
207 assertTrue("input file does not exist!", inputFile.exists());
208 }
209
210 }