public void Should_Create_RoomForRentAnnouncementPreference() { var roomForRentAnnouncementPreferenceId = Guid.NewGuid(); var cityId = Guid.NewGuid(); var cityDistricts = new List <Guid> { Guid.NewGuid() }; const decimal priceMin = 0; const decimal priceMax = 2000; var roomType = RoomTypeEnumeration.Single; var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(roomForRentAnnouncementPreferenceId) .SetCityId(cityId) .SetPriceMin(priceMin) .SetPriceMax(priceMax) .SetRoomType(roomType) .SetCityDistricts(cityDistricts) .Build(); roomForRentAnnouncementPreference.Id.Should().Be(roomForRentAnnouncementPreferenceId); roomForRentAnnouncementPreference.CityId.Should().Be(cityId); roomForRentAnnouncementPreference.PriceMin.Should().Be(priceMin); roomForRentAnnouncementPreference.PriceMax.Should().Be(priceMax); roomForRentAnnouncementPreference.RoomType.Should().Be(roomType); roomForRentAnnouncementPreference.CityDistricts.Should().BeEquivalentTo(cityDistricts); }
public void GetByByUserAndId_Should_Return_GetResult_Ok_With_RoomForRentAnnouncementPreference() { var id = Guid.NewGuid(); var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(id) .SetCityId(Guid.NewGuid()) .SetPriceMin(0) .SetPriceMax(1500) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(new List <Guid> { Guid.NewGuid() }) .Build(); var roomForRentAnnouncementPreferences = new List <RoomForRentAnnouncementPreference> { roomForRentAnnouncementPreference }; var user = User.Builder() .SetId(Guid.NewGuid()) .SetEmail("*****@*****.**") .SetServiceActive(DefaultUserSettings.ServiceActive) .SetAnnouncementPreferenceLimit(DefaultUserSettings.AnnouncementPreferenceLimit) .SetAnnouncementSendingFrequency(DefaultUserSettings.AnnouncementSendingFrequency) .SetRoomForRentAnnouncementPreferences(roomForRentAnnouncementPreferences) .Build(); var expectedResult = GetResult <RoomForRentAnnouncementPreference> .Ok(roomForRentAnnouncementPreference); var result = _service.GetByByUserAndId(user, id); result.Should().BeEquivalentTo(expectedResult); }
public void VerifyRoomForRentAnnouncementPreferences_Should_Return_Fail_VerificationResult_When_Prices_Can_Be_Changed() { var cityId = Guid.NewGuid(); var cityDistricts = new List <Guid> { Guid.NewGuid() }; var roomForRentAnnouncementPreferences = new List <RoomForRentAnnouncementPreference> { RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(cityId) .SetPriceMin(0) .SetPriceMax(1000) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(cityDistricts) .Build(), RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(cityId) .SetPriceMin(0) .SetPriceMax(1500) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(cityDistricts) .Build() }; var errors = new List <IError> { new Error(RoomForRentAnnouncementPreferenceErrorCode.ChangeablePrices, RoomForRentAnnouncementPreferenceErrorMessage.ChangeablePrices) }; var expectedResult = VerificationResult.Fail(errors); var result = _service.VerifyRoomForRentAnnouncementPreferences(roomForRentAnnouncementPreferences); result.Should().BeEquivalentTo(expectedResult); }
public async Task HandleAsync_Should_Throw_ValidationException_When_Flat_For_Rent_Announcement_Preferences_Verification_Fails() { var command = new CreateRoomForRentAnnouncementPreferenceCommand(Guid.NewGuid(), Guid.NewGuid(), 1, 1000, RoomTypeEnumeration.Single, new List <Guid> { Guid.NewGuid() }); var user = User.Builder() .SetId(command.UserId) .SetEmail("*****@*****.**") .SetServiceActive(DefaultUserSettings.ServiceActive) .SetAnnouncementPreferenceLimit(DefaultUserSettings.AnnouncementPreferenceLimit) .SetAnnouncementSendingFrequency(DefaultUserSettings.AnnouncementSendingFrequency) .Build(); var getUserResult = GetResult <User> .Ok(user); var cityAndCityDistrictsVerificationResult = VerificationResult.Ok(); var announcementPreferenceLimitIsNotExceededVerificationResult = VerificationResult.Ok(); var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(command.RoomForRentAnnouncementPreferenceId) .SetCityId(command.CityId) .SetPriceMin(command.PriceMin) .SetPriceMax(command.PriceMax) .SetRoomType(command.RoomType) .SetCityDistricts(command.CityDistricts) .Build(); var errors = new Collection <IError> { new Error(RoomForRentAnnouncementPreferenceErrorCode.ExpansibleCityDistricts, RoomForRentAnnouncementPreferenceErrorMessage.ExpansibleCityDistricts) }; var roomForRentAnnouncementPreferencesVerificationResult = VerificationResult.Fail(errors); _userGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>())).ReturnsAsync(getUserResult); _cityVerificationServiceMock .Setup(x => x.VerifyCityAndCityDistrictsAsync(It.IsAny <Guid>(), It.IsAny <IEnumerable <Guid> >())) .ReturnsAsync(cityAndCityDistrictsVerificationResult); _userVerificationServiceMock .Setup(x => x.VerifyAnnouncementPreferenceLimitIsNotExceeded(It.IsAny <int>(), It.IsAny <int>())) .Returns(announcementPreferenceLimitIsNotExceededVerificationResult); _mapperMock.Setup(x => x.Map <CreateRoomForRentAnnouncementPreferenceCommand, RoomForRentAnnouncementPreference>( It.IsAny <CreateRoomForRentAnnouncementPreferenceCommand>())) .Returns(roomForRentAnnouncementPreference); _roomForRentAnnouncementPreferenceVerificationServiceMock .Setup(x => x.VerifyRoomForRentAnnouncementPreferences( It.IsAny <IEnumerable <RoomForRentAnnouncementPreference> >())) .Returns(roomForRentAnnouncementPreferencesVerificationResult); Func <Task> result = async() => await _commandHandler.HandleAsync(command); var exceptionResult = await result.Should().ThrowExactlyAsync <ValidationException>(); exceptionResult.And.Errors.Should().BeEquivalentTo(errors); }
public async Task HandleAsync_Should_Create_Room_For_Rent_Announcement_Preference() { var command = new CreateRoomForRentAnnouncementPreferenceCommand(Guid.NewGuid(), Guid.NewGuid(), 1, 1000, RoomTypeEnumeration.Single, new List <Guid> { Guid.NewGuid() }); var user = User.Builder() .SetId(command.UserId) .SetEmail("*****@*****.**") .SetServiceActive(DefaultUserSettings.ServiceActive) .SetAnnouncementPreferenceLimit(DefaultUserSettings.AnnouncementPreferenceLimit) .SetAnnouncementSendingFrequency(DefaultUserSettings.AnnouncementSendingFrequency) .Build(); var getUserResult = GetResult <User> .Ok(user); var cityAndCityDistrictsVerificationResult = VerificationResult.Ok(); var announcementPreferenceLimitIsNotExceededVerificationResult = VerificationResult.Ok(); var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(command.RoomForRentAnnouncementPreferenceId) .SetCityId(command.CityId) .SetPriceMin(command.PriceMin) .SetPriceMax(command.PriceMax) .SetRoomType(command.RoomType) .SetCityDistricts(command.CityDistricts) .Build(); var roomForRentAnnouncementPreferencesVerificationResult = VerificationResult.Ok(); _userGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>())).ReturnsAsync(getUserResult); _cityVerificationServiceMock .Setup(x => x.VerifyCityAndCityDistrictsAsync(It.IsAny <Guid>(), It.IsAny <IEnumerable <Guid> >())) .ReturnsAsync(cityAndCityDistrictsVerificationResult); _userVerificationServiceMock .Setup(x => x.VerifyAnnouncementPreferenceLimitIsNotExceeded(It.IsAny <int>(), It.IsAny <int>())) .Returns(announcementPreferenceLimitIsNotExceededVerificationResult); _mapperMock.Setup(x => x.Map <CreateRoomForRentAnnouncementPreferenceCommand, RoomForRentAnnouncementPreference>( It.IsAny <CreateRoomForRentAnnouncementPreferenceCommand>())) .Returns(roomForRentAnnouncementPreference); _roomForRentAnnouncementPreferenceVerificationServiceMock .Setup(x => x.VerifyRoomForRentAnnouncementPreferences( It.IsAny <IEnumerable <RoomForRentAnnouncementPreference> >())) .Returns(roomForRentAnnouncementPreferencesVerificationResult); _communicationBusMock .Setup(x => x.DispatchDomainEventsAsync(It.IsAny <User>(), It.IsAny <CancellationToken>())) .Returns(Task.CompletedTask); _userRepositoryMock.Setup(x => x.UpdateAsync(It.IsAny <User>())).Returns(Task.CompletedTask); _integrationEventBusMock.Setup(x => x.PublishIntegrationEventAsync(It.IsAny <IIntegrationEvent>())) .Returns(Task.CompletedTask); Func <Task> result = async() => await _commandHandler.HandleAsync(command); await result.Should().NotThrowAsync <Exception>(); }
public RoomForRentAnnouncementPreferenceProfile() { CreateMap <AnnouncementPreferenceEntity, RoomForRentAnnouncementPreference>() .ConvertUsing(x => RoomForRentAnnouncementPreference.Builder() .SetId(x.Id) .SetCityId(x.CityId) .SetPriceMin(x.PriceMin) .SetPriceMax(x.PriceMax) .SetRoomType(x.RoomType.ConvertToEnumeration()) .SetCityDistricts(x.AnnouncementPreferenceCityDistricts.Select(acd => acd.CityDistrictId)) .Build()); }
public RoomForRentAnnouncementPreferenceProfile() { CreateMap <RoomForRentAnnouncementPreference, RoomForRentAnnouncementPreferenceOutputQuery>(); CreateMap <CreateRoomForRentAnnouncementPreferenceCommand, RoomForRentAnnouncementPreference>() .ForMember(x => x.CityDistricts, opt => opt.Ignore()) .ConstructUsing(x => RoomForRentAnnouncementPreference.Builder() .SetId(x.RoomForRentAnnouncementPreferenceId) .SetCityId(x.CityId) .SetPriceMin(x.PriceMin) .SetPriceMax(x.PriceMax) .SetRoomType(x.RoomType) .SetCityDistricts(x.CityDistricts) .Build()); }
public async Task HandleAsync_Should_Throw_ValidationException_When_City_And_City_Districts_Verification_Fails_For_The_Same_CityId() { var command = new UpdateRoomForRentAnnouncementPreferenceCommand(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid(), 1, 1500, RoomTypeEnumeration.Double, new List <Guid> { Guid.NewGuid() }); var user = User.Builder() .SetId(command.UserId) .SetEmail("*****@*****.**") .SetServiceActive(DefaultUserSettings.ServiceActive) .SetAnnouncementPreferenceLimit(DefaultUserSettings.AnnouncementPreferenceLimit) .SetAnnouncementSendingFrequency(DefaultUserSettings.AnnouncementSendingFrequency) .Build(); var getUserResult = GetResult <User> .Ok(user); var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(command.RoomForRentAnnouncementPreferenceId) .SetCityId(command.CityId) .SetPriceMin(1) .SetPriceMax(1000) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(new List <Guid> { Guid.NewGuid() }) .Build(); var getRoomForRentAnnouncementPreferenceResult = GetResult <RoomForRentAnnouncementPreference> .Ok(roomForRentAnnouncementPreference); var errors = new Collection <IError> { new Error(CityErrorCodeEnumeration.IncorrectCityDistricts, CityErrorMessage.IncorrectCityDistricts) }; var cityAndCityDistrictsVerificationResult = VerificationResult.Fail(errors); _userGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>())).ReturnsAsync(getUserResult); _roomForRentAnnouncementPreferenceGetterServiceMock .Setup(x => x.GetByByUserAndId(It.IsAny <User>(), It.IsAny <Guid>())) .Returns(getRoomForRentAnnouncementPreferenceResult); _cityVerificationServiceMock .Setup(x => x.VerifyCityAndCityDistrictsAsync(It.IsAny <Guid>(), It.IsAny <IEnumerable <Guid> >())) .ReturnsAsync(cityAndCityDistrictsVerificationResult); Func <Task> result = async() => await _commandHandler.HandleAsync(command); var exceptionResult = await result.Should().ThrowExactlyAsync <ValidationException>(); exceptionResult.And.Errors.Should().BeEquivalentTo(errors); }
public void ChangePriceMax_Should_Change_PriceMax() { var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(Guid.NewGuid()) .SetPriceMin(0) .SetPriceMax(2000) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(new List <Guid> { Guid.NewGuid() }) .Build(); roomForRentAnnouncementPreference.ChangePriceMax(null); roomForRentAnnouncementPreference.PriceMax.Should().BeNull(); }
public void Should_Throw_RoomForRentAnnouncementPreferenceCityDistrictsNullException_When_CityDistricts_Is_Null() { Action result = () => { var unused = RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(Guid.NewGuid()) .SetPriceMin(0) .SetPriceMax(1000) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(null) .Build(); }; result.Should().ThrowExactly <RoomForRentAnnouncementPreferenceCityDistrictsNullException>() .WithMessage("CityDistricts argument is required."); }
public void ChangeRoomType_Should_Change_RoomType() { var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(Guid.NewGuid()) .SetPriceMin(0) .SetPriceMax(2000) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(new List <Guid> { Guid.NewGuid() }) .Build(); var newRoomType = RoomTypeEnumeration.Double; roomForRentAnnouncementPreference.ChangeRoomType(newRoomType); roomForRentAnnouncementPreference.RoomType.Should().BeEquivalentTo(newRoomType); }
public void ChangePriceMax_Should_Throw_RoomForRentAnnouncementPreferencePriceMaxLowerThanPriceMinException_When_PriceMax_Is_Lower_Than_PriceMin() { var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(Guid.NewGuid()) .SetPriceMin(1000) .SetPriceMax(2000) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(new List <Guid> { Guid.NewGuid() }) .Build(); Action result = () => roomForRentAnnouncementPreference.ChangePriceMax(0); result.Should().ThrowExactly <RoomForRentAnnouncementPreferencePriceMaxLowerThanPriceMinException>() .WithMessage("PriceMax argument cannot be lower than PriceMin."); }
public void ChangePriceMax_Should_Throw_RoomForRentAnnouncementPreferencePriceMaxMinValueException_When_PriceMax_Is_Negative_Value() { var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(Guid.NewGuid()) .SetPriceMin(0) .SetPriceMax(2000) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(new List <Guid> { Guid.NewGuid() }) .Build(); Action result = () => roomForRentAnnouncementPreference.ChangePriceMax(-1); result.Should().ThrowExactly <RoomForRentAnnouncementPreferencePriceMaxMinValueException>() .WithMessage("PriceMax argument min value is 0."); }
public void ChangeCityId_Should_Throw_RoomForRentAnnouncementPreferenceCityIdNullException_When_CityId_Is_New_Guid() { var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(Guid.NewGuid()) .SetPriceMin(0) .SetPriceMax(2000) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(new List <Guid> { Guid.NewGuid() }) .Build(); Action result = () => roomForRentAnnouncementPreference.ChangeCityId(new Guid()); result.Should().ThrowExactly <RoomForRentAnnouncementPreferenceCityIdNullException>() .WithMessage("CityId argument is required."); }
public void Should_Throw_RoomForRentAnnouncementPreferenceIdNullException_When_Id_Is_Empty_Guid() { Action result = () => { var unused = RoomForRentAnnouncementPreference.Builder() .SetId(Guid.Empty) .SetCityId(Guid.NewGuid()) .SetPriceMin(0) .SetPriceMax(2000) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(new List <Guid> { Guid.NewGuid() }) .Build(); }; result.Should().ThrowExactly <RoomForRentAnnouncementPreferenceIdNullException>() .WithMessage("Id argument is required."); }
public void Should_Throw_RoomForRentAnnouncementPreferenceCityDistrictsDuplicateValuesException_When_CityDistricts_Contains_Duplicates() { var cityDistrict = Guid.NewGuid(); Action result = () => { var unused = RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(Guid.NewGuid()) .SetPriceMin(0) .SetPriceMax(1000) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(new List <Guid> { cityDistrict, cityDistrict }) .Build(); }; result.Should().ThrowExactly <RoomForRentAnnouncementPreferenceCityDistrictsDuplicateValuesException>() .WithMessage("CityDistricts argument contains duplicate values."); }
public void VerifyRoomForRentAnnouncementPreferences_Should_Return_Success_VerificationResult() { var cityId = Guid.NewGuid(); var cityDistricts = new List <Guid> { Guid.NewGuid() }; var roomForRentAnnouncementPreferences = new List <RoomForRentAnnouncementPreference> { RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(cityId) .SetPriceMin(0) .SetPriceMax(1000) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(cityDistricts) .Build(), RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(cityId) .SetPriceMin(0) .SetPriceMax(1000) .SetRoomType(RoomTypeEnumeration.Double) .SetCityDistricts(cityDistricts) .Build(), RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(Guid.NewGuid()) .SetPriceMin(0) .SetPriceMax(1000) .SetRoomType(RoomTypeEnumeration.Double) .SetCityDistricts(new List <Guid> { Guid.NewGuid() }) .Build() }; var expectedResult = VerificationResult.Ok(); var result = _service.VerifyRoomForRentAnnouncementPreferences(roomForRentAnnouncementPreferences); result.Should().BeEquivalentTo(expectedResult); }
public async Task HandleAsync_Should_Return_RoomForRentAnnouncementPreferenceOutputQuery() { var inputQuery = new GetRoomForRentAnnouncementPreferenceInputQuery(Guid.NewGuid(), Guid.NewGuid()); var user = User.Builder() .SetId(inputQuery.UserId) .SetEmail("*****@*****.**") .SetServiceActive(DefaultUserSettings.ServiceActive) .SetAnnouncementPreferenceLimit(DefaultUserSettings.AnnouncementPreferenceLimit) .SetAnnouncementSendingFrequency(DefaultUserSettings.AnnouncementSendingFrequency) .Build(); var getUserResult = GetResult <User> .Ok(user); var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(inputQuery.RoomForRentAnnouncementPreferenceId) .SetCityId(Guid.NewGuid()) .SetPriceMin(1) .SetPriceMax(1000) .SetRoomType(RoomTypeEnumeration.Single) .Build(); var getRoomForRentAnnouncementPreferenceResult = GetResult <RoomForRentAnnouncementPreference> .Ok(roomForRentAnnouncementPreference); var expectedResult = new RoomForRentAnnouncementPreferenceOutputQuery(roomForRentAnnouncementPreference.Id, roomForRentAnnouncementPreference.CityId, roomForRentAnnouncementPreference.PriceMin, roomForRentAnnouncementPreference.PriceMax, roomForRentAnnouncementPreference.RoomType, roomForRentAnnouncementPreference.CityDistricts); _userGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>())).ReturnsAsync(getUserResult); _roomForRentAnnouncementPreferenceGetterServiceMock .Setup(x => x.GetByByUserAndId(It.IsAny <User>(), It.IsAny <Guid>())) .Returns(getRoomForRentAnnouncementPreferenceResult); _mapperMock.Setup(x => x.Map <RoomForRentAnnouncementPreference, RoomForRentAnnouncementPreferenceOutputQuery>( It.IsAny <RoomForRentAnnouncementPreference>())) .Returns(expectedResult); var result = await _queryHandler.HandleAsync(inputQuery); result.Should().BeEquivalentTo(expectedResult); }
private User CreateUser(string email) { var cityId = Guid.NewGuid(); var cityDistricts = new List <Guid> { Guid.NewGuid() }; var flatForRentAnnouncementPreferences = new List <FlatForRentAnnouncementPreference> { FlatForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(cityId) .SetPriceMin(0) .SetPriceMax(2000) .SetRoomNumbersMin(1) .SetRoomNumbersMax(2) .SetCityDistricts(cityDistricts) .Build() }; var roomForRentAnnouncementPreferences = new List <RoomForRentAnnouncementPreference> { RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(cityId) .SetPriceMin(0) .SetPriceMax(2000) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(cityDistricts) .Build() }; return(User.Builder() .SetId(Guid.NewGuid()) .SetEmail(email) .SetServiceActive(DefaultUserSettings.ServiceActive) .SetAnnouncementPreferenceLimit(DefaultUserSettings.AnnouncementPreferenceLimit) .SetAnnouncementSendingFrequency(DefaultUserSettings.AnnouncementSendingFrequency) .SetFlatForRentAnnouncementPreferences(flatForRentAnnouncementPreferences) .SetRoomForRentAnnouncementPreferences(roomForRentAnnouncementPreferences) .Build()); }
public async Task HandleAsync_Should_Delete_Room_For_Rent_Announcement_Preference() { var command = new DeleteRoomForRentAnnouncementPreferenceCommand(Guid.NewGuid(), Guid.NewGuid()); var user = User.Builder() .SetId(command.UserId) .SetEmail("*****@*****.**") .SetServiceActive(DefaultUserSettings.ServiceActive) .SetAnnouncementPreferenceLimit(DefaultUserSettings.AnnouncementPreferenceLimit) .SetAnnouncementSendingFrequency(DefaultUserSettings.AnnouncementSendingFrequency) .Build(); var getUserResult = GetResult <User> .Ok(user); var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(command.RoomForRentAnnouncementPreferenceId) .SetCityId(Guid.NewGuid()) .SetPriceMin(1) .SetPriceMax(1000) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(new List <Guid> { Guid.NewGuid() }) .Build(); var getRoomForRentAnnouncementPreferenceResult = GetResult <RoomForRentAnnouncementPreference> .Ok(roomForRentAnnouncementPreference); _userGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>())).ReturnsAsync(getUserResult); _roomForRentAnnouncementPreferenceGetterServiceMock .Setup(x => x.GetByByUserAndId(It.IsAny <User>(), It.IsAny <Guid>())) .Returns(getRoomForRentAnnouncementPreferenceResult); _communicationBusMock .Setup(x => x.DispatchDomainEventsAsync(It.IsAny <User>(), It.IsAny <CancellationToken>())) .Returns(Task.CompletedTask); _userRepositoryMock.Setup(x => x.UpdateAsync(It.IsAny <User>())).Returns(Task.CompletedTask); _integrationEventBusMock.Setup(x => x.PublishIntegrationEventAsync(It.IsAny <IIntegrationEvent>())) .Returns(Task.CompletedTask); Func <Task> result = async() => await _commandHandler.HandleAsync(command); await result.Should().NotThrowAsync <Exception>(); }
public async Task HandleAsync_Should_Store_DomainEvent() { var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(Guid.NewGuid()) .SetPriceMin(1) .SetPriceMax(1000) .SetRoomType(RoomTypeEnumeration.Single) .Build(); var domainEvent = new UserRoomForRentAnnouncementPreferenceDeletedDomainEvent(Guid.NewGuid(), Guid.NewGuid(), roomForRentAnnouncementPreference); _domainEventStoreMock.Setup(x => x.Store(It.IsAny <IDomainEvent>())).Verifiable(); Func <Task> result = async() => await _domainEventHandler.HandleAsync(domainEvent); await result.Should().NotThrowAsync <Exception>(); _domainEventStoreMock.Verify(x => x.Store(It.Is <IDomainEvent>(e => e.GetType() == typeof(UserRoomForRentAnnouncementPreferenceDeletedDomainEvent)))); }
public void Should_Create_RoomForRentAnnouncementPreference_With_Null_Values() { var roomForRentAnnouncementPreferenceId = Guid.NewGuid(); var cityId = Guid.NewGuid(); var cityDistricts = new List <Guid> { Guid.NewGuid() }; var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(roomForRentAnnouncementPreferenceId) .SetCityId(cityId) .SetPriceMin(null) .SetPriceMax(null) .SetRoomType(null) .SetCityDistricts(cityDistricts) .Build(); roomForRentAnnouncementPreference.Id.Should().Be(roomForRentAnnouncementPreferenceId); roomForRentAnnouncementPreference.CityId.Should().Be(cityId); roomForRentAnnouncementPreference.PriceMin.Should().BeNull(); roomForRentAnnouncementPreference.PriceMax.Should().BeNull(); roomForRentAnnouncementPreference.RoomType.Should().BeNull(); roomForRentAnnouncementPreference.CityDistricts.Should().BeEquivalentTo(cityDistricts); }
private static User MapUserEntityToUser(UserEntity userEntity) { var flatForRentAnnouncementPreferenceEntities = userEntity.AnnouncementPreferences.Where(a => a.AnnouncementPreferenceType == AnnouncementPreferenceType.FlatForRentAnnouncementPreference); var flatForRentAnnouncementPreferences = flatForRentAnnouncementPreferenceEntities.Select(f => FlatForRentAnnouncementPreference.Builder() .SetId(f.Id) .SetCityId(f.CityId) .SetPriceMin(f.PriceMin) .SetPriceMax(f.PriceMax) .SetRoomNumbersMin(f.RoomNumbersMin) .SetRoomNumbersMax(f.RoomNumbersMax) .SetCityDistricts(f.AnnouncementPreferenceCityDistricts.Select(a => a.CityDistrictId)) .Build() ); var roomForRentAnnouncementPreferenceEntities = userEntity.AnnouncementPreferences.Where(a => a.AnnouncementPreferenceType == AnnouncementPreferenceType.RoomForRentAnnouncementPreference); var roomForRentAnnouncementPreferences = roomForRentAnnouncementPreferenceEntities.Select(r => RoomForRentAnnouncementPreference.Builder() .SetId(r.Id) .SetCityId(r.CityId) .SetPriceMin(r.PriceMin) .SetPriceMax(r.PriceMax) .SetRoomType(r.RoomType.ConvertToEnumeration()) .SetCityDistricts(r.AnnouncementPreferenceCityDistricts.Select(a => a.CityDistrictId)) .Build() ); return(User.Builder() .SetId(userEntity.Id) .SetEmail(userEntity.Email) .SetServiceActive(userEntity.ServiceActive) .SetAnnouncementPreferenceLimit(userEntity.AnnouncementPreferenceLimit) .SetAnnouncementSendingFrequency(userEntity.AnnouncementSendingFrequency.ConvertToEnumeration()) .SetFlatForRentAnnouncementPreferences(flatForRentAnnouncementPreferences) .SetRoomForRentAnnouncementPreferences(roomForRentAnnouncementPreferences) .Build()); }
public async Task UpdateAsync_Should_Update_User() { var user = _fixture.InsertUser("*****@*****.**"); var correlationId = Guid.NewGuid(); user.ChangeServiceActive(!user.ServiceActive, correlationId); user.ChangeAnnouncementPreferenceLimit(10, correlationId); user.ChangeAnnouncementSendingFrequency(AnnouncementSendingFrequencyEnumeration.EveryHour, correlationId); var flatForRentAnnouncementPreferenceToUpdate = user.FlatForRentAnnouncementPreferences.First(); flatForRentAnnouncementPreferenceToUpdate.ChangeCityId(Guid.NewGuid()); flatForRentAnnouncementPreferenceToUpdate.ChangePriceMin(1000); flatForRentAnnouncementPreferenceToUpdate.ChangePriceMax(3000); flatForRentAnnouncementPreferenceToUpdate.ChangeRoomNumbersMin(2); flatForRentAnnouncementPreferenceToUpdate.ChangeRoomNumbersMax(3); flatForRentAnnouncementPreferenceToUpdate.ChangeCityDistricts(new List <Guid> { Guid.NewGuid() }); var roomForRentAnnouncementPreferenceToUpdate = user.RoomForRentAnnouncementPreferences.First(); roomForRentAnnouncementPreferenceToUpdate.ChangeCityId(Guid.NewGuid()); roomForRentAnnouncementPreferenceToUpdate.ChangePriceMin(1000); roomForRentAnnouncementPreferenceToUpdate.ChangePriceMax(3000); roomForRentAnnouncementPreferenceToUpdate.ChangeRoomType(RoomTypeEnumeration.Double); roomForRentAnnouncementPreferenceToUpdate.ChangeCityDistricts(new List <Guid> { Guid.NewGuid() }); var newFlatForRentAnnouncementPreference = FlatForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(Guid.NewGuid()) .SetPriceMin(0) .SetPriceMax(2000) .SetRoomNumbersMin(1) .SetRoomNumbersMax(2) .SetCityDistricts(new List <Guid> { Guid.NewGuid() }) .Build(); user.AddFlatForRentAnnouncementPreference(newFlatForRentAnnouncementPreference, correlationId); var newRoomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder() .SetId(Guid.NewGuid()) .SetCityId(Guid.NewGuid()) .SetPriceMin(0) .SetPriceMax(2000) .SetRoomType(RoomTypeEnumeration.Single) .SetCityDistricts(new List <Guid> { Guid.NewGuid() }) .Build(); user.AddRoomForRentAnnouncementPreference(newRoomForRentAnnouncementPreference, correlationId); Func <Task> result = async() => await _repository.UpdateAsync(user); await result.Should().NotThrowAsync <Exception>(); var updatedUserEntity = await _context.Users.Include(x => x.AnnouncementPreferences) .SingleAsync(x => x.Id == user.Id); var updatedUser = MapUserEntityToUser(updatedUserEntity); updatedUser.AddEvents(user.DomainEvents); updatedUser.Should().BeEquivalentTo(user); }