// Copyright 2024 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/page_info/page_info_ui.h"

#include "build/buildflag.h"
#include "components/content_settings/core/browser/content_settings_registry.h"
#include "components/page_info/page_info_ui_delegate.h"
#include "components/strings/grit/components_strings.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/l10n/l10n_util.h"

namespace {

class MockPageInfoUiDelegate : public PageInfoUiDelegate {
 public:
#if !BUILDFLAG(IS_ANDROID)
  MOCK_METHOD(bool, IsBlockAutoPlayEnabled, (), (override));
  MOCK_METHOD(bool, IsMultipleTabsOpen, (), (override));
  MOCK_METHOD(void, OpenSiteSettingsFileSystem, (), (override));
#endif
  MOCK_METHOD(content::PermissionResult,
              GetPermissionResult,
              (blink::PermissionType permission),
              (override));
  MOCK_METHOD(std::optional<content::PermissionResult>,
              GetEmbargoResult,
              (ContentSettingsType type),
              (override));
  MOCK_METHOD(void,
              GetMerchantTrustInfo,
              (page_info::MerchantDataCallback callback),
              (override));
};

}  // namespace

#if !BUILDFLAG(IS_ANDROID)
TEST(PageInfoUITest, PermissionStateToUIString) {
  content_settings::ContentSettingsRegistry::GetInstance();
  MockPageInfoUiDelegate delegate;
  PageInfo::PermissionInfo permission_info;
  permission_info.setting = CONTENT_SETTING_ASK;

  permission_info.type = ContentSettingsType::KEYBOARD_LOCK;
  EXPECT_EQ(
      l10n_util::GetStringUTF16(IDS_PAGE_INFO_STATE_TEXT_KEYBOARD_LOCK_ASK),
      PageInfoUI::PermissionStateToUIString(&delegate, permission_info));

  permission_info.type = ContentSettingsType::POINTER_LOCK;
  EXPECT_EQ(
      l10n_util::GetStringUTF16(IDS_PAGE_INFO_STATE_TEXT_POINTER_LOCK_ASK),
      PageInfoUI::PermissionStateToUIString(&delegate, permission_info));
}
#endif

TEST(PageInfoUITest, GetSecurityDescriptionWarnableSuspiciousSite) {
  PageInfoUI::IdentityInfo identity_info;
  identity_info.safe_browsing_status =
      PageInfo::SAFE_BROWSING_STATUS_WARNABLE_SUSPICIOUS_SITE;

  PageInfoUI page_info_ui;
  std::unique_ptr<PageInfoUI::SecurityDescription> description =
      page_info_ui.GetSecurityDescription(identity_info);

  ASSERT_NE(description, nullptr);
  EXPECT_EQ(description->summary_style, PageInfoUI::SecuritySummaryColor::RED);
  EXPECT_EQ(description->summary,
            l10n_util::GetStringUTF16(IDS_PAGE_INFO_SUSPICIOUS_SITE_SUMMARY));
  EXPECT_EQ(description->details,
            l10n_util::GetStringUTF16(IDS_PAGE_INFO_SUSPICIOUS_SITE_DETAILS));
  EXPECT_EQ(description->type,
            PageInfoUI::SecurityDescriptionType::SAFE_BROWSING);
}
