#include "libpldmresponder/fru_parser.hpp"

#include <gtest/gtest.h>

TEST(FruParser, allScenarios)
{
    using namespace pldm::responder::fru_parser;

    // Empty directory condition
    ASSERT_THROW(FruParser("./fru_json"), std::exception);
    // No master FRU JSON
    ASSERT_THROW(FruParser("./fru_jsons/malformed1"), std::exception);
    // Malformed master FRU JSON
    ASSERT_THROW(FruParser("./fru_jsons/malformed2"), std::exception);
    // Malformed FRU JSON
    ASSERT_THROW(FruParser("./fru_jsons/malformed3"), std::exception);

    FruParser parser{"./fru_jsons/good"};

    // Get an item with a single PLDM FRU record
    FruRecordInfos cpu{{1,
                        1,
                        {{"xyz.openbmc_project.Inventory.Decorator.Asset",
                          "PartNumber", "string", 3},
                         {"xyz.openbmc_project.Inventory.Decorator.Asset",
                          "SerialNumber", "string", 4}}}};
    auto cpuInfos =
        parser.getRecordInfo("xyz.openbmc_project.Inventory.Item.Cpu");
    ASSERT_EQ(cpuInfos.size(), 1);
    ASSERT_EQ(cpu == cpuInfos, true);

    // Get an item type with 2 PLDM FRU records
    auto boardInfos =
        parser.getRecordInfo("xyz.openbmc_project.Inventory.Item.Board");
    ASSERT_EQ(boardInfos.size(), 2);

    // D-Bus lookup info for FRU information
    DBusLookupInfo lookupInfo{"xyz.openbmc_project.Inventory.Manager",
                              "/xyz/openbmc_project/inventory/system/",
                              {"xyz.openbmc_project.Inventory.Item.Board",
                               "xyz.openbmc_project.Inventory.Item.Cpu"}};

    auto dbusInfo = parser.inventoryLookup();
    ASSERT_EQ(dbusInfo == lookupInfo, true);

    // Search for an invalid item type
    ASSERT_THROW(
        parser.getRecordInfo("xyz.openbmc_project.Inventory.Item.DIMM"),
        std::exception);
}
