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