[Server/Client] Unify report categories (#7345)

* [Server/Client] Unify report categories into one shared source of truth

* Lont.

---------

Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
BruebachL 2026-09-24 18:37:54 +02:00 • committed by GitHub
parent a1d8ce6165
commit eae9591a17
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 173 additions and 20 deletions

View file

@ -14,6 +14,7 @@ add_test(NAME server_rate_limiter_test COMMAND server_rate_limiter_test)
add_test(NAME server_developer_role_test COMMAND server_developer_role_test)
add_test(NAME server_game_join_test COMMAND server_game_join_test)
add_test(NAME warning_categories_test COMMAND warning_categories_test)
add_test(NAME report_categories_test COMMAND report_categories_test)
add_test(NAME lag_monitor_test COMMAND lag_monitor_test)
add_test(NAME latency_tracker_test COMMAND latency_tracker_test)
add_test(NAME metrics_registry_test COMMAND metrics_registry_test)
@ -37,6 +38,7 @@ add_executable(server_rate_limiter_test server_rate_limiter_test.cpp)
add_executable(server_developer_role_test server_developer_role_test.cpp)
add_executable(server_game_join_test server_game_join_test.cpp)
add_executable(warning_categories_test warning_categories_test.cpp)
add_executable(report_categories_test report_categories_test.cpp)
add_executable(lag_monitor_test ${CMAKE_SOURCE_DIR}/cockatrice/src/client/lag_monitor.cpp lag_monitor_test.cpp)
target_include_directories(lag_monitor_test PRIVATE ${CMAKE_SOURCE_DIR}/cockatrice/src)
add_executable(latency_tracker_test latency_tracker_test.cpp)
@ -91,6 +93,7 @@ if(NOT GTEST_FOUND)
add_dependencies(server_developer_role_test gtest)
add_dependencies(server_game_join_test gtest)
add_dependencies(warning_categories_test gtest)
add_dependencies(report_categories_test gtest)
add_dependencies(lag_monitor_test gtest)
add_dependencies(latency_tracker_test gtest)
add_dependencies(metrics_registry_test gtest)
@ -137,6 +140,9 @@ target_link_libraries(
target_link_libraries(
warning_categories_test libcockatrice_utility Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES}
)
target_link_libraries(
report_categories_test libcockatrice_utility Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES}
)
target_link_libraries(lag_monitor_test Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES})
target_link_libraries(
latency_tracker_test libcockatrice_network Threads::Threads ${GTEST_BOTH_LIBRARIES} ${TEST_QT_MODULES}

View file

@ -0,0 +1,54 @@
#include "gtest/gtest.h"
#include <QList>
#include <QString>
#include <QStringList>
#include <libcockatrice/utility/report_categories.h>
TEST(ReportCategoriesTest, CanonicalListIsNonEmptyAndStable)
{
const QStringList categories = ReportCategories::keys();
ASSERT_FALSE(categories.isEmpty());
EXPECT_EQ("cheating", categories.at(0));
EXPECT_EQ("other", categories.last());
}
TEST(ReportCategoriesTest, CanonicalListContainsMergedClientAndServerCategories)
{
const QStringList expected = {"cheating", "bug_abuse", "harassment", "verbal_abuse",
"hate_speech", "spam", "other"};
EXPECT_EQ(expected, ReportCategories::keys());
EXPECT_EQ(7, ReportCategories::keys().size());
}
TEST(ReportCategoriesTest, AllCanonicalKeysAreValid)
{
for (const QString &category : ReportCategories::keys()) {
EXPECT_TRUE(ReportCategories::isValid(category)) << category.toStdString();
}
}
TEST(ReportCategoriesTest, LegacyCategoriesRemainValid)
{
EXPECT_TRUE(ReportCategories::isValid("bug_abuse"));
EXPECT_TRUE(ReportCategories::isValid("verbal_abuse"));
}
TEST(ReportCategoriesTest, ValidationIsCaseInsensitive)
{
EXPECT_TRUE(ReportCategories::isValid("Cheating"));
EXPECT_TRUE(ReportCategories::isValid("HATE_SPEECH"));
}
TEST(ReportCategoriesTest, UnknownAndEmptyCategoriesAreRejected)
{
EXPECT_FALSE(ReportCategories::isValid(QString()));
EXPECT_FALSE(ReportCategories::isValid("hate speech"));
EXPECT_FALSE(ReportCategories::isValid("griefing"));
}
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}