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

            var entity = await ModixContext.Set <GuildRoleEntity>()
                         .Where(x => x.RoleId == roleId)
                         .FirstOrDefaultAsync();

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

            var data = GuildRoleMutationData.FromEntity(entity);

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

            ModixContext.UpdateProperty(entity, x => x.Name);
            ModixContext.UpdateProperty(entity, x => x.Position);

            await ModixContext.SaveChangesAsync();

            return(true);
        }
        public async Task TryUpdateAsync_GuildRoleExists_UpdatesGuildRolesAndReturnsTrue(ulong roleId)
        {
            (var modixContext, var uut) = BuildTestContext();

            var guildRole = modixContext.Set <GuildRoleEntity>().Single(x => x.RoleId == roleId);

            var mutatedData = new GuildRoleMutationData()
            {
                Name     = "UpdatedRole",
                Position = 20
            };

            var result = await uut.TryUpdateAsync(roleId, data =>
            {
                data.Name.ShouldBe(guildRole.Name);
                data.Position.ShouldBe(guildRole.Position);

                data.Name     = mutatedData.Name;
                data.Position = mutatedData.Position;
            });

            result.ShouldBeTrue();

            guildRole.Name.ShouldBe(mutatedData.Name);
            guildRole.Position.ShouldBe(mutatedData.Position);

            modixContext.Set <GuildRoleEntity>()
            .AsQueryable()
            .Select(x => x.RoleId)
            .ShouldBe(GuildRoles.Entities
                      .Select(x => x.RoleId));

            modixContext.Set <GuildRoleEntity>()
            .Where(x => x.RoleId != roleId)
            .EachShould(x => x.ShouldNotHaveChanged());

            await modixContext.ShouldHaveReceived(1)
            .SaveChangesAsync();
        }
示例#3
0
            public TestContext(
                bool roleExists)
            {
                GuildRoleMutationData = new GuildRoleMutationData();

                MockCreateTransaction = new Mock <IRepositoryTransaction>();

                MockGuildRoleRepository = new Mock <IGuildRoleRepository>();
                MockGuildRoleRepository
                .Setup(x => x.BeginCreateTransactionAsync())
                .ReturnsAsync(() => MockCreateTransaction.Object);
                MockGuildRoleRepository
                .Setup(x => x.TryUpdateAsync(It.IsAny <ulong>(), It.IsAny <Action <GuildRoleMutationData> >()))
                .Returns <ulong, Action <GuildRoleMutationData> >((roleId, updateAction) =>
                {
                    if (roleExists)
                    {
                        updateAction.Invoke(GuildRoleMutationData);
                    }

                    return(Task.FromResult(roleExists));
                });
            }