// Copyright 2018 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 SHILL_MOCK_PROFILE_H_
#define SHILL_MOCK_PROFILE_H_

#include <string>

#include <gmock/gmock.h>

#include "shill/profile.h"
#include "shill/wifi/wifi_provider.h"

namespace shill {

class MockProfile : public Profile {
 public:
  explicit MockProfile(Manager* manager);
  MockProfile(Manager* manager, const std::string& identifier);
  ~MockProfile() override;

  MOCK_METHOD1(AdoptService, bool(const ServiceRefPtr& service));
  MOCK_METHOD1(AbandonService, bool(const ServiceRefPtr& service));
  MOCK_METHOD1(LoadService,  bool(const ServiceRefPtr& service));
  MOCK_METHOD1(ConfigureService,  bool(const ServiceRefPtr& service));
  MOCK_METHOD1(ConfigureDevice, bool(const DeviceRefPtr& device));
  MOCK_METHOD2(DeleteEntry,  void(const std::string& entry_name, Error* error));
  MOCK_CONST_METHOD0(GetRpcIdentifier, RpcIdentifier());
  MOCK_METHOD1(UpdateService, bool(const ServiceRefPtr& service));
  MOCK_METHOD1(UpdateDevice, bool(const DeviceRefPtr& device));
  MOCK_METHOD1(UpdateWiFiProvider, bool(const WiFiProvider& wifi_provider));
  MOCK_METHOD0(Save, bool());
  MOCK_METHOD0(GetStorage, StoreInterface*());
  MOCK_CONST_METHOD0(GetConstStorage, const StoreInterface*());
  MOCK_CONST_METHOD0(IsDefault, bool());

 private:
  DISALLOW_COPY_AND_ASSIGN(MockProfile);
};

}  // namespace shill

#endif  // SHILL_MOCK_PROFILE_H_
