tests: add preliminary relay tests

This commit is contained in:
Oliver Booth 2023-08-26 17:47:11 +01:00
parent 742322236a
commit 2925de0329
Signed by: oliverbooth
GPG Key ID: B89D139977693FED
6 changed files with 174 additions and 15 deletions

View File

@ -0,0 +1,35 @@
using NSubstitute;
using NSubstitute.Extensions;
using VPLink.Common.Configuration;
using VPLink.Common.Services;
namespace VPLink.Tests;
public class BotConfigurationTests
{
private IConfigurationService _configurationService = null!;
[SetUp]
public void Setup()
{
var configuration = Substitute.For<IBotConfiguration>();
configuration.AnnounceAvatarEvents.Returns(true);
configuration.AnnounceBots.Returns(false);
configuration.RelayBotMessages.Returns(false);
_configurationService = Substitute.For<IConfigurationService>();
_configurationService.Configure().BotConfiguration.Returns(configuration);
}
[Test]
public void BotConfiguration_ShouldReturnCorrectValues_GivenDefaultConfig()
{
IBotConfiguration configuration = _configurationService.BotConfiguration;
Assert.Multiple(() =>
{
Assert.That(configuration.AnnounceAvatarEvents, Is.True);
Assert.That(configuration.AnnounceBots, Is.False);
Assert.That(configuration.RelayBotMessages, Is.False);
});
}
}

View File

@ -0,0 +1,33 @@
using NSubstitute;
using NSubstitute.Extensions;
using VPLink.Common.Configuration;
using VPLink.Common.Services;
namespace VPLink.Tests;
public class DiscordConfigurationTests
{
private IConfigurationService _configurationService = null!;
[SetUp]
public void Setup()
{
var configuration = Substitute.For<IDiscordConfiguration>();
configuration.Token.Returns("DISCORD_TOKEN");
configuration.ChannelId.Returns(1234567890UL);
_configurationService = Substitute.For<IConfigurationService>();
_configurationService.Configure().DiscordConfiguration.Returns(configuration);
}
[Test]
public void DiscordConfiguration_ShouldReturnCorrectValues_GivenDefaultConfig()
{
IDiscordConfiguration configuration = _configurationService.DiscordConfiguration;
Assert.Multiple(() =>
{
Assert.That(configuration.Token, Is.EqualTo("DISCORD_TOKEN"));
Assert.That(configuration.ChannelId, Is.EqualTo(1234567890UL));
});
}
}

View File

@ -0,0 +1,64 @@
using System.Reactive.Linq;
using System.Reactive.Subjects;
using NSubstitute;
using NSubstitute.Extensions;
using VPLink.Common.Data;
using VPLink.Common.Services;
using VpSharp.Extensions;
namespace VPLink.Tests;
public class RelayTests
{
private readonly Subject<RelayedMessage> _vpMessageReceived = new();
private readonly Subject<RelayedMessage> _discordMessageReceived = new();
private IVirtualParadiseMessageService _vpMessageService = null!;
private IDiscordMessageService _discordMessageService = null!;
[SetUp]
public void Setup()
{
_discordMessageService = Substitute.For<IDiscordMessageService>();
_discordMessageService.Configure().SendMessageAsync(Arg.Any<RelayedMessage>()).Returns(Task.CompletedTask);
_vpMessageService = Substitute.For<IVirtualParadiseMessageService>();
_vpMessageService.Configure().OnMessageReceived.Returns(_vpMessageReceived.AsObservable());
_discordMessageService = Substitute.For<IDiscordMessageService>();
_discordMessageService.Configure().OnMessageReceived.Returns(_discordMessageReceived.AsObservable());
_discordMessageReceived.SubscribeAsync(_vpMessageService.SendMessageAsync);
_vpMessageReceived.SubscribeAsync(_discordMessageService.SendMessageAsync);
}
[Test]
public void VirtualParadiseMessage_ShouldRelay_ToDiscordService()
{
var observer = Substitute.For<IObserver<RelayedMessage>>();
_vpMessageReceived.Subscribe(observer);
const string author = "Admin";
const string message = "Hello, world!";
_vpMessageReceived.OnNext(new RelayedMessage(author, message));
observer.Received(1).OnNext(Arg.Is<RelayedMessage>(m => m.Author == author && m.Content == message));
_discordMessageService.Received(1)
.SendMessageAsync(Arg.Is<RelayedMessage>(m => m.Author == author && m.Content == message));
}
[Test]
public void DiscordMessage_ShouldRelay_ToVirtualParadiseService()
{
var observer = Substitute.For<IObserver<RelayedMessage>>();
_discordMessageReceived.Subscribe(observer);
const string author = "Admin";
const string message = "Hello, world!";
_discordMessageReceived.OnNext(new RelayedMessage(author, message));
observer.Received(1).OnNext(Arg.Is<RelayedMessage>(m => m.Author == author && m.Content == message));
_vpMessageService.Received(1).SendMessageAsync(Arg.Is<RelayedMessage>(m => m.Author == author && m.Content == message));
}
}

View File

@ -1,15 +0,0 @@
namespace VPLink.Tests;
public class Tests
{
[SetUp]
public void Setup()
{
}
[Test]
public void Test1()
{
Assert.Pass();
}
}

View File

@ -11,10 +11,15 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0"/>
<PackageReference Include="NSubstitute" Version="5.0.0"/>
<PackageReference Include="NUnit" Version="3.13.3"/>
<PackageReference Include="NUnit3TestAdapter" Version="4.4.2"/>
<PackageReference Include="NUnit.Analyzers" Version="3.6.1"/>
<PackageReference Include="coverlet.collector" Version="3.2.0"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\VPLink.Common\VPLink.Common.csproj"/>
</ItemGroup>
</Project>

View File

@ -0,0 +1,37 @@
using NSubstitute;
using NSubstitute.Extensions;
using VPLink.Common.Configuration;
using VPLink.Common.Services;
namespace VPLink.Tests;
public class VirtualParadiseConfigurationTests
{
private IConfigurationService _configurationService = null!;
[SetUp]
public void Setup()
{
var configuration = Substitute.For<IVirtualParadiseConfiguration>();
configuration.Username.Returns("Admin");
configuration.Password.Returns("Password1234");
configuration.World.Returns("Blizzard");
configuration.BotName.Returns("VPLink");
_configurationService = Substitute.For<IConfigurationService>();
_configurationService.Configure().VirtualParadiseConfiguration.Returns(configuration);
}
[Test]
public void DiscordConfiguration_ShouldReturnCorrectValues_GivenDefaultConfig()
{
IVirtualParadiseConfiguration configuration = _configurationService.VirtualParadiseConfiguration;
Assert.Multiple(() =>
{
Assert.That(configuration.Username, Is.EqualTo("Admin"));
Assert.That(configuration.Password, Is.EqualTo("Password1234"));
Assert.That(configuration.World, Is.EqualTo("Blizzard"));
Assert.That(configuration.BotName, Is.EqualTo("VPLink"));
});
}
}