// 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.

#import "ios/chrome/browser/web/model/annotations/annotations_util.h"

#import "base/values.h"
#import "components/prefs/pref_registry_simple.h"
#import "components/prefs/testing_pref_service.h"
#import "ios/chrome/browser/shared/model/prefs/pref_names.h"
#import "testing/gtest_mac.h"
#import "testing/platform_test.h"

class AnnotationUtilTest : public PlatformTest {
 public:
  void SetUp() override {
    PlatformTest::SetUp();
    prefs_ = std::make_unique<TestingPrefServiceSimple>();
    prefs_->registry()->RegisterDictionaryPref(prefs::kWebAnnotationsPolicy);
  }

  std::unique_ptr<TestingPrefServiceSimple> prefs_;
};

TEST_F(AnnotationUtilTest, TestPolicyDefaultEnabled) {
  EXPECT_EQ(WebAnnotationPolicyValue::kEnabled,
            GetPolicyForType(prefs_.get(), WebAnnotationType::kAddresses));
  EXPECT_EQ(WebAnnotationPolicyValue::kEnabled,
            GetPolicyForType(prefs_.get(), WebAnnotationType::kPhoneNumbers));
}

TEST_F(AnnotationUtilTest, TestGetPolicyForType) {
  base::DictValue dict;
  dict.Set("default", "enabled");
  dict.Set("calendar", "longpressonly");
  dict.Set("email", "disabled");

  prefs_->SetDict(prefs::kWebAnnotationsPolicy, std::move(dict));
  EXPECT_EQ(WebAnnotationPolicyValue::kLongPressOnly,
            GetPolicyForType(prefs_.get(), WebAnnotationType::kCalendar));
  EXPECT_EQ(WebAnnotationPolicyValue::kEnabled,
            GetPolicyForType(prefs_.get(), WebAnnotationType::kPhoneNumbers));
  EXPECT_EQ(WebAnnotationPolicyValue::kDisabled,
            GetPolicyForType(prefs_.get(), WebAnnotationType::kEMailAddresses));
}
