public async Task <ActionResult <MaterialVm> > PutMaterial(short id, MaterialUpdateRequest materialUpdateRequest)
        {
            var material = await _context.Materials.FirstOrDefaultAsync(x => x.ID == id);

            material.Name   = materialUpdateRequest.Name;
            material.Status = materialUpdateRequest.Status;

            if (id != material.ID)
            {
                return(BadRequest());
            }

            _context.Entry(material).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!MaterialExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task UpdateMaterial_Success()
        {
            var      dbContext   = _fixture.Context;
            Material oldMaterial = new Material {
                Name = "Test material"
            };
            await dbContext.Materials.AddAsync(oldMaterial);

            await dbContext.SaveChangesAsync();

            MaterialUpdateRequest newMaterial = new MaterialUpdateRequest {
                Name = "Test1 material"
            };
            var controller = new MaterialsController(dbContext);
            var result     = await controller.PutMaterial(1, newMaterial);

            var updatAtActionResult = Assert.IsType <OkObjectResult>(result.Result);
            var resultValue         = Assert.IsType <MaterialUpdateRequest>(updatAtActionResult.Value);

            Assert.Equal(oldMaterial.Name, resultValue.Name);
            Assert.Equal(oldMaterial.Name, newMaterial.Name);
        }
        public IActionResult UpdateMaterialMasterData(int id, [FromBody] MaterialUpdateRequest materialUpdateRequest)
        {
            if (materialUpdateRequest == null ||
                string.IsNullOrWhiteSpace(materialUpdateRequest.Name) ||
                string.IsNullOrWhiteSpace(materialUpdateRequest.Manufacturer) ||
                string.IsNullOrWhiteSpace(materialUpdateRequest.ManufacturerId) ||
                string.IsNullOrWhiteSpace(materialUpdateRequest.Type))
            {
                return(HandleBadRequest("Incomplete or invalid material data submitted for update."));
            }

            // Check for material type validity
            Plastic plastic = null;

            try
            {
                plastic = PlasticsService.GetPlastic(materialUpdateRequest.Type);
            }
            catch (PlasticNotFoundException exception)
            {
                return(HandleBadRequest(exception.Message));
            }

            // Proceed with updating
            try
            {
                Material material = MaterialsService.UpdateMaterial(id, materialUpdateRequest.Name, materialUpdateRequest.Manufacturer, materialUpdateRequest.ManufacturerId, plastic);
                return(Ok(material));
            }
            catch (MaterialNotFoundException exception)
            {
                return(HandleResourceNotFoundException(exception));
            }
            catch (Exception exception)
            {
                return(HandleUnexpectedException(exception));
            }
        }