#include "app.hpp"
#include "async_resp.hpp"
#include "assembly.hpp"
#include "chassis.hpp"
#include "http_request.hpp"
#include "http_response.hpp"
#include "snapshot_fixture.hpp"

#include <nlohmann/json.hpp>

#include <gmock/gmock.h>
#include <gtest/gtest.h>

namespace redfish
{
namespace
{

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

    RunIoUntilDone();

    LOG(INFO) << share_async_resp_->res.jsonValue.dump(2);

    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);
}

}
}
