• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.slices;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import static org.mockito.Mockito.doReturn;
22 import static org.mockito.Mockito.spy;
23 
24 import android.content.ContentValues;
25 import android.content.Context;
26 import android.database.Cursor;
27 import android.database.sqlite.SQLiteDatabase;
28 import android.net.Uri;
29 
30 import com.android.settings.slices.SlicesDatabaseHelper.IndexColumns;
31 import com.android.settings.testutils.DatabaseTestUtils;
32 import com.android.settings.testutils.SettingsRobolectricTestRunner;
33 
34 import org.junit.After;
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.junit.runner.RunWith;
38 import org.robolectric.RuntimeEnvironment;
39 
40 import java.util.ArrayList;
41 import java.util.List;
42 
43 @RunWith(SettingsRobolectricTestRunner.class)
44 public class SlicesIndexerTest {
45 
46     private final String[] KEYS = new String[]{"key1", "key2", "key3"};
47     private final String[] TITLES = new String[]{"title1", "title2", "title3"};
48     private final String SUMMARY = "subtitle";
49     private final String SCREEN_TITLE = "screen title";
50     private final String KEYWORDS = "a, b, c";
51     private final String FRAGMENT_NAME = "fragment name";
52     private final int ICON = 1234; // I declare a thumb war
53     private final Uri URI = Uri.parse("content://com.android.settings.slices/test");
54     private final String PREF_CONTROLLER = "com.android.settings.slices.tester";
55     private final boolean PLATFORM_DEFINED = true;
56     private final int SLICE_TYPE = SliceData.SliceType.SLIDER;
57 
58     private Context mContext;
59 
60     private SlicesIndexer mManager;
61 
62     private SQLiteDatabase mDb;
63 
64     @Before
setUp()65     public void setUp() {
66         mContext = RuntimeEnvironment.application;
67         mManager = spy(new SlicesIndexer(mContext));
68         mDb = SlicesDatabaseHelper.getInstance(mContext).getWritableDatabase();
69     }
70 
71     @After
cleanUp()72     public void cleanUp() {
73         DatabaseTestUtils.clearDb(mContext);
74     }
75 
76     @Test
testAlreadyIndexed_doesNotIndexAgain()77     public void testAlreadyIndexed_doesNotIndexAgain() {
78         String newKey = "newKey";
79         String newTitle = "newTitle";
80         SlicesDatabaseHelper.getInstance(mContext).setIndexedState();
81         insertSpecialCase(newKey, newTitle);
82 
83         // Attempt indexing - should not do anything.
84         mManager.run();
85 
86         Cursor cursor = mDb.rawQuery("SELECT * FROM slices_index", null);
87         cursor.moveToFirst();
88         assertThat(cursor.getCount()).isEqualTo(1);
89         assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.KEY))).isEqualTo(newKey);
90         assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.TITLE))).isEqualTo(newTitle);
91     }
92 
93     @Test
testInsertSliceData_indexedStateSet()94     public void testInsertSliceData_indexedStateSet() {
95         final SlicesDatabaseHelper helper = SlicesDatabaseHelper.getInstance(mContext);
96         helper.setIndexedState();
97         doReturn(new ArrayList<SliceData>()).when(mManager).getSliceData();
98 
99         mManager.run();
100 
101         assertThat(helper.isSliceDataIndexed()).isTrue();
102     }
103 
104     @Test
testInsertSliceData_mockDataInserted()105     public void testInsertSliceData_mockDataInserted() {
106         final List<SliceData> sliceData = getDummyIndexableData();
107         doReturn(sliceData).when(mManager).getSliceData();
108 
109         mManager.run();
110 
111         final Cursor cursor = mDb.rawQuery("SELECT * FROM slices_index", null);
112         assertThat(cursor.getCount()).isEqualTo(sliceData.size());
113 
114         cursor.moveToFirst();
115         for (int i = 0; i < sliceData.size(); i++) {
116             assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.KEY))).isEqualTo(
117                     KEYS[i]);
118             assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.TITLE))).isEqualTo(
119                     TITLES[i]);
120             assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.FRAGMENT))).isEqualTo(
121                     FRAGMENT_NAME);
122             assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.SCREENTITLE))).isEqualTo(
123                     SCREEN_TITLE);
124             assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.KEYWORDS))).isEqualTo(
125                     KEYWORDS);
126             assertThat(cursor.getInt(cursor.getColumnIndex(IndexColumns.ICON_RESOURCE))).isEqualTo(
127                     ICON);
128             assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.CONTROLLER))).isEqualTo(
129                     PREF_CONTROLLER);
130             assertThat(cursor.getInt(cursor.getColumnIndex(IndexColumns.PLATFORM_SLICE))).isEqualTo(
131                     1 /* true */);
132             assertThat(cursor.getInt(cursor.getColumnIndex(IndexColumns.SLICE_TYPE))).isEqualTo(
133                     SLICE_TYPE);
134             cursor.moveToNext();
135         }
136     }
137 
insertSpecialCase(String key, String title)138     private void insertSpecialCase(String key, String title) {
139         final ContentValues values = new ContentValues();
140         values.put(IndexColumns.KEY, key);
141         values.put(IndexColumns.TITLE, title);
142 
143         mDb.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values);
144     }
145 
getDummyIndexableData()146     private List<SliceData> getDummyIndexableData() {
147         final List<SliceData> sliceData = new ArrayList<>();
148         final SliceData.Builder builder = new SliceData.Builder()
149                 .setSummary(SUMMARY)
150                 .setScreenTitle(SCREEN_TITLE)
151                 .setKeywords(KEYWORDS)
152                 .setFragmentName(FRAGMENT_NAME)
153                 .setIcon(ICON)
154                 .setUri(URI)
155                 .setPreferenceControllerClassName(PREF_CONTROLLER)
156                 .setPlatformDefined(PLATFORM_DEFINED)
157                 .setSliceType(SLICE_TYPE);
158 
159         for (int i = 0; i < KEYS.length; i++) {
160             builder.setKey(KEYS[i]).setTitle(TITLES[i]);
161             sliceData.add(builder.build());
162         }
163 
164         return sliceData;
165     }
166 }