View Javadoc
1   package com.atlassian.plugin.schema.impl;
2   
3   import com.atlassian.plugin.RequirePermission;
4   import com.atlassian.plugin.descriptors.AbstractModuleDescriptor;
5   import com.atlassian.plugin.hostcontainer.HostContainer;
6   import com.atlassian.plugin.module.ModuleFactory;
7   import com.atlassian.plugin.schema.spi.Schema;
8   import com.google.common.collect.Iterables;
9   import org.junit.Before;
10  import org.junit.Test;
11  import org.junit.runner.RunWith;
12  import org.mockito.Mock;
13  import org.mockito.junit.MockitoJUnitRunner;
14  
15  import static org.junit.Assert.assertEquals;
16  import static org.junit.Assert.assertNotNull;
17  import static org.junit.Assert.assertNull;
18  import static org.junit.Assert.assertTrue;
19  
20  @RunWith(MockitoJUnitRunner.class)
21  public final class DefaultDescribedModuleDescriptorFactoryTest {
22      private DefaultDescribedModuleDescriptorFactory moduleDescriptorFactory;
23  
24      @Mock
25      private HostContainer hostContainer;
26  
27      @Before
28      public void setUp() {
29          moduleDescriptorFactory = new DefaultDescribedModuleDescriptorFactory(hostContainer);
30      }
31  
32      @Test
33      public void testGetSchemaForUnknownModuleTypeReturnsNull() {
34          assertNull(moduleDescriptorFactory.getSchema("type"));
35      }
36  
37      @Test
38      public void testGetSchemaForModuleTypeWithNoDefinedSchemaReturnsNull() {
39          moduleDescriptorFactory.addModuleDescriptor("type", TestModuleDescriptor.class);
40          assertNull(moduleDescriptorFactory.getSchema("type"));
41      }
42  
43      @Test
44      public void testGetSchemaForModuleTypeWithDefinedSchemaReturnsNotNull() {
45          moduleDescriptorFactory.addModuleDescriptor("test-module-type", TestModuleDescriptor.class);
46          final Schema schema = moduleDescriptorFactory.getSchema("test-module-type");
47          assertNotNull(schema);
48          assertTrue(Iterables.isEmpty(schema.getRequiredPermissions()));
49      }
50  
51      @Test
52      public void testGetSchemaForModuleTypeWithDefinedSchemaAndPermissions() {
53          moduleDescriptorFactory.addModuleDescriptor("test-module-type", TestModuleDescriptorWithRequirePermission.class);
54          final Schema schema = moduleDescriptorFactory.getSchema("test-module-type");
55          assertNotNull(schema);
56          assertEquals(1, Iterables.size(schema.getRequiredPermissions()));
57          assertEquals("a_required_permission", Iterables.getFirst(schema.getRequiredPermissions(), null));
58      }
59  
60      private static class TestModuleDescriptor extends AbstractModuleDescriptor {
61          public TestModuleDescriptor(ModuleFactory moduleFactory) {
62              super(moduleFactory);
63          }
64  
65          @Override
66          public Object getModule() {
67              throw new UnsupportedOperationException("Not implemented");
68          }
69      }
70  
71      @RequirePermission("a_required_permission")
72      private static class TestModuleDescriptorWithRequirePermission extends AbstractModuleDescriptor {
73          public TestModuleDescriptorWithRequirePermission(ModuleFactory moduleFactory) {
74              super(moduleFactory);
75          }
76  
77          @Override
78          public Object getModule() {
79              throw new UnsupportedOperationException("Not implemented");
80          }
81      }
82  }