#include <memory>
#include <string>

#include <gtest/gtest.h>
#include "chassis.hpp"
#include "snapshot_fixture.hpp"
#include <nlohmann/json.hpp>

namespace redfish {
namespace {

TEST_F(SnapshotFixture, GetChassisAssemblyReturnsTheCorrectResponse) {
  getChassisAssembly(app_, CreateRequest(), share_async_resp_, "platform1");

  RunIoUntilDone();

  nlohmann::json& json = share_async_resp_->res.jsonValue;
  EXPECT_EQ(json["@odata.id"], "/redfish/v1/Chassis/platform1/Assembly");
  EXPECT_EQ(json["@odata.type"], "#Assembly.v1_3_0.Assembly");
  EXPECT_EQ(json["Id"], "Assembly");
  EXPECT_EQ(json["Name"], "Assembly Collection");
  EXPECT_EQ(json["Assemblies"].size(), json["Assemblies@odata.count"]);

  // Order should be CpuCooler0, CpuCooler1, tray
  nlohmann::json& cpuCooler0 = json["Assemblies"][0];
  EXPECT_EQ(cpuCooler0["@odata.id"],
            "/redfish/v1/Chassis/platform1/Assembly#/Assemblies/0");
  EXPECT_EQ(cpuCooler0["@odata.type"], "#Assembly.v1_3_0.AssemblyData");
  EXPECT_EQ(cpuCooler0["Location"]["PartLocation"]["LocationType"], "Slot");
  EXPECT_EQ(cpuCooler0["Location"]["PartLocation"]["ServiceLabel"],
            "CPU0_ANCHORS");
  EXPECT_EQ(cpuCooler0["MemberId"], "0");
  EXPECT_EQ(cpuCooler0["Model"], "Model");
  EXPECT_EQ(cpuCooler0["Name"], "CpuCooler0");

  nlohmann::json& cpuCooler1 = json["Assemblies"][1];
  EXPECT_EQ(cpuCooler1["@odata.id"],
            "/redfish/v1/Chassis/platform1/Assembly#/Assemblies/1");
  EXPECT_EQ(cpuCooler1["@odata.type"], "#Assembly.v1_3_0.AssemblyData");
  EXPECT_EQ(cpuCooler1["Location"]["PartLocation"]["LocationType"], "Slot");
  EXPECT_EQ(cpuCooler1["Location"]["PartLocation"]["ServiceLabel"],
            "CPU1_ANCHORS");
  EXPECT_EQ(cpuCooler1["MemberId"], "1");
  EXPECT_EQ(cpuCooler1["Model"], "Model");
  EXPECT_EQ(cpuCooler1["Name"], "CpuCooler1");

  nlohmann::json& tray = json["Assemblies"][2];
  EXPECT_EQ(tray["@odata.id"],
            "/redfish/v1/Chassis/platform1/Assembly#/Assemblies/2");
  EXPECT_EQ(tray["@odata.type"], "#Assembly.v1_3_0.AssemblyData");
  EXPECT_EQ(tray["Location"]["PartLocation"]["LocationType"], "Slot");
  EXPECT_EQ(tray["Location"]["PartLocation"]["ServiceLabel"], "TRAY");
  EXPECT_EQ(tray["MemberId"], "2");
  EXPECT_EQ(tray["Name"], "tray");

  EXPECT_EQ(share_async_resp_->res.result(), boost::beast::http::status::ok);
}

}  // namespace
}  // namespace redfish
