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

#ifndef LIBBRILLO_POLICY_MOCK_LIBPOLICY_H_
#define LIBBRILLO_POLICY_MOCK_LIBPOLICY_H_

#include <gmock/gmock.h>
#include <set>

#include "policy/libpolicy.h"

#pragma GCC visibility push(default)

namespace policy {

// This is a generic mock of the PolicyProvider class.
class MockPolicyProvider : public PolicyProvider {
 public:
  MockPolicyProvider() = default;
  ~MockPolicyProvider() override = default;

  MOCK_METHOD(bool, Reload, (), (override));
  MOCK_METHOD(bool, device_policy_is_loaded, (), (const, override));
  MOCK_METHOD(const DevicePolicy&, GetDevicePolicy, (), (const, override));
  MOCK_METHOD(bool, IsConsumerDevice, (), (const, override));

 private:
  DISALLOW_COPY_AND_ASSIGN(MockPolicyProvider);
};

}  // namespace policy

#pragma GCC visibility pop

#endif  // LIBBRILLO_POLICY_MOCK_LIBPOLICY_H_
