Home | History | Annotate | Download | only in applications
      1 /*
      2  * Copyright (C) 2017 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;
     18 
     19 import android.content.Context;
     20 
     21 import android.content.pm.ApplicationInfo;
     22 import android.content.pm.UserInfo;
     23 import android.os.UserManager;
     24 
     25 import com.android.settings.R;
     26 import com.android.settings.testutils.SettingsRobolectricTestRunner;
     27 import com.android.settings.TestConfig;
     28 import com.android.settings.dashboard.SummaryLoader;
     29 import com.android.settings.notification.NotificationBackend;
     30 
     31 import java.util.List;
     32 import java.util.ArrayList;
     33 
     34 import org.junit.Before;
     35 import org.junit.Test;
     36 import org.junit.runner.RunWith;
     37 import org.mockito.Mock;
     38 import org.mockito.MockitoAnnotations;
     39 import org.robolectric.annotation.Config;
     40 import org.robolectric.shadows.ShadowApplication;
     41 import org.robolectric.util.ReflectionHelpers;
     42 
     43 import static org.mockito.Matchers.anyInt;
     44 import static org.mockito.Matchers.anyString;
     45 import static org.mockito.Matchers.eq;
     46 import static org.mockito.Mockito.spy;
     47 import static org.mockito.Mockito.verify;
     48 import static org.mockito.Mockito.when;
     49 
     50 @RunWith(SettingsRobolectricTestRunner.class)
     51 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
     52 public class NotificationAppsTest {
     53 
     54     @Mock
     55     private PackageManagerWrapper mPackageManager;
     56     @Mock
     57     private UserManager mUserManager;
     58     @Mock
     59     private SummaryLoader mSummaryLoader;
     60     @Mock
     61     private NotificationBackend mBackend;
     62 
     63     private Context mContext;
     64     private NotificationApps.SummaryProvider mSummaryProvider;
     65 
     66     @Before
     67     public void setUp() {
     68         MockitoAnnotations.initMocks(this);
     69         ShadowApplication shadowApplication = ShadowApplication.getInstance();
     70         shadowApplication.setSystemService(Context.USER_SERVICE, mUserManager);
     71         mContext = shadowApplication.getApplicationContext();
     72         mSummaryProvider = spy(new NotificationApps.SummaryProvider(mContext, mSummaryLoader));
     73         ReflectionHelpers.setField(mSummaryProvider, "mNotificationBackend", mBackend);
     74         ReflectionHelpers.setField(mSummaryProvider, "mPackageManager", mPackageManager);
     75     }
     76 
     77     @Test
     78     public void setListening_shouldSetSummary() {
     79         List<UserInfo> userInfos = new ArrayList<>();
     80         userInfos.add(new UserInfo(1, "user1", 0));
     81         when(mUserManager.getProfiles(anyInt())).thenReturn(userInfos);
     82         List<ApplicationInfo> appInfos = new ArrayList<>();
     83         ApplicationInfo info1 = new ApplicationInfo();
     84         info1.packageName = "package1";
     85         appInfos.add(info1);
     86         ApplicationInfo info2 = new ApplicationInfo();
     87         info2.packageName = "package2";
     88         appInfos.add(info2);
     89         when(mPackageManager.getInstalledApplicationsAsUser(anyInt(), anyInt()))
     90             .thenReturn(appInfos);
     91 
     92         // no notification off
     93         when(mBackend.getNotificationsBanned(anyString(), anyInt())).thenReturn(false);
     94         mSummaryProvider.setListening(true);
     95         ShadowApplication.runBackgroundTasks();
     96         verify(mSummaryLoader).setSummary(mSummaryProvider,
     97             mContext.getString(R.string.notification_summary_none));
     98 
     99         // some notification off
    100         when(mBackend.getNotificationsBanned(eq("package1"), anyInt())).thenReturn(true);
    101         mSummaryProvider.setListening(true);
    102         ShadowApplication.runBackgroundTasks();
    103         verify(mSummaryLoader).setSummary(mSummaryProvider,
    104             mContext.getResources().getQuantityString(R.plurals.notification_summary, 1, 1));
    105 
    106         when(mBackend.getNotificationsBanned(eq("package2"), anyInt())).thenReturn(true);
    107         mSummaryProvider.setListening(true);
    108         ShadowApplication.runBackgroundTasks();
    109         verify(mSummaryLoader).setSummary(mSummaryProvider,
    110             mContext.getResources().getQuantityString(R.plurals.notification_summary, 2, 2));
    111     }
    112 
    113 }
    114