blob: 645270f13f2ae2f677f565e06c33db826975d8e3 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.tasks.tab_management.suggestions;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
import org.chromium.base.Callback;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.test.util.browser.Features;
import org.chromium.testing.local.LocalRobolectricTestRunner;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* Test TabSuggestionsClientFetcher
*/
@RunWith(LocalRobolectricTestRunner.class)
@Config(manifest = Config.NONE)
public class TabSuggestionsClientFetcherTest {
@Rule
public TestRule mProcessor = new Features.JUnitProcessor();
@Mock
TabContext mTabContext;
@Mock
private Callback<TabSuggestionsFetcherResults> mTabSuggestionsFetcherResultsCallback;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
private TabContext.TabInfo getMockTab(int id, String title, String url, String originalUrl,
String referrer, long timestamp, double siteEngagementScore) {
TabContext.TabInfo tabInfo =
spy(new TabContext.TabInfo(id, title, url, originalUrl, referrer, timestamp, ""));
doReturn(siteEngagementScore).when(tabInfo).getSiteEngagementScore();
return tabInfo;
}
/**
* Test when client fetcher has results
*/
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
"enable-features=" + ChromeFeatureList.CLOSE_TAB_SUGGESTIONS + "<FakeStudyName",
"force-fieldtrials=FakeStudyName/Enabled",
"force-fieldtrial-params=FakeStudyName.Enabled:"
+ "close_tab_suggestions_stale_time_ms/86400000"})
// 86400000 milliseconds = 1 day
@Test
public void
testClientFetcher() {
TabSuggestionsClientFetcher tabSuggestionsClientFetcher = new TabSuggestionsClientFetcher();
tabSuggestionsClientFetcher.setUseBaselineTabSuggestionsForTesting();
List<TabContext.TabInfo> tabInfos = new ArrayList<>();
tabInfos.add(getMockTab(3, "mock_stale_title", "mock_stale_url", "mock_stale_original_url",
"mock_stale_referrer_url", System.currentTimeMillis() - TimeUnit.DAYS.toMillis(2),
0.0));
doReturn(tabInfos).when(mTabContext).getUngroupedTabs();
tabSuggestionsClientFetcher.fetch(mTabContext, mTabSuggestionsFetcherResultsCallback);
ArgumentCaptor<TabSuggestionsFetcherResults> argument =
ArgumentCaptor.forClass(TabSuggestionsFetcherResults.class);
verify(mTabSuggestionsFetcherResultsCallback, times(1)).onResult(argument.capture());
Assert.assertEquals(1, argument.getValue().tabSuggestions.size());
TabSuggestion staleSuggestion = argument.getValue().tabSuggestions.get(0);
Assert.assertEquals("mock_stale_title", staleSuggestion.getTabsInfo().get(0).title);
Assert.assertEquals(TabSuggestion.TabSuggestionAction.CLOSE, staleSuggestion.getAction());
Assert.assertEquals(TabSuggestionsRanker.SuggestionProviders.STALE_TABS_SUGGESTION_PROVIDER,
staleSuggestion.getProviderName());
}
/**
* Test when results are null
*/
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
"enable-features=" + ChromeFeatureList.CLOSE_TAB_SUGGESTIONS + "<FakeStudyName",
"force-fieldtrials=FakeStudyName/Enabled",
"force-fieldtrial-params=FakeStudyName.Enabled:"
+ "close_tab_suggestions_stale_time_ms/86400000"})
// 86400000 milliseconds = 1 day
@Test
public void
testNullResults() {
TabSuggestionsClientFetcher tabSuggestionsClientFetcher = new TabSuggestionsClientFetcher();
tabSuggestionsClientFetcher.setUseBaselineTabSuggestionsForTesting();
doReturn(null).when(mTabContext).getUngroupedTabs();
tabSuggestionsClientFetcher.fetch(mTabContext, mTabSuggestionsFetcherResultsCallback);
ArgumentCaptor<TabSuggestionsFetcherResults> argument =
ArgumentCaptor.forClass(TabSuggestionsFetcherResults.class);
verify(mTabSuggestionsFetcherResultsCallback, times(1)).onResult(argument.capture());
Assert.assertEquals(0, argument.getValue().tabSuggestions.size());
}
/**
* Test when results are empty
*/
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
"enable-features=" + ChromeFeatureList.CLOSE_TAB_SUGGESTIONS + "<FakeStudyName",
"force-fieldtrials=FakeStudyName/Enabled",
"force-fieldtrial-params=FakeStudyName.Enabled:"
+ "close_tab_suggestions_stale_time_ms/86400000"})
// 86400000 milliseconds = 1 day
@Test
public void
testEmptyResults() {
TabSuggestionsClientFetcher tabSuggestionsClientFetcher = new TabSuggestionsClientFetcher();
tabSuggestionsClientFetcher.setUseBaselineTabSuggestionsForTesting();
doReturn(Collections.emptyList()).when(mTabContext).getUngroupedTabs();
tabSuggestionsClientFetcher.fetch(mTabContext, mTabSuggestionsFetcherResultsCallback);
ArgumentCaptor<TabSuggestionsFetcherResults> argument =
ArgumentCaptor.forClass(TabSuggestionsFetcherResults.class);
verify(mTabSuggestionsFetcherResultsCallback, times(1)).onResult(argument.capture());
Assert.assertEquals(0, argument.getValue().tabSuggestions.size());
}
}