1/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy of
6 * 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, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations under
14 * the License.
15 */
16
17package com.android.storagemanager.deletionhelper;
18
19import android.content.Context;
20import com.android.storagemanager.deletionhelper.AppsAsyncLoader.PackageInfo;
21import com.android.storagemanager.testing.TestingConstants;
22import org.junit.Before;
23import org.junit.Test;
24import org.junit.runner.RunWith;
25import org.mockito.MockitoAnnotations;
26import org.robolectric.RobolectricTestRunner;
27import org.robolectric.RuntimeEnvironment;
28import org.robolectric.annotation.Config;
29
30import static com.google.common.truth.Truth.assertThat;
31
32@RunWith(RobolectricTestRunner.class)
33@Config(manifest=TestingConstants.MANIFEST, sdk=TestingConstants.SDK_VERSION)
34public class AppDeletionPreferenceTest {
35
36    private static final String TEST_PACKAGE_LABEL = "App";
37    private static final String TEST_PACKAGE_NAME = "com.package.mcpackageface";
38    public static final long KILOBYTE = 1024L;
39    public static final long HUNDRED_BYTES = 100L;
40    public static final String KB_STRING = "1.00KB";
41    public static final String HUNDRED_BYTE_STRING = "100B";
42    private Context mContext;
43
44    @Before
45    public void setUp() throws Exception {
46        MockitoAnnotations.initMocks(this);
47        mContext = RuntimeEnvironment.application;
48    }
49
50    @Test
51    public void testPreferenceSummary() {
52        PackageInfo app =
53                new PackageInfo.Builder()
54                        .setDaysSinceLastUse(30)
55                        .setDaysSinceFirstInstall(30)
56                        .setPackageName(TEST_PACKAGE_NAME)
57                        .setSize(KILOBYTE)
58                        .setLabel(TEST_PACKAGE_LABEL)
59                        .build();
60        AppDeletionPreference preference = new AppDeletionPreference(mContext, app);
61        preference.updateSummary();
62
63        assertThat(preference.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
64        assertThat(preference.getTitle()).isEqualTo(TEST_PACKAGE_LABEL);
65        assertThat(preference.getSummary().toString()).isEqualTo("30 days ago");
66        assertThat(preference.getItemSize()).isEqualTo(KB_STRING);
67    }
68
69    @Test
70    public void testTwoDayPreferenceSummary() {
71        PackageInfo app =
72                new PackageInfo.Builder()
73                        .setDaysSinceLastUse(2)
74                        .setDaysSinceFirstInstall(30)
75                        .setPackageName(TEST_PACKAGE_NAME)
76                        .setSize(KILOBYTE)
77                        .setLabel(TEST_PACKAGE_LABEL)
78                        .build();
79        AppDeletionPreference preference = new AppDeletionPreference(mContext, app);
80        preference.updateSummary();
81
82        assertThat(preference.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
83        assertThat(preference.getTitle()).isEqualTo(TEST_PACKAGE_LABEL);
84        assertThat(preference.getSummary().toString()).isEqualTo("2 days ago");
85        assertThat(preference.getItemSize()).isEqualTo(KB_STRING);
86    }
87
88    @Test
89    public void testYesterdayPreferenceSummary() {
90        PackageInfo app =
91                new PackageInfo.Builder()
92                        .setDaysSinceLastUse(1)
93                        .setDaysSinceFirstInstall(30)
94                        .setPackageName(TEST_PACKAGE_NAME)
95                        .setSize(KILOBYTE)
96                        .setLabel(TEST_PACKAGE_LABEL)
97                        .build();
98        AppDeletionPreference preference = new AppDeletionPreference(mContext, app);
99        preference.updateSummary();
100
101        assertThat(preference.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
102        assertThat(preference.getTitle()).isEqualTo(TEST_PACKAGE_LABEL);
103        assertThat(preference.getSummary().toString()).isEqualTo("Yesterday");
104        assertThat(preference.getItemSize()).isEqualTo(KB_STRING);
105    }
106
107    @Test
108    public void testTodayPreferenceSummary() {
109        PackageInfo app =
110                new PackageInfo.Builder()
111                        .setDaysSinceLastUse(0)
112                        .setDaysSinceFirstInstall(30)
113                        .setPackageName(TEST_PACKAGE_NAME)
114                        .setSize(KILOBYTE)
115                        .setLabel(TEST_PACKAGE_LABEL)
116                        .build();
117        AppDeletionPreference preference = new AppDeletionPreference(mContext, app);
118        preference.updateSummary();
119
120        assertThat(preference.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
121        assertThat(preference.getTitle()).isEqualTo(TEST_PACKAGE_LABEL);
122        assertThat(preference.getSummary().toString()).isEqualTo("Today");
123        assertThat(preference.getItemSize()).isEqualTo(KB_STRING);
124    }
125
126    @Test
127    public void testNeverUsedPreferenceSummary() {
128        PackageInfo app =
129                new PackageInfo.Builder()
130                        .setDaysSinceLastUse(AppsAsyncLoader.NEVER_USED)
131                        .setDaysSinceFirstInstall(30)
132                        .setPackageName(TEST_PACKAGE_NAME)
133                        .setSize(KILOBYTE)
134                        .setLabel(TEST_PACKAGE_LABEL)
135                        .build();
136        AppDeletionPreference preference = new AppDeletionPreference(mContext, app);
137        preference.updateSummary();
138
139        assertThat(preference.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
140        assertThat(preference.getTitle()).isEqualTo(TEST_PACKAGE_LABEL);
141        assertThat(preference.getSummary().toString()).isEqualTo("Not used in last year");
142        assertThat(preference.getItemSize()).isEqualTo(KB_STRING);
143    }
144
145    @Test
146    public void testUnknownLastUsePreferenceSummary() {
147        PackageInfo app =
148                new PackageInfo.Builder()
149                        .setDaysSinceLastUse(AppsAsyncLoader.UNKNOWN_LAST_USE)
150                        .setDaysSinceFirstInstall(30)
151                        .setPackageName(TEST_PACKAGE_NAME)
152                        .setSize(KILOBYTE)
153                        .setLabel(TEST_PACKAGE_LABEL)
154                        .build();
155
156        AppDeletionPreference preference = new AppDeletionPreference(mContext, app);
157        preference.updateSummary();
158
159        assertThat(preference.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
160        assertThat(preference.getTitle()).isEqualTo(TEST_PACKAGE_LABEL);
161        assertThat(preference.getSummary().toString()).isEqualTo("Not sure when last used");
162        assertThat(preference.getItemSize()).isEqualTo(KB_STRING);
163    }
164
165    @Test
166    public void testSizeSummary() {
167        PackageInfo app =
168                new PackageInfo.Builder()
169                        .setDaysSinceLastUse(30)
170                        .setDaysSinceFirstInstall(30)
171                        .setPackageName(TEST_PACKAGE_NAME)
172                        .setSize(HUNDRED_BYTES)
173                        .setLabel(TEST_PACKAGE_LABEL)
174                        .build();
175
176        AppDeletionPreference preference = new AppDeletionPreference(mContext, app);
177        preference.updateSummary();
178
179        assertThat(preference.getPackageName()).isEqualTo(TEST_PACKAGE_NAME);
180        assertThat(preference.getTitle()).isEqualTo(TEST_PACKAGE_LABEL);
181        assertThat(preference.getSummary().toString()).isEqualTo("30 days ago");
182        assertThat(preference.getItemSize()).isEqualTo(HUNDRED_BYTE_STRING);
183    }
184}
185