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.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  }