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  import static org.junit.Assert.assertTrue;
13  
14  /**
15   * @since 3.6
16   */
17  public class CustomFieldSearcherTest extends AbstractModuleCreatorTestCase<CustomFieldSearcherProperties>
18  {
19      
20      public CustomFieldSearcherTest()
21      {
22          super("customfield-searcher", new CustomFieldSearcherModuleCreator());
23      }
24  
25      @Before
26      public void setupProps() throws Exception
27      {
28          setProps(new CustomFieldSearcherProperties(PACKAGE_NAME + ".MyCustomFieldSearcher"));
29          props.setIncludeExamples(false);
30      }
31  
32      @Test
33      public void customClassFileIsGenerated() throws Exception
34      {
35          props.setGenerateClass(true);
36          
37          getSourceFile(PACKAGE_NAME, "MyCustomFieldSearcher");
38      }
39  
40      @Test
41      public void customUnitTestFileIsGenerated() throws Exception
42      {
43          props.setGenerateClass(true);
44          
45          getTestSourceFile(PACKAGE_NAME, "MyCustomFieldSearcherTest");
46      }
47  
48      @Test
49      public void genericClassFilesAreNotGenerated() throws Exception
50      {
51          props.setGenerateClass(false);
52          
53          assertTrue(getChangesetForModule().getSourceFiles().isEmpty());
54      }
55      
56      @Test
57      public void moduleHasDefaultKey() throws Exception
58      {
59          assertEquals("my-custom-field-searcher",
60                       getGeneratedModule().attributeValue("key"));
61      }
62      
63      @Test
64      public void moduleHasClass() throws Exception
65      {
66          assertEquals(PACKAGE_NAME + ".MyCustomFieldSearcher",
67                       getGeneratedModule().attributeValue("class"));
68      }
69  
70      @Test
71      public void moduleHasValidCustomFieldPackage() throws Exception
72      {
73          props.setValidCustomFieldPackage("com.atlassian.customfields");
74          props.setValidCustomFieldKey("some-searcher");
75  
76          assertEquals("com.atlassian.customfields", getGeneratedModule().selectSingleNode("valid-customfield-type/@package").getText());
77      }
78  
79      @Test
80      public void moduleHasValidCustomFieldKey() throws Exception
81      {
82          props.setValidCustomFieldPackage("com.atlassian.customfields");
83          props.setValidCustomFieldKey("some-searcher");
84  
85          assertEquals("some-searcher", getGeneratedModule().selectSingleNode("valid-customfield-type/@key").getText());
86      }
87  
88      @Test
89      public void resourceIsAdded() throws Exception
90      {
91          props.getResources().add(cssResource);
92          
93          assertNotNull(getGeneratedModule().selectSingleNode("resource"));
94      }
95      
96      @Test
97      public void resourceHasName() throws Exception
98      {
99          props.getResources().add(cssResource);
100         
101         assertEquals("style.css", getGeneratedModule().selectSingleNode("resource/@name").getText());
102     }
103 
104     @Test
105     public void resourceHasLocation() throws Exception
106     {
107         props.getResources().add(cssResource);
108 
109         assertEquals("com/example/plugin/style.css", getGeneratedModule().selectSingleNode("resource/@location").getText());
110     }
111     
112     @Test
113     public void resourceHasType() throws Exception
114     {
115         props.getResources().add(cssResource);
116 
117         assertEquals("download", getGeneratedModule().selectSingleNode("resource/@type").getText());
118     }
119 
120     @Test
121     public void namePatternResourceAdded() throws Exception
122     {
123         props.getResources().add(cssNamePatternResource);
124 
125         assertNotNull(getGeneratedModule().selectSingleNode("resource"));
126     }
127     
128     @Test
129     public void namePatternResourceHasNamePattern() throws Exception
130     {
131         props.getResources().add(cssNamePatternResource);
132         
133         assertEquals("*.css", getGeneratedModule().selectSingleNode("resource/@namePattern").getText());
134     }
135 
136     @Test
137     public void namePatternResourceHasLocation() throws Exception
138     {
139         props.getResources().add(cssNamePatternResource);
140         
141         assertEquals("com/example/plugin", getGeneratedModule().selectSingleNode("resource/@location").getText());
142     }
143 
144     @Test
145     public void namePatternResourceHasType() throws Exception
146     {
147         props.getResources().add(cssNamePatternResource);
148 
149         assertEquals("download", getGeneratedModule().selectSingleNode("resource/@type").getText());
150     }
151 
152     @Test
153     public void resourceNameChosenOverPattern() throws Exception
154     {
155         cssResource.setNamePattern("*.css");
156         props.getResources().add(cssResource);
157 
158         assertNull(getGeneratedModule().selectSingleNode("resource/@namePattern"));
159     }
160 
161     @Test
162     public void resourceParamHasName() throws Exception
163     {
164         cssResource.getParams().put("content-type", "text/css");
165         props.getResources().add(cssResource);
166 
167         assertEquals("content-type", getGeneratedModule().selectSingleNode("resource/param/@name").getText());
168     }
169 
170     @Test
171     public void resourceParamHasValue() throws Exception
172     {
173         cssResource.getParams().put("content-type", "text/css");
174         props.getResources().add(cssResource);
175 
176         assertEquals("text/css", getGeneratedModule().selectSingleNode("resource/param/@value").getText());
177     }
178     
179     @Test
180     public void secondResourceParamAdded() throws Exception
181     {
182         cssResource.getParams().put("content-type", "text/css");
183         cssResource.getParams().put("awesome", "me");
184         props.getResources().add(cssResource);
185         
186         assertEquals("me", getGeneratedModule().selectSingleNode("resource/param[@name='awesome']/@value").getText());
187     }
188 
189     @Test
190     public void allResourceParamsAdded() throws Exception
191     {
192         cssResource.getParams().put("content-type", "text/css");
193         cssResource.getParams().put("awesome", "me");
194         props.getResources().add(cssResource);
195         
196         assertEquals(2, getGeneratedModule().selectNodes("resource/param").size());
197     }
198 
199     @Test
200     public void secondResourceAdded() throws Exception
201     {
202         Resource resource2 = new Resource();
203         resource2.setName("custom.js");
204         resource2.setLocation("com/example/plugin/custom.js");
205         resource2.setType("download");
206 
207         props.getResources().add(cssResource);
208         props.getResources().add(resource2);
209         
210         assertEquals("com/example/plugin/custom.js",
211                      getGeneratedModule().selectSingleNode("resource[@name='custom.js']/@location").getText());
212     }
213 
214     @Test
215     public void allResourcesAdded() throws Exception
216     {
217         Resource resource2 = new Resource();
218         resource2.setName("custom.js");
219         resource2.setLocation("com/example/plugin/custom.js");
220         resource2.setType("download");
221 
222         props.getResources().add(cssResource);
223         props.getResources().add(resource2);
224         
225         assertEquals(2, getGeneratedModule().selectNodes("resource").size());
226     }
227 }