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.runners.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 {
23 private DefaultDescribedModuleDescriptorFactory moduleDescriptorFactory;
24
25 @Mock
26 private HostContainer hostContainer;
27
28 @Before
29 public void setUp()
30 {
31 moduleDescriptorFactory = new DefaultDescribedModuleDescriptorFactory(hostContainer);
32 }
33
34 @Test
35 public void testGetSchemaForUnknownModuleTypeReturnsNull()
36 {
37 assertNull(moduleDescriptorFactory.getSchema("type"));
38 }
39
40 @Test
41 public void testGetSchemaForModuleTypeWithNoDefinedSchemaReturnsNull()
42 {
43 moduleDescriptorFactory.addModuleDescriptor("type", TestModuleDescriptor.class);
44 assertNull(moduleDescriptorFactory.getSchema("type"));
45 }
46
47 @Test
48 public void testGetSchemaForModuleTypeWithDefinedSchemaReturnsNotNull()
49 {
50 moduleDescriptorFactory.addModuleDescriptor("test-module-type", TestModuleDescriptor.class);
51 final Schema schema = moduleDescriptorFactory.getSchema("test-module-type");
52 assertNotNull(schema);
53 assertTrue(Iterables.isEmpty(schema.getRequiredPermissions()));
54 }
55
56 @Test
57 public void testGetSchemaForModuleTypeWithDefinedSchemaAndPermissions()
58 {
59 moduleDescriptorFactory.addModuleDescriptor("test-module-type", TestModuleDescriptorWithRequirePermission.class);
60 final Schema schema = moduleDescriptorFactory.getSchema("test-module-type");
61 assertNotNull(schema);
62 assertEquals(1, Iterables.size(schema.getRequiredPermissions()));
63 assertEquals("a_required_permission", Iterables.getFirst(schema.getRequiredPermissions(), null));
64 }
65
66 private static class TestModuleDescriptor extends AbstractModuleDescriptor
67 {
68 public TestModuleDescriptor(ModuleFactory moduleFactory)
69 {
70 super(moduleFactory);
71 }
72
73 @Override
74 public Object getModule()
75 {
76 throw new UnsupportedOperationException("Not implemented");
77 }
78 }
79
80 @RequirePermission("a_required_permission")
81 private static class TestModuleDescriptorWithRequirePermission extends AbstractModuleDescriptor
82 {
83 public TestModuleDescriptorWithRequirePermission(ModuleFactory moduleFactory)
84 {
85 super(moduleFactory);
86 }
87
88 @Override
89 public Object getModule()
90 {
91 throw new UnsupportedOperationException("Not implemented");
92 }
93 }
94 }