blob: 8cd6d9894d3e4130265f182677a06369c8884537 [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.touchless;
import android.support.test.filters.SmallTest;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowToast;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.browser.native_page.ContextMenuManager;
import org.chromium.chrome.browser.ntp.cards.ActionItem;
import org.chromium.chrome.browser.ntp.cards.SuggestionsCategoryInfo;
import org.chromium.chrome.browser.ntp.cards.SuggestionsSection;
import org.chromium.chrome.browser.ntp.snippets.KnownCategories;
import org.chromium.chrome.browser.suggestions.ContentSuggestionsAdditionalAction;
import org.chromium.chrome.browser.suggestions.SuggestionsEventReporter;
import org.chromium.chrome.browser.suggestions.SuggestionsRanker;
import org.chromium.chrome.browser.suggestions.SuggestionsRecyclerView;
import org.chromium.chrome.browser.suggestions.SuggestionsUiDelegate;
import org.chromium.chrome.browser.widget.displaystyle.UiConfig;
import org.chromium.chrome.test.util.browser.suggestions.ContentSuggestionsTestUtils;
/**
* Unit tests for the TouchlessActionItemViewHolder class.
*/
@RunWith(BaseRobolectricTestRunner.class)
@Config(manifest = Config.NONE)
public class TouchlessActionItemViewHolderTest {
@Mock
private ContextMenuManager mContextMenuManager;
@Mock
private SuggestionsUiDelegate mUiDelegate;
@Mock
private UiConfig mUiConfig;
@Mock
private SuggestionsSection mSection;
@Mock
private SuggestionsRanker mRanker;
@Mock
private SuggestionsEventReporter mSuggestionsEventReporter;
@Captor
private ArgumentCaptor<Runnable> mCallbackCaptor;
private TouchlessActionItemViewHolder mViewHolder;
@Before
public void setUp() throws InterruptedException {
MockitoAnnotations.initMocks(this);
SuggestionsRecyclerView recyclerView =
new SuggestionsRecyclerView(RuntimeEnvironment.application);
mViewHolder = new TouchlessActionItemViewHolder(
recyclerView, mContextMenuManager, mUiDelegate, mUiConfig);
SuggestionsCategoryInfo info =
new ContentSuggestionsTestUtils.CategoryInfoBuilder(KnownCategories.ARTICLES)
.withAction(ContentSuggestionsAdditionalAction.FETCH)
.showIfEmpty()
.build();
Mockito.when(mSection.getCategoryInfo()).thenReturn(info);
Mockito.when(mUiDelegate.getEventReporter()).thenReturn(mSuggestionsEventReporter);
}
@Test
@SmallTest
public void testOnFailureToast() {
mViewHolder.onBindViewHolder(new ActionItem(mSection, mRanker));
mViewHolder.getButtonForTesting().performClick();
Assert.assertEquals(0, ShadowToast.shownToastCount());
Mockito.verify(mSection).fetchSuggestions(/*onFailure*/
mCallbackCaptor.capture(), /*onNoNewSuggestions*/ Mockito.any(Runnable.class));
mCallbackCaptor.getValue().run();
Mockito.verify(mUiDelegate, Mockito.never()).getSnackbarManager();
Assert.assertEquals(1, ShadowToast.shownToastCount());
}
@Test
@SmallTest
public void testOnNoNewSuggestionsToast() {
mViewHolder.onBindViewHolder(new ActionItem(mSection, mRanker));
mViewHolder.getButtonForTesting().performClick();
Assert.assertEquals(0, ShadowToast.shownToastCount());
Mockito.verify(mSection).fetchSuggestions(/*onFailure*/
Mockito.any(Runnable.class), /*onNoNewSuggestions*/ mCallbackCaptor.capture());
mCallbackCaptor.getValue().run();
Mockito.verify(mUiDelegate, Mockito.never()).getSnackbarManager();
Assert.assertEquals(1, ShadowToast.shownToastCount());
}
}