19df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi/*
29df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi * Copyright (C) 2016 The Android Open Source Project
39df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi *
49df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi * Licensed under the Apache License, Version 2.0 (the "License"); you may not
59df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi * use this file except in compliance with the License. You may obtain a copy of
69df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi * the License at
79df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi *
89df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi * http://www.apache.org/licenses/LICENSE-2.0
99df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi *
109df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi * Unless required by applicable law or agreed to in writing, software
119df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
129df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
139df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi * License for the specific language governing permissions and limitations under
149df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi * the License.
159df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi */
169df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi
179df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishipackage com.android.storagemanager.deletionhelper;
189df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi
199df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishiimport android.content.Context;
20dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinezimport com.android.storagemanager.deletionhelper.AppsAsyncLoader.PackageInfo;
219df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishiimport com.android.storagemanager.testing.TestingConstants;
229df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishiimport org.junit.Before;
239df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishiimport org.junit.Test;
249df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishiimport org.junit.runner.RunWith;
259df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishiimport org.mockito.MockitoAnnotations;
269df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishiimport org.robolectric.RobolectricTestRunner;
279df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishiimport org.robolectric.RuntimeEnvironment;
289df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishiimport org.robolectric.annotation.Config;
299df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi
302e95e842919a07037094742b9b8c70fbd8be2d2eMatthew Fritzeimport static com.google.common.truth.Truth.assertThat;
319df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi
329df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi@RunWith(RobolectricTestRunner.class)
33fff597ce52cbc1693f1a3d781991e19c103e08f2Daniel Nishi@Config(manifest=TestingConstants.MANIFEST, sdk=TestingConstants.SDK_VERSION)
349df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishipublic class AppDeletionPreferenceTest {
3519927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez
369df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    private static final String TEST_PACKAGE_LABEL = "App";
379df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    private static final String TEST_PACKAGE_NAME = "com.package.mcpackageface";
3819927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez    public static final long KILOBYTE = 1024L;
3919927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez    public static final long HUNDRED_BYTES = 100L;
4019927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez    public static final String KB_STRING = "1.00KB";
4119927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez    public static final String HUNDRED_BYTE_STRING = "100B";
429df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    private Context mContext;
439df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi
449df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    @Before
459df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    public void setUp() throws Exception {
469df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi        MockitoAnnotations.initMocks(this);
479df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi        mContext = RuntimeEnvironment.application;
489df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    }
499df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi
509df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    @Test
519df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    public void testPreferenceSummary() {
52dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez        PackageInfo app =
53dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                new PackageInfo.Builder()
54dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .setDaysSinceLastUse(30)
55dd4f3f0854b75a6ee20587d0d000829f38433617Daniel Nishi                        .setDaysSinceFirstInstall(30)
56dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .setPackageName(TEST_PACKAGE_NAME)
5719927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez                        .setSize(KILOBYTE)
58dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .setLabel(TEST_PACKAGE_LABEL)
59dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .build();
60dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez        AppDeletionPreference preference = new AppDeletionPreference(mContext, app);
619df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi        preference.updateSummary();
629df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi
632e95e842919a07037094742b9b8c70fbd8be2d2eMatthew Fritze        assertThat(preference.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
642e95e842919a07037094742b9b8c70fbd8be2d2eMatthew Fritze        assertThat(preference.getTitle()).isEqualTo(TEST_PACKAGE_LABEL);
6519927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez        assertThat(preference.getSummary().toString()).isEqualTo("30 days ago");
6619927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez        assertThat(preference.getItemSize()).isEqualTo(KB_STRING);
679df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    }
689df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi
699df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    @Test
70888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez    public void testTwoDayPreferenceSummary() {
71888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        PackageInfo app =
72888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                new PackageInfo.Builder()
73888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setDaysSinceLastUse(2)
74888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setDaysSinceFirstInstall(30)
75888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setPackageName(TEST_PACKAGE_NAME)
76888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setSize(KILOBYTE)
77888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setLabel(TEST_PACKAGE_LABEL)
78888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .build();
79888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        AppDeletionPreference preference = new AppDeletionPreference(mContext, app);
80888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        preference.updateSummary();
81888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez
82888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        assertThat(preference.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
83888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        assertThat(preference.getTitle()).isEqualTo(TEST_PACKAGE_LABEL);
84888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        assertThat(preference.getSummary().toString()).isEqualTo("2 days ago");
85888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        assertThat(preference.getItemSize()).isEqualTo(KB_STRING);
86888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez    }
87888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez
88888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez    @Test
89888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez    public void testYesterdayPreferenceSummary() {
90888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        PackageInfo app =
91888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                new PackageInfo.Builder()
92888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setDaysSinceLastUse(1)
93888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setDaysSinceFirstInstall(30)
94888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setPackageName(TEST_PACKAGE_NAME)
95888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setSize(KILOBYTE)
96888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setLabel(TEST_PACKAGE_LABEL)
97888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .build();
98888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        AppDeletionPreference preference = new AppDeletionPreference(mContext, app);
99888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        preference.updateSummary();
100888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez
101888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        assertThat(preference.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
102888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        assertThat(preference.getTitle()).isEqualTo(TEST_PACKAGE_LABEL);
103888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        assertThat(preference.getSummary().toString()).isEqualTo("Yesterday");
104888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        assertThat(preference.getItemSize()).isEqualTo(KB_STRING);
105888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez    }
106888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez
107888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez    @Test
108888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez    public void testTodayPreferenceSummary() {
109888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        PackageInfo app =
110888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                new PackageInfo.Builder()
111888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setDaysSinceLastUse(0)
112888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setDaysSinceFirstInstall(30)
113888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setPackageName(TEST_PACKAGE_NAME)
114888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setSize(KILOBYTE)
115888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .setLabel(TEST_PACKAGE_LABEL)
116888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez                        .build();
117888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        AppDeletionPreference preference = new AppDeletionPreference(mContext, app);
118888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        preference.updateSummary();
119888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez
120888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        assertThat(preference.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
121888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        assertThat(preference.getTitle()).isEqualTo(TEST_PACKAGE_LABEL);
122888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        assertThat(preference.getSummary().toString()).isEqualTo("Today");
123888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez        assertThat(preference.getItemSize()).isEqualTo(KB_STRING);
124888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez    }
125888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez
126888d716205bf1dad9caa2950b7eccb5286bb947dSalvador Martinez    @Test
1279df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    public void testNeverUsedPreferenceSummary() {
128dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez        PackageInfo app =
129dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                new PackageInfo.Builder()
130dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .setDaysSinceLastUse(AppsAsyncLoader.NEVER_USED)
131dd4f3f0854b75a6ee20587d0d000829f38433617Daniel Nishi                        .setDaysSinceFirstInstall(30)
132dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .setPackageName(TEST_PACKAGE_NAME)
13319927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez                        .setSize(KILOBYTE)
134dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .setLabel(TEST_PACKAGE_LABEL)
135dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .build();
136dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez        AppDeletionPreference preference = new AppDeletionPreference(mContext, app);
1379df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi        preference.updateSummary();
1389df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi
1392e95e842919a07037094742b9b8c70fbd8be2d2eMatthew Fritze        assertThat(preference.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
1402e95e842919a07037094742b9b8c70fbd8be2d2eMatthew Fritze        assertThat(preference.getTitle()).isEqualTo(TEST_PACKAGE_LABEL);
14119927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez        assertThat(preference.getSummary().toString()).isEqualTo("Not used in last year");
14219927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez        assertThat(preference.getItemSize()).isEqualTo(KB_STRING);
1439df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    }
1449df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi
1459df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    @Test
1469df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    public void testUnknownLastUsePreferenceSummary() {
147dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez        PackageInfo app =
148dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                new PackageInfo.Builder()
149dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .setDaysSinceLastUse(AppsAsyncLoader.UNKNOWN_LAST_USE)
150dd4f3f0854b75a6ee20587d0d000829f38433617Daniel Nishi                        .setDaysSinceFirstInstall(30)
151dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .setPackageName(TEST_PACKAGE_NAME)
15219927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez                        .setSize(KILOBYTE)
153dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .setLabel(TEST_PACKAGE_LABEL)
154dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .build();
155dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez
156dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez        AppDeletionPreference preference = new AppDeletionPreference(mContext, app);
1579df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi        preference.updateSummary();
1589df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi
1592e95e842919a07037094742b9b8c70fbd8be2d2eMatthew Fritze        assertThat(preference.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
1602e95e842919a07037094742b9b8c70fbd8be2d2eMatthew Fritze        assertThat(preference.getTitle()).isEqualTo(TEST_PACKAGE_LABEL);
16119927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez        assertThat(preference.getSummary().toString()).isEqualTo("Not sure when last used");
16219927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez        assertThat(preference.getItemSize()).isEqualTo(KB_STRING);
1639df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    }
1649df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi
1659df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    @Test
1669df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    public void testSizeSummary() {
167dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez        PackageInfo app =
168dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                new PackageInfo.Builder()
169dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .setDaysSinceLastUse(30)
170dd4f3f0854b75a6ee20587d0d000829f38433617Daniel Nishi                        .setDaysSinceFirstInstall(30)
171dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .setPackageName(TEST_PACKAGE_NAME)
17219927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez                        .setSize(HUNDRED_BYTES)
173dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .setLabel(TEST_PACKAGE_LABEL)
174dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez                        .build();
175dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez
176dee882c960b4db9bae9f2c9144b84c6ba001a051Salvador Martinez        AppDeletionPreference preference = new AppDeletionPreference(mContext, app);
1779df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi        preference.updateSummary();
1789df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi
1792e95e842919a07037094742b9b8c70fbd8be2d2eMatthew Fritze        assertThat(preference.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
1802e95e842919a07037094742b9b8c70fbd8be2d2eMatthew Fritze        assertThat(preference.getTitle()).isEqualTo(TEST_PACKAGE_LABEL);
18119927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez        assertThat(preference.getSummary().toString()).isEqualTo("30 days ago");
18219927f56b15a4cb8820f6bf9189b17799e08a3f4Salvador Martinez        assertThat(preference.getItemSize()).isEqualTo(HUNDRED_BYTE_STRING);
1839df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi    }
1849df16b0531a5d16aee3731628af7a6580966e70bDaniel Nishi}
185