private static void CompareQueuedBoosters(QueuedBooster ogBooster, QueuedBooster compareAgainstBooster) { compareAgainstBooster.Id.Should().Be(ogBooster.Id); compareAgainstBooster.Position.Should().Be(ogBooster.Position); compareAgainstBooster.GuildId.Should().Be(ogBooster.GuildId); compareAgainstBooster.Multiplier.Should().Be(ogBooster.Multiplier); compareAgainstBooster.DurationInSeconds.Should().Be(ogBooster.DurationInSeconds); }
public async Task ShouldActivateQueuedBooster_IfSlotBecomesAvailable() { ulong guildId = 6; ulong channelId = 7; var now = DateTime.Now.ToUniversalTime(); var slot = new AvailableSlot { GuildId = guildId, ChannelId = channelId }; var sub = new List <ActiveBooster> { new() { GuildId = guildId, ExpirationDate = now.Subtract(TimeSpan.FromSeconds(5)), Multiplier = 6.9f, Slot = slot } }; var queued = new QueuedBooster { GuildId = guildId, Multiplier = 5.0f, DurationInSeconds = 600 }; var activeBoosters = new Dictionary <ulong, List <ActiveBooster> > { { guildId, sub } }; var queuedBoosters = new Dictionary <ulong, Queue <QueuedBooster> > { { guildId, new Queue <QueuedBooster>(new[] { queued }) } }; var availableSlots = new Dictionary <ulong, List <AvailableSlot> > { { guildId, new List <AvailableSlot> { slot } } }; _boosterService.ActiveBoosters.Returns(activeBoosters); _boosterService.QueuedBoosters.Returns(queuedBoosters); _boosterService.AvailableSlots.Returns(availableSlots); _dbContext.ConfigureMockDbSet(x => x.XPActiveBoosters); _dbContext.ConfigureMockDbSet(x => x.XPQueuedBoosters); _dbContext.ConfigureMockDbSet(x => x.XPAvailableSlots); ((IQueryable <QueuedBooster>)_dbContext.XPQueuedBoosters).Expression.Returns(new List <QueuedBooster>() .AsQueryable().Where(x => false).Expression); ((IQueryable <ActiveBooster>)_dbContext.XPActiveBoosters).Expression.Returns(new List <ActiveBooster>() .AsQueryable().Where(x => false).Expression); _dateTime.Now.Returns(now); await _sussy.Handle(new UpdateBoosterCycleCommand { GuildId = guildId }, CancellationToken.None); await _dbContext.XPActiveBoosters.Received().DeleteAsync(); _boosterService.ActiveBoosters[guildId].Count.Should().Be(0); await _mediator.Received().Send(Arg.Is <ActivateBoosterCommand>(c => c.GuildId == guildId && Math.Abs(c.Multiplier - queued.Multiplier) < 0.01f && c.Duration == TimeSpan.FromSeconds(queued.DurationInSeconds) )); await _mediator.Received(1).Send(Arg.Is <SaveQueueCommand>(c => c.GuildId == guildId )); } }