1 package com.atlassian.plugin.manager;
2
3 import com.atlassian.plugin.ModuleDescriptor;
4 import com.atlassian.plugin.PluginRestartState;
5 import com.atlassian.plugin.descriptors.AbstractModuleDescriptor;
6 import com.atlassian.plugin.impl.StaticPlugin;
7 import junit.framework.TestCase;
8
9 import java.util.Map;
10
11 public class TestDefaultPluginPersistentState extends TestCase
12 {
13 public void testSetEnabledPlugin()
14 {
15 PluginPersistentState state = new DefaultPluginPersistentState();
16 final StaticPlugin plugin = createMockPlugin("mock.plugin.key", true);
17 state = PluginPersistentState.Builder.create(state).setEnabled(plugin, true).toState();
18 assertTrue(state.isEnabled(plugin));
19 state = PluginPersistentState.Builder.create(state).setEnabled(plugin, false).toState();
20 assertFalse(state.isEnabled(plugin));
21 }
22
23 public void testSetEnabledModuleDescriptor()
24 {
25 PluginPersistentState state = new DefaultPluginPersistentState();
26 final ModuleDescriptor<?> module = createModule("mock.plugin.key", "module.key");
27 state = PluginPersistentState.Builder.create(state).setEnabled(module, true).toState();
28 assertTrue(state.isEnabled(module));
29 state = PluginPersistentState.Builder.create(state).setEnabled(module, false).toState();
30 assertFalse(state.isEnabled(module));
31 }
32
33 public void testGetPluginStateMap()
34 {
35 final StaticPlugin plugin1 = createMockPlugin("mock.plugin.key", true);
36 final StaticPlugin plugin2 = createMockPlugin("two.mock.plugin.key", true);
37 final ModuleDescriptor<?> module1 = createModule("mock.plugin.key", "module.key.1");
38 final ModuleDescriptor<?> module2 = createModule("mock.plugin.key", "module.key.2");
39 final ModuleDescriptor<?> module3 = createModule("mock.plugin.key", "module.key.3");
40
41
42 final PluginPersistentState.Builder builder = PluginPersistentState.Builder.create();
43 builder.setEnabled(plugin1, !plugin1.isEnabledByDefault());
44 builder.setEnabled(plugin2, !plugin1.isEnabledByDefault());
45 builder.setEnabled(module1, !module1.isEnabledByDefault());
46 builder.setEnabled(module2, !module2.isEnabledByDefault());
47 builder.setEnabled(module3, !module3.isEnabledByDefault());
48
49 final PluginPersistentState state = builder.toState();
50 final Map<String, Boolean> pluginStateMap = state.getPluginStateMap(plugin1);
51 final PluginPersistentState pluginState = new DefaultPluginPersistentState(pluginStateMap);
52
53 assertFalse(pluginState.isEnabled(plugin1) == plugin1.isEnabledByDefault());
54 assertFalse(pluginState.isEnabled(module1) == module1.isEnabledByDefault());
55 assertFalse(pluginState.isEnabled(module2) == module2.isEnabledByDefault());
56 assertFalse(pluginState.isEnabled(module3) == module3.isEnabledByDefault());
57
58 assertTrue(pluginState.isEnabled(plugin2) == plugin2.isEnabledByDefault());
59 }
60
61 public void testDefaultModuleStateIsNotStored()
62 {
63 final String pluginKey = "mock.plugin.key";
64 StaticPlugin plugin = createMockPlugin(pluginKey, true);
65 final PluginPersistentState.Builder builder = PluginPersistentState.Builder.create();
66 builder.setEnabled(plugin, true);
67 Map<String, Boolean> pluginStateMap = builder.toState().getPluginStateMap(plugin);
68 assertTrue(pluginStateMap.isEmpty());
69
70 builder.setEnabled(plugin, false);
71 pluginStateMap = builder.toState().getPluginStateMap(plugin);
72 assertFalse(pluginStateMap.isEmpty());
73
74 builder.removeState(pluginKey);
75
76 plugin = createMockPlugin(pluginKey, false);
77 builder.setEnabled(plugin, false);
78 pluginStateMap = builder.toState().getPluginStateMap(plugin);
79 assertTrue(pluginStateMap.isEmpty());
80 builder.setEnabled(plugin, true);
81 pluginStateMap = builder.toState().getPluginStateMap(plugin);
82 assertFalse(pluginStateMap.isEmpty());
83 }
84
85 public void testPluginRestartState()
86 {
87 PluginPersistentState state = new DefaultPluginPersistentState();
88 assertEquals(PluginRestartState.NONE, state.getPluginRestartState("foo"));
89
90 state = PluginPersistentState.Builder.create(state).setPluginRestartState("foo", PluginRestartState.REMOVE).toState();
91 assertEquals(PluginRestartState.REMOVE, state.getPluginRestartState("foo"));
92
93 PluginPersistentState stateCopy = new DefaultPluginPersistentState(state.getMap());
94 assertEquals(PluginRestartState.REMOVE, stateCopy.getPluginRestartState("foo"));
95 stateCopy = PluginPersistentState.Builder.create(state).clearPluginRestartState().toState();
96 assertEquals(PluginRestartState.NONE, stateCopy.getPluginRestartState("foo"));
97 assertEquals(PluginRestartState.REMOVE, state.getPluginRestartState("foo"));
98 }
99
100 public void testPluginRestartStateRemoveExisting()
101 {
102 final PluginPersistentState.Builder builder = PluginPersistentState.Builder.create();
103 builder.setPluginRestartState("foo", PluginRestartState.UPGRADE);
104 assertEquals(PluginRestartState.UPGRADE, builder.toState().getPluginRestartState("foo"));
105 builder.setPluginRestartState("foo", PluginRestartState.REMOVE);
106 assertEquals(PluginRestartState.REMOVE, builder.toState().getPluginRestartState("foo"));
107 }
108
109 private <T> ModuleDescriptor<T> createModule(final String pluginKey, final String moduleKey)
110 {
111 return new AbstractModuleDescriptor<T>()
112 {
113 @Override
114 public T getModule()
115 {
116 return null;
117 }
118
119 @Override
120 public String getCompleteKey()
121 {
122 return pluginKey + ':' + moduleKey;
123 }
124 };
125 }
126
127 private StaticPlugin createMockPlugin(final String pluginKey, final boolean enabledByDefault)
128 {
129 final StaticPlugin plugin = new StaticPlugin();
130 plugin.setKey(pluginKey);
131 plugin.setEnabledByDefault(enabledByDefault);
132 return plugin;
133 }
134
135 }