// Copyright 2013 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 <string>

#include "base/prefs/pref_value_map.h"
#include "base/values.h"
#include "chrome/browser/net/disk_cache_dir_policy_handler.h"
#include "chrome/common/pref_names.h"
#include "components/policy/core/common/policy_map.h"
#include "policy/policy_constants.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace policy {

class DiskCacheDirPolicyTest : public testing::Test {
 protected:
  PolicyMap policy_;
  DiskCacheDirPolicyHandler handler_;
  PrefValueMap prefs_;
};

TEST_F(DiskCacheDirPolicyTest, Default) {
  handler_.ApplyPolicySettings(policy_, &prefs_);
  EXPECT_FALSE(prefs_.GetValue(prefs::kDiskCacheDir, NULL));
}

TEST_F(DiskCacheDirPolicyTest, SetPolicyInvalid) {
  // DiskCacheDir policy expects a string; give it a boolean.
  policy_.Set(key::kDiskCacheDir,
              POLICY_LEVEL_MANDATORY,
              POLICY_SCOPE_USER,
              new base::FundamentalValue(false),
              NULL);
  handler_.ApplyPolicySettings(policy_, &prefs_);
  EXPECT_FALSE(prefs_.GetValue(prefs::kDiskCacheDir, NULL));
}

TEST_F(DiskCacheDirPolicyTest, SetPolicyValid) {
  // Use a variable in the value. It should be expanded by the handler.
  const std::string in = "${user_name}/foo";
  policy_.Set(key::kDiskCacheDir,
              POLICY_LEVEL_MANDATORY,
              POLICY_SCOPE_USER,
              new base::StringValue(in),
              NULL);
  handler_.ApplyPolicySettings(policy_, &prefs_);

  const base::Value* value;
  ASSERT_TRUE(prefs_.GetValue(prefs::kDiskCacheDir, &value));
  std::string out;
  ASSERT_TRUE(value->GetAsString(&out));
  EXPECT_NE(std::string::npos, out.find("foo"));
  EXPECT_EQ(std::string::npos, out.find("${user_name}"));
}

}  // namespace policy
