// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "peridot/bin/ledger/storage/public/object.h"

#include <lib/fsl/vmo/strings.h>

#include "gtest/gtest.h"

namespace storage {
namespace {

class StringObject : public Object {
 public:
  explicit StringObject(std::string value) : value_(std::move(value)) {}
  ~StringObject() override {}

  ObjectIdentifier GetIdentifier() const override {
    return {1u, 2u, ObjectDigest("digest")};
  }

  Status GetData(fxl::StringView* data) const override {
    *data = value_;
    return Status::OK;
  }

 private:
  std::string value_;
};

TEST(ObjectTest, GetVmo) {
  std::string content = "content";
  StringObject object(content);

  fsl::SizedVmo vmo;
  ASSERT_EQ(Status::OK, object.GetVmo(&vmo));
  std::string vmo_content;
  ASSERT_TRUE(fsl::StringFromVmo(vmo, &vmo_content));
  EXPECT_EQ(content, vmo_content);
}

}  // namespace
}  // namespace storage
