tests: begin adding tests to webhook project

This commit is contained in:
Stevan Freeborn
2025-05-29 23:01:00 -05:00
parent 0d31f12012
commit c7d0df2fca
8 changed files with 184 additions and 0 deletions
@@ -6,11 +6,13 @@ internal class LastPostedStreamStore : ILastPostedStreamStore
public void SetValue(string value) public void SetValue(string value)
{ {
ArgumentNullException.ThrowIfNull(value);
_value = value; _value = value;
} }
public bool HasValue(string value) public bool HasValue(string value)
{ {
ArgumentNullException.ThrowIfNull(value);
return _value.Equals(value, StringComparison.OrdinalIgnoreCase); return _value.Equals(value, StringComparison.OrdinalIgnoreCase);
} }
} }
@@ -0,0 +1,28 @@
namespace StevesBot.Webhook.Tests.Unit;
public class DiscordNotificationOptionsTests
{
[Fact]
public void Constructor_WhenCalled_ItShouldReturnInstance()
{
var options = new DiscordNotificationOptions();
options.ChannelId.Should().BeEmpty();
}
[Fact]
public void Constructor_WhenCalledWithProperties_ItShouldReturnInstance()
{
var channelId = "1234567890";
var messageFormat = "New video uploaded: {VideoTitle}";
var options = new DiscordNotificationOptions
{
ChannelId = channelId,
MessageFormat = messageFormat
};
options.ChannelId.Should().Be(channelId);
options.MessageFormat.Should().Be(messageFormat);
}
}
@@ -0,0 +1,36 @@
namespace StevesBot.Webhook.Tests.Unit;
public class LastPostedStreamStoreTests
{
[Fact]
public void SetValue_WhenCalledWithNull_ItShouldThrowArgumentNullException()
{
var store = new LastPostedStreamStore();
var act = () => store.SetValue(null!);
act.Should().Throw<ArgumentNullException>();
}
[Fact]
public void HasValue_WhenCalledWithNull_ItShouldThrowArgumentNullException()
{
var store = new LastPostedStreamStore();
var act = () => store.HasValue(null!);
act.Should().Throw<ArgumentNullException>();
}
[Fact]
public void SetValueHasValue_WhenCalled_ItShouldStoreValue()
{
var store = new LastPostedStreamStore();
var streamId = "test-stream-id";
store.SetValue(streamId);
store.HasValue(streamId).Should().BeTrue();
}
}
@@ -0,0 +1,25 @@
namespace StevesBot.Webhook.Tests.Unit;
public class PubSubClientOptionsTests
{
[Fact]
public void Constructor_WhenCalled_ItShouldReturnInstance()
{
var options = new PubSubClientOptions();
options.BaseUrl.Should().BeEmpty();
}
[Fact]
public void Constructor_WhenCalledWithProperties_ItShouldReturnInstance()
{
var baseUrl = "https://example.com";
var options = new PubSubClientOptions()
{
BaseUrl = baseUrl
};
options.BaseUrl.Should().Be(baseUrl);
}
}
@@ -0,0 +1,33 @@
namespace StevesBot.Webhook.Tests.Unit;
public class SubscribeTaskTests
{
[Fact]
public void Constructor_WhenCalled_ItShouldReturnInstance()
{
var task = new SubscribeTask();
task.CallbackUrl.Should().BeEmpty();
task.TopicUrl.Should().BeEmpty();
task.ExpiresAt.Should().Be(DateTime.MinValue);
}
[Fact]
public void Constructor_WhenCalledWithProperties_ItShouldReturnInstance()
{
var callbackUrl = "https://example.com/callback";
var topicUrl = "https://example.com/topic";
var expiresAt = DateTime.UtcNow.AddDays(1);
var task = new SubscribeTask
{
CallbackUrl = callbackUrl,
TopicUrl = topicUrl,
ExpiresAt = expiresAt
};
task.CallbackUrl.Should().Be(callbackUrl);
task.TopicUrl.Should().Be(topicUrl);
task.ExpiresAt.Should().Be(expiresAt);
}
}
@@ -0,0 +1,29 @@
namespace StevesBot.Webhook.Tests.Unit;
public class SubscriptionOptionsTests
{
[Fact]
public void Constructor_WhenCalled_ItShouldReturnInstance()
{
var options = new SubscriptionOptions();
options.CallbackUrl.Should().BeEmpty();
options.TopicUrl.Should().BeEmpty();
}
[Fact]
public void Constructor_WhenCalledWithProperties_ItShouldReturnInstance()
{
var callbackUrl = "https://example.com/callback";
var topicUrl = "https://example.com/topic";
var options = new SubscriptionOptions
{
CallbackUrl = callbackUrl,
TopicUrl = topicUrl
};
options.CallbackUrl.Should().Be(callbackUrl);
options.TopicUrl.Should().Be(topicUrl);
}
}
@@ -0,0 +1,29 @@
namespace StevesBot.Webhook.Tests.Unit;
public class YouTubeClientOptionsTests
{
[Fact]
public void Constructor_WhenCalled_ItShouldReturnInstance()
{
var options = new YouTubeClientOptions();
options.BaseUrl.Should().BeEmpty();
options.ApiKey.Should().BeEmpty();
}
[Fact]
public void Constructor_WhenCalledWithProperties_ItShouldReturnInstance()
{
var baseUrl = "https://example.com";
var apiKey = "test-api-key";
var options = new YouTubeClientOptions
{
BaseUrl = baseUrl,
ApiKey = apiKey
};
options.BaseUrl.Should().Be(baseUrl);
options.ApiKey.Should().Be(apiKey);
}
}
@@ -0,0 +1,2 @@
global using StevesBot.Webhook.YouTube;
global using StevesBot.Webhook.YouTube.Tasks;