Files
DarkflameServer/tests/dCommonTests/SlashCommandLevelsTests.cpp
Aaron Kimbrell e213a7aeff feat: web dashboard and playground work
The NexusDashboard-parity dashboard (dDashboardServer) and everything built on it on the experimental branch:
accounts, characters, properties and moderation tools, permissions shared with in-game slash commands, economy
reports, World 3D and property 3D views with client scenery, scheduled events (features, vanity changes, live
events, announcements, restarts), vanity files and events, the CDClient browser, the message inspector with saved
captures, chat filter tools, community challenges, live ops, the AI moderator helper, and the server-side changes
they need.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 22:30:43 -05:00

76 lines
4.1 KiB
C++

#include <gtest/gtest.h>
#include "SlashCommandLevels.h"
TEST(SlashCommandLevelsTests, SettingNameFromAlias) {
EXPECT_EQ(SlashCommandLevels::SettingName("kick"), "kick");
EXPECT_EQ(SlashCommandLevels::SettingName("removeIgnore"), "removeignore");
EXPECT_EQ(SlashCommandLevels::SettingName("leave-zone"), "leave_zone");
EXPECT_EQ(SlashCommandLevels::SettingName("victory!"), "victory");
EXPECT_EQ(SlashCommandLevels::SettingName("--a--b--"), "a_b");
EXPECT_EQ(SlashCommandLevels::ConfigName("kick"), "command_level_kick");
EXPECT_TRUE(SlashCommandLevels::IsLevelSetting("command_level_kick"));
EXPECT_FALSE(SlashCommandLevels::IsLevelSetting("permission_accounts_kick"));
}
TEST(SlashCommandLevelsTests, StaffCommandsStayWithStaff) {
EXPECT_EQ(SlashCommandLevels::DefaultMinLevel(0), 0);
EXPECT_EQ(SlashCommandLevels::DefaultMinLevel(2), SlashCommandLevels::STAFF_MIN_LEVEL);
EXPECT_EQ(SlashCommandLevels::DefaultMinLevel(9), SlashCommandLevels::STAFF_MIN_LEVEL);
}
TEST(SlashCommandLevelsTests, Resolve) {
// No value: the code's level
EXPECT_EQ(SlashCommandLevels::Resolve(2, 1, false, ""), 2);
// Raised and lowered within range
EXPECT_EQ(SlashCommandLevels::Resolve(2, 1, false, "5"), 5);
EXPECT_EQ(SlashCommandLevels::Resolve(8, 1, false, "1"), 1);
EXPECT_EQ(SlashCommandLevels::Resolve(0, 0, false, "9"), 9);
// Below the floor, above GM 9 or not a number: the default
EXPECT_EQ(SlashCommandLevels::Resolve(8, 1, false, "0"), 8);
EXPECT_EQ(SlashCommandLevels::Resolve(8, 8, false, "6"), 8);
EXPECT_EQ(SlashCommandLevels::Resolve(2, 1, false, "10"), 2);
EXPECT_EQ(SlashCommandLevels::Resolve(2, 1, false, "-1"), 2);
EXPECT_EQ(SlashCommandLevels::Resolve(2, 1, false, "abc"), 2);
// Fixed commands ignore the setting
EXPECT_EQ(SlashCommandLevels::Resolve(0, 0, true, "5"), 0);
}
// A command paired with a dashboard permission uses the permission's level; its own value is an override
TEST(SlashCommandLevelsTests, PairedCommandsFollowTheirPermission) {
using SlashCommandLevels::ResolvePaired;
// No value: the permission's level, whatever the code's default was (/mute: code GM 6, accounts_mute GM 2)
EXPECT_EQ(ResolvePaired(6, 1, false, 2, "").level, 2);
EXPECT_FALSE(ResolvePaired(6, 1, false, 2, "").overridden);
// The permission changes, the command changes with it
EXPECT_EQ(ResolvePaired(6, 1, false, 5, "").level, 5);
// An explicit value (an older setup's command_level_mute) overrides it
EXPECT_EQ(ResolvePaired(6, 1, false, 2, "6").level, 6);
EXPECT_TRUE(ResolvePaired(6, 1, false, 2, "6").overridden);
EXPECT_TRUE(ResolvePaired(6, 1, false, 2, "2").overridden); // even when it is the same level: it stays put when the permission moves
// "permission" (set on the page over a file's value) and bad values follow the permission
EXPECT_EQ(ResolvePaired(6, 1, false, 3, std::string(SlashCommandLevels::FOLLOW_PERMISSION)).level, 3);
EXPECT_FALSE(ResolvePaired(6, 1, false, 3, std::string(SlashCommandLevels::FOLLOW_PERMISSION)).overridden);
EXPECT_EQ(ResolvePaired(6, 1, false, 3, "abc").level, 3);
EXPECT_FALSE(ResolvePaired(6, 1, false, 3, "10").overridden);
// Floors still apply, to the permission's level and to overrides
EXPECT_EQ(ResolvePaired(8, 8, false, 3, "").level, 8);
EXPECT_EQ(ResolvePaired(8, 8, false, 3, "5").level, 8);
EXPECT_FALSE(ResolvePaired(8, 8, false, 3, "5").overridden);
EXPECT_EQ(ResolvePaired(2, 1, false, 0, "").level, 1); // a staff command never reaches players
// Nobody above GM 9 (an unknown permission's level)
EXPECT_EQ(ResolvePaired(2, 1, false, 10, "").level, 9);
// Fixed commands ignore both
EXPECT_EQ(ResolvePaired(0, 0, true, 5, "3").level, 0);
EXPECT_FALSE(ResolvePaired(0, 0, true, 5, "3").overridden);
}
TEST(SlashCommandLevelsTests, TargetRuleNames) {
using SlashCommandLevels::eTargetRule;
for (const auto rule : { eTargetRule::NONE, eTargetRule::TOOLS, eTargetRule::ITEMS, eTargetRule::MODERATION, eTargetRule::OTHERS }) {
EXPECT_EQ(SlashCommandLevels::TargetRuleFromName(SlashCommandLevels::TargetRuleName(rule)), rule);
}
EXPECT_EQ(SlashCommandLevels::TargetRuleName(eTargetRule::NONE), "");
EXPECT_EQ(SlashCommandLevels::TargetRuleFromName("junk"), eTargetRule::NONE);
}