public async Task ShouldAddXp_WhenUserExists() { ulong guildId = 6; ulong userId = 90; var message = "TEST"; var user = new User { GuildId = guildId, UserId = userId, Lvl = 0, XP = 0 }; _dbContext.ConfigureMockDbSet(x => x.XPUsers, user); _calculator.XpEarned(message, guildId).Returns(20.0); var command = new AddXpToUserCommand { GuildId = guildId, UserId = userId, Message = message }; await _appFixture.SendAsync(command); await _dbContext.Received(1).SaveChangesAsync(default);
public async Task <Unit> Handle(AddXpToUserCommand request, CancellationToken cancellationToken) { var user = await _context.XPUsers .FirstOrDefaultAsync(u => u.UserId == request.UserId, cancellationToken); if (user == null) { user = new User { GuildId = request.GuildId, UserId = request.UserId, Lvl = 0, XP = 0 }; _context.XPUsers.Add(user); } var oldXP = user.XP; user.XP += await _calculator.XpEarned(request.Message, request.GuildId); await _context.SaveChangesAsync(cancellationToken); await _provider.Publish(new XpAddedToUserEvent { MessageDetails = new MessageDetails { Message = request.Message, ChannelId = request.ChannelId, GuildId = request.GuildId, UserId = request.UserId, UserAvatarUrl = request.UserAvatarUrl, UserDisplayName = request.UserDisplayName, }, OldXp = oldXP, NewXp = user.XP }); return(new Unit()); }