-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUserModuleTests.cs
More file actions
108 lines (89 loc) · 3.44 KB
/
UserModuleTests.cs
File metadata and controls
108 lines (89 loc) · 3.44 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
using BaseBotService.Commands;
using BaseBotService.Commands.Interfaces;
using BaseBotService.Core.Interfaces;
using BaseBotService.Data.Interfaces;
using Discord;
using Serilog;
namespace BaseBotService.Tests.Commands;
[TestFixture]
public class UserModuleTests
{
private ITranslationService _translationService;
private IEngagementService _engagementService;
private IMemberRepository _memberRepository;
private IGuildMemberRepository _guildMemberRepository;
private ILogger _logger;
private UserModule _userModule;
private readonly Faker _faker = new();
[SetUp]
public void SetUp()
{
_translationService = Substitute.For<ITranslationService>();
_engagementService = Substitute.For<IEngagementService>();
_memberRepository = Substitute.For<IMemberRepository>();
_guildMemberRepository = Substitute.For<IGuildMemberRepository>();
_logger = Substitute.For<ILogger>();
_userModule = new UserModule(_logger, _translationService, _engagementService, _memberRepository, _guildMemberRepository);
}
[Test]
public void GetActivityScore_ShouldReturnZero_WhenUserOrBotJoinedAtIsMissing()
{
// Arrange
var user = Substitute.For<IGuildUser>();
user.JoinedAt.Returns((DateTimeOffset?)null);
var bot = Substitute.For<IGuildUser>();
bot.JoinedAt.Returns((DateTimeOffset?)null);
// Act
double result = _userModule.GetActivityScore(user, bot);
// Assert
result.ShouldBe(0);
}
[TestCase((uint)85, 100)]
[TestCase((uint)125, 100)]
[TestCase((uint)42, 50)]
[TestCase((uint)9, 10)]
public void GetActivityScore_ShouldCalculateCorrectScore_WhenUserAndBotHaveValidJoinedAtDates(uint points, double score)
{
// Arrange
var userJoinedDate = DateTimeOffset.UtcNow.AddDays(-5);
var botJoinedDate = DateTimeOffset.UtcNow.AddDays(-10);
ulong guildId = _faker.Random.ULong();
ulong userId = _faker.Random.ULong();
ulong botId = _faker.Random.ULong();
var user = Substitute.For<IGuildUser>();
user.JoinedAt.Returns(userJoinedDate);
user.GuildId.Returns(guildId);
user.Id.Returns(userId);
var bot = Substitute.For<IGuildUser>();
bot.JoinedAt.Returns(botJoinedDate);
bot.GuildId.Returns(guildId);
bot.Id.Returns(botId);
_engagementService.MaxPointsPerDay.Returns(100);
_engagementService.GetActivityPoints(guildId, userId).Returns(points);
// Act
double result = _userModule.GetActivityScore(user, bot);
// Assert
result.ShouldBe(score, 1.0);
}
[Test]
public void GetActivityScore_ShouldReturnZero_WhenUserAndBotJoinedAtSameTime()
{
// Arrange
var joinedAt = DateTimeOffset.UtcNow;
ulong guildId = _faker.Random.ULong();
ulong userId = _faker.Random.ULong();
var user = Substitute.For<IGuildUser>();
user.JoinedAt.Returns(joinedAt);
user.GuildId.Returns(guildId);
user.Id.Returns(userId);
var bot = Substitute.For<IGuildUser>();
bot.JoinedAt.Returns(joinedAt);
bot.GuildId.Returns(guildId);
_engagementService.MaxPointsPerDay.Returns(0);
_engagementService.GetActivityPoints(guildId, userId).Returns((uint)50);
// Act
double result = _userModule.GetActivityScore(user, bot);
// Assert
result.ShouldBe(0);
}
}