// Copyright 2017 The Chromium 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 COMPONENTS_DOWNLOAD_INTERNAL_TEST_TEST_STORE_H_
#define COMPONENTS_DOWNLOAD_INTERNAL_TEST_TEST_STORE_H_

#include <string>
#include <vector>

#include "base/callback.h"
#include "base/macros.h"
#include "base/optional.h"
#include "components/download/internal/store.h"

namespace download {

struct Entry;

namespace test {

class TestStore : public Store {
 public:
  TestStore();
  ~TestStore() override;

  // Store implementation.
  bool IsInitialized() override;
  void Initialize(InitCallback callback) override;
  void HardRecover(StoreCallback callback) override;
  void Update(const Entry& entry, StoreCallback callback) override;
  void Remove(const std::string& guid, StoreCallback callback) override;

  // Callback trigger methods.
  void AutomaticallyTriggerAllFutureCallbacks(bool success);
  void TriggerInit(bool success, std::unique_ptr<std::vector<Entry>> entries);
  void TriggerHardRecover(bool success);
  void TriggerUpdate(bool success);
  void TriggerRemove(bool success);

  // Parameter access methods.
  const Entry* LastUpdatedEntry() const;
  std::string LastRemovedEntry() const;
  bool init_called() const { return init_called_; }
  const std::vector<Entry>& updated_entries() const { return updated_entries_; }
  const std::vector<std::string>& removed_entries() const {
    return removed_entries_;
  }

 private:
  bool ready_;

  bool init_called_;

  std::vector<Entry> updated_entries_;
  std::vector<std::string> removed_entries_;

  base::Optional<bool> automatic_callback_response_;
  InitCallback init_callback_;
  StoreCallback hard_recover_callback_;
  StoreCallback update_callback_;
  StoreCallback remove_callback_;

  DISALLOW_COPY_AND_ASSIGN(TestStore);
};

}  // namespace test
}  // namespace download

#endif  // COMPONENTS_DOWNLOAD_INTERNAL_TEST_TEST_STORE_H_
