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());
        }