1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.applications.specialaccess.zenaccess;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import static org.mockito.ArgumentMatchers.any;
22 import static org.mockito.ArgumentMatchers.eq;
23 import static org.mockito.Mockito.verify;
24 
25 import android.app.NotificationManager;
26 import android.content.Context;
27 
28 import androidx.test.core.app.ApplicationProvider;
29 
30 import com.android.internal.logging.nano.MetricsProto;
31 import com.android.settings.testutils.FakeFeatureFactory;
32 import com.android.settings.testutils.shadow.ShadowNotificationManager;
33 
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.junit.runner.RunWith;
37 import org.robolectric.RobolectricTestRunner;
38 import org.robolectric.annotation.Config;
39 import org.robolectric.shadow.api.Shadow;
40 
41 @RunWith(RobolectricTestRunner.class)
42 public class ZenAccessControllerTest {
43 
44     private static final String TEST_PKG = "com.test.package";
45 
46     private FakeFeatureFactory mFeatureFactory;
47     private Context mContext;
48     private ZenAccessController mController;
49 
50     @Before
setUp()51     public void setUp() {
52         mContext = ApplicationProvider.getApplicationContext();
53         mFeatureFactory = FakeFeatureFactory.setupForTest();
54         mController = new ZenAccessController(mContext, "key");
55     }
56 
57     @Test
isAvailable_byDefault_true()58     public void isAvailable_byDefault_true() {
59         assertThat(mController.isAvailable()).isTrue();
60     }
61 
62     @Test
logSpecialPermissionChange()63     public void logSpecialPermissionChange() {
64         ZenAccessController.logSpecialPermissionChange(true, "app", mContext);
65         verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
66                 eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_DND_ALLOW),
67                 eq("app"));
68 
69         ZenAccessController.logSpecialPermissionChange(false, "app", mContext);
70         verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
71                 eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_DND_DENY),
72                 eq("app"));
73     }
74 
75     @Test
76     @Config(shadows = ShadowNotificationManager.class)
hasAccess_granted_yes()77     public void hasAccess_granted_yes() {
78         final ShadowNotificationManager snm = Shadow.extract(mContext.getSystemService(
79                 NotificationManager.class));
80         snm.setNotificationPolicyAccessGrantedForPackage(TEST_PKG);
81         assertThat(ZenAccessController.hasAccess(mContext, TEST_PKG)).isTrue();
82     }
83 
84     @Test
85     @Config(shadows = ShadowNotificationManager.class)
hasAccess_notGranted_no()86     public void hasAccess_notGranted_no() {
87         assertThat(ZenAccessController.hasAccess(mContext, TEST_PKG)).isFalse();
88     }
89 }
90