View Javadoc
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  }