public async Task Update_Computer(CreateComputer createComputer, UpdateComputer updateComputer)
            {
                var postResponse = await HttpClient.PostAsync(ResourceKey,
                                                              new StringContent(JsonConvert.SerializeObject(createComputer), Encoding.UTF8, "application/json"));

                Assert.Equal(HttpStatusCode.Created, postResponse.StatusCode);

                var computer = JsonConvert.DeserializeObject <ComputerDto>(await postResponse.Content.ReadAsStringAsync());

                var putResult = await HttpClient.PutAsync(ResourceKey + "/" + computer.Id,
                                                          new StringContent(JsonConvert.SerializeObject(updateComputer), Encoding.UTF8, "application/json"));

                putResult = await HttpClient.GetAsync(putResult.Headers.Location);

                computer = JsonConvert.DeserializeObject <ComputerDto>(await putResult.Content.ReadAsStringAsync());

                computer.Name.Should().Be(updateComputer.Name);
                computer.Price.Should().Be(updateComputer.Price);
                foreach (var graphicsCard in createComputer.GraphicsCard)
                {
                    Assert.Contains(createComputer.GraphicsCard, x => x.Name == graphicsCard.Name);
                    Assert.Contains(createComputer.GraphicsCard, x => x.Price.Equals(graphicsCard.Price));
                }

                foreach (var ram in createComputer.Ram)
                {
                    Assert.Contains(createComputer.Ram, x => x.Name == ram.Name);
                    Assert.Contains(createComputer.Ram, x => x.Price.Equals(ram.Price));
                }
            }
Beispiel #2
0
        public async Task <IActionResult> UpdateComputer(Guid computerId, [FromBody] UpdateComputer request,
                                                         [FromHeader(Name = "Accept")] string mediaType)
        {
            if (request == null)
            {
                return(NotFound());
            }

            var response = await _computersService.UpdateComputer(computerId, request);

            if (response.HttpStatusCode == (int)HttpStatusCode.Created)
            {
                if (mediaType.IsApplicationHal())
                {
                    return(CreatedAtRoute("GetComputer", new { response.Data.Id }, CreateLinkForComputer(response.Data)));
                }

                return(CreatedAtRoute("GetComputer", new { response.Data.Id }, response.Data));
            }

            return(new ObjectResult(response.Data)
            {
                StatusCode = (int)response.HttpStatusCode
            });
        }
            public async Task Update_Computer_Should_Return_UnProcessableEntity(CreateComputer createComputer,
                                                                                UpdateComputer updateComputer)
            {
                var postResponse = await HttpClient.PostAsync(ResourceKey,
                                                              new StringContent(JsonConvert.SerializeObject(createComputer), Encoding.UTF8, "application/json"));

                Assert.Equal(HttpStatusCode.Created, postResponse.StatusCode);

                var computer = JsonConvert.DeserializeObject <ComputerDto>(await postResponse.Content.ReadAsStringAsync());

                updateComputer.Name = new String('a', 256);

                var putResult = await HttpClient.PutAsync(ResourceKey + "/" + computer.Id,
                                                          new StringContent(JsonConvert.SerializeObject(updateComputer), Encoding.UTF8, "application/json"));

                Assert.Equal(422, (int)putResult.StatusCode);
            }
            public async Task Update_Computer_With_Hal_Should_Have_Valid_Links(UpdateComputer updateComputer)
            {
                var response = await _httpClient.GetAsync(ResourceKey);

                Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                var result = JsonConvert.DeserializeObject <LinkedCollectionResourceWrapperDto <ComputerDto> >(await response.Content.ReadAsStringAsync());

                response = await _httpClient.GetAsync(result.Value.First().Links.First(x => x.Rel == "self").Href);

                var computer = JsonConvert.DeserializeObject <ComputerDto>(await response.Content.ReadAsStringAsync());

                response = await _httpClient.PutAsync(computer.Links.First(x => x.Rel == "update").Href,
                                                      new StringContent(JsonConvert.SerializeObject(updateComputer), Encoding.UTF8, "application/json"));

                var updatedComputer = JsonConvert.DeserializeObject <ComputerDto>(await response.Content.ReadAsStringAsync());

                var self   = computer.Links.FirstOrDefault(x => x.Rel == "self");
                var delete = computer.Links.FirstOrDefault(x => x.Rel == "delete");
                var put    = computer.Links.FirstOrDefault(x => x.Rel == "update");
                var patch  = computer.Links.FirstOrDefault(x => x.Rel == "patch");

                Assert.NotNull(self);
                Assert.Equal(HttpMethod.Get.ToString(), self.Method);
                Assert.Equal(_httpClient.BaseAddress + ResourceKey.Substring(1) + "/" + computer.Id, self.Href);

                Assert.NotNull(delete);
                Assert.Equal(HttpMethod.Delete.ToString(), delete.Method);
                Assert.Equal(_httpClient.BaseAddress + ResourceKey.Substring(1) + "/" + computer.Id, delete.Href);

                Assert.NotNull(put);
                Assert.Equal(HttpMethod.Put.ToString(), put.Method);
                Assert.Equal(_httpClient.BaseAddress + ResourceKey.Substring(1) + "/" + computer.Id, put.Href);

                Assert.NotNull(patch);
                Assert.Equal("PATCH", patch.Method);
                Assert.Equal(_httpClient.BaseAddress + ResourceKey.Substring(1) + "/" + computer.Id, patch.Href);
            }
        public async Task <BaseResponse <ComputerDto> > UpdateComputer(Guid computerId, UpdateComputer request)
        {
            var(errors, isValid) = EntityValidator.Validate(request);

            if (!isValid)
            {
                return(new BaseResponse <ComputerDto>((int)CustomHttpStatusCode.UnprocessableEntity, string.Join("", errors)));
            }

            if (!await _computerRepository.Exists(computerId))
            {
                return(new BaseResponse <ComputerDto>((int)HttpStatusCode.NotFound));
            }

            var computer = await _computerRepository.Get(computerId);

            computer.Update(request.Name, request.Price);
            await _computerRepository.Update(computer);

            return(new BaseResponse <ComputerDto>((int)HttpStatusCode.Created, _mapper.Map <ComputerDto>(computer)));
        }