#include "openbmc_dbus_rest.hpp"

#include <gmock/gmock.h>  // IWYU pragma: keep
#include <gtest/gtest.h>  // IWYU pragma: keep

// IWYU pragma: no_include <gtest/gtest-message.h>
// IWYU pragma: no_include <gtest/gtest-test-part.h>
// IWYU pragma: no_include "gtest/gtest_pred_impl.h"
// IWYU pragma: no_include <gmock/gmock-matchers.h>

namespace crow::openbmc_mapper {
namespace {

using ::testing::ElementsAre;
// Also see redfish-core/ut/configfile_test.cpp
TEST(OpenbmcDbusRestTest, ValidFilenameGood) {
  EXPECT_TRUE(validateFilename("GoodConfigFile"));
  EXPECT_TRUE(validateFilename("_Underlines_"));
  EXPECT_TRUE(validateFilename("8675309"));
  EXPECT_TRUE(validateFilename("-Dashes-"));
  EXPECT_TRUE(validateFilename("With Spaces"));
  EXPECT_TRUE(validateFilename("One.Dot"));
  EXPECT_TRUE(validateFilename("trailingdot."));
  EXPECT_TRUE(validateFilename("-_ o _-"));
  EXPECT_TRUE(validateFilename(" "));
  EXPECT_TRUE(validateFilename(" ."));
}

// There is no length test yet because validateFilename() does not care yet
TEST(OpenbmcDbusRestTest, ValidFilenameBad) {
  EXPECT_FALSE(validateFilename(""));
  EXPECT_FALSE(validateFilename("Bad@file"));
  EXPECT_FALSE(validateFilename("/../../../../../etc/badpath"));
  EXPECT_FALSE(validateFilename("/../../etc/badpath"));
  EXPECT_FALSE(validateFilename("/mydir/configFile"));
  EXPECT_FALSE(validateFilename("/"));
  EXPECT_FALSE(validateFilename(".leadingdot"));
  EXPECT_FALSE(validateFilename("Two..Dots"));
  EXPECT_FALSE(validateFilename("../../../../../../etc/shadow"));
  EXPECT_FALSE(validateFilename("."));
}

TEST(OpenBmcDbusTest, TestArgSplit) {
  // test the basic types
  EXPECT_THAT(dbusArgSplit("x"), ElementsAre("x"));
  EXPECT_THAT(dbusArgSplit("y"), ElementsAre("y"));
  EXPECT_THAT(dbusArgSplit("b"), ElementsAre("b"));
  EXPECT_THAT(dbusArgSplit("n"), ElementsAre("n"));
  EXPECT_THAT(dbusArgSplit("q"), ElementsAre("q"));
  EXPECT_THAT(dbusArgSplit("i"), ElementsAre("i"));
  EXPECT_THAT(dbusArgSplit("u"), ElementsAre("u"));
  EXPECT_THAT(dbusArgSplit("x"), ElementsAre("x"));
  EXPECT_THAT(dbusArgSplit("t"), ElementsAre("t"));
  EXPECT_THAT(dbusArgSplit("d"), ElementsAre("d"));
  EXPECT_THAT(dbusArgSplit("h"), ElementsAre("h"));
  // test arrays
  EXPECT_THAT(dbusArgSplit("ai"), ElementsAre("ai"));
  EXPECT_THAT(dbusArgSplit("ax"), ElementsAre("ax"));
  // test tuples
  EXPECT_THAT(dbusArgSplit("(sss)"), ElementsAre("(sss)"));
  EXPECT_THAT(dbusArgSplit("(sss)b"), ElementsAre("(sss)", "b"));
  EXPECT_THAT(dbusArgSplit("b(sss)"), ElementsAre("b", "(sss)"));

  // Test nested types
  EXPECT_THAT(dbusArgSplit("a{si}b"), ElementsAre("a{si}", "b"));
  EXPECT_THAT(dbusArgSplit("a(sss)b"), ElementsAre("a(sss)", "b"));
  EXPECT_THAT(dbusArgSplit("aa{si}b"), ElementsAre("aa{si}", "b"));
  EXPECT_THAT(dbusArgSplit("i{si}b"), ElementsAre("i", "{si}", "b"));
}
}  // namespace
}  // namespace crow::openbmc_mapper
