[User Education] Migrate UEv1.x tests to v2.x.

This will allow us to write additional tests that target 2.0 and 2.5.

Bug: 324111066
Change-Id: I00cdc2c6c5b891eba4cbb760afd2ed6e370ab684
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6127285
Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com>
Commit-Queue: Dana Fried <dfried@chromium.org>
Reviewed-by: Caroline Rising <corising@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1405595}
diff --git a/chrome/browser/ui/views/user_education/impl/browser_feature_promo_controller_20_unittest.cc b/chrome/browser/ui/views/user_education/impl/browser_feature_promo_controller_20_unittest.cc
index fca6cdf..ac875e7 100644
--- a/chrome/browser/ui/views/user_education/impl/browser_feature_promo_controller_20_unittest.cc
+++ b/chrome/browser/ui/views/user_education/impl/browser_feature_promo_controller_20_unittest.cc
@@ -87,6 +87,11 @@
 using ::testing::Return;
 
 namespace {
+
+// Somewhere around 2020.
+const base::Time kSessionStartTime =
+    base::Time::FromDeltaSinceWindowsEpoch(420 * base::Days(365));
+
 BASE_FEATURE(kTestIPHFeature,
              "TEST_TestIPHFeature",
              base::FEATURE_ENABLED_BY_DEFAULT);
@@ -113,6 +118,7 @@
              base::FEATURE_ENABLED_BY_DEFAULT);
 constexpr char kTestTutorialIdentifier[] = "Test Tutorial";
 DEFINE_LOCAL_ELEMENT_IDENTIFIER_VALUE(kOneOffIPHElementId);
+
 }  // namespace
 
 using user_education::FeaturePromoClosedReason;
@@ -139,7 +145,7 @@
 using ShowPromoCallback =
     BrowserFeaturePromoController20::ShowPromoResultCallback;
 
-class BrowserFeaturePromoController20Test : public TestWithBrowserView {
+class BrowserFeaturePromoController20TestBase : public TestWithBrowserView {
  public:
   void SetUp() override {
     std::vector<base::test::FeatureRef> enabled_features;
@@ -150,15 +156,6 @@
       disabled_features.emplace_back(*feature);
     }
 
-    // Enable or disable V2.
-    if (UseV2()) {
-      enabled_features.emplace_back(
-          user_education::features::kUserEducationExperienceVersion2);
-    } else {
-      disabled_features.emplace_back(
-          user_education::features::kUserEducationExperienceVersion2);
-    }
-
     // Do the enabling or disabling.
     scoped_feature_list_.InitWithFeatures(enabled_features, disabled_features);
 
@@ -226,7 +223,7 @@
             kCustomActionIPHFeature, kToolbarAppMenuButtonElementId,
             IDS_CHROME_TIP, IDS_CHROME_TIP,
             base::BindRepeating(
-                &BrowserFeaturePromoController20Test::OnCustomPromoAction,
+                &BrowserFeaturePromoController20TestBase::OnCustomPromoAction,
                 base::Unretained(this),
                 base::Unretained(&kCustomActionIPHFeature))));
 
@@ -234,7 +231,7 @@
         kDefaultCustomActionIPHFeature, kToolbarAppMenuButtonElementId,
         IDS_CHROME_TIP, IDS_CHROME_TIP,
         base::BindRepeating(
-            &BrowserFeaturePromoController20Test::OnCustomPromoAction,
+            &BrowserFeaturePromoController20TestBase::OnCustomPromoAction,
             base::Unretained(this),
             base::Unretained(&kDefaultCustomActionIPHFeature)));
     default_custom.SetCustomActionIsDefault(true);
@@ -243,6 +240,7 @@
   }
 
   void TearDown() override {
+    test_util_.reset();
     TestWithBrowserView::TearDown();
     lock_.reset();
   }
@@ -296,7 +294,7 @@
     factories.emplace_back(
         feature_engagement::TrackerFactory::GetInstance(),
         base::BindRepeating(
-            BrowserFeaturePromoController20Test::MakeTestTracker));
+            BrowserFeaturePromoController20TestBase::MakeTestTracker));
     return factories;
   }
 
@@ -388,11 +386,43 @@
     return result;
   }
 
+  // These are public so derived classes can access them.
+
+  void ResetSessionDataImpl(base::TimeDelta since_session_start,
+                            base::TimeDelta idle_time,
+                            BrowserView* browser_view) {
+    UserEducationSessionData session_data;
+    session_data.start_time = kSessionStartTime;
+    session_data.most_recent_active_time =
+        kSessionStartTime + since_session_start;
+    now_ = session_data.most_recent_active_time + idle_time;
+    FeaturePromoPolicyData policy_data;
+    test_util_ =
+        std::make_unique<user_education::test::UserEducationSessionTestUtil>(
+            UserEducationServiceFactory::GetForBrowserContext(
+                browser_view->GetProfile())
+                ->user_education_session_manager(),
+            session_data, policy_data, session_data.most_recent_active_time,
+            now_);
+  }
+
+  void AdvanceTimeImpl(std::optional<base::TimeDelta> until_new_last_active,
+                       base::TimeDelta until_new_now,
+                       bool send_update) {
+    const auto new_active_time =
+        until_new_last_active
+            ? std::make_optional(now_ + *until_new_last_active)
+            : std::nullopt;
+    now_ = new_active_time.value_or(now_) + until_new_now;
+    test_util_->SetNow(now_);
+    if (new_active_time) {
+      test_util_->UpdateLastActiveTime(*new_active_time, send_update);
+    }
+  }
+
  protected:
   FeaturePromoController* controller() { return controller_.get(); }
 
-  virtual bool UseV2() const { return false; }
-
   user_education::FeaturePromoParams MakeParams(
       const base::Feature& feature,
       user_education::FeaturePromoController::BubbleCloseCallback
@@ -455,6 +485,25 @@
               controller_->GetPromoStatus(*feature));
   }
 
+  const base::TimeDelta kLessThanGracePeriod =
+      user_education::features::GetSessionStartGracePeriod() / 4;
+  const base::TimeDelta kMoreThanGracePeriod =
+      user_education::features::GetSessionStartGracePeriod() + base::Minutes(5);
+  const base::TimeDelta kLessThanCooldown =
+      user_education::features::GetLowPriorityCooldown() / 4;
+  const base::TimeDelta kMoreThanCooldown =
+      user_education::features::GetLowPriorityCooldown() + base::Hours(1);
+  const base::TimeDelta kMoreThanSnooze =
+      user_education::features::GetSnoozeDuration() + base::Hours(1);
+  const base::TimeDelta kLessThanAbortCooldown =
+      user_education::features::GetAbortCooldown() / 2;
+  const base::TimeDelta kMoreThanAbortCooldown =
+      user_education::features::GetAbortCooldown() + base::Minutes(5);
+  const base::TimeDelta kLessThanNewSession =
+      user_education::features::GetIdleTimeBetweenSessions() / 4;
+  const base::TimeDelta kMoreThanNewSession =
+      user_education::features::GetIdleTimeBetweenSessions() + base::Hours(1);
+
   raw_ptr<BrowserFeaturePromoController20, DanglingUntriaged> controller_;
   raw_ptr<NiceMock<feature_engagement::test::MockTracker>, DanglingUntriaged>
       mock_tracker_;
@@ -481,11 +530,30 @@
 
   base::test::ScopedFeatureList scoped_feature_list_;
   base::UserActionTester user_action_tester_;
+  std::unique_ptr<user_education::test::UserEducationSessionTestUtil>
+      test_util_;
+  base::Time now_;
 };
 
 using BubbleCloseCallback =
     BrowserFeaturePromoController20::BubbleCloseCallback;
 
+class BrowserFeaturePromoController20Test
+    : public BrowserFeaturePromoController20TestBase {
+ public:
+  BrowserFeaturePromoController20Test() = default;
+  ~BrowserFeaturePromoController20Test() override = default;
+
+  void SetUp() override {
+    BrowserFeaturePromoController20TestBase::SetUp();
+
+    // Ensure that tests start after the grace period. The grace period itself
+    // will be tested in the policy tests.
+    ResetSessionDataImpl(kMoreThanGracePeriod, base::TimeDelta(),
+                         browser()->window()->AsBrowserView());
+  }
+};
+
 TEST_F(BrowserFeaturePromoController20Test, NotifyFeatureUsedIfValidIsValid) {
   EXPECT_CALL(*mock_tracker_, NotifyUsedEvent(testing::Ref(kTestIPHFeature)))
       .Times(1);
@@ -528,7 +596,8 @@
   // If the backend says yes, the controller says yes.
   EXPECT_CALL(*mock_tracker_, WouldTriggerHelpUI(Ref(kTestIPHFeature)))
       .WillOnce(Return(true));
-  EXPECT_TRUE(controller_->CanShowPromo(kTestIPHFeature));
+  EXPECT_EQ(FeaturePromoResult::Success(),
+            controller_->CanShowPromo(kTestIPHFeature));
 }
 
 TEST_F(BrowserFeaturePromoController20Test, AsksBackendToShowPromo) {
@@ -537,7 +606,8 @@
 
   UNCALLED_MOCK_CALLBACK(BubbleCloseCallback, close_callback);
 
-  EXPECT_FALSE(GetPromoResult(kTestIPHFeature, close_callback.Get()));
+  EXPECT_EQ(FeaturePromoResult::kBlockedByConfig,
+            GetPromoResult(kTestIPHFeature, close_callback.Get()));
   EXPECT_FALSE(controller_->IsPromoActive(kTestIPHFeature));
   EXPECT_FALSE(GetPromoBubble());
 }
@@ -564,7 +634,7 @@
   EXPECT_CALL(*mock_tracker_, ShouldTriggerHelpUI(Ref(kTestIPHFeature)))
       .WillOnce(Return(true));
   const auto result = GetPromoResult(kTestIPHFeature);
-  EXPECT_TRUE(result);
+  EXPECT_EQ(FeaturePromoResult::Success(), result);
   CheckNotShownMetrics(kTestIPHFeature, result, /*not_shown_count=*/0);
   EXPECT_TRUE(controller_->IsPromoActive(kTestIPHFeature));
   EXPECT_TRUE(GetPromoBubble());
@@ -575,13 +645,14 @@
       .WillOnce(Return(true));
   EXPECT_CALL(*mock_tracker_, WouldTriggerHelpUI(Ref(kTutorialIPHFeature)))
       .WillRepeatedly(Return(true));
-  EXPECT_TRUE(GetPromoResult(kTestIPHFeature));
+  EXPECT_EQ(FeaturePromoResult::Success(), GetPromoResult(kTestIPHFeature));
   EXPECT_EQ(FeaturePromoResult::kBlockedByPromo,
             controller_->CanShowPromo(kTutorialIPHFeature));
   EXPECT_CALL(*mock_tracker_, Dismissed(Ref(kTestIPHFeature))).Times(1);
   EXPECT_TRUE(controller_->EndPromo(
       kTestIPHFeature, user_education::EndFeaturePromoReason::kFeatureEngaged));
-  EXPECT_TRUE(controller_->CanShowPromo(kTutorialIPHFeature));
+  EXPECT_EQ(FeaturePromoResult::Success(),
+            controller_->CanShowPromo(kTutorialIPHFeature));
 }
 
 TEST_F(BrowserFeaturePromoController20Test, ShowsStartupBubble) {
@@ -732,7 +803,7 @@
       views::ElementTrackerViews::GetContextForWidget(widget.get());
   EXPECT_NE(browser_view()->GetElementContext(), widget_context);
 
-  EXPECT_TRUE(GetPromoResult(kOneOffIPHFeature));
+  EXPECT_EQ(FeaturePromoResult::Success(), GetPromoResult(kOneOffIPHFeature));
   EXPECT_TRUE(controller_->IsPromoActive(kOneOffIPHFeature));
   auto* const bubble = GetPromoBubble();
   ASSERT_TRUE(bubble);
@@ -765,7 +836,7 @@
       ->AddChildView(std::make_unique<views::View>())
       ->SetProperty(views::kElementIdentifierKey, kOneOffIPHElementId);
 
-  EXPECT_TRUE(GetPromoResult(kOneOffIPHFeature));
+  EXPECT_EQ(FeaturePromoResult::Success(), GetPromoResult(kOneOffIPHFeature));
   EXPECT_TRUE(controller_->IsPromoActive(kOneOffIPHFeature));
   auto* const bubble = GetPromoBubble();
   ASSERT_TRUE(bubble);
@@ -819,7 +890,7 @@
 
   EXPECT_NE(browser_view()->GetElementContext(), widget_context);
 
-  EXPECT_TRUE(GetPromoResult(kOneOffIPHFeature));
+  EXPECT_EQ(FeaturePromoResult::Success(), GetPromoResult(kOneOffIPHFeature));
   EXPECT_TRUE(controller_->IsPromoActive(kOneOffIPHFeature));
   auto* const bubble = GetPromoBubble();
   ASSERT_TRUE(bubble);
@@ -833,7 +904,7 @@
        DismissNonCriticalBubbleInRegion_RegionDoesNotOverlap) {
   EXPECT_CALL(*mock_tracker_, ShouldTriggerHelpUI(Ref(kTestIPHFeature)))
       .WillOnce(Return(true));
-  EXPECT_TRUE(GetPromoResult(kTestIPHFeature));
+  EXPECT_EQ(FeaturePromoResult::Success(), GetPromoResult(kTestIPHFeature));
 
   const gfx::Rect bounds =
       GetPromoBubble()->GetWidget()->GetWindowBoundsInScreen();
@@ -850,7 +921,7 @@
        DismissNonCriticalBubbleInRegion_RegionOverlaps) {
   EXPECT_CALL(*mock_tracker_, ShouldTriggerHelpUI(Ref(kTestIPHFeature)))
       .WillOnce(Return(true));
-  EXPECT_TRUE(GetPromoResult(kTestIPHFeature));
+  EXPECT_EQ(FeaturePromoResult::Success(), GetPromoResult(kTestIPHFeature));
 
   const gfx::Rect bounds =
       GetPromoBubble()->GetWidget()->GetWindowBoundsInScreen();
@@ -858,7 +929,7 @@
   gfx::Rect overlapping_region(bounds.x() + 1, bounds.y() + 1, 10, 10);
   const bool result =
       controller_->DismissNonCriticalBubbleInRegion(overlapping_region);
-  EXPECT_TRUE(result);
+  EXPECT_EQ(FeaturePromoResult::Success(), result);
   EXPECT_FALSE(controller_->IsPromoActive(kTestIPHFeature));
 }
 
@@ -897,7 +968,7 @@
       storage_service()->GetCurrentTime() - base::Hours(12));
 
   auto result = GetPromoResult(kTutorialIPHFeature);
-  EXPECT_FALSE(result);
+  EXPECT_EQ(FeaturePromoResult::kBlockedByNewProfile, result);
   CheckNotShownMetrics(kTutorialIPHFeature, result, /*not_shown_count=*/1);
   EXPECT_FALSE(controller_->IsPromoActive(kTutorialIPHFeature));
   EXPECT_FALSE(GetPromoBubble());
@@ -915,7 +986,7 @@
   storage_service()->SavePromoData(kTutorialIPHFeature, data);
 
   auto result = GetPromoResult(kTutorialIPHFeature);
-  EXPECT_FALSE(result);
+  EXPECT_EQ(FeaturePromoResult::kSnoozed, result);
   CheckNotShownMetrics(kTutorialIPHFeature, result, /*not_shown_count=*/1);
   EXPECT_FALSE(controller_->IsPromoActive(kTutorialIPHFeature));
   EXPECT_FALSE(GetPromoBubble());
@@ -1369,13 +1440,13 @@
 
 class BrowserFeaturePromoController20ViewsTest
     : public views::test::InteractiveViewsTestT<
-          BrowserFeaturePromoController20Test> {
+          BrowserFeaturePromoController20TestBase> {
  public:
   BrowserFeaturePromoController20ViewsTest() = default;
   ~BrowserFeaturePromoController20ViewsTest() override = default;
 
   void SetUp() override {
-    InteractiveViewsTestT<BrowserFeaturePromoController20Test>::SetUp();
+    InteractiveViewsTestT<BrowserFeaturePromoController20TestBase>::SetUp();
     SetContextWidget(browser_view()->GetWidget());
   }
 
@@ -1941,9 +2012,6 @@
 }
 
 namespace {
-// Somewhere around 2020.
-const base::Time kSessionStartTime =
-    base::Time::FromDeltaSinceWindowsEpoch(420 * base::Days(365));
 
 BASE_FEATURE(kLegalNoticeFeature,
              "LegalNoticeFeature",
@@ -2047,13 +2115,10 @@
   ~BrowserFeaturePromoController20PriorityTest() override = default;
 
   void TearDown() override {
-    test_util_.reset();
     BrowserFeaturePromoController20ViewsTest::TearDown();
   }
 
  protected:
-  bool UseV2() const override { return true; }
-
   void RegisterIPH() override {
     BrowserFeaturePromoController20ViewsTest::RegisterIPH();
 
@@ -2110,38 +2175,21 @@
   auto ResetSessionData(base::TimeDelta since_session_start,
                         base::TimeDelta idle_time = base::Seconds(1)) {
     return std::move(
-        WithView(kBrowserViewElementId, [this, since_session_start,
-                                         idle_time](BrowserView* browser_view) {
-          UserEducationSessionData session_data;
-          session_data.start_time = kSessionStartTime;
-          session_data.most_recent_active_time =
-              kSessionStartTime + since_session_start;
-          now_ = session_data.most_recent_active_time + idle_time;
-          FeaturePromoPolicyData policy_data;
-          test_util_ = std::make_unique<
-              user_education::test::UserEducationSessionTestUtil>(
-              UserEducationServiceFactory::GetForBrowserContext(
-                  browser_view->GetProfile())
-                  ->user_education_session_manager(),
-              session_data, policy_data, session_data.most_recent_active_time,
-              now_);
-        }).AddDescriptionPrefix("ResetSessionData()"));
+        WithView(
+            kBrowserViewElementId,
+            base::BindOnce(
+                &BrowserFeaturePromoController20TestBase::ResetSessionDataImpl,
+                base::Unretained(this), since_session_start, idle_time))
+            .AddDescriptionPrefix("ResetSessionData()"));
   }
 
   auto AdvanceTime(std::optional<base::TimeDelta> until_new_last_active,
                    base::TimeDelta until_new_now = base::Milliseconds(500),
                    bool send_update = true) {
-    return Do([this, until_new_last_active, until_new_now, send_update]() {
-      const auto new_active_time =
-          until_new_last_active
-              ? std::make_optional(now_ + *until_new_last_active)
-              : std::nullopt;
-      now_ = new_active_time.value_or(now_) + until_new_now;
-      test_util_->SetNow(now_);
-      if (new_active_time) {
-        test_util_->UpdateLastActiveTime(*new_active_time, send_update);
-      }
-    });
+    return Do(base::BindRepeating(
+        &BrowserFeaturePromoController20TestBase::AdvanceTimeImpl,
+        base::Unretained(this), until_new_last_active, until_new_now,
+        send_update));
   }
 
   auto CheckPromoStatus(const base::Feature& iph_feature,
@@ -2155,25 +2203,6 @@
                       base::ToString(status), " )"}));
   }
 
-  const base::TimeDelta kLessThanGracePeriod =
-      user_education::features::GetSessionStartGracePeriod() / 4;
-  const base::TimeDelta kMoreThanGracePeriod =
-      user_education::features::GetSessionStartGracePeriod() + base::Minutes(5);
-  const base::TimeDelta kLessThanCooldown =
-      user_education::features::GetLowPriorityCooldown() / 4;
-  const base::TimeDelta kMoreThanCooldown =
-      user_education::features::GetLowPriorityCooldown() + base::Hours(1);
-  const base::TimeDelta kMoreThanSnooze =
-      user_education::features::GetSnoozeDuration() + base::Hours(1);
-  const base::TimeDelta kLessThanAbortCooldown =
-      user_education::features::GetAbortCooldown() / 2;
-  const base::TimeDelta kMoreThanAbortCooldown =
-      user_education::features::GetAbortCooldown() + base::Minutes(5);
-  const base::TimeDelta kLessThanNewSession =
-      user_education::features::GetIdleTimeBetweenSessions() / 4;
-  const base::TimeDelta kMoreThanNewSession =
-      user_education::features::GetIdleTimeBetweenSessions() + base::Hours(1);
-
  private:
   // Ensures some basic orderings of values to avoid triggering unexpected
   // behavior.
@@ -2184,10 +2213,6 @@
     CHECK_LT(kMoreThanAbortCooldown + kMoreThanGracePeriod,
              user_education::features::GetSnoozeDuration());
   }
-
-  std::unique_ptr<user_education::test::UserEducationSessionTestUtil>
-      test_util_;
-  base::Time now_;
 };
 
 TEST_F(BrowserFeaturePromoController20PriorityTest,
@@ -2544,8 +2569,7 @@
 }
 
 class BrowserFeaturePromoController20PolicyTest
-    : public BrowserFeaturePromoController20PriorityTest,
-      public testing::WithParamInterface<bool> {
+    : public BrowserFeaturePromoController20PriorityTest {
  public:
   BrowserFeaturePromoController20PolicyTest() = default;
 
@@ -2584,21 +2608,11 @@
         "ShowHelpBubble()");
   }
 
- protected:
-  bool UseV2() const override { return GetParam(); }
-
  private:
   std::unique_ptr<user_education::HelpBubble> help_bubble_;
 };
 
-INSTANTIATE_TEST_SUITE_P(,
-                         BrowserFeaturePromoController20PolicyTest,
-                         testing::Bool(),
-                         [](const testing::TestParamInfo<bool>& param) {
-                           return param.param ? "V2" : "Legacy";
-                         });
-
-TEST_P(BrowserFeaturePromoController20PolicyTest, TwoLowPriorityPromos) {
+TEST_F(BrowserFeaturePromoController20PolicyTest, TwoLowPriorityPromos) {
   RunTestSequence(ResetSessionData(kMoreThanGracePeriod),
                   MaybeShowPromo(kTestIPHFeature),
                   ExpectShowingPromo(&kTestIPHFeature),
@@ -2607,7 +2621,7 @@
                   ExpectShowingPromo(&kTestIPHFeature));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        ActionableAlertOverridesLowPriority) {
   RunTestSequence(ResetSessionData(kMoreThanGracePeriod),
                   MaybeShowPromo(kTestIPHFeature),
@@ -2615,7 +2629,7 @@
                   ExpectShowingPromo(&kActionableAlertIPHFeature));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest, TwoActionableAlerts) {
+TEST_F(BrowserFeaturePromoController20PolicyTest, TwoActionableAlerts) {
   RunTestSequence(ResetSessionData(kMoreThanGracePeriod),
                   MaybeShowPromo(kActionableAlertIPHFeature),
                   ExpectShowingPromo(&kActionableAlertIPHFeature),
@@ -2624,7 +2638,7 @@
                   ExpectShowingPromo(&kActionableAlertIPHFeature));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        LegalNoticeOverridesLowPriority) {
   RunTestSequence(ResetSessionData(kMoreThanGracePeriod),
                   MaybeShowPromo(kTestIPHFeature),
@@ -2632,7 +2646,7 @@
                   ExpectShowingPromo(&kLegalNoticeFeature));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        LegalNoticeOverridesActionableAlert) {
   RunTestSequence(ResetSessionData(kMoreThanGracePeriod),
                   MaybeShowPromo(kActionableAlertIPHFeature),
@@ -2640,7 +2654,7 @@
                   ExpectShowingPromo(&kLegalNoticeFeature));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest, TwoLegalNotices) {
+TEST_F(BrowserFeaturePromoController20PolicyTest, TwoLegalNotices) {
   RunTestSequence(
       ResetSessionData(kMoreThanGracePeriod),
       MaybeShowPromo(kLegalNoticeFeature),
@@ -2649,46 +2663,43 @@
       ExpectShowingPromo(&kLegalNoticeFeature));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        GracePeriodBlocksHeavyweightInV2) {
-  RunTestSequence(
-      ResetSessionData(kLessThanGracePeriod),
-      MaybeShowPromo(kTutorialIPHFeature,
-                     UseV2() ? FeaturePromoResult::kBlockedByGracePeriod
-                             : FeaturePromoResult::Success()));
+  RunTestSequence(ResetSessionData(kLessThanGracePeriod),
+                  MaybeShowPromo(kTutorialIPHFeature,
+                                 FeaturePromoResult::kBlockedByGracePeriod));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        GracePeriodDoesNotBlockLightweightInV2) {
   RunTestSequence(
       ResetSessionData(kLessThanGracePeriod),
       MaybeShowPromo(kTestIPHFeature, FeaturePromoResult::Success()));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        GracePeriodDoesNotBlockHeavyweightLegalNotice) {
   RunTestSequence(
       ResetSessionData(kLessThanGracePeriod),
       MaybeShowPromo(kLegalNoticeFeature2, FeaturePromoResult::Success()));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        GracePeriodDoesNotBlockActionableAlert) {
   RunTestSequence(ResetSessionData(kLessThanGracePeriod),
                   MaybeShowPromo(kActionableAlertIPHFeature2,
                                  FeaturePromoResult::Success()));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        GracePeriodBlocksHeavyweightInV2AfterNewSession) {
-  RunTestSequence(
-      ResetSessionData(kLessThanGracePeriod), AdvanceTime(kMoreThanNewSession),
-      MaybeShowPromo(kTutorialIPHFeature,
-                     UseV2() ? FeaturePromoResult::kBlockedByGracePeriod
-                             : FeaturePromoResult::Success()));
+  RunTestSequence(ResetSessionData(kLessThanGracePeriod),
+                  AdvanceTime(kMoreThanNewSession),
+                  MaybeShowPromo(kTutorialIPHFeature,
+                                 FeaturePromoResult::kBlockedByGracePeriod));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        GracePeriodDoesNotBlocksHeavyweightLongAfterNewSession) {
   RunTestSequence(
       ResetSessionData(base::Seconds(60)), AdvanceTime(kMoreThanNewSession),
@@ -2696,17 +2707,16 @@
       MaybeShowPromo(kTutorialIPHFeature, FeaturePromoResult::Success()));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest, CooldownPreventsPromoInV2) {
-  RunTestSequence(
-      ResetSessionData(kMoreThanGracePeriod),
-      MaybeShowPromo(kTutorialIPHFeature), ClosePromo(),
-      AdvanceTime(kLessThanCooldown), AdvanceTime(kMoreThanGracePeriod),
-      MaybeShowPromo(kCustomActionIPHFeature,
-                     UseV2() ? FeaturePromoResult::kBlockedByCooldown
-                             : FeaturePromoResult::Success()));
+TEST_F(BrowserFeaturePromoController20PolicyTest, CooldownPreventsPromoInV2) {
+  RunTestSequence(ResetSessionData(kMoreThanGracePeriod),
+                  MaybeShowPromo(kTutorialIPHFeature), ClosePromo(),
+                  AdvanceTime(kLessThanCooldown),
+                  AdvanceTime(kMoreThanGracePeriod),
+                  MaybeShowPromo(kCustomActionIPHFeature,
+                                 FeaturePromoResult::kBlockedByCooldown));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        CooldownDoesNotPreventLightweightPromo) {
   RunTestSequence(ResetSessionData(kMoreThanGracePeriod),
                   MaybeShowPromo(kTutorialIPHFeature), ClosePromo(),
@@ -2715,7 +2725,7 @@
                   MaybeShowPromo(kTestIPHFeature));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        LightweightPromoDoesNotTriggerCooldown) {
   RunTestSequence(
       ResetSessionData(kMoreThanGracePeriod), MaybeShowPromo(kTestIPHFeature),
@@ -2723,7 +2733,7 @@
       AdvanceTime(kMoreThanGracePeriod), MaybeShowPromo(kTutorialIPHFeature));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        CooldownDoesNotPreventLegalNotice) {
   RunTestSequence(ResetSessionData(kMoreThanGracePeriod),
                   MaybeShowPromo(kTutorialIPHFeature), ClosePromo(),
@@ -2732,7 +2742,7 @@
                   MaybeShowPromo(kLegalNoticeFeature2));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        CooldownDoesNotPreventActionableAlert) {
   RunTestSequence(ResetSessionData(kMoreThanGracePeriod),
                   MaybeShowPromo(kTutorialIPHFeature), ClosePromo(),
@@ -2741,7 +2751,7 @@
                   MaybeShowPromo(kActionableAlertIPHFeature2));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        ExpiredCooldownDoesNotPreventPromo) {
   RunTestSequence(ResetSessionData(kMoreThanGracePeriod),
                   MaybeShowPromo(kTutorialIPHFeature), ClosePromo(),
@@ -2750,7 +2760,7 @@
                   MaybeShowPromo(kCustomActionIPHFeature));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        AbortedPromoDoesNotTriggerCooldown) {
   RunTestSequence(ResetSessionData(kMoreThanGracePeriod),
                   // Show an immediately close the promo without user
@@ -2760,7 +2770,7 @@
                   MaybeShowPromo(kCustomActionIPHFeature));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        AbortedPromoDoesTriggerIndividualCooldown) {
   RunTestSequence(ResetSessionData(kMoreThanGracePeriod),
                   MaybeShowPromo(kTutorialIPHFeature), AbortPromo(),
@@ -2770,19 +2780,17 @@
                                  FeaturePromoResult::kRecentlyAborted));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        AbortedPromoDoesNotTriggerSnooze) {
   RunTestSequence(
       ResetSessionData(kMoreThanGracePeriod),
       MaybeShowPromo(kTutorialIPHFeature), AbortPromo(),
       AdvanceTime(kMoreThanAbortCooldown), AdvanceTime(kMoreThanGracePeriod),
       // V1 uses full snooze time for aborted promos.
-      MaybeShowPromo(kTutorialIPHFeature,
-                     UseV2() ? FeaturePromoResult::Success()
-                             : FeaturePromoResult::kRecentlyAborted));
+      MaybeShowPromo(kTutorialIPHFeature, FeaturePromoResult::Success()));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest, SnoozeButtonDisappearsInV2) {
+TEST_F(BrowserFeaturePromoController20PolicyTest, SnoozeButtonDisappearsInV2) {
   RunTestSequence(
       ResetSessionData(kMoreThanGracePeriod),
       // Simulate N-1 snoozes at some distant time in the past.
@@ -2802,12 +2810,10 @@
       // button is *not* present.
       MaybeShowPromo(kSnoozeIPHFeature),
       WaitForShow(HelpBubbleView::kHelpBubbleElementIdForTesting),
-      If([this] { return UseV2(); },
-         EnsureNotPresent(HelpBubbleView::kFirstNonDefaultButtonIdForTesting),
-         EnsurePresent(HelpBubbleView::kFirstNonDefaultButtonIdForTesting)));
+      EnsureNotPresent(HelpBubbleView::kFirstNonDefaultButtonIdForTesting));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        TutorialSnoozeButtonChangesInV2) {
   RunTestSequence(
       ResetSessionData(kMoreThanGracePeriod),
@@ -2828,14 +2834,12 @@
       // button is *not* present.
       MaybeShowPromo(kTutorialIPHFeature),
       WaitForShow(HelpBubbleView::kHelpBubbleElementIdForTesting),
-      CheckViewProperty(
-          HelpBubbleView::kFirstNonDefaultButtonIdForTesting,
-          &views::LabelButton::GetText,
-          l10n_util::GetStringUTF16(UseV2() ? IDS_PROMO_DISMISS_BUTTON
-                                            : IDS_PROMO_SNOOZE_BUTTON)));
+      CheckViewProperty(HelpBubbleView::kFirstNonDefaultButtonIdForTesting,
+                        &views::LabelButton::GetText,
+                        l10n_util::GetStringUTF16(IDS_PROMO_DISMISS_BUTTON)));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        IdleAtStartupStillShowsPromo) {
   RunTestSequence(
       ResetSessionData(base::TimeDelta()),
@@ -2844,13 +2848,12 @@
       MaybeShowPromo(kTutorialIPHFeature));
 }
 
-TEST_P(BrowserFeaturePromoController20PolicyTest,
+TEST_F(BrowserFeaturePromoController20PolicyTest,
        IdleAtStartupPromoBlockedByNewSession) {
   RunTestSequence(
       ResetSessionData(base::TimeDelta()),
       AdvanceTime(std::nullopt, kMoreThanNewSession, true),
       AdvanceTime(base::Seconds(15), base::Milliseconds(100), false),
       MaybeShowPromo(kTutorialIPHFeature,
-                     UseV2() ? FeaturePromoResult::kBlockedByGracePeriod
-                             : FeaturePromoResult::Success()));
+                     FeaturePromoResult::kBlockedByGracePeriod));
 }
diff --git a/components/user_education/common/feature_promo/feature_promo_controller.h b/components/user_education/common/feature_promo/feature_promo_controller.h
index caeac8d..075e0b5 100644
--- a/components/user_education/common/feature_promo/feature_promo_controller.h
+++ b/components/user_education/common/feature_promo/feature_promo_controller.h
@@ -40,7 +40,7 @@
 }  // namespace ui
 
 // Declaring these in the global namespace for testing purposes.
-class BrowserFeaturePromoController20Test;
+class BrowserFeaturePromoController20TestBase;
 class FeaturePromoLifecycleUiTest;
 
 namespace user_education {
@@ -270,7 +270,7 @@
   }
 
  protected:
-  friend BrowserFeaturePromoController20Test;
+  friend BrowserFeaturePromoController20TestBase;
   friend FeaturePromoLifecycleUiTest;
 
   struct ShowPromoBubbleParams {