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.junit.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.ArgumentMatchers.anyString;
16 import static org.mockito.Mockito.when;
17
18 @RunWith(MockitoJUnitRunner.class)
19 public class TestDarkFeatureEnabledCondition {
20 private static final Map<String, Object> EMPTY_CONTEXT = Collections.emptyMap();
21 private static final String FEATURE_KEY = "feature.key";
22
23 @Mock
24 private DarkFeatureManager darkFeatureManager;
25
26 @Test
27 public void featureEnabled() {
28 when(darkFeatureManager.isFeatureEnabledForCurrentUser(FEATURE_KEY)).thenReturn(Boolean.TRUE);
29 assertTrue(createAndInitWithFeatureKey(FEATURE_KEY).shouldDisplay(EMPTY_CONTEXT));
30 }
31
32 @Test
33 public void featureDisabled() {
34 when(darkFeatureManager.isFeatureEnabledForCurrentUser(FEATURE_KEY)).thenReturn(Boolean.FALSE);
35 assertFalse(createAndInitWithFeatureKey(FEATURE_KEY).shouldDisplay(EMPTY_CONTEXT));
36 }
37
38 @Test
39 public void exceptionThrownByFeatureManagerGracefullyHandled() {
40 when(darkFeatureManager.isFeatureEnabledForCurrentUser(anyString())).thenThrow(new RuntimeException());
41 assertFalse(createAndInitWithFeatureKey(FEATURE_KEY).shouldDisplay(EMPTY_CONTEXT));
42 }
43
44 @Test
45 public void nullContextIgnored() {
46 assertFalse(createAndInitWithFeatureKey(FEATURE_KEY).shouldDisplay(null));
47 }
48
49 @Test(expected = InvalidFeatureKeyException.class)
50 public void invalidFeatureKeyCausesException() {
51 createAndInitWithFeatureKey(" invalid ");
52 }
53
54 @Test(expected = InvalidFeatureKeyException.class)
55 public void nullFeatureKeyCausesException() {
56 createAndInitWithFeatureKey(null);
57 }
58
59 @Test(expected = InvalidFeatureKeyException.class)
60 public void emptyFeatureKeyCausesException() {
61 createAndInitWithFeatureKey("");
62 }
63
64 @Test(expected = PluginParseException.class)
65 public void missingFeatureKeyCausesException() {
66 createCondition().init(Collections.<String, String>emptyMap());
67 }
68
69 private DarkFeatureEnabledCondition createAndInitWithFeatureKey(@Nullable final String featureKey) {
70 final DarkFeatureEnabledCondition condition = createCondition();
71 condition.init(Collections.singletonMap("featureKey", featureKey));
72 return condition;
73 }
74
75 private DarkFeatureEnabledCondition createCondition() {
76 return new DarkFeatureEnabledCondition(darkFeatureManager);
77 }
78 }