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

62 lines
1.8 KiB
C#

using RadicadeServer.RecNet.Rooms;
using Xunit;
namespace RadicadeServer.Tests;
/// <summary>
/// Tests the scene-location rules behind <see cref="SubRoom.UnitySceneId"/>. The client
/// rejects a room-entry response whose "location" isn't a known Unity scene GUID
/// ("RecNet room scene contains unknown scene location ID"), so subrooms must never carry
/// null/empty/placeholder/non-GUID scene ids.
/// </summary>
public class SceneLocationsTests
{
[Theory]
[InlineData("a75f7547-79eb-47c6-8986-6767abcb4f92")]
[InlineData("76d98498-60a1-430c-ab76-b54a29b7a163")]
public void IsValid_AcceptsRealSceneGuids(string id)
{
Assert.True(SceneLocations.IsValid(id));
}
[Theory]
[InlineData(null)]
[InlineData("")]
[InlineData(" ")]
[InlineData("unknown")]
[InlineData("UNKNOWN")]
[InlineData("none")]
[InlineData("null")]
[InlineData("not-a-guid")]
public void IsValid_RejectsNullEmptyPlaceholderAndGarbage(string? id)
{
Assert.False(SceneLocations.IsValid(id));
}
[Fact]
public void ResolveFallback_PicksFirstValidSibling()
{
var result = SceneLocations.ResolveFallback(
new[] { "unknown", null, "acc06e66-c2d0-4361-b0cd-46246a4c455c" },
isDorm: false);
Assert.Equal("acc06e66-c2d0-4361-b0cd-46246a4c455c", result);
}
[Fact]
public void ResolveFallback_UsesDormSceneForDorms()
{
var result = SceneLocations.ResolveFallback(new string?[] { "unknown", "" }, isDorm: true);
Assert.Equal(SceneLocations.Dorm, result);
}
[Fact]
public void ResolveFallback_UsesMakerRoomForNonDorms()
{
var result = SceneLocations.ResolveFallback(new string?[] { null }, isDorm: false);
Assert.Equal(SceneLocations.MakerRoom, result);
}
}