1   package com.atlassian.plugins.codegen.modules.common;
2   
3   import com.atlassian.plugins.codegen.AbstractCodegenTestCase;
4   
5   import org.dom4j.Element;
6   import org.junit.Before;
7   import org.junit.Test;
8   
9   import static org.junit.Assert.assertEquals;
10  import static org.junit.Assert.assertNull;
11  
12  /**
13   * @since 3.6
14   */
15  public class DownloadablePluginResourceTest extends AbstractCodegenTestCase<DownloadablePluginResourceProperties>
16  {
17      protected Resource cssResource;
18      protected Resource cssNamePatternResource;
19      
20      @Before
21      public void setup()
22      {
23          setCreator(new DownloadablePluginResourceModuleCreator());
24          
25          cssResource = new Resource();
26          cssResource.setName("style.css");
27          cssResource.setLocation("com/example/plugin/style.css");
28          cssResource.setType("download");
29  
30          cssNamePatternResource = new Resource();
31          cssNamePatternResource.setNamePattern("*.css");
32          cssNamePatternResource.setLocation("com/example/plugin");
33          cssNamePatternResource.setType("download");
34          
35          setProps(new DownloadablePluginResourceProperties(cssResource));
36      }
37      
38      @Test
39      public void resourceIsAdded() throws Exception
40      {
41          getGeneratedModule();
42      }
43      
44      @Test
45      public void resourceHasName() throws Exception
46      {
47          assertEquals("style.css", getGeneratedModule().attributeValue("name"));
48      }
49  
50      @Test
51      public void resourceHasLocation() throws Exception
52      {
53          assertEquals("com/example/plugin/style.css", getGeneratedModule().attributeValue("location"));
54      }
55      
56      @Test
57      public void resourceHasType() throws Exception
58      {
59          assertEquals("download", getGeneratedModule().attributeValue("type"));
60      }
61  
62      @Test
63      public void namePatternResourceAdded() throws Exception
64      {
65          setProps(new DownloadablePluginResourceProperties(cssNamePatternResource));
66  
67          getGeneratedModule();
68      }
69      
70      @Test
71      public void namePatternResourceHasNamePattern() throws Exception
72      {
73          setProps(new DownloadablePluginResourceProperties(cssNamePatternResource));
74          
75          assertEquals("*.css", getGeneratedModule().attributeValue("namePattern"));
76      }
77  
78      @Test
79      public void namePatternResourceHasLocation() throws Exception
80      {
81          setProps(new DownloadablePluginResourceProperties(cssNamePatternResource));
82          
83          assertEquals("com/example/plugin", getGeneratedModule().attributeValue("location"));
84      }
85  
86      @Test
87      public void namePatternResourceHasType() throws Exception
88      {
89          setProps(new DownloadablePluginResourceProperties(cssNamePatternResource));
90  
91          assertEquals("download", getGeneratedModule().attributeValue("type"));
92      }
93  
94      @Test
95      public void resourceNameChosenOverPattern() throws Exception
96      {
97          cssResource.setNamePattern("*.css");
98  
99          assertNull(getGeneratedModule().attributeValue("namePattern"));
100     }
101 
102     @Test
103     public void resourceParamHasName() throws Exception
104     {
105         cssResource.getParams().put("content-type", "text/css");
106 
107         assertEquals("content-type", getGeneratedModule().selectSingleNode("param/@name").getText());
108     }
109 
110     @Test
111     public void resourceParamHasValue() throws Exception
112     {
113         cssResource.getParams().put("content-type", "text/css");
114 
115         assertEquals("text/css", getGeneratedModule().selectSingleNode("param/@value").getText());
116     }
117     
118     @Test
119     public void secondResourceParamAdded() throws Exception
120     {
121         cssResource.getParams().put("content-type", "text/css");
122         cssResource.getParams().put("awesome", "me");
123         
124         assertEquals("me", getGeneratedModule().selectSingleNode("param[@name='awesome']/@value").getText());
125     }
126 
127     @Test
128     public void allResourceParamsAdded() throws Exception
129     {
130         cssResource.getParams().put("content-type", "text/css");
131         cssResource.getParams().put("awesome", "me");
132         
133         assertEquals(2, getGeneratedModule().selectNodes("param").size());
134     }
135     
136     protected Element getGeneratedModule() throws Exception
137     {
138         return getGeneratedModule("resource");
139     }
140 }