Index: chrome/browser/policy/managed_bookmarks_policy_handler_unittest.cc |
diff --git a/chrome/browser/policy/managed_bookmarks_policy_handler_unittest.cc b/chrome/browser/policy/managed_bookmarks_policy_handler_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..877c56faa35f122e812675cfdd78df32e870341f |
--- /dev/null |
+++ b/chrome/browser/policy/managed_bookmarks_policy_handler_unittest.cc |
@@ -0,0 +1,190 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/json/json_reader.h" |
+#include "chrome/browser/policy/managed_bookmarks_policy_handler.h" |
+#include "components/bookmarks/common/bookmark_pref_names.h" |
+#include "components/policy/core/browser/configuration_policy_pref_store.h" |
+#include "components/policy/core/browser/configuration_policy_pref_store_test.h" |
+#include "components/policy/core/common/policy_map.h" |
+#include "components/policy/core/common/schema.h" |
+#include "extensions/common/value_builder.h" |
+#include "policy/policy_constants.h" |
+ |
+namespace policy { |
+ |
+class ManagedBookmarksPolicyHandlerTest |
+ : public ConfigurationPolicyPrefStoreTest { |
+ virtual void SetUp() OVERRIDE { |
+ Schema chrome_schema = Schema::Wrap(GetChromeSchemaData()); |
+ handler_list_.AddHandler(make_scoped_ptr<ConfigurationPolicyHandler>( |
+ new ManagedBookmarksPolicyHandler(chrome_schema))); |
+ } |
+}; |
+ |
+TEST_F(ManagedBookmarksPolicyHandlerTest, ApplyPolicySettings) { |
+ EXPECT_FALSE(store_->GetValue(prefs::kManagedBookmarks, NULL)); |
+ |
+ PolicyMap policy; |
+ policy.Set(key::kManagedBookmarks, |
+ POLICY_LEVEL_MANDATORY, |
+ POLICY_SCOPE_USER, |
+ base::JSONReader::Read( |
+ "[" |
+ " {" |
+ " \"name\": \"Google\"," |
+ " \"url\": \"google.com\"" |
+ " }," |
+ " {" |
+ " \"name\": \"Empty Folder\"," |
+ " \"children\": []" |
+ " }," |
+ " {" |
+ " \"name\": \"Big Folder\"," |
+ " \"children\": [" |
+ " {" |
+ " \"name\": \"Youtube\"," |
+ " \"url\": \"youtube.com\"" |
+ " }," |
+ " {" |
+ " \"name\": \"Chromium\"," |
+ " \"url\": \"chromium.org\"" |
+ " }," |
+ " {" |
+ " \"name\": \"More Stuff\"," |
+ " \"children\": [" |
+ " {" |
+ " \"name\": \"Bugs\"," |
+ " \"url\": \"crbug.com\"" |
+ " }" |
+ " ]" |
+ " }" |
+ " ]" |
+ " }" |
+ "]"), |
+ NULL); |
+ UpdateProviderPolicy(policy); |
+ const base::Value* pref_value = NULL; |
+ EXPECT_TRUE(store_->GetValue(prefs::kManagedBookmarks, &pref_value)); |
+ ASSERT_TRUE(pref_value); |
+ |
+ scoped_ptr<base::Value> expected( |
+ extensions::ListBuilder() |
+ .Append(extensions::DictionaryBuilder() |
+ .Set("name", "Google") |
+ .Set("url", "http://google.com/")) |
+ .Append(extensions::DictionaryBuilder() |
+ .Set("name", "Empty Folder") |
+ .Set("children", extensions::ListBuilder().Pass())) |
+ .Append(extensions::DictionaryBuilder() |
+ .Set("name", "Big Folder") |
+ .Set("children", extensions::ListBuilder() |
+ .Append(extensions::DictionaryBuilder() |
+ .Set("name", "Youtube") |
+ .Set("url", "http://youtube.com/")) |
+ .Append(extensions::DictionaryBuilder() |
+ .Set("name", "Chromium") |
+ .Set("url", "http://chromium.org/")) |
+ .Append(extensions::DictionaryBuilder() |
+ .Set("name", "More Stuff") |
+ .Set("children", extensions::ListBuilder() |
+ .Append(extensions::DictionaryBuilder() |
+ .Set("name", "Bugs") |
+ .Set("url", "http://crbug.com/") |
+ .Pass()) |
+ .Pass()) |
+ .Pass()) |
+ .Pass()) |
+ .Pass()) |
+ .Build()); |
+ EXPECT_TRUE(pref_value->Equals(expected.get())); |
+} |
+ |
+TEST_F(ManagedBookmarksPolicyHandlerTest, WrongPolicyType) { |
+ PolicyMap policy; |
+ // The expected type is base::ListValue, but this policy sets it as an |
+ // unparsed base::StringValue. Any type other than ListValue should fail. |
+ policy.Set(key::kManagedBookmarks, |
+ POLICY_LEVEL_MANDATORY, |
+ POLICY_SCOPE_USER, |
+ new base::StringValue( |
+ "[" |
+ " {" |
+ " \"name\": \"Google\"," |
+ " \"url\": \"google.com\"" |
+ " }," |
+ "]"), |
+ NULL); |
+ UpdateProviderPolicy(policy); |
+ EXPECT_FALSE(store_->GetValue(prefs::kManagedBookmarks, NULL)); |
+} |
+ |
+TEST_F(ManagedBookmarksPolicyHandlerTest, UnknownKeys) { |
+ PolicyMap policy; |
+ policy.Set(key::kManagedBookmarks, |
+ POLICY_LEVEL_MANDATORY, |
+ POLICY_SCOPE_USER, |
+ base::JSONReader::Read( |
+ "[" |
+ " {" |
+ " \"name\": \"Google\"," |
+ " \"unknown\": \"should be ignored\"," |
+ " \"url\": \"google.com\"" |
+ " }" |
+ "]"), |
+ NULL); |
+ UpdateProviderPolicy(policy); |
+ const base::Value* pref_value = NULL; |
+ EXPECT_TRUE(store_->GetValue(prefs::kManagedBookmarks, &pref_value)); |
+ ASSERT_TRUE(pref_value); |
+ |
+ scoped_ptr<base::Value> expected( |
+ extensions::ListBuilder() |
+ .Append(extensions::DictionaryBuilder() |
+ .Set("name", "Google") |
+ .Set("url", "http://google.com/")) |
+ .Build()); |
+ EXPECT_TRUE(pref_value->Equals(expected.get())); |
+} |
+ |
+TEST_F(ManagedBookmarksPolicyHandlerTest, BadBookmark) { |
+ PolicyMap policy; |
+ policy.Set(key::kManagedBookmarks, |
+ POLICY_LEVEL_MANDATORY, |
+ POLICY_SCOPE_USER, |
+ base::JSONReader::Read( |
+ "[" |
+ " {" |
+ " \"name\": \"Empty\"," |
+ " \"url\": \"\"" |
+ " }," |
+ " {" |
+ " \"name\": \"Invalid type\"," |
+ " \"url\": 4" |
+ " }," |
+ " {" |
+ " \"name\": \"Invalid URL\"," |
+ " \"url\": \"?\"" |
+ " }," |
+ " {" |
+ " \"name\": \"Google\"," |
+ " \"url\": \"google.com\"" |
+ " }" |
+ "]"), |
+ NULL); |
+ UpdateProviderPolicy(policy); |
+ const base::Value* pref_value = NULL; |
+ EXPECT_TRUE(store_->GetValue(prefs::kManagedBookmarks, &pref_value)); |
+ ASSERT_TRUE(pref_value); |
+ |
+ scoped_ptr<base::Value> expected( |
+ extensions::ListBuilder() |
+ .Append(extensions::DictionaryBuilder() |
+ .Set("name", "Google") |
+ .Set("url", "http://google.com/")) |
+ .Build()); |
+ EXPECT_TRUE(pref_value->Equals(expected.get())); |
+} |
+ |
+} // namespace policy |