1a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen/*
2a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen * Copyright (C) 2016 The Android Open Source Project
3a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen *
4a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen * Licensed under the Apache License, Version 2.0 (the "License");
5a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen * you may not use this file except in compliance with the License.
6a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen * You may obtain a copy of the License at
7a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen *
8a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen *      http://www.apache.org/licenses/LICENSE-2.0
9a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen *
10a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen * Unless required by applicable law or agreed to in writing, software
11a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen * distributed under the License is distributed on an "AS IS" BASIS,
12a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen * See the License for the specific language governing permissions and
14a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen * limitations under the License
15a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen */
16a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenpackage com.android.settings.datausage;
17a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen
18a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport android.content.Context;
19a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport android.content.DialogInterface;
20a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport android.content.SharedPreferences;
21a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport android.os.Bundle;
22a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport android.support.v7.preference.PreferenceManager;
239f1e911759dc6fedaac9fa65afb79f6a93022bf4Andrew Sappersteinimport com.android.settings.testutils.SettingsRobolectricTestRunner;
24a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport com.android.settings.TestConfig;
25a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport org.junit.Before;
26a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport org.junit.Test;
27a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport org.junit.runner.RunWith;
28a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport org.mockito.Mock;
29a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport org.mockito.MockitoAnnotations;
30a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport org.robolectric.RuntimeEnvironment;
31a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport org.robolectric.annotation.Config;
32a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen
33a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport static junit.framework.Assert.assertFalse;
34a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport static junit.framework.Assert.assertTrue;
35a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport static org.mockito.Matchers.anyLong;
36a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport static org.mockito.Mockito.never;
37a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport static org.mockito.Mockito.verify;
38a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenimport static org.mockito.Mockito.when;
39a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen
40f86905ed50f7a5543edb1b7425e0fa2db985de1cSalvador Martinez@RunWith(SettingsRobolectricTestRunner.class)
41a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
42a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chenpublic class BillingCycleSettingsTest {
43a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen
44a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    private static final int LIMIT_BYTES = 123;
45a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen
46a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    @Mock
47a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    BillingCycleSettings mMockBillingCycleSettings;
48a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    BillingCycleSettings.ConfirmLimitFragment mConfirmLimitFragment;
49a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    @Mock
50a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    PreferenceManager mMockPreferenceManager;
51a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    SharedPreferences mSharedPreferences;
52a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen
53a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    @Before
54a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    public void setUp() {
55a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        MockitoAnnotations.initMocks(this);
56a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        mConfirmLimitFragment = new BillingCycleSettings.ConfirmLimitFragment();
57a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        mConfirmLimitFragment.setTargetFragment(mMockBillingCycleSettings, 0);
58a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        mSharedPreferences = RuntimeEnvironment.application.getSharedPreferences(
59a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen                "testSharedPreferences", Context.MODE_PRIVATE);
60a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        when(mMockBillingCycleSettings.getPreferenceManager()).thenReturn(mMockPreferenceManager);
61a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        when(mMockPreferenceManager.getSharedPreferences()).thenReturn(mSharedPreferences);
62a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        final Bundle args = new Bundle();
63a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        args.putLong(BillingCycleSettings.ConfirmLimitFragment.EXTRA_LIMIT_BYTES, LIMIT_BYTES);
64a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        mConfirmLimitFragment.setArguments(args);
65a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        mSharedPreferences.edit().putBoolean(
66a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen                BillingCycleSettings.KEY_SET_DATA_LIMIT, false).apply();
67a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    }
68a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen
69a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    @Test
70a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    public void testDataUsageLimit_shouldNotBeSetOnCancel() {
71a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        mConfirmLimitFragment.onClick(null, DialogInterface.BUTTON_NEGATIVE);
72a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen
73a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        assertFalse(mSharedPreferences.getBoolean(BillingCycleSettings.KEY_SET_DATA_LIMIT, true));
74a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        verify(mMockBillingCycleSettings, never()).setPolicyLimitBytes(anyLong());
75a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    }
76a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen
77a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    @Test
78a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    public void testDataUsageLimit_shouldBeSetOnConfirmation() {
79a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        mConfirmLimitFragment.onClick(null, DialogInterface.BUTTON_POSITIVE);
80a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen
81a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        assertTrue(mSharedPreferences.getBoolean(BillingCycleSettings.KEY_SET_DATA_LIMIT, false));
82a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen        verify(mMockBillingCycleSettings).setPolicyLimitBytes(LIMIT_BYTES);
83a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen    }
84a88733aed81a08afd3404ca1609ab4f86d9bec2cStephen Chen}