1 package com.atlassian.plugins.codegen.modules.jira;
2
3 import com.atlassian.plugins.codegen.AbstractModuleCreatorTestCase;
4 import com.atlassian.plugins.codegen.modules.common.Resource;
5
6 import org.junit.Before;
7 import org.junit.Test;
8
9 import static junit.framework.Assert.assertEquals;
10 import static junit.framework.Assert.assertNotNull;
11 import static org.junit.Assert.assertNull;
12
13
14
15
16 public class CustomFieldTest extends AbstractModuleCreatorTestCase<CustomFieldProperties>
17 {
18 public CustomFieldTest()
19 {
20 super("customfield-type", new CustomFieldModuleCreator());
21 }
22
23 @Before
24 public void setupProps() throws Exception
25 {
26 setProps(new CustomFieldProperties(PACKAGE_NAME + ".MyCustomField"));
27 props.setIncludeExamples(false);
28 }
29
30 @Test
31 public void classFileIsGenerated() throws Exception
32 {
33 getSourceFile(PACKAGE_NAME, "MyCustomField");
34 }
35
36 @Test
37 public void unitTestFileIsGenerated() throws Exception
38 {
39 getTestSourceFile(TEST_PACKAGE_NAME, "MyCustomFieldTest");
40 }
41
42 @Test
43 public void moduleHasDefaultKey() throws Exception
44 {
45 assertEquals("my-custom-field",
46 getGeneratedModule().attributeValue("key"));
47 }
48
49 @Test
50 public void moduleHasClass() throws Exception
51 {
52 assertEquals(PACKAGE_NAME + ".MyCustomField",
53 getGeneratedModule().attributeValue("class"));
54 }
55
56 @Test
57 public void resourceIsAdded() throws Exception
58 {
59 props.getResources().add(cssResource);
60
61 assertNotNull(getGeneratedModule().selectSingleNode("resource"));
62 }
63
64 @Test
65 public void resourceHasName() throws Exception
66 {
67 props.getResources().add(cssResource);
68
69 assertEquals("style.css", getGeneratedModule().selectSingleNode("resource/@name").getText());
70 }
71
72 @Test
73 public void resourceHasLocation() throws Exception
74 {
75 props.getResources().add(cssResource);
76
77 assertEquals("com/example/plugin/style.css", getGeneratedModule().selectSingleNode("resource/@location").getText());
78 }
79
80 @Test
81 public void resourceHasType() throws Exception
82 {
83 props.getResources().add(cssResource);
84
85 assertEquals("download", getGeneratedModule().selectSingleNode("resource/@type").getText());
86 }
87
88 @Test
89 public void namePatternResourceAdded() throws Exception
90 {
91 props.getResources().add(cssNamePatternResource);
92
93 assertNotNull(getGeneratedModule().selectSingleNode("resource"));
94 }
95
96 @Test
97 public void namePatternResourceHasNamePattern() throws Exception
98 {
99 props.getResources().add(cssNamePatternResource);
100
101 assertEquals("*.css", getGeneratedModule().selectSingleNode("resource/@namePattern").getText());
102 }
103
104 @Test
105 public void namePatternResourceHasLocation() throws Exception
106 {
107 props.getResources().add(cssNamePatternResource);
108
109 assertEquals("com/example/plugin", getGeneratedModule().selectSingleNode("resource/@location").getText());
110 }
111
112 @Test
113 public void namePatternResourceHasType() throws Exception
114 {
115 props.getResources().add(cssNamePatternResource);
116
117 assertEquals("download", getGeneratedModule().selectSingleNode("resource/@type").getText());
118 }
119
120 @Test
121 public void resourceNameChosenOverPattern() throws Exception
122 {
123 cssResource.setNamePattern("*.css");
124 props.getResources().add(cssResource);
125
126 assertNull(getGeneratedModule().selectSingleNode("resource/@namePattern"));
127 }
128
129 @Test
130 public void resourceParamHasName() throws Exception
131 {
132 cssResource.getParams().put("content-type", "text/css");
133 props.getResources().add(cssResource);
134
135 assertEquals("content-type", getGeneratedModule().selectSingleNode("resource/param/@name").getText());
136 }
137
138 @Test
139 public void resourceParamHasValue() throws Exception
140 {
141 cssResource.getParams().put("content-type", "text/css");
142 props.getResources().add(cssResource);
143
144 assertEquals("text/css", getGeneratedModule().selectSingleNode("resource/param/@value").getText());
145 }
146
147 @Test
148 public void secondResourceParamAdded() throws Exception
149 {
150 cssResource.getParams().put("content-type", "text/css");
151 cssResource.getParams().put("awesome", "me");
152 props.getResources().add(cssResource);
153
154 assertEquals("me", getGeneratedModule().selectSingleNode("resource/param[@name='awesome']/@value").getText());
155 }
156
157 @Test
158 public void allResourceParamsAdded() throws Exception
159 {
160 cssResource.getParams().put("content-type", "text/css");
161 cssResource.getParams().put("awesome", "me");
162 props.getResources().add(cssResource);
163
164 assertEquals(2, getGeneratedModule().selectNodes("resource/param").size());
165 }
166
167 @Test
168 public void secondResourceAdded() throws Exception
169 {
170 Resource resource2 = new Resource();
171 resource2.setName("custom.js");
172 resource2.setLocation("com/example/plugin/custom.js");
173 resource2.setType("download");
174
175 props.getResources().add(cssResource);
176 props.getResources().add(resource2);
177
178 assertEquals("com/example/plugin/custom.js",
179 getGeneratedModule().selectSingleNode("resource[@name='custom.js']/@location").getText());
180 }
181
182 @Test
183 public void allResourcesAdded() throws Exception
184 {
185 Resource resource2 = new Resource();
186 resource2.setName("custom.js");
187 resource2.setLocation("com/example/plugin/custom.js");
188 resource2.setType("download");
189
190 props.getResources().add(cssResource);
191 props.getResources().add(resource2);
192
193 assertEquals(2, getGeneratedModule().selectNodes("resource").size());
194 }
195 }