public async Task HandleAsync_Should_Update_FlatForRentAnnouncement() { var cityDistrictToRemove = Guid.NewGuid(); var flatForRentAnnouncement = FlatForRentAnnouncement.Builder() .SetId(Guid.NewGuid()) .SetTitle("Title") .SetSourceUrl("http://source") .SetCityId(Guid.NewGuid()) .SetCreated(DateTimeOffset.UtcNow) .SetDescription("Description") .SetNumberOfRooms(NumberOfRoomsEnumeration.One) .SetPrice(1000) .SetCityDistricts(new List <Guid> { cityDistrictToRemove }) .Build(); var getFlatForRentAnnouncementResult = GetResult <FlatForRentAnnouncement> .Ok(flatForRentAnnouncement); var cityVerificationResult = VerificationResult.Ok(); var cityDistrictsVerificationResult = VerificationResult.Ok(); var cityDistrictToAdd = Guid.NewGuid(); const string newTitle = "NewTitle"; var updateFlatForRentAnnouncementCommand = new UpdateFlatForRentAnnouncementCommand( flatForRentAnnouncement.Id, newTitle, flatForRentAnnouncement.SourceUrl, flatForRentAnnouncement.CityId, flatForRentAnnouncement.Description, flatForRentAnnouncement.Price, flatForRentAnnouncement.NumberOfRooms, new List <Guid> { cityDistrictToAdd }); _flatForRentAnnouncementGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>())) .ReturnsAsync(getFlatForRentAnnouncementResult); _cityVerificationServiceMock.Setup(x => x.VerifyCityExistsAsync(It.IsAny <Guid>())) .ReturnsAsync(cityVerificationResult); _cityDistrictVerificationServiceMock .Setup(x => x.VerifyCityDistrictsExistAsync(It.IsAny <Guid>(), It.IsAny <IEnumerable <Guid> >())) .ReturnsAsync(cityDistrictsVerificationResult); _flatForRentAnnouncementRepositoryMock.Setup(x => x.UpdateAsync(It.IsAny <FlatForRentAnnouncement>())) .Returns(Task.CompletedTask); Func <Task> result = async() => await _commandHandler.HandleAsync(updateFlatForRentAnnouncementCommand); await result.Should().NotThrowAsync <Exception>(); flatForRentAnnouncement.Title.Should().Be(newTitle); flatForRentAnnouncement.CityDistricts.Should().NotContain(cityDistrictToRemove); flatForRentAnnouncement.CityDistricts.Should().Contain(cityDistrictToAdd); }
public async Task HandleAsync_Should_Throw_ValidationException_When_Any_Of_CityDistricts_Is_Not_Found() { var flatForRentAnnouncement = FlatForRentAnnouncement.Builder() .SetId(Guid.NewGuid()) .SetTitle("Title") .SetSourceUrl("http://source") .SetCityId(Guid.NewGuid()) .SetCreated(DateTimeOffset.UtcNow) .SetDescription("Description") .SetNumberOfRooms(NumberOfRoomsEnumeration.One) .SetPrice(1000) .SetCityDistricts(new List <Guid> { Guid.NewGuid() }) .Build(); var getFlatForRentAnnouncementResult = GetResult <FlatForRentAnnouncement> .Ok(flatForRentAnnouncement); var cityVerificationResult = VerificationResult.Ok(); var errors = new Collection <IError> { new Error(CityDistrictErrorCodeEnumeration.NotFound, CityDistrictErrorMessage.NotFound) }; var cityDistrictsVerificationResult = VerificationResult.Fail(errors); var updateFlatForRentAnnouncementCommand = new UpdateFlatForRentAnnouncementCommand( flatForRentAnnouncement.Id, flatForRentAnnouncement.Title, flatForRentAnnouncement.SourceUrl, flatForRentAnnouncement.CityId, flatForRentAnnouncement.Description, flatForRentAnnouncement.Price, flatForRentAnnouncement.NumberOfRooms, flatForRentAnnouncement.CityDistricts); _flatForRentAnnouncementGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>())) .ReturnsAsync(getFlatForRentAnnouncementResult); _cityVerificationServiceMock.Setup(x => x.VerifyCityExistsAsync(It.IsAny <Guid>())) .ReturnsAsync(cityVerificationResult); _cityDistrictVerificationServiceMock .Setup(x => x.VerifyCityDistrictsExistAsync(It.IsAny <Guid>(), It.IsAny <IEnumerable <Guid> >())) .ReturnsAsync(cityDistrictsVerificationResult); Func <Task> result = async() => await _commandHandler.HandleAsync(updateFlatForRentAnnouncementCommand); var exceptionResult = await result.Should().ThrowExactlyAsync <ValidationException>(); exceptionResult.And.Errors.Should().BeEquivalentTo(errors); }
public async Task HandleAsync_Should_Throw_ResourceNotFoundException_When_FlatForRentAnnouncement_Is_Not_Found() { var errors = new Collection <IError> { new Error(FlatForRentAnnouncementErrorCodeEnumeration.NotFound, FlatForRentAnnouncementErrorMessage.NotFound) }; var getFlatForRentAnnouncementResult = GetResult <FlatForRentAnnouncement> .Fail(errors); var updateFlatForRentAnnouncementCommand = new UpdateFlatForRentAnnouncementCommand(Guid.NewGuid(), "Title", "http://sourceUrl", Guid.NewGuid(), "Description", null, null, new List <Guid>()); _flatForRentAnnouncementGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>())) .ReturnsAsync(getFlatForRentAnnouncementResult); Func <Task> result = async() => await _commandHandler.HandleAsync(updateFlatForRentAnnouncementCommand); var exceptionResult = await result.Should().ThrowExactlyAsync <ResourceNotFoundException>(); exceptionResult.And.Errors.Should().BeEquivalentTo(errors); }
public async Task UpdateFlatForRentAnnouncementAsync_Should_Return_OkObjectResult_With_FlatForRentAnnouncementResponse() { var flatForRentAnnouncementId = Guid.NewGuid(); var updateFlatForRentAnnouncementRequest = new UpdateFlatForRentAnnouncementRequest { Id = flatForRentAnnouncementId, Title = "NewTitle", SourceUrl = "http://sourceUrl", CityId = Guid.NewGuid(), Description = "Description", Price = 100, NumberOfRooms = NumberOfRooms.One, CityDistricts = new List <Guid> { Guid.NewGuid() } }; var updateFlatForRentAnnouncementCommand = new UpdateFlatForRentAnnouncementCommand( flatForRentAnnouncementId, updateFlatForRentAnnouncementRequest.Title, updateFlatForRentAnnouncementRequest.SourceUrl, updateFlatForRentAnnouncementRequest.CityId, updateFlatForRentAnnouncementRequest.Description, updateFlatForRentAnnouncementRequest.Price, FlatForRentAnnouncementProfile.ConvertToNumberOfRoomsEnumeration(updateFlatForRentAnnouncementRequest.NumberOfRooms), updateFlatForRentAnnouncementRequest.CityDistricts); var flatForRentAnnouncementOutputQuery = new FlatForRentAnnouncementOutputQuery( updateFlatForRentAnnouncementCommand.FlatForRentAnnouncementId, updateFlatForRentAnnouncementCommand.Title, updateFlatForRentAnnouncementCommand.SourceUrl, updateFlatForRentAnnouncementCommand.CityId, DateTimeOffset.UtcNow, updateFlatForRentAnnouncementCommand.Description, updateFlatForRentAnnouncementCommand.Price, updateFlatForRentAnnouncementCommand.NumberOfRooms, updateFlatForRentAnnouncementCommand.CityDistricts); var flatForRentAnnouncementResponse = new FlatForRentAnnouncementResponse( flatForRentAnnouncementOutputQuery.Id, flatForRentAnnouncementOutputQuery.Title, flatForRentAnnouncementOutputQuery.SourceUrl, flatForRentAnnouncementOutputQuery.CityId, flatForRentAnnouncementOutputQuery.Created, flatForRentAnnouncementOutputQuery.Description, flatForRentAnnouncementOutputQuery.Price, FlatForRentAnnouncementProfile.ConvertToNumberOfRoomsEnum(flatForRentAnnouncementOutputQuery.NumberOfRooms), flatForRentAnnouncementOutputQuery.CityDistricts); _mapperMock .Setup(x => x.Map <UpdateFlatForRentAnnouncementRequest, UpdateFlatForRentAnnouncementCommand>(It.IsAny <UpdateFlatForRentAnnouncementRequest>())) .Returns(updateFlatForRentAnnouncementCommand); _communicationBusMock .Setup(x => x.SendCommandAsync(It.IsAny <UpdateFlatForRentAnnouncementCommand>(), It.IsAny <CancellationToken>())) .Returns(Task.CompletedTask); _getFlatForRentAnnouncementQueryHandlerMock .Setup(x => x.HandleAsync(It.IsAny <GetFlatForRentAnnouncementInputQuery>(), It.IsAny <CancellationToken>())) .ReturnsAsync(flatForRentAnnouncementOutputQuery); _mapperMock .Setup(x => x.Map <FlatForRentAnnouncementOutputQuery, FlatForRentAnnouncementResponse>(It.IsAny <FlatForRentAnnouncementOutputQuery>())) .Returns(flatForRentAnnouncementResponse); var result = await _controller.UpdateFlatForRentAnnouncementAsync(flatForRentAnnouncementId, updateFlatForRentAnnouncementRequest); var okObjectResult = result.As <OkObjectResult>(); okObjectResult.Value.Should().BeEquivalentTo(flatForRentAnnouncementResponse); }