Files
speckle-sharp-sdk/tests/Speckle.Core.Tests.Integration/Api/GraphQL/Resources/SubscriptionResourceTests.cs
T
2024-07-11 14:03:02 +01:00

121 lines
4.3 KiB
C#

using Speckle.Core.Api;
using Speckle.Core.Api.GraphQL.Inputs;
using Speckle.Core.Api.GraphQL.Models;
using Speckle.Core.Api.GraphQL.Resources;
namespace Speckle.Core.Tests.Integration.API.GraphQL.Resources;
[TestOf(typeof(SubscriptionResource))]
public class SubscriptionResourceTests
{
private const int WAIT_PERIOD = 300;
private Client _testUser;
private Project _testProject;
private Model _testModel;
private string _testVersion;
private SubscriptionResource Sut => _testUser.Subscription;
[OneTimeSetUp]
public async Task Setup()
{
_testUser = await Fixtures.SeedUserWithClient();
_testProject = await _testUser.Project.Create(new("test project123", "desc", null));
_testModel = await _testUser.Model.Create(new("test model", "desc", _testProject.id));
_testVersion = await Fixtures.CreateVersion(_testUser, _testProject.id, _testModel.id);
}
[Test]
public async Task UserProjectsUpdated_SubscriptionIsCalled()
{
UserProjectsUpdatedMessage? subscriptionMessage = null;
using var sub = Sut.CreateUserProjectsUpdatedSubscription();
sub.Listeners += (_, message) => subscriptionMessage = message;
await Task.Delay(WAIT_PERIOD); // Give time to subscription to be setup
var created = await _testUser.Project.Create(new(null, null, null));
await Task.Delay(WAIT_PERIOD); // Give time for subscription to be triggered
Assert.That(subscriptionMessage, Is.Not.Null);
Assert.That(subscriptionMessage!.id, Is.EqualTo(created.id));
}
[Test]
public async Task ProjectModelsUpdated_SubscriptionIsCalled()
{
ProjectModelsUpdatedMessage? subscriptionMessage = null;
using var sub = Sut.CreateProjectModelsUpdatedSubscription(_testProject.id);
sub.Listeners += (_, message) => subscriptionMessage = message;
await Task.Delay(WAIT_PERIOD); // Give time to subscription to be setup
CreateModelInput input = new("my model", "myDescription", _testProject.id);
var created = await _testUser.Model.Create(input);
await Task.Delay(WAIT_PERIOD); // Give time for subscription to be triggered
Assert.That(subscriptionMessage, Is.Not.Null);
Assert.That(subscriptionMessage!.id, Is.EqualTo(created.id));
}
[Test]
public async Task ProjectUpdated_SubscriptionIsCalled()
{
ProjectUpdatedMessage? subscriptionMessage = null;
using var sub = Sut.CreateProjectUpdatedSubscription(_testProject.id);
sub.Listeners += (_, message) => subscriptionMessage = message;
await Task.Delay(WAIT_PERIOD); // Give time to subscription to be setup
var input = new ProjectUpdateInput(_testProject.id, "This is my new name");
var created = await _testUser.Project.Update(input);
await Task.Delay(WAIT_PERIOD); // Give time for subscription to be triggered
Assert.That(subscriptionMessage, Is.Not.Null);
Assert.That(subscriptionMessage!.id, Is.EqualTo(created.id));
}
[Test]
public async Task ProjectVersionsUpdated_SubscriptionIsCalled()
{
ProjectVersionsUpdatedMessage? subscriptionMessage = null;
using var sub = Sut.CreateProjectVersionsUpdatedSubscription(_testProject.id);
sub.Listeners += (_, message) => subscriptionMessage = message;
await Task.Delay(WAIT_PERIOD); // Give time to subscription to be setup
var created = await Fixtures.CreateVersion(_testUser, _testProject.id, _testModel.id);
await Task.Delay(WAIT_PERIOD); // Give time for subscription to be triggered
Assert.That(subscriptionMessage, Is.Not.Null);
Assert.That(subscriptionMessage!.id, Is.EqualTo(created));
}
[Test]
public async Task ProjectCommentsUpdated_SubscriptionIsCalled()
{
string resourceIdString = $"{_testProject.id},{_testModel.id},{_testVersion}";
ProjectCommentsUpdatedMessage? subscriptionMessage = null;
using var sub = Sut.CreateProjectCommentsUpdatedSubscription(new(_testProject.id, resourceIdString));
sub.Listeners += (_, message) => subscriptionMessage = message;
await Task.Delay(WAIT_PERIOD); // Give time to subscription to be setup
var created = await Fixtures.CreateComment(_testUser, _testProject.id, _testModel.id, _testVersion);
await Task.Delay(WAIT_PERIOD); // Give time for subscription to be triggered
Assert.That(subscriptionMessage, Is.Not.Null);
Assert.That(subscriptionMessage!.id, Is.EqualTo(created.id));
}
}