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   * @since 3.6
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 }