示例#1
0
        /// <inheritdoc />
        public async Task <bool> TryUpdateAsync(ulong userId, ulong guildId, Action <GuildUserMutationData> updateAction)
        {
            if (updateAction == null)
            {
                throw new ArgumentNullException(nameof(updateAction));
            }

            var entity = await ModixContext.GuildUsers
                         .Where(x => x.UserId == userId)
                         .Where(x => x.GuildId == guildId)
                         .Include(x => x.User)
                         .FirstOrDefaultAsync();

            if (entity == null)
            {
                return(false);
            }

            var data = GuildUserMutationData.FromEntity(entity);

            updateAction.Invoke(data);
            data.ApplyTo(entity);

            ModixContext.UpdateProperty(entity.User, x => x.Username);
            ModixContext.UpdateProperty(entity.User, x => x.Discriminator);
            ModixContext.UpdateProperty(entity, x => x.Nickname);
            ModixContext.UpdateProperty(entity, x => x.LastSeen);

            await ModixContext.SaveChangesAsync();

            return(true);
        }
示例#2
0
        public async Task TryUpdateAsync_GuildUserExists_UpdatesGuildUsersAndReturnsTrue(ulong userId, ulong guildId)
        {
            (var modixContext, var uut) = BuildTestContext();

            var user      = modixContext.Users.Single(x => x.Id == userId);
            var guildUser = modixContext.GuildUsers.Single(x => (x.UserId == userId) && (x.GuildId == guildId));

            var mutatedData = new GuildUserMutationData()
            {
                Username      = "******",
                Discriminator = "UpdatedDiscriminator",
                Nickname      = "UpdatedNickname",
                LastSeen      = DateTimeOffset.Now
            };

            var result = await uut.TryUpdateAsync(userId, guildId, data =>
            {
                data.Username.ShouldBe(user.Username);
                data.Discriminator.ShouldBe(user.Discriminator);
                data.Nickname.ShouldBe(guildUser.Nickname);
                data.LastSeen.ShouldBe(guildUser.LastSeen);

                data.Username      = mutatedData.Username;
                data.Discriminator = mutatedData.Discriminator;
                data.Nickname      = mutatedData.Nickname;
                data.LastSeen      = mutatedData.LastSeen;
            });

            result.ShouldBeTrue();

            user.Username.ShouldBe(mutatedData.Username);
            user.Discriminator.ShouldBe(mutatedData.Discriminator);
            guildUser.Nickname.ShouldBe(mutatedData.Nickname);
            guildUser.LastSeen.ShouldBe(mutatedData.LastSeen);

            modixContext.GuildUsers.AsEnumerable()
            .Select(x => (x.UserId, x.GuildId))
            .ShouldBe(GuildUsers.Entities
                      .Select(x => (x.UserId, x.GuildId)));

            modixContext.GuildUsers
            .Where(x => (x.UserId != userId) || (x.GuildId != guildId))
            .EachShould(x => x.ShouldNotHaveChanged());

            modixContext.Users
            .AsQueryable()
            .Select(x => x.Id)
            .ShouldBe(Users.Entities
                      .Select(x => x.Id));

            modixContext.Users
            .Where(x => x.Id != userId)
            .EachShould(x => x.ShouldNotHaveChanged());

            await modixContext.ShouldHaveReceived(1)
            .SaveChangesAsync();
        }