1 package com.atlassian.sal.api.features;
2
3 import com.atlassian.plugin.PluginParseException;
4 import org.junit.Test;
5 import org.junit.runner.RunWith;
6 import org.mockito.Mock;
7 import org.mockito.runners.MockitoJUnitRunner;
8
9 import javax.annotation.Nullable;
10 import java.util.Collections;
11 import java.util.Map;
12
13 import static org.junit.Assert.assertFalse;
14 import static org.junit.Assert.assertTrue;
15 import static org.mockito.Matchers.anyString;
16 import static org.mockito.Mockito.when;
17
18 @RunWith(MockitoJUnitRunner.class)
19 public class TestDarkFeatureEnabledCondition
20 {
21 private static final Map<String,Object> EMPTY_CONTEXT = Collections.emptyMap();
22 private static final String FEATURE_KEY = "feature.key";
23
24 @Mock private DarkFeatureManager darkFeatureManager;
25
26 @Test
27 public void featureEnabled()
28 {
29 when(darkFeatureManager.isFeatureEnabledForCurrentUser(FEATURE_KEY)).thenReturn(Boolean.TRUE);
30 assertTrue(createAndInitWithFeatureKey(FEATURE_KEY).shouldDisplay(EMPTY_CONTEXT));
31 }
32
33 @Test
34 public void featureDisabled()
35 {
36 when(darkFeatureManager.isFeatureEnabledForCurrentUser(FEATURE_KEY)).thenReturn(Boolean.FALSE);
37 assertFalse(createAndInitWithFeatureKey(FEATURE_KEY).shouldDisplay(EMPTY_CONTEXT));
38 }
39
40 @Test
41 public void exceptionThrownByFeatureManagerGracefullyHandled()
42 {
43 when(darkFeatureManager.isFeatureEnabledForCurrentUser(anyString())).thenThrow(new RuntimeException());
44 assertFalse(createAndInitWithFeatureKey(FEATURE_KEY).shouldDisplay(EMPTY_CONTEXT));
45 }
46
47 @Test
48 public void nullContextIgnored()
49 {
50 assertFalse(createAndInitWithFeatureKey(FEATURE_KEY).shouldDisplay(null));
51 }
52
53 @Test(expected = InvalidFeatureKeyException.class)
54 public void invalidFeatureKeyCausesException()
55 {
56 createAndInitWithFeatureKey(" invalid ");
57 }
58
59 @Test(expected = InvalidFeatureKeyException.class)
60 public void nullFeatureKeyCausesException()
61 {
62 createAndInitWithFeatureKey(null);
63 }
64
65 @Test(expected = InvalidFeatureKeyException.class)
66 public void emptyFeatureKeyCausesException()
67 {
68 createAndInitWithFeatureKey("");
69 }
70
71 @Test(expected = PluginParseException.class)
72 public void missingFeatureKeyCausesException()
73 {
74 createCondition().init(Collections.<String, String>emptyMap());
75 }
76
77 private DarkFeatureEnabledCondition createAndInitWithFeatureKey(@Nullable final String featureKey)
78 {
79 final DarkFeatureEnabledCondition condition = createCondition();
80 condition.init(Collections.singletonMap("featureKey", featureKey));
81 return condition;
82 }
83
84 private DarkFeatureEnabledCondition createCondition()
85 {
86 return new DarkFeatureEnabledCondition(darkFeatureManager);
87 }
88 }