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
17package com.android.settings.print;
18
19import static org.mockito.Mockito.mock;
20import static org.mockito.Mockito.verify;
21import static org.mockito.Mockito.when;
22
23import android.app.Activity;
24import android.content.res.Resources;
25import android.print.PrintJob;
26import android.print.PrintJobInfo;
27import android.print.PrintManager;
28import android.printservice.PrintServiceInfo;
29
30import com.android.settings.R;
31import com.android.settings.TestConfig;
32import com.android.settings.dashboard.SummaryLoader;
33import com.android.settings.testutils.SettingsRobolectricTestRunner;
34
35import org.junit.Before;
36import org.junit.Test;
37import org.junit.runner.RunWith;
38import org.mockito.Mock;
39import org.mockito.Mockito;
40import org.mockito.MockitoAnnotations;
41import org.robolectric.annotation.Config;
42
43import java.util.ArrayList;
44import java.util.List;
45
46
47@RunWith(SettingsRobolectricTestRunner.class)
48@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
49public class PrintSettingsFragmentTest {
50
51    @Mock
52    private PrintSettingsFragment.PrintSummaryProvider.PrintManagerWrapper mPrintManager;
53    @Mock
54    private Activity mActivity;
55    @Mock
56    private Resources mRes;
57    @Mock
58    private SummaryLoader mSummaryLoader;
59    private SummaryLoader.SummaryProvider mSummaryProvider;
60
61    @Before
62    public void setUp() {
63        MockitoAnnotations.initMocks(this);
64        when(mActivity.getResources()).thenReturn(mRes);
65        mSummaryProvider = new PrintSettingsFragment.PrintSummaryProvider(mActivity, mSummaryLoader,
66                mPrintManager);
67    }
68
69    @Test
70    public void testSummary_hasActiveJob_shouldSetSummaryToNumberOfJobs() {
71        final List<PrintJob> printJobs = new ArrayList<>();
72        final PrintJob job = mock(PrintJob.class, Mockito.RETURNS_DEEP_STUBS);
73        printJobs.add(job);
74        when(job.getInfo().getState()).thenReturn(PrintJobInfo.STATE_STARTED);
75        when(mPrintManager.getPrintJobs()).thenReturn(printJobs);
76
77        mSummaryProvider.setListening(true);
78
79        verify(mRes).getQuantityString(R.plurals.print_jobs_summary, 1, 1);
80    }
81
82    @Test
83    public void testSummary_shouldSetSummaryToNumberOfPrintServices() {
84        final List<PrintServiceInfo> printServices = mock(List.class);
85        when(printServices.isEmpty()).thenReturn(false);
86        when(printServices.size()).thenReturn(2);
87        // 2 services
88        when(mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES))
89                .thenReturn(printServices);
90
91        mSummaryProvider.setListening(true);
92
93        verify(mRes).getQuantityString(R.plurals.print_settings_summary, 2, 2);
94
95        // No service
96        when(mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES)).thenReturn(null);
97
98        mSummaryProvider.setListening(true);
99
100        verify(mActivity).getString(R.string.print_settings_summary_no_service);
101    }
102}
103