// 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 BiodStorageInterface::RecordMetadata& record_metadata),
              (override));
  MOCK_METHOD(bool,
              WriteRecord,
              (const BiodStorageInterface::RecordMetadata& record_metadata,
               base::Value data),
              (override));
  MOCK_METHOD(std::vector<BiodStorageInterface::Record>,
              ReadRecords,
              (const std::unordered_set<std::string>& user_ids),
              (override));
  MOCK_METHOD(std::vector<BiodStorageInterface::Record>,
              ReadRecordsForSingleUser,
              (const std::string& user_id),
              (override));
  MOCK_METHOD(base::Optional<Record>,
              ReadSingleRecord,
              (const std::string& user_id, const std::string& record_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_
