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