2 * Copyright (C) 2018 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.settings.homepage.contextualcards;
19 import static com.android.settings.homepage.contextualcards.ContextualCardLoader.DEFAULT_CARD_COUNT;
21 import static com.google.common.truth.Truth.assertThat;
23 import static org.mockito.ArgumentMatchers.any;
24 import static org.mockito.ArgumentMatchers.anyList;
25 import static org.mockito.ArgumentMatchers.eq;
26 import static org.mockito.Mockito.doReturn;
27 import static org.mockito.Mockito.never;
28 import static org.mockito.Mockito.spy;
29 import static org.mockito.Mockito.verify;
31 import android.app.settings.SettingsEnums;
32 import android.content.Context;
33 import android.net.Uri;
35 import com.android.settings.R;
36 import com.android.settings.slices.CustomSliceRegistry;
37 import com.android.settings.testutils.FakeFeatureFactory;
39 import org.junit.Before;
40 import org.junit.Test;
41 import org.junit.runner.RunWith;
42 import org.robolectric.RobolectricTestRunner;
43 import org.robolectric.RuntimeEnvironment;
45 import java.util.ArrayList;
46 import java.util.List;
47 import java.util.stream.Collectors;
49 @RunWith(RobolectricTestRunner.class)
50 public class ContextualCardLoaderTest {
52 private Context mContext;
53 private ContextualCardLoader mContextualCardLoader;
54 private FakeFeatureFactory mFakeFeatureFactory;
58 mContext = RuntimeEnvironment.application;
59 mContextualCardLoader = spy(new ContextualCardLoader(mContext));
60 mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
64 public void loadInBackground_legacyMode_shouldReturnNothing() {
65 assertThat(mContext.getResources().getBoolean(R.bool.config_use_legacy_suggestion))
68 assertThat(mContextualCardLoader.loadInBackground()).isEmpty();
72 public void getDisplayableCards_twoEligibleCards_shouldShowAll() {
73 final List<ContextualCard> cards = getContextualCardList().stream().limit(2)
74 .collect(Collectors.toList());
75 doReturn(cards).when(mContextualCardLoader).filterEligibleCards(anyList());
77 final List<ContextualCard> result = mContextualCardLoader.getDisplayableCards(cards);
79 assertThat(result).hasSize(cards.size());
83 public void getDisplayableCards_fourEligibleCards_shouldShowDefaultCardCount() {
84 final List<ContextualCard> fourCards = getContextualCardList();
85 doReturn(fourCards).when(mContextualCardLoader).filterEligibleCards(anyList());
87 final List<ContextualCard> result = mContextualCardLoader
88 .getDisplayableCards(fourCards);
90 assertThat(result).hasSize(DEFAULT_CARD_COUNT);
94 public void getDisplayableCards_refreshCardUri_shouldLogContextualCard() {
95 mContextualCardLoader.mNotifyUri = CardContentProvider.REFRESH_CARD_URI;
97 mContextualCardLoader.getDisplayableCards(new ArrayList<>());
99 verify(mFakeFeatureFactory.metricsFeatureProvider).action(any(),
100 eq(SettingsEnums.ACTION_CONTEXTUAL_CARD_NOT_SHOW), any(String.class));
104 public void getDisplayableCards_deleteCardUri_shouldNotLogContextualCard() {
105 mContextualCardLoader.mNotifyUri = CardContentProvider.DELETE_CARD_URI;
107 mContextualCardLoader.getDisplayableCards(new ArrayList<>());
109 verify(mFakeFeatureFactory.metricsFeatureProvider, never()).action(any(),
110 eq(SettingsEnums.ACTION_CONTEXTUAL_CARD_NOT_SHOW), any(String.class));
113 private List<ContextualCard> getContextualCardList() {
114 final List<ContextualCard> cards = new ArrayList<>();
115 cards.add(new ContextualCard.Builder()
116 .setName("test_wifi")
117 .setCardType(ContextualCard.CardType.SLICE)
118 .setSliceUri(CustomSliceRegistry.CONTEXTUAL_WIFI_SLICE_URI)
120 cards.add(new ContextualCard.Builder()
121 .setName("test_flashlight")
122 .setCardType(ContextualCard.CardType.SLICE)
124 Uri.parse("content://com.android.settings.test.slices/action/flashlight"))
126 cards.add(new ContextualCard.Builder()
127 .setName("test_connected")
128 .setCardType(ContextualCard.CardType.SLICE)
129 .setSliceUri(CustomSliceRegistry.BLUETOOTH_DEVICES_SLICE_URI)
131 cards.add(new ContextualCard.Builder()
132 .setName("test_gesture")
133 .setCardType(ContextualCard.CardType.SLICE)
134 .setSliceUri(Uri.parse(
135 "content://com.android.settings.test.slices/action/gesture_pick_up"))