#include "gtest/gtest.h"
#include "jwt/jwt.hpp"

namespace {

struct Wrapper
{
    // The std::move here is required to resolve to the move ctor
    // rather than to the universal reference ctor.
    Wrapper(jwt::jwt_object&& obj) : object{std::move(obj)} {}
    jwt::jwt_object object;
};

} // END namespace

TEST (ObjectTest, MoveConstructor)
{
  using namespace jwt::params;

  jwt::jwt_object obj{algorithm("HS256"), secret("secret")};

  obj.add_claim("iss", "arun.muralidharan");

  auto wrapper = Wrapper{std::move(obj)};

  EXPECT_EQ(wrapper.object.header().algo(), jwt::algorithm::HS256);
  EXPECT_EQ(wrapper.object.secret(), "secret");
  EXPECT_TRUE(wrapper.object.payload().has_claim_with_value("iss", "arun.muralidharan"));
}

int main(int argc, char **argv)
{
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}
