Files
steves-bot/src/StevesBot.Worker.Tests/Unit/LockReleaserTests.cs
T
Stevan Freeborn ceb693acbc tests: add unit tests for CreateMessageRequest, DiscordMessageReference, and DiscordRestClient
refactor: update DiscordRestClient and IDiscordRestClient to use default CancellationToken
refactor: rename MessageReference to DiscordMessageReference and add DiscordMessageReferenceTypes
chore: update WelcomeMessageHandler to use new DiscordMessageReference
2025-05-22 18:02:41 -05:00

60 lines
1.4 KiB
C#

namespace StevesBot.Worker.Tests.Unit;
public class LockReleaserTests
{
[Fact]
public void Constructor_WhenCalled_ItShouldCreateInstance()
{
using var semaphore = new SemaphoreSlim(1);
using var lockReleaser = new LockReleaser(semaphore);
lockReleaser.Should().NotBeNull();
lockReleaser.Should().BeOfType<LockReleaser>();
}
[Fact]
public void Constructor_WhenCalledAndSemaphoreIsNull_ItShouldThrowArgumentNullException()
{
var act = static () => new LockReleaser(null!);
act.Should().Throw<ArgumentNullException>();
}
[Fact]
public void Dispose_WhenCalled_ItShouldReleaseSemaphore()
{
using var semaphore = new SemaphoreSlim(0, 1);
using var lockReleaser = new LockReleaser(semaphore);
lockReleaser.Dispose();
semaphore.CurrentCount.Should().Be(1);
}
[Fact]
public void Dispose_WhenCalledMultipleTimes_ItShouldReleaseSemaphoreOnlyOnce()
{
using var semaphore = new SemaphoreSlim(0, 1);
using var lockReleaser = new LockReleaser(semaphore);
lockReleaser.Dispose();
lockReleaser.Dispose();
semaphore.CurrentCount.Should().Be(1);
}
[Fact]
public void Dispose_WhenCalledAndSemaphoreIsAlreadyDisposed_ItShouldNotThrowException()
{
var act = () =>
{
var semaphore = new SemaphoreSlim(0, 1);
var lockReleaser = new LockReleaser(semaphore);
semaphore.Dispose();
lockReleaser.Dispose();
};
act.Should().NotThrow();
}
}