Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Unified Diff: chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java

Issue 2434263002: 📰 Refresh the visiblity of AllDismissed when items change (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsConfig.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java
index adc623a5c62dc5b87371f087059e0bf76f4b96cd..50cd3170323779a117ef523a2be7fa6604a60901 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapterTest.java
@@ -18,6 +18,7 @@
import static org.mockito.Mockito.when;
import android.support.annotation.Nullable;
+import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.AdapterDataObserver;
import android.view.ContextMenu;
import android.view.Menu;
@@ -39,6 +40,7 @@
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback;
import org.chromium.chrome.browser.favicon.FaviconHelper.IconAvailabilityCallback;
import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback;
@@ -46,12 +48,14 @@
import org.chromium.chrome.browser.ntp.MostVisitedItem;
import org.chromium.chrome.browser.ntp.NewTabPage.DestructionObserver;
import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager;
+import org.chromium.chrome.browser.ntp.cards.SignInPromo.SigninObserver;
import org.chromium.chrome.browser.ntp.snippets.CategoryInt;
import org.chromium.chrome.browser.ntp.snippets.CategoryStatus;
import org.chromium.chrome.browser.ntp.snippets.ContentSuggestionsCardLayout;
import org.chromium.chrome.browser.ntp.snippets.FakeSuggestionsSource;
import org.chromium.chrome.browser.ntp.snippets.KnownCategories;
import org.chromium.chrome.browser.ntp.snippets.SnippetArticle;
+import org.chromium.chrome.browser.ntp.snippets.SnippetsConfig;
import org.chromium.chrome.browser.ntp.snippets.SuggestionsSource;
import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
import org.chromium.chrome.browser.profiles.MostVisitedSites.MostVisitedURLsObserver;
@@ -63,6 +67,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -75,6 +80,7 @@
private FakeSuggestionsSource mSource;
private NewTabPageAdapter mAdapter;
private SigninManager mMockSigninManager;
+ private MockNewTabPageManager mNtpManager;
/**
* Stores information about a section that should be present in the adapter.
@@ -223,6 +229,7 @@ public void setUp() {
mMockSigninManager = mock(SigninManager.class);
SigninManager.setInstanceForTesting(mMockSigninManager);
when(mMockSigninManager.isSignedInOnNative()).thenReturn(true);
+ when(mMockSigninManager.isSignInAllowed()).thenReturn(true);
RecordHistogram.disableForTests();
RecordUserAction.disableForTests();
@@ -232,7 +239,8 @@ public void setUp() {
mSource = new FakeSuggestionsSource();
mSource.setStatusForCategory(category, CategoryStatus.INITIALIZING);
mSource.setInfoForCategory(category, createInfo(category, false, true));
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(mSource), null, null);
+ mNtpManager = new MockNewTabPageManager(mSource);
+ mAdapter = new NewTabPageAdapter(mNtpManager, null, null);
}
@After
@@ -240,6 +248,7 @@ public void tearDown() {
SigninManager.setInstanceForTesting(null);
ChromePreferenceManager.getInstance(RuntimeEnvironment.application)
.setNewTabPageSigninPromoDismissed(false);
+ SnippetsConfig.setTestEnabledFeatures(null);
}
/**
@@ -364,7 +373,7 @@ public void testSuggestionLoadingBlock() {
@Test
@Feature({"Ntp"})
public void testProgressIndicatorDisplay() {
- int progressPos = mAdapter.getFooterPosition() - 1;
+ int progressPos = mAdapter.getFirstPositionForType(ItemViewType.FOOTER) - 1;
SuggestionsSection section = mAdapter.getSuggestionsSection(progressPos);
ProgressItem progress = section.getProgressItemForTesting();
@@ -398,20 +407,20 @@ public void testSectionClearingWhenUnavailable() {
assertItemsFor();
// Same when loading a new NTP.
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(mSource), null, null);
+ mAdapter = new NewTabPageAdapter(mNtpManager, null, null);
assertItemsFor();
// Same for CATEGORY_EXPLICITLY_DISABLED.
mSource.setStatusForCategory(KnownCategories.ARTICLES, CategoryStatus.AVAILABLE);
mSource.setSuggestionsForCategory(KnownCategories.ARTICLES, snippets);
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(mSource), null, null);
+ mAdapter = new NewTabPageAdapter(mNtpManager, null, null);
assertItemsFor(section(5));
mSource.setStatusForCategory(
KnownCategories.ARTICLES, CategoryStatus.CATEGORY_EXPLICITLY_DISABLED);
assertItemsFor();
// Same when loading a new NTP.
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(mSource), null, null);
+ mAdapter = new NewTabPageAdapter(mNtpManager, null, null);
assertItemsFor();
}
@@ -432,7 +441,7 @@ public void testUIUntouchedWhenNotProvided() {
assertItemsFor(section(4));
// But it disappears when loading a new NTP.
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(mSource), null, null);
+ mAdapter = new NewTabPageAdapter(mNtpManager, null, null);
assertItemsFor();
}
@@ -453,7 +462,8 @@ public void testSectionVisibleIfEmpty() {
suggestionsSource.setInfoForCategory(category, createInfo(category, false, true));
// 1.1 - Initial state
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(suggestionsSource), null, null);
+ mNtpManager = new MockNewTabPageManager(suggestionsSource);
+ mAdapter = new NewTabPageAdapter(mNtpManager, null, null);
assertItemsFor(sectionWithStatusCard());
// 1.2 - With suggestions
@@ -476,7 +486,8 @@ public void testSectionVisibleIfEmpty() {
suggestionsSource.setInfoForCategory(category, createInfo(category, false, false));
// 2.1 - Initial state
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(suggestionsSource), null, null);
+ mNtpManager = new MockNewTabPageManager(suggestionsSource);
+ mAdapter = new NewTabPageAdapter(mNtpManager, null, null);
assertItemsFor();
// 2.2 - With suggestions
@@ -507,7 +518,8 @@ public void testMoreButton() {
suggestionsSource.setInfoForCategory(category, createInfo(category, true, true));
// 1.1 - Initial state.
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(suggestionsSource), null, null);
+ mNtpManager = new MockNewTabPageManager(suggestionsSource);
+ mAdapter = new NewTabPageAdapter(mNtpManager, null, null);
assertItemsFor(sectionWithStatusCardAndMoreButton());
// 1.2 - With suggestions.
@@ -530,7 +542,8 @@ public void testMoreButton() {
suggestionsSource.setInfoForCategory(category, createInfo(category, false, true));
// 2.1 - Initial state.
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(suggestionsSource), null, null);
+ mNtpManager = new MockNewTabPageManager(suggestionsSource);
+ mAdapter = new NewTabPageAdapter(mNtpManager, null, null);
assertItemsFor(sectionWithStatusCard());
// 2.2 - With suggestions.
@@ -588,7 +601,7 @@ public void testDynamicCategories() {
mSource.setInfoForCategory(dynamicCategory1, createInfo(dynamicCategory1, true, false));
mSource.setStatusForCategory(dynamicCategory1, CategoryStatus.AVAILABLE);
mSource.setSuggestionsForCategory(dynamicCategory1, dynamics1);
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(mSource), null, null); // Reload
+ mAdapter = new NewTabPageAdapter(mNtpManager, null, null); // Reload
assertItemsFor(section(3), sectionWithMoreButton(5));
int dynamicCategory2 = 1011;
@@ -596,7 +609,7 @@ public void testDynamicCategories() {
mSource.setInfoForCategory(dynamicCategory2, createInfo(dynamicCategory1, false, false));
mSource.setStatusForCategory(dynamicCategory2, CategoryStatus.AVAILABLE);
mSource.setSuggestionsForCategory(dynamicCategory2, dynamics2);
- mAdapter = new NewTabPageAdapter(new MockNewTabPageManager(mSource), null, null); // Reload
+ mAdapter = new NewTabPageAdapter(mNtpManager, null, null); // Reload
assertItemsFor(section(3), sectionWithMoreButton(5), section(11));
}
@@ -832,6 +845,107 @@ public void testSigninPromoDismissal() {
assertEquals(ItemViewType.FOOTER, adapter.getItemViewType(signInPromoIndex));
}
+ @Test
+ @Feature({"Ntp"})
+ public void testAllDismissedVisibility() {
+ SnippetsConfig.setTestEnabledFeatures(new HashSet<String>() {
+ { add(ChromeFeatureList.NTP_SUGGESTIONS_SECTION_DISMISSAL); }
+ });
+ SigninObserver signinObserver = (SigninObserver) mNtpManager.mDestructionObserver;
+
+ // By default, there is no All Dismissed item.
+ // Adapter content:
+ // Idx | Item
+ // ----|--------------------
+ // 0 | Above-the-fold
+ // 1 | Header
+ // 2 | Status
+ // 3 | Action
+ // 4 | Progress Indicator
+ // 5 | Footer
+ // 6 | Spacer
+ assertEquals(5, mAdapter.getFirstPositionForType(ItemViewType.FOOTER));
+ assertEquals(RecyclerView.NO_POSITION,
+ mAdapter.getFirstPositionForType(ItemViewType.ALL_DISMISSED));
+
+ // When we remove the section, the All Dismissed item should be there.
+ mAdapter.dismissItem(2);
+ // Adapter content:
+ // Idx | Item
+ // ----|--------------------
+ // 0 | Above-the-fold
+ // 1 | All Dismissed
+ // 2 | Spacer
+ assertEquals(
+ RecyclerView.NO_POSITION, mAdapter.getFirstPositionForType(ItemViewType.FOOTER));
+ assertEquals(1, mAdapter.getFirstPositionForType(ItemViewType.ALL_DISMISSED));
+
+ // On Sign out, the sign in promo should come and the All Dismissed item be removed.
+ when(mMockSigninManager.isSignedInOnNative()).thenReturn(false);
+ signinObserver.onSignedOut();
+ // Adapter content:
+ // Idx | Item
+ // ----|--------------------
+ // 0 | Above-the-fold
+ // 1 | Sign In Promo
+ // 2 | Footer
+ // 3 | Spacer
+ assertEquals(2, mAdapter.getFirstPositionForType(ItemViewType.FOOTER));
+ assertEquals(RecyclerView.NO_POSITION,
+ mAdapter.getFirstPositionForType(ItemViewType.ALL_DISMISSED));
+
+ // When sign in is disabled, the promo is removed and the All Dismissed item can come back.
+ when(mMockSigninManager.isSignInAllowed()).thenReturn(false);
+ signinObserver.onSignInAllowedChanged();
+ // Adapter content:
+ // Idx | Item
+ // ----|--------------------
+ // 0 | Above-the-fold
+ // 1 | All Dismissed
+ // 2 | Spacer
+ assertEquals(
+ RecyclerView.NO_POSITION, mAdapter.getFirstPositionForType(ItemViewType.FOOTER));
+ assertEquals(1, mAdapter.getFirstPositionForType(ItemViewType.ALL_DISMISSED));
+
+ // Re-enabling sign in should only bring the promo back, thus removing the AllDismissed item
+ when(mMockSigninManager.isSignInAllowed()).thenReturn(true);
+ signinObserver.onSignInAllowedChanged();
+ // Adapter content:
+ // Idx | Item
+ // ----|--------------------
+ // 0 | Above-the-fold
+ // 1 | Sign In Promo
+ // 2 | Footer
+ // 3 | Spacer
+ assertEquals(ItemViewType.FOOTER, mAdapter.getItemViewType(2));
+ assertEquals(RecyclerView.NO_POSITION,
+ mAdapter.getFirstPositionForType(ItemViewType.ALL_DISMISSED));
+
+ // Prepare some suggestions. They should not load because the category is dismissed on
+ // the current NTP.
+ mSource.setStatusForCategory(KnownCategories.ARTICLES, CategoryStatus.AVAILABLE);
+ mSource.setSuggestionsForCategory(KnownCategories.ARTICLES, createDummySuggestions(1));
+ mSource.setInfoForCategory(
+ KnownCategories.ARTICLES, createInfo(KnownCategories.ARTICLES, false, false));
+ assertEquals(4, mAdapter.getItemCount()); // TODO(dgn): rewrite with section descriptors.
+
+ // On Sign in, we should reset the sections, bring back suggestions instead of the All
+ // Dismissed item.
+ when(mMockSigninManager.isSignInAllowed()).thenReturn(true);
+ signinObserver.onSignedIn();
+ // Adapter content:
+ // Idx | Item
+ // ----|--------------------
+ // 0 | Above-the-fold
+ // 1 | Header
+ // 2 | Suggestion
+ // 4 | Footer
+ // 5 | Spacer
+ assertEquals(3, mAdapter.getFirstPositionForType(ItemViewType.FOOTER));
+ assertEquals(RecyclerView.NO_POSITION,
+ mAdapter.getFirstPositionForType(ItemViewType.ALL_DISMISSED));
+ }
+
/** Registers the category with hasMoreButton=false and showIfEmpty=true*/
private void registerCategory(FakeSuggestionsSource suggestionsSource,
@CategoryInt int category, int suggestionCount) {
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsConfig.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698