// Copyright 2021 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 BIOD_MOCK_BIOD_STORAGE_H_
#define BIOD_MOCK_BIOD_STORAGE_H_

#include <gmock/gmock.h>

#include <memory>
#include <string>
#include <unordered_set>
#include <vector>

#include "biod/biod_storage.h"

namespace biod {
namespace storage {

class MockBiodStorage : public BiodStorageInterface {
 public:
  MockBiodStorage() = default;
  ~MockBiodStorage() override = default;

  MOCK_METHOD(void,
              SetRootPathForTesting,
              (const base::FilePath& root_path),
              (override));
  MOCK_METHOD(base::FilePath,
              GetRecordFilename,
              (const BiometricsManagerRecord& record),
              (override));
  MOCK_METHOD(bool,
              WriteRecord,
              (const BiometricsManagerRecord& record, base::Value data),
              (override));
  MOCK_METHOD(ReadRecordResult,
              ReadRecords,
              (const std::unordered_set<std::string>& user_ids),
              (override));
  MOCK_METHOD(ReadRecordResult,
              ReadRecordsForSingleUser,
              (const std::string& user_id),
              (override));
  MOCK_METHOD(bool,
              DeleteRecord,
              (const std::string& user_id, const std::string& record_id),
              (override));
  MOCK_METHOD(void, set_allow_access, (bool allow_access), (override));
};

}  // namespace storage
}  // namespace biod

#endif  // BIOD_MOCK_BIOD_STORAGE_H_
