#include "controllers/moderationactions/ModerationAction.hpp" #include "messages/Image.hpp" #include "mocks/EmptyApplication.hpp" #include "singletons/Emotes.hpp" #include "singletons/Resources.hpp" #include "singletons/Settings.hpp" #include #include using namespace chatterino; using namespace std::chrono_literals; namespace { class MockApplication : mock::EmptyApplication { public: MockApplication() : settings(this->settingsDir.filePath("settings.json")) { } IEmotes *getEmotes() override { return &this->emotes; } Settings settings; Emotes emotes; }; class ModerationActionTest : public ::testing::Test { public: MockApplication mockApplication; }; } // namespace TEST_F(ModerationActionTest, Parse) { struct TestCase { QString action; QString iconPath; QString expectedLine1; QString expectedLine2; std::optional expectedImage; ModerationAction::Type expectedType; }; std::vector tests{ { .action = "/ban forsen", .expectedImage = Image::fromResourcePixmap(getResources().buttons.ban), .expectedType = ModerationAction::Type::Ban, }, { .action = "/delete {message.id}", .expectedImage = Image::fromResourcePixmap(getResources().buttons.trashCan), .expectedType = ModerationAction::Type::Delete, }, { .action = "/timeout {user.name} 1d", .expectedLine1 = "1", .expectedLine2 = "d", .expectedType = ModerationAction::Type::Timeout, }, { .action = ".timeout {user.name} 300", .expectedLine1 = "5", .expectedLine2 = "m", .expectedType = ModerationAction::Type::Timeout, }, { .action = "forsen", .expectedLine1 = "fo", .expectedLine2 = "rs", .expectedType = ModerationAction::Type::Custom, }, { .action = "forsen", .iconPath = "file:///this-is-the-path-to-the-icon.png", .expectedLine1 = "fo", .expectedLine2 = "rs", .expectedImage = Image::fromUrl(Url{"file:///this-is-the-path-to-the-icon.png"}), .expectedType = ModerationAction::Type::Custom, }, }; for (const auto &test : tests) { ModerationAction moderationAction(test.action, test.iconPath); EXPECT_EQ(moderationAction.getAction(), test.action); EXPECT_EQ(moderationAction.getLine1(), test.expectedLine1); EXPECT_EQ(moderationAction.getLine2(), test.expectedLine2); EXPECT_EQ(moderationAction.getImage(), test.expectedImage); EXPECT_EQ(moderationAction.getType(), test.expectedType); } }