Files
Radicade/ServerTests/PlayerEventQueriesTests.cs
2026-10-16 23:33:13 -07:00

127 lines
3.5 KiB
C#

using RadicadeServer.API.Events;
using RadicadeServer.RecNet.Enums;
using RadicadeServer.RecNet.Events;
using Xunit;
namespace RadicadeServer.Tests;
/// <summary>
/// Tests the filtering rules behind the game's event endpoints:
/// - /api/playerevents/v1/search (public, not-ended events; name/description match)
/// - /api/playerevents/v1/room/{roomId} (events hosted in that room)
/// </summary>
public class PlayerEventQueriesTests
{
private static PlayerEventDB MakeEvent(
long id,
long roomId,
string name = "Launch Party",
DateTime? start = null,
DateTime? end = null,
Accessibility accessibility = Accessibility.Public)
{
var startTime = start ?? DateTime.UtcNow.AddHours(1);
return new PlayerEventDB
{
PlayerEventId = id,
Name = name,
Description = "A test event",
ImageName = "",
StartTime = startTime,
EndTime = end ?? startTime.AddHours(2),
CreatorPlayerId = 42,
AttendeeCount = 1,
RoomId = roomId,
Accessibility = accessibility
};
}
[Fact]
public void CreatedPublicEvent_AppearsInSearchResults()
{
var ev = MakeEvent(1, 100, name: "Launch Party");
var results = PlayerEventQueries.Search(new[] { ev }, null, DateTime.UtcNow);
Assert.Single(results);
Assert.Equal(1, results[0].PlayerEventId);
}
[Fact]
public void CreatedEvent_AppearsInRoomResults()
{
var ev = MakeEvent(1, 100);
var results = PlayerEventQueries.InRoom(new[] { ev }, 100);
Assert.Single(results);
Assert.Equal(1, results[0].PlayerEventId);
}
[Fact]
public void Search_MatchesNameCaseInsensitively()
{
var ev = MakeEvent(1, 100, name: "Launch Party");
var results = PlayerEventQueries.Search(new[] { ev }, "launch", DateTime.UtcNow);
Assert.Single(results);
}
[Fact]
public void Search_MatchesDescription()
{
var ev = MakeEvent(1, 100, name: "Other");
ev.Description = "A test event";
var results = PlayerEventQueries.Search(new[] { ev }, "TEST", DateTime.UtcNow);
Assert.Single(results);
}
[Fact]
public void Search_ExcludesEndedEvents()
{
var ev = MakeEvent(1, 100, end: DateTime.UtcNow.AddHours(-1));
var results = PlayerEventQueries.Search(new[] { ev }, null, DateTime.UtcNow);
Assert.Empty(results);
}
[Fact]
public void Search_ExcludesPrivateEvents()
{
var ev = MakeEvent(1, 100, accessibility: Accessibility.Private);
var results = PlayerEventQueries.Search(new[] { ev }, null, DateTime.UtcNow);
Assert.Empty(results);
}
[Fact]
public void RoomEvents_OnlyReturnEventsForThatRoom()
{
var inRoom = MakeEvent(1, 100);
var otherRoom = MakeEvent(2, 200);
var results = PlayerEventQueries.InRoom(new[] { inRoom, otherRoom }, 100);
Assert.Single(results);
Assert.Equal(1, results[0].PlayerEventId);
}
[Fact]
public void Search_ReturnsNewestEventsFirst()
{
var later = MakeEvent(1, 100, start: DateTime.UtcNow.AddHours(3));
var sooner = MakeEvent(2, 100, start: DateTime.UtcNow.AddHours(1));
var results = PlayerEventQueries.Search(new[] { sooner, later }, null, DateTime.UtcNow);
Assert.Equal(2, results.Count);
Assert.Equal(1, results[0].PlayerEventId);
Assert.Equal(2, results[1].PlayerEventId);
}
}