// Copyright 2016 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 LOGIN_MANAGER_MOCK_SERVER_BACKED_STATE_KEY_GENERATOR_H_
#define LOGIN_MANAGER_MOCK_SERVER_BACKED_STATE_KEY_GENERATOR_H_

#include <base/macros.h>
#include <gmock/gmock.h>

#include "login_manager/server_backed_state_key_generator.h"

namespace login_manager {

class MockServerBackedStateKeyGenerator : public ServerBackedStateKeyGenerator {
 public:
  MockServerBackedStateKeyGenerator(SystemUtils* system_utils,
                                    LoginMetrics* metrics)
      : ServerBackedStateKeyGenerator(system_utils, metrics) {}
  ~MockServerBackedStateKeyGenerator() override {}

  MOCK_METHOD(void, RequestStateKeys, (const StateKeyCallback&), (override));

 private:
  DISALLOW_COPY_AND_ASSIGN(MockServerBackedStateKeyGenerator);
};

}  // namespace login_manager

#endif  // LOGIN_MANAGER_MOCK_SERVER_BACKED_STATE_KEY_GENERATOR_H_
