tests: WRITE TESTS FIRST...when will I learn

This commit is contained in:
Stevan Freeborn
2025-05-30 15:46:20 -05:00
parent c7d0df2fca
commit cbf7598227
6 changed files with 176 additions and 1 deletions
@@ -0,0 +1,36 @@
namespace StevesBot.Webhook.Tests.Unit;
public sealed class PubSubClientTests : IDisposable
{
private readonly MockHttpMessageHandler _mockHttpMessageHandler = new();
private readonly Mock<ILogger<PubSubClient>> _mockLogger = new();
private readonly PubSubClient _sut;
public PubSubClientTests()
{
var mockHttpClient = _mockHttpMessageHandler.ToHttpClient();
mockHttpClient.BaseAddress = new("https://test.com");
_sut = new(mockHttpClient, _mockLogger.Object);
}
[Theory]
[InlineData(HttpStatusCode.InternalServerError, false)]
[InlineData(HttpStatusCode.OK, true)]
public async Task SubscribeAsync_WhenCalled_ItShouldReturnExpectedResult(HttpStatusCode givenStatusCode, bool expectedResult)
{
_mockHttpMessageHandler
.When("*/subscribe")
.Respond(givenStatusCode);
var result = await _sut.SubscribeAsync("callbackUrl", "topicUrl");
result.Should().Be(expectedResult);
}
public void Dispose()
{
_mockHttpMessageHandler.Dispose();
}
}
@@ -0,0 +1,6 @@
namespace StevesBot.Webhook.Tests.Unit;
public class YouTubePageInfoTests
{
}
@@ -0,0 +1,25 @@
namespace StevesBot.Webhook.Tests.Unit;
public class YouTubeSnippetTests
{
[Fact]
public void Constructor_WhenCalled_ItShouldReturnAnInstance()
{
var result = new YouTubeSnippet();
result.LiveBroadcastContent.Should().BeEmpty();
}
[Fact]
public void Constructor_WhenCalledWithValues_ItShouldReturnAnInstance()
{
var content = "live";
var result = new YouTubeSnippet()
{
LiveBroadcastContent = content,
};
result.LiveBroadcastContent.Should().Be(content);
}
}
@@ -0,0 +1,31 @@
using StevesBot.Webhook.YouTube.Data;
namespace StevesBot.Webhook.Tests.Unit;
public class YouTubeVideoListResponseTests
{
[Fact]
public void Constructor_WhenCalled_ItShouldReturnAnInstance()
{
var result = new YouTubeVideoListResponse();
result.Items.Should().BeEmpty();
result.PageInfo.Should().BeEquivalentTo(new YouTubePageInfo());
}
[Fact]
public void Constructor_WhenCalledWithValues_ItShouldReturnAnInstance()
{
var videos = new YouTubeVideo[] { new() };
var pageInfo = new YouTubePageInfo();
var result = new YouTubeVideoListResponse()
{
Items = videos,
PageInfo = pageInfo,
};
result.Items.Should().BeSameAs(videos);
result.PageInfo.Should().BeSameAs(pageInfo);
}
}
@@ -0,0 +1,68 @@
namespace StevesBot.Webhook.Tests.Unit;
public class YouTubeVideoTests
{
[Fact]
public void Constructor_WhenCalled_ItShouldReturnAnInstance()
{
var result = new YouTubeVideo();
result.Id.Should().BeEmpty();
result.LiveStreamingDetails.Should().BeNull();
result.Snippet.Should().BeEquivalentTo(new YouTubeSnippet());
}
[Fact]
public void Constructor_WhenCalledWithValues_ItShouldReturnAnInstance()
{
var id = "id";
var details = new YouTubeLiveStreamingDetails();
var snippet = new YouTubeSnippet();
var result = new YouTubeVideo()
{
Id = id,
LiveStreamingDetails = details,
Snippet = snippet,
};
result.Id.Should().Be(id);
result.LiveStreamingDetails.Should().BeSameAs(details);
result.Snippet.Should().BeSameAs(snippet);
}
[Fact]
public void IsLiveStream_WhenLiveStreamingDetailsIsNull_ItShouldReturnFalse()
{
var video = new YouTubeVideo()
{
Snippet = new() { LiveBroadcastContent = "live" },
};
video.IsLiveStream.Should().BeFalse();
}
[Fact]
public void IsLiveStream_WhenSnippetLiveBroadcastContentIsNotLive_ItShouldReturnFalse()
{
var video = new YouTubeVideo()
{
LiveStreamingDetails = new(),
Snippet = new() { LiveBroadcastContent = "none" },
};
video.IsLiveStream.Should().BeFalse();
}
[Fact]
public void IsLiveStream_WhenDetailsIsNotNullAndContentIsLive_ItShouldReturnTrue()
{
var video = new YouTubeVideo()
{
LiveStreamingDetails = new(),
Snippet = new() { LiveBroadcastContent = "live" },
};
video.IsLiveStream.Should().BeTrue();
}
}
+10 -1
View File
@@ -1,2 +1,11 @@
global using System.Net;
global using Microsoft.Extensions.Logging;
global using Moq;
global using RichardSzalay.MockHttp;
global using StevesBot.Webhook.YouTube;
global using StevesBot.Webhook.YouTube.Tasks;
global using StevesBot.Webhook.YouTube.Data;
global using StevesBot.Webhook.YouTube.Tasks;