mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-02 02:43:44 +00:00
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>
76 lines
4.1 KiB
C++
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);
|
|
}
|