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