-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAccountDisconnectServiceTests.cs
More file actions
117 lines (102 loc) · 4.48 KB
/
Copy pathAccountDisconnectServiceTests.cs
File metadata and controls
117 lines (102 loc) · 4.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using NSubstitute;
using RustPlusBot.Abstractions.Credentials;
using RustPlusBot.Abstractions.Events;
using RustPlusBot.Domain.Credentials;
using RustPlusBot.Domain.Servers;
using RustPlusBot.Features.Pairing.Accounts;
using RustPlusBot.Features.Pairing.Supervisor;
using RustPlusBot.Persistence.Credentials;
using RustPlusBot.Persistence.Servers;
namespace RustPlusBot.Features.Pairing.Tests;
public sealed class AccountDisconnectServiceTests
{
private static readonly string[] RustopiaNames = ["Rustopia"];
private static (AccountDisconnectService Sut, IPairingSupervisor Sup, IFcmRegistrationStore Regs,
ICredentialStore Creds, IServerService Servers, IEventBus Bus) Create()
{
var sup = Substitute.For<IPairingSupervisor>();
var regs = Substitute.For<IFcmRegistrationStore>();
var creds = Substitute.For<ICredentialStore>();
var servers = Substitute.For<IServerService>();
var bus = Substitute.For<IEventBus>();
return (new AccountDisconnectService(sup, regs, creds, servers, bus), sup, regs, creds, servers, bus);
}
[Fact]
public async Task Disconnect_StopsListener_DisablesRegistration_RemovesCreds_PublishesPerServer()
{
var (sut, sup, regs, creds, _, bus) = Create();
var regId = Guid.NewGuid();
var s1 = Guid.NewGuid();
var s2 = Guid.NewGuid();
regs.GetAsync(10UL, 99UL, Arg.Any<CancellationToken>())
.Returns(new FcmRegistration
{
Id = regId, GuildId = 10UL, OwnerUserId = 99UL
});
creds.RemoveForOwnerAsync(10UL, 99UL, Arg.Any<CancellationToken>())
.Returns(
[
s1, s2
]);
var count = await sut.DisconnectAsync(10UL, 99UL);
Assert.Equal(2, count);
await sup.Received(1).StopListenerAsync(10UL, 99UL);
await regs.Received(1).SetStatusAsync(regId, FcmRegistrationStatus.Disabled, Arg.Any<CancellationToken>());
await bus.Received(1).PublishAsync(
Arg.Is<ServerCredentialsChangedEvent>(e => e!.GuildId == 10UL && e.ServerId == s1),
Arg.Any<CancellationToken>());
await bus.Received(1).PublishAsync(
Arg.Is<ServerCredentialsChangedEvent>(e => e!.ServerId == s2), Arg.Any<CancellationToken>());
}
[Fact]
public async Task Disconnect_WhenNothingStored_StopsListener_NoEvents_ReturnsZero()
{
var (sut, sup, regs, creds, _, bus) = Create();
regs.GetAsync(10UL, 99UL, Arg.Any<CancellationToken>()).Returns((FcmRegistration?)null);
creds.RemoveForOwnerAsync(10UL, 99UL, Arg.Any<CancellationToken>()).Returns([]);
var count = await sut.DisconnectAsync(10UL, 99UL);
Assert.Equal(0, count);
await sup.Received(1).StopListenerAsync(10UL, 99UL);
await regs.DidNotReceive().SetStatusAsync(Arg.Any<Guid>(), Arg.Any<FcmRegistrationStatus>(),
Arg.Any<CancellationToken>());
await bus.DidNotReceive().PublishAsync(Arg.Any<ServerCredentialsChangedEvent>(), Arg.Any<CancellationToken>());
}
[Fact]
public async Task Preview_ReportsConnectedAndServerNames()
{
var (sut, _, regs, creds, servers, _) = Create();
var s1 = Guid.NewGuid();
regs.GetAsync(10UL, 99UL, Arg.Any<CancellationToken>())
.Returns(new FcmRegistration
{
Id = Guid.NewGuid(), GuildId = 10UL, OwnerUserId = 99UL
});
creds.ListServerIdsForOwnerAsync(10UL, 99UL, Arg.Any<CancellationToken>())
.Returns(
[
s1
]);
servers.GetAsync(10UL, s1, Arg.Any<CancellationToken>())
.Returns(new RustServer
{
Id = s1,
GuildId = 10UL,
Name = "Rustopia",
Ip = "1.1.1.1",
Port = 28015
});
var preview = await sut.PreviewAsync(10UL, 99UL);
Assert.True(preview.IsConnected);
Assert.Equal(RustopiaNames, preview.AffectedServerNames);
}
[Fact]
public async Task Preview_WhenNothing_ReportsNotConnected()
{
var (sut, _, regs, creds, _, _) = Create();
regs.GetAsync(10UL, 99UL, Arg.Any<CancellationToken>()).Returns((FcmRegistration?)null);
creds.ListServerIdsForOwnerAsync(10UL, 99UL, Arg.Any<CancellationToken>()).Returns([]);
var preview = await sut.PreviewAsync(10UL, 99UL);
Assert.False(preview.IsConnected);
Assert.Empty(preview.AffectedServerNames);
}
}