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 }