Skip to content

Commit

Permalink
test: verify that events are raised correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
meenzen committed Dec 26, 2023
1 parent 70c24f6 commit c44340e
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 19 deletions.
4 changes: 2 additions & 2 deletions src/Streamlabs.SocketClient/IStreamlabsClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ public interface IStreamlabsClient : IDisposable
event EventHandler<FollowMessage>? OnFollow;
event EventHandler<RaidMessage>? OnRaid;
event EventHandler<RollEndCreditsMessage>? OnRollEndCredits;
event EventHandler<StreamlabelsMessage>? OnStreamlabelsMessage;
event EventHandler<StreamlabelsUnderlyingMessage>? OnStreamlabelsUnderlyingMessage;
event EventHandler<StreamlabelsMessage>? OnStreamlabels;
event EventHandler<StreamlabelsUnderlyingMessage>? OnStreamlabelsUnderlying;
}
8 changes: 4 additions & 4 deletions src/Streamlabs.SocketClient/StreamlabsClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,8 @@ public StreamlabsClient(ILogger<StreamlabsClient> logger, IOptions<StreamlabsOpt
public event EventHandler<FollowMessage>? OnFollow;
public event EventHandler<RaidMessage>? OnRaid;
public event EventHandler<RollEndCreditsMessage>? OnRollEndCredits;
public event EventHandler<StreamlabelsMessage>? OnStreamlabelsMessage;
public event EventHandler<StreamlabelsUnderlyingMessage>? OnStreamlabelsUnderlyingMessage;
public event EventHandler<StreamlabelsMessage>? OnStreamlabels;
public event EventHandler<StreamlabelsUnderlyingMessage>? OnStreamlabelsUnderlying;

private void OnEventInternal(SocketIOResponse response) => Dispatch(response.ToString());

Expand Down Expand Up @@ -194,10 +194,10 @@ private void Dispatch(IStreamlabsEvent streamlabsEvent)
OnRollEndCredits?.Invoke(this, rollEndCreditsEvent.Message);
break;
case StreamlabelsEvent streamlabelsEvent:
OnStreamlabelsMessage?.Invoke(this, streamlabelsEvent.Message);
OnStreamlabels?.Invoke(this, streamlabelsEvent.Message);
break;
case StreamlabelsUnderlyingEvent streamlabelsUnderlyingEvent:
OnStreamlabelsUnderlyingMessage?.Invoke(this, streamlabelsUnderlyingEvent.Message);
OnStreamlabelsUnderlying?.Invoke(this, streamlabelsUnderlyingEvent.Message);
break;
case AlertPlayingEvent alertPlayingEvent:
switch (alertPlayingEvent.Message)
Expand Down
73 changes: 60 additions & 13 deletions test/Streamlabs.SocketClient.Tests/MessageTypeTests.cs
Original file line number Diff line number Diff line change
@@ -1,32 +1,79 @@
using System.Text;
using FluentAssertions.Events;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using NSubstitute;
using Streamlabs.SocketClient.Events;
using Streamlabs.SocketClient.InternalExtensions;

namespace Streamlabs.SocketClient.Tests;

public class MessageTypeTests
{
public sealed record JsonFile(string FileName, Type ExpectedType, string? EventName = null)
{
public string GetJson() => File.ReadAllText(Path.Combine("./MessageJson", FileName), Encoding.UTF8);
};

public static IReadOnlyCollection<JsonFile> All { get; } =
new List<JsonFile>
{
new("donation.json", typeof(DonationEvent)),
new("bits.json", typeof(BitsEvent)),
new("donationDelete.json", typeof(DonationDeleteEvent)),
new("alertPlaying_subscription.json", typeof(AlertPlayingEvent), "SubscriptionAlertPlaying"),
new("alertPlaying_bits.json", typeof(AlertPlayingEvent), "BitsAlertPlaying"),
new("follow.json", typeof(FollowEvent)),
new("raid.json", typeof(RaidEvent)),
new("rollEndCredits.json", typeof(RollEndCreditsEvent)),
new("streamlabels.json", typeof(StreamlabelsEvent)),
new("streamlabelsUnderlying.json", typeof(StreamlabelsUnderlyingEvent)),
};

public static TheoryData<JsonFile> GetTheoryData()
{
var data = new TheoryData<JsonFile>();
foreach (var jsonFile in All)
{
data.Add(jsonFile);
}

return data;
}

[Theory]
[InlineData("donation.json", typeof(DonationEvent))]
[InlineData("bits.json", typeof(BitsEvent))]
[InlineData("donationDelete.json", typeof(DonationDeleteEvent))]
[InlineData("alertPlaying_subscription.json", typeof(AlertPlayingEvent))]
[InlineData("alertPlaying_bits.json", typeof(AlertPlayingEvent))]
[InlineData("follow.json", typeof(FollowEvent))]
[InlineData("raid.json", typeof(RaidEvent))]
[InlineData("rollEndCredits.json", typeof(RollEndCreditsEvent))]
[InlineData("streamlabels.json", typeof(StreamlabelsEvent))]
[InlineData("streamlabelsUnderlying.json", typeof(StreamlabelsUnderlyingEvent))]
public void MessageTypes_CanBeDeserialized(string fileName, Type expectedType)
[MemberData(nameof(GetTheoryData))]
public void MessageTypes_CanBeDeserialized(JsonFile file)
{
// Arrange
string json = File.ReadAllText(Path.Combine("./MessageJson", fileName), Encoding.UTF8);
string json = file.GetJson();

// Act
var messages = json.Deserialize();

// Assert
messages.Should().HaveCount(1);
messages.Should().AllBeOfType(expectedType);
messages.Should().AllBeOfType(file.ExpectedType);
}

[Theory]
[MemberData(nameof(GetTheoryData))]
public void Events_AreRaised_WhenMessageIsDispatched(JsonFile file)
{
// Arrange
var logger = Substitute.For<ILogger<StreamlabsClient>>();
var options = new StreamlabsOptions();
var client = new StreamlabsClient(logger, new OptionsWrapper<StreamlabsOptions>(options));
using IMonitor<StreamlabsClient> sut = client.Monitor();
string json = file.GetJson();

// Act
client.Dispatch(json);

// Assert
sut.Should().Raise(nameof(client.OnEventRaw));
sut.Should().Raise(nameof(client.OnEvent));
string eventName = file.EventName ?? file.ExpectedType.Name.Replace("Event", string.Empty);
sut.Should().Raise($"On{eventName}");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
</PackageReference>
<PackageReference Include="FluentAssertions" Version="6.12.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="NSubstitute" Version="5.1.0" />
<PackageReference Include="xunit" Version="2.6.4" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.6">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down

0 comments on commit c44340e

Please sign in to comment.