chromium/ios/chrome/browser/policy/model/enterprise_policy_test_helper.h

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_CHROME_BROWSER_POLICY_MODEL_ENTERPRISE_POLICY_TEST_HELPER_H_
#define IOS_CHROME_BROWSER_POLICY_MODEL_ENTERPRISE_POLICY_TEST_HELPER_H_

#include <memory>

#include "base/files/file_path.h"
#include "components/policy/core/common/mock_configuration_policy_provider.h"
#include "ios/chrome/browser/shared/model/profile/test/test_profile_ios_forward.h"

class BrowserPolicyConnectorIOS;
class BrowserStatePolicyConnector;
class PrefService;

// Builds the boilerplate enterprise policy configuration and creates a browser
// state configured with that policy.
class EnterprisePolicyTestHelper {
 public:
  // Creates a new instance using `state_directory_path` as storage for the
  // backing state.
  explicit EnterprisePolicyTestHelper(
      const base::FilePath& state_directory_path);
  ~EnterprisePolicyTestHelper();

  // Returns the browser state configured with `policy_provider_`.
  TestChromeBrowserState* GetBrowserState() const;
  // Returns the backing local state.
  PrefService* GetLocalState();
  // Returns the policy provider attached to `browser_state_`.
  policy::MockConfigurationPolicyProvider* GetPolicyProvider();
  // Returns the browser policy connector.
  BrowserPolicyConnectorIOS* GetBrowserPolicyConnector();

 private:
  // The enterprise configuration policy provider.
  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
  // The application-level policy connector. Must outlive `local_state_`.
  std::unique_ptr<BrowserPolicyConnectorIOS> browser_policy_connector_;
  // The local state PrefService managed by policy.
  std::unique_ptr<PrefService> local_state_;
  // The BrowserState-level policy connector. Must outlive `pref_service_`.
  std::unique_ptr<BrowserStatePolicyConnector> browser_state_policy_connector_;
  // The browser state configured with the `policy_provider_`.
  std::unique_ptr<TestChromeBrowserState> browser_state_;

  EnterprisePolicyTestHelper& operator=(const EnterprisePolicyTestHelper&) =
      delete;
  EnterprisePolicyTestHelper(const EnterprisePolicyTestHelper&) = delete;
};

#endif  // IOS_CHROME_BROWSER_POLICY_MODEL_ENTERPRISE_POLICY_TEST_HELPER_H_