mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-25 15:08:47 -07:00
Add Charades word lists management, profanity filter, and matchmaking routes (#41)
* feat: add 3D Charades word lists management and profanity filter toggle - Implemented Charades word lists management in the admin UI, allowing for unlimited named word lists with difficulty settings. - Added functionality to bind live card slots to specific word lists, with automatic fallback to built-in lists. - Introduced a profanity filter toggle in server settings, enabling or disabling the server-side profanity filter. - Updated database schema to support new features, including additional columns for profanity filter status and charades slot bindings. - Enhanced documentation to reflect new features and their usage. * feat: add identityserver-signing.pfx to .gitignore * feat: add new matchmake routes for player, event, club, and code
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
using System.Net;
|
||||
using DorkNet.Contracts;
|
||||
|
||||
namespace DorkNet.Server.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// Regression coverage for the 2023 "pull a player into a private instance"
|
||||
/// flow. The 2023 client renamed the matchmaking surface from <c>goto/*</c>
|
||||
/// to <c>matchmake/*</c> and added <c>matchmake/chatinvite/{account}/{instance}</c>
|
||||
/// for chat party invites; the server had neither the routes nor the gateway
|
||||
/// ownership entry, so those requests 404'd.
|
||||
/// </summary>
|
||||
public sealed class MatchmakePullInviteTests : IClassFixture<DorkNetServerFactory>
|
||||
{
|
||||
private readonly DorkNetServerFactory _factory;
|
||||
|
||||
public MatchmakePullInviteTests(DorkNetServerFactory factory) => _factory = factory;
|
||||
|
||||
private HttpClient ApiClient()
|
||||
{
|
||||
var client = _factory.CreateClient(new() { AllowAutoRedirect = false });
|
||||
client.BaseAddress = new Uri($"http://api.{_factory.ApexDomain}");
|
||||
client.Timeout = TimeSpan.FromSeconds(30);
|
||||
return client;
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("/matchmake/instance/999")]
|
||||
[InlineData("/matchmake/invite/999")]
|
||||
[InlineData("/matchmake/chatinvite/2/16777216")] // {accountId}/{roomInstanceId}
|
||||
[InlineData("/matchmake/player/2")]
|
||||
[InlineData("/matchmake/event/999")]
|
||||
[InlineData("/matchmake/club/999")]
|
||||
[InlineData("/matchmake/code/5/ABCDEF")] // {roomId}/{code}
|
||||
public async Task Matchmake_pull_routes_exist(string path)
|
||||
{
|
||||
using var client = ApiClient();
|
||||
using var res = await client.PostAsync(path, new StringContent(string.Empty));
|
||||
|
||||
// The bug was a hard 404 (no route). These resolve to a dorm-fallback
|
||||
// matchmaking response when the instance/invite doesn't exist, so any
|
||||
// non-404 status proves the route is now mounted.
|
||||
Assert.NotEqual(HttpStatusCode.NotFound, res.StatusCode);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("/matchmake/instance/999")]
|
||||
[InlineData("/matchmake/invite/999")]
|
||||
[InlineData("/matchmake/chatinvite/2/16777216")]
|
||||
[InlineData("/matchmake/room/5")]
|
||||
[InlineData("/matchmake/player/2")]
|
||||
[InlineData("/matchmake/event/999")]
|
||||
[InlineData("/matchmake/club/999")]
|
||||
[InlineData("/matchmake/code/5/ABCDEF")]
|
||||
public void Matchmake_paths_route_to_same_service_as_goto(string path)
|
||||
{
|
||||
const string apex = "dork.test";
|
||||
var gotoOwner = DorkNetRouteOwnership.ResolvePublicService($"api.{apex}", "/goto/instance/999", apex);
|
||||
var owner = DorkNetRouteOwnership.ResolvePublicService($"api.{apex}", path, apex);
|
||||
|
||||
// matchmake/* must land on the same service that owns goto/* — before
|
||||
// the fix it fell through to the Monolith default owner.
|
||||
Assert.Equal(gotoOwner, owner);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user