// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/webapps/browser/android/install_prompt_prefs.h"
#include "base/test/scoped_feature_list.h"
#include "base/time/time.h"
#include "components/prefs/testing_pref_service.h"
#include "components/webapps/browser/features.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace webapps {
class InstallPromptPrefsTest : public ::testing::Test {
public:
void SetUp() override {
// user_prefs::UserPrefs::Set(browser_context(), &prefs_);
InstallPromptPrefs::RegisterProfilePrefs(prefs_.registry());
}
TestingPrefServiceSimple* prefs() { return &prefs_; }
private:
TestingPrefServiceSimple prefs_;
};
TEST_F(InstallPromptPrefsTest, PromptDismissedRecently) {
base::Time time = base::Time::Now();
// Dismiss the prompt once.
InstallPromptPrefs::RecordInstallPromptDismissed(prefs(), time);
EXPECT_FALSE(InstallPromptPrefs::IsPromptDismissedConsecutivelyRecently(
prefs(), time));
// Dismiss 2 more times (3 times total).
InstallPromptPrefs::RecordInstallPromptDismissed(prefs(), time);
InstallPromptPrefs::RecordInstallPromptDismissed(prefs(), time);
EXPECT_TRUE(InstallPromptPrefs::IsPromptDismissedConsecutivelyRecently(
prefs(), time));
// Dismisses do not considered "recent" after 7 days.
EXPECT_FALSE(InstallPromptPrefs::IsPromptDismissedConsecutivelyRecently(
prefs(), time + base::Days(7)));
}
TEST_F(InstallPromptPrefsTest, PromptIgnoredRecently) {
base::Time time = base::Time::Now();
// Ignore the prompt once.
InstallPromptPrefs::RecordInstallPromptIgnored(prefs(), time);
EXPECT_FALSE(
InstallPromptPrefs::IsPromptIgnoredConsecutivelyRecently(prefs(), time));
// Ignore 2 more times (3 times total).
InstallPromptPrefs::RecordInstallPromptIgnored(prefs(), time);
InstallPromptPrefs::RecordInstallPromptIgnored(prefs(), time);
EXPECT_TRUE(
InstallPromptPrefs::IsPromptIgnoredConsecutivelyRecently(prefs(), time));
// Ignore do not considered "recent" after 3 days.
EXPECT_FALSE(InstallPromptPrefs::IsPromptIgnoredConsecutivelyRecently(
prefs(), time + base::Days(3)));
}
TEST_F(InstallPromptPrefsTest, RecentCountResetByClicks) {
base::Time time = base::Time::Now();
// Record 3 dismiss and 3 ignore.
for (int i = 0; i < 3; i++) {
InstallPromptPrefs::RecordInstallPromptDismissed(prefs(), time);
InstallPromptPrefs::RecordInstallPromptIgnored(prefs(), time);
}
EXPECT_TRUE(InstallPromptPrefs::IsPromptDismissedConsecutivelyRecently(
prefs(), time));
EXPECT_TRUE(
InstallPromptPrefs::IsPromptIgnoredConsecutivelyRecently(prefs(), time));
// Record one click, both dimiss and ignore are not continuous.
InstallPromptPrefs::RecordInstallPromptClicked(prefs());
EXPECT_FALSE(InstallPromptPrefs::IsPromptDismissedConsecutivelyRecently(
prefs(), time));
EXPECT_FALSE(
InstallPromptPrefs::IsPromptIgnoredConsecutivelyRecently(prefs(), time));
// 2 more dimisses & ignores, still ok.
for (int i = 0; i < 2; i++) {
InstallPromptPrefs::RecordInstallPromptDismissed(prefs(), time);
InstallPromptPrefs::RecordInstallPromptIgnored(prefs(), time);
}
EXPECT_FALSE(InstallPromptPrefs::IsPromptDismissedConsecutivelyRecently(
prefs(), time));
EXPECT_FALSE(
InstallPromptPrefs::IsPromptIgnoredConsecutivelyRecently(prefs(), time));
}
} // namespace webapps