Files
libremetaverse/LibreMetaverse.RLV.Tests/Commands/SitCommandTests.cs
nooperation d905210ecf Initial commit of LibreMetaverse.RLV and LibreMetaverse.RLV.Tests.
This library provides RLV command processing and ease of use for checking current RLV permissions and restrictions
2025-08-17 19:55:33 -04:00

149 lines
4.7 KiB
C#

using Moq;
namespace LibreMetaverse.RLV.Tests.Commands
{
public class SitCommandTests : RestrictionsBase
{
#region @sit:<uuid>=force
private void SetObjectExists(Guid objectId)
{
_queryCallbacks.Setup(e =>
e.ObjectExistsAsync(objectId, default)
).ReturnsAsync(true);
}
private void SetIsSitting(bool isCurrentlySitting)
{
_queryCallbacks.Setup(e =>
e.IsSittingAsync(default)
).ReturnsAsync(isCurrentlySitting);
}
[Fact]
public async Task ForceSit_Default()
{
var objectId1 = new Guid("00000000-0000-4000-8000-000000000000");
SetObjectExists(objectId1);
SetIsSitting(false);
_actionCallbacks
.Setup(e => e.SitAsync(It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.Returns(Task.CompletedTask);
// Act
await _rlv.ProcessMessage($"@sit:{objectId1}=force", _sender.Id, _sender.Name);
// Assert
_actionCallbacks.Verify(e =>
e.SitAsync(objectId1, It.IsAny<CancellationToken>()),
Times.Once);
_actionCallbacks.VerifyNoOtherCalls();
}
[Fact]
public async Task ForceSit_RestrictedUnsit_WhileStanding()
{
var objectId1 = new Guid("00000000-0000-4000-8000-000000000000");
SetObjectExists(objectId1);
SetIsSitting(false);
await _rlv.ProcessMessage("@unsit=n", _sender.Id, _sender.Name);
_actionCallbacks
.Setup(e => e.SitAsync(It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.Returns(Task.CompletedTask);
// Act
await _rlv.ProcessMessage($"@sit:{objectId1}=force", _sender.Id, _sender.Name);
// Assert
_actionCallbacks.Verify(e =>
e.SitAsync(objectId1, It.IsAny<CancellationToken>()),
Times.Once);
_actionCallbacks.VerifyNoOtherCalls();
}
[Fact]
public async Task ForceSit_RestrictedUnsit_WhileSeated()
{
var objectId1 = new Guid("00000000-0000-4000-8000-000000000000");
SetObjectExists(objectId1);
SetIsSitting(true);
await _rlv.ProcessMessage("@unsit=n", _sender.Id, _sender.Name);
_actionCallbacks
.Setup(e => e.SitAsync(It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.Returns(Task.CompletedTask);
// Act
Assert.False(await _rlv.ProcessMessage($"@sit:{objectId1}=force", _sender.Id, _sender.Name));
// Assert
_actionCallbacks.VerifyNoOtherCalls();
}
[Fact]
public async Task ForceSit_RestrictedSit()
{
var objectId1 = new Guid("00000000-0000-4000-8000-000000000000");
SetObjectExists(objectId1);
SetIsSitting(true);
await _rlv.ProcessMessage("@sit=n", _sender.Id, _sender.Name);
_actionCallbacks
.Setup(e => e.SitAsync(It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.Returns(Task.CompletedTask);
// Act
Assert.False(await _rlv.ProcessMessage($"@sit:{objectId1}=force", _sender.Id, _sender.Name));
// Assert
_actionCallbacks.VerifyNoOtherCalls();
}
[Fact]
public async Task ForceSit_RestrictedStandTp()
{
var objectId1 = new Guid("00000000-0000-4000-8000-000000000000");
SetObjectExists(objectId1);
SetIsSitting(true);
await _rlv.ProcessMessage("@standtp=n", _sender.Id, _sender.Name);
_actionCallbacks
.Setup(e => e.SitAsync(It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.Returns(Task.CompletedTask);
// Act
Assert.False(await _rlv.ProcessMessage($"@sit:{objectId1}=force", _sender.Id, _sender.Name));
// Assert
_actionCallbacks.VerifyNoOtherCalls();
}
[Fact]
public async Task ForceSit_InvalidObject()
{
var objectId1 = new Guid("00000000-0000-4000-8000-000000000000");
// SetupSitTarget(objectId1, true); <-- Don't setup sit target for this test
_actionCallbacks
.Setup(e => e.SitAsync(It.IsAny<Guid>(), It.IsAny<CancellationToken>()))
.Returns(Task.CompletedTask);
// Act
Assert.False(await _rlv.ProcessMessage($"@sit:{objectId1}=force", _sender.Id, _sender.Name));
// Assert
_actionCallbacks.VerifyNoOtherCalls();
}
#endregion
}
}