public async Task Test4Put()
        {
            AbilityMutateModel mutateModel = new AbilityMutateModel
            {
                Name        = "TestMetaUpdated",
                Description = "This is a meta created by the unit test"
            };

            AbilitiesController controller = new AbilitiesController(_context, null);
            IActionResult       result     = await controller.Put(this.id, mutateModel);

            NoContentResult ok = result as NoContentResult;

            Assert.NotNull(ok);
            Assert.Equal(204, ok.StatusCode);
        }
        public async Task <IActionResult> Put([FromRoute] Guid id, [FromBody] AbilityMutateModel abilityMutate)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Ability ability = await this.abilitiesRepository.GetOne(id);

            if (ability == null || id != ability.Id)
            {
                return(BadRequest());
            }

            if (!string.IsNullOrEmpty(abilityMutate.Name))
            {
                ability.Name = abilityMutate.Name;
            }

            if (abilityMutate.Description != null)
            {
                ability.Description = abilityMutate.Description;
            }

            ability.UpdatedAt = abilityMutate.UpdatedAt;

            try
            {
                await this.abilitiesRepository.UpdateAsync(ability);
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!await this.abilitiesRepository.EntityExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }