示例#1
0
        private static void ProcessFlatForRentAnnouncementPreference(FlatForRentAnnouncementPreference flatForRentAnnouncementPreference,
                                                                     FlatForRentAnnouncementsIntegrationEvent integrationEvent, HashSet <Guid> processedAnnouncementPreferenceIds)
        {
            lock (processedAnnouncementPreferenceIds)
            {
                if (!processedAnnouncementPreferenceIds.Add(flatForRentAnnouncementPreference.Id))
                {
                    return;
                }
            }

            foreach (var flatForRentAnnouncement in integrationEvent.FlatForRentAnnouncements)
            {
                var numberOfRooms = flatForRentAnnouncement.NumberOfRooms.ConvertToInt();

                if (flatForRentAnnouncementPreference.RoomNumbersMin.HasValue && numberOfRooms.HasValue)
                {
                    if (NumberOfRoomsMinMatches(numberOfRooms.Value, flatForRentAnnouncementPreference.RoomNumbersMin.Value))
                    {
                        ProcessFlatForRentAnnouncementPreferenceForNumberOfRoomsMax(flatForRentAnnouncement, flatForRentAnnouncementPreference, numberOfRooms);
                    }
                }
                else
                {
                    ProcessFlatForRentAnnouncementPreferenceForNumberOfRoomsMax(flatForRentAnnouncement, flatForRentAnnouncementPreference, numberOfRooms);
                }
            }
        }
示例#2
0
        public async Task GetByIdAsync_Should_Return_GetResult_Ok_With_User()
        {
            var id = Guid.NewGuid();
            var flatForRentAnnouncementPreferences = new List <FlatForRentAnnouncementPreference>
            {
                FlatForRentAnnouncementPreference.Builder()
                .SetId(Guid.NewGuid())
                .SetCityId(Guid.NewGuid())
                .SetPriceMin(0)
                .SetPriceMax(3000)
                .SetRoomNumbersMin(1)
                .SetRoomNumbersMax(3)
                .SetCityDistricts(new List <Guid> {
                    Guid.NewGuid()
                })
                .Build()
            };
            var user = User.Builder()
                       .SetId(id)
                       .SetEmail("*****@*****.**")
                       .SetServiceActive(DefaultUserSettings.ServiceActive)
                       .SetAnnouncementPreferenceLimit(DefaultUserSettings.AnnouncementPreferenceLimit)
                       .SetAnnouncementSendingFrequency(DefaultUserSettings.AnnouncementSendingFrequency)
                       .SetFlatForRentAnnouncementPreferences(flatForRentAnnouncementPreferences)
                       .Build();
            var expectedResult = GetResult <User> .Ok(user);

            _userRepositoryMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>()))
            .ReturnsAsync(user);

            var result = await _service.GetByIdAsync(id);

            result.Should().BeEquivalentTo(expectedResult);
        }
示例#3
0
        public void GetByByUserAndId_Should_Return_GetResult_Ok_With_FlatForRentAnnouncementPreference()
        {
            var id = Guid.NewGuid();
            var flatForRentAnnouncementPreference = FlatForRentAnnouncementPreference.Builder()
                                                    .SetId(id)
                                                    .SetCityId(Guid.NewGuid())
                                                    .SetPriceMin(0)
                                                    .SetPriceMax(3000)
                                                    .SetRoomNumbersMin(1)
                                                    .SetRoomNumbersMax(3)
                                                    .SetCityDistricts(new List <Guid> {
                Guid.NewGuid()
            })
                                                    .Build();
            var flatForRentAnnouncementPreferences = new List <FlatForRentAnnouncementPreference> {
                flatForRentAnnouncementPreference
            };
            var user = User.Builder()
                       .SetId(Guid.NewGuid())
                       .SetEmail("*****@*****.**")
                       .SetServiceActive(DefaultUserSettings.ServiceActive)
                       .SetAnnouncementPreferenceLimit(DefaultUserSettings.AnnouncementPreferenceLimit)
                       .SetAnnouncementSendingFrequency(DefaultUserSettings.AnnouncementSendingFrequency)
                       .SetFlatForRentAnnouncementPreferences(flatForRentAnnouncementPreferences)
                       .Build();
            var expectedResult = GetResult <FlatForRentAnnouncementPreference> .Ok(flatForRentAnnouncementPreference);

            var result = _service.GetByByUserAndId(user, id);

            result.Should().BeEquivalentTo(expectedResult);
        }
示例#4
0
        public void Should_Create_FlatForRentAnnouncementPreference_With_Null_Values()
        {
            var flatForRentAnnouncementPreferenceId = Guid.NewGuid();
            var cityId        = Guid.NewGuid();
            var cityDistricts = new List <Guid> {
                Guid.NewGuid()
            };
            var flatForRentAnnouncementPreference = FlatForRentAnnouncementPreference.Builder()
                                                    .SetId(flatForRentAnnouncementPreferenceId)
                                                    .SetCityId(cityId)
                                                    .SetPriceMin(null)
                                                    .SetPriceMax(null)
                                                    .SetRoomNumbersMin(null)
                                                    .SetRoomNumbersMax(null)
                                                    .SetCityDistricts(cityDistricts)
                                                    .Build();

            flatForRentAnnouncementPreference.Id.Should().Be(flatForRentAnnouncementPreferenceId);
            flatForRentAnnouncementPreference.CityId.Should().Be(cityId);
            flatForRentAnnouncementPreference.PriceMin.Should().BeNull();
            flatForRentAnnouncementPreference.PriceMax.Should().BeNull();
            flatForRentAnnouncementPreference.RoomNumbersMin.Should().BeNull();
            flatForRentAnnouncementPreference.RoomNumbersMax.Should().BeNull();
            flatForRentAnnouncementPreference.CityDistricts.Should().BeEquivalentTo(cityDistricts);
        }
示例#5
0
        public void Should_Create_FlatForRentAnnouncementPreference()
        {
            var flatForRentAnnouncementPreferenceId = Guid.NewGuid();
            var cityId        = Guid.NewGuid();
            var cityDistricts = new List <Guid> {
                Guid.NewGuid()
            };
            const decimal priceMin      = 0;
            const decimal priceMax      = 2000;
            const int     roomNumberMin = 1;
            const int     roomNumberMax = 2;
            var           flatForRentAnnouncementPreference = FlatForRentAnnouncementPreference.Builder()
                                                              .SetId(flatForRentAnnouncementPreferenceId)
                                                              .SetCityId(cityId)
                                                              .SetPriceMin(priceMin)
                                                              .SetPriceMax(priceMax)
                                                              .SetRoomNumbersMin(roomNumberMin)
                                                              .SetRoomNumbersMax(roomNumberMax)
                                                              .SetCityDistricts(cityDistricts)
                                                              .Build();

            flatForRentAnnouncementPreference.Id.Should().Be(flatForRentAnnouncementPreferenceId);
            flatForRentAnnouncementPreference.CityId.Should().Be(cityId);
            flatForRentAnnouncementPreference.PriceMin.Should().Be(priceMin);
            flatForRentAnnouncementPreference.PriceMax.Should().Be(priceMax);
            flatForRentAnnouncementPreference.RoomNumbersMin.Should().Be(roomNumberMin);
            flatForRentAnnouncementPreference.RoomNumbersMax.Should().Be(roomNumberMax);
            flatForRentAnnouncementPreference.CityDistricts.Should().BeEquivalentTo(cityDistricts);
        }
示例#6
0
 public void AddFlatForRentAnnouncementPreference(FlatForRentAnnouncementPreference flatForRentAnnouncementPreference, Guid correlationId)
 {
     _flatForRentAnnouncementPreferences.Add(flatForRentAnnouncementPreference);
     _flatForRentAnnouncementPreferences = new UserFlatForRentAnnouncementPreferences(_flatForRentAnnouncementPreferences, _roomForRentAnnouncementPreferences.Count,
                                                                                      AnnouncementPreferenceLimit);
     AddEvent(new UserFlatForRentAnnouncementPreferenceAddedDomainEvent(Id, correlationId, flatForRentAnnouncementPreference));
 }
示例#7
0
        private async Task UpdateCityAndCityDistrictsAsync(FlatForRentAnnouncementPreference flatForRentAnnouncementPreference, Guid cityId, ICollection <Guid> cityDistricts)
        {
            if (flatForRentAnnouncementPreference.CityId != cityId)
            {
                var cityAndCityDistrictsVerificationResult = await _cityVerificationService.VerifyCityAndCityDistrictsAsync(cityId, cityDistricts);

                if (!cityAndCityDistrictsVerificationResult.Success)
                {
                    throw new ValidationException(cityAndCityDistrictsVerificationResult.Errors);
                }

                flatForRentAnnouncementPreference.ChangeCityId(cityId);
                flatForRentAnnouncementPreference.ChangeCityDistricts(cityDistricts);
            }
            else
            {
                var sameCityDistricts = flatForRentAnnouncementPreference.CityDistricts.All(cityDistricts.Contains) &&
                                        flatForRentAnnouncementPreference.CityDistricts.Count == cityDistricts.Count;
                if (!sameCityDistricts)
                {
                    var cityAndCityDistrictsVerificationResult = await _cityVerificationService.VerifyCityAndCityDistrictsAsync(cityId, cityDistricts);

                    if (!cityAndCityDistrictsVerificationResult.Success)
                    {
                        throw new ValidationException(cityAndCityDistrictsVerificationResult.Errors);
                    }

                    flatForRentAnnouncementPreference.ChangeCityDistricts(cityDistricts);
                }
            }
        }
示例#8
0
 private static void UpdateFlatForRentAnnouncementPreferenceEntity(AnnouncementPreferenceEntity announcementPreferenceEntity,
                                                                   FlatForRentAnnouncementPreference flatForRentAnnouncementPreference)
 {
     announcementPreferenceEntity.CityId         = flatForRentAnnouncementPreference.CityId;
     announcementPreferenceEntity.PriceMin       = flatForRentAnnouncementPreference.PriceMin;
     announcementPreferenceEntity.PriceMax       = flatForRentAnnouncementPreference.PriceMax;
     announcementPreferenceEntity.RoomNumbersMin = flatForRentAnnouncementPreference.RoomNumbersMin;
     announcementPreferenceEntity.RoomNumbersMax = flatForRentAnnouncementPreference.RoomNumbersMax;
 }
示例#9
0
        public async Task HandleAsync_Should_Throw_ValidationException_When_Flat_For_Rent_Announcement_Preferences_Verification_Fails()
        {
            var command = new CreateFlatForRentAnnouncementPreferenceCommand(Guid.NewGuid(), Guid.NewGuid(), 1, 1000, 1,
                                                                             1, 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 flatForRentAnnouncementPreference = FlatForRentAnnouncementPreference.Builder()
                                                    .SetId(command.FlatForRentAnnouncementPreferenceId)
                                                    .SetCityId(command.CityId)
                                                    .SetPriceMin(command.PriceMin)
                                                    .SetPriceMax(command.PriceMax)
                                                    .SetRoomNumbersMin(command.RoomNumbersMin)
                                                    .SetRoomNumbersMax(command.RoomNumbersMax)
                                                    .SetCityDistricts(command.CityDistricts)
                                                    .Build();
            var errors = new Collection <IError>
            {
                new Error(FlatForRentAnnouncementPreferenceErrorCode.ExpansibleCityDistricts,
                          FlatForRentAnnouncementPreferenceErrorMessage.ExpansibleCityDistricts)
            };
            var flatForRentAnnouncementPreferencesVerificationResult = 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 <CreateFlatForRentAnnouncementPreferenceCommand, FlatForRentAnnouncementPreference>(
                                  It.IsAny <CreateFlatForRentAnnouncementPreferenceCommand>()))
            .Returns(flatForRentAnnouncementPreference);
            _flatForRentAnnouncementPreferenceVerificationServiceMock
            .Setup(x => x.VerifyFlatForRentAnnouncementPreferences(
                       It.IsAny <IEnumerable <FlatForRentAnnouncementPreference> >()))
            .Returns(flatForRentAnnouncementPreferencesVerificationResult);

            Func <Task> result = async() => await _commandHandler.HandleAsync(command);

            var exceptionResult = await result.Should().ThrowExactlyAsync <ValidationException>();

            exceptionResult.And.Errors.Should().BeEquivalentTo(errors);
        }
示例#10
0
        public async Task HandleAsync_Should_Create_Flat_For_Rent_Announcement_Preference()
        {
            var command = new CreateFlatForRentAnnouncementPreferenceCommand(Guid.NewGuid(), Guid.NewGuid(), 1, 1000, 1,
                                                                             1, 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 flatForRentAnnouncementPreference = FlatForRentAnnouncementPreference.Builder()
                                                    .SetId(command.FlatForRentAnnouncementPreferenceId)
                                                    .SetCityId(command.CityId)
                                                    .SetPriceMin(command.PriceMin)
                                                    .SetPriceMax(command.PriceMax)
                                                    .SetRoomNumbersMin(command.RoomNumbersMin)
                                                    .SetRoomNumbersMax(command.RoomNumbersMax)
                                                    .SetCityDistricts(command.CityDistricts)
                                                    .Build();
            var flatForRentAnnouncementPreferencesVerificationResult = 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 <CreateFlatForRentAnnouncementPreferenceCommand, FlatForRentAnnouncementPreference>(
                                  It.IsAny <CreateFlatForRentAnnouncementPreferenceCommand>()))
            .Returns(flatForRentAnnouncementPreference);
            _flatForRentAnnouncementPreferenceVerificationServiceMock
            .Setup(x => x.VerifyFlatForRentAnnouncementPreferences(
                       It.IsAny <IEnumerable <FlatForRentAnnouncementPreference> >()))
            .Returns(flatForRentAnnouncementPreferencesVerificationResult);
            _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>();
        }
示例#11
0
 public FlatForRentAnnouncementPreferenceProfile()
 {
     CreateMap <AnnouncementPreferenceEntity, FlatForRentAnnouncementPreference>()
     .ConvertUsing(x => FlatForRentAnnouncementPreference.Builder()
                   .SetId(x.Id)
                   .SetCityId(x.CityId)
                   .SetPriceMin(x.PriceMin)
                   .SetPriceMax(x.PriceMax)
                   .SetRoomNumbersMin(x.RoomNumbersMin)
                   .SetRoomNumbersMax(x.RoomNumbersMax)
                   .SetCityDistricts(x.AnnouncementPreferenceCityDistricts.Select(acd => acd.CityDistrictId))
                   .Build());
 }
示例#12
0
        public async Task HandleAsync_Should_Throw_ValidationException_When_City_And_City_Districts_Verification_Fails_For_The_Same_CityId()
        {
            var command = new UpdateFlatForRentAnnouncementPreferenceCommand(Guid.NewGuid(), Guid.NewGuid(),
                                                                             Guid.NewGuid(), 1, 3000, 1, 3, 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 flatForRentAnnouncementPreference = FlatForRentAnnouncementPreference.Builder()
                                                    .SetId(command.FlatForRentAnnouncementPreferenceId)
                                                    .SetCityId(command.CityId)
                                                    .SetPriceMin(1)
                                                    .SetPriceMax(1000)
                                                    .SetRoomNumbersMin(1)
                                                    .SetRoomNumbersMax(1)
                                                    .SetCityDistricts(new List <Guid> {
                Guid.NewGuid()
            })
                                                    .Build();
            var getFlatForRentAnnouncementPreferenceResult =
                GetResult <FlatForRentAnnouncementPreference> .Ok(flatForRentAnnouncementPreference);

            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);
            _flatForRentAnnouncementPreferenceGetterServiceMock
            .Setup(x => x.GetByByUserAndId(It.IsAny <User>(), It.IsAny <Guid>()))
            .Returns(getFlatForRentAnnouncementPreferenceResult);
            _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);
        }
示例#13
0
 private static void ProcessFlatForRentAnnouncementPreferenceForPriceMin(FlatForRentAnnouncement flatForRentAnnouncement,
                                                                         FlatForRentAnnouncementPreference flatForRentAnnouncementPreference)
 {
     if (flatForRentAnnouncementPreference.PriceMin.HasValue && flatForRentAnnouncement.Price.HasValue)
     {
         if (PriceMinMatches(flatForRentAnnouncement.Price.Value, flatForRentAnnouncementPreference.PriceMin.Value))
         {
             ProcessFlatForRentAnnouncementPreferenceForPriceMax(flatForRentAnnouncement, flatForRentAnnouncementPreference);
         }
     }
     else
     {
         ProcessFlatForRentAnnouncementPreferenceForPriceMax(flatForRentAnnouncement, flatForRentAnnouncementPreference);
     }
 }
示例#14
0
        public FlatForRentAnnouncementPreferenceProfile()
        {
            CreateMap <FlatForRentAnnouncementPreference, FlatForRentAnnouncementPreferenceOutputQuery>();

            CreateMap <CreateFlatForRentAnnouncementPreferenceCommand, FlatForRentAnnouncementPreference>()
            .ForMember(x => x.CityDistricts, opt => opt.Ignore())
            .ConstructUsing(x => FlatForRentAnnouncementPreference.Builder()
                            .SetId(x.FlatForRentAnnouncementPreferenceId)
                            .SetCityId(x.CityId)
                            .SetPriceMin(x.PriceMin)
                            .SetPriceMax(x.PriceMax)
                            .SetRoomNumbersMin(x.RoomNumbersMin)
                            .SetRoomNumbersMax(x.RoomNumbersMax)
                            .SetCityDistricts(x.CityDistricts)
                            .Build());
        }
示例#15
0
        public void Should_Throw_FlatForRentAnnouncementPreferenceCityDistrictsNullException_When_CityDistricts_Is_Null()
        {
            Action result = () =>
            {
                var unused = FlatForRentAnnouncementPreference.Builder()
                             .SetId(Guid.NewGuid())
                             .SetCityId(Guid.NewGuid())
                             .SetPriceMin(0)
                             .SetPriceMax(1000)
                             .SetRoomNumbersMin(1)
                             .SetRoomNumbersMax(1)
                             .SetCityDistricts(null)
                             .Build();
            };

            result.Should().ThrowExactly <FlatForRentAnnouncementPreferenceCityDistrictsNullException>()
            .WithMessage("CityDistricts argument is required.");
        }
示例#16
0
        public void ChangeRoomNumbersMax_Should_Change_RoomNumbersMax()
        {
            var flatForRentAnnouncementPreference = FlatForRentAnnouncementPreference.Builder()
                                                    .SetId(Guid.NewGuid())
                                                    .SetCityId(Guid.NewGuid())
                                                    .SetPriceMin(0)
                                                    .SetPriceMax(2000)
                                                    .SetRoomNumbersMin(1)
                                                    .SetRoomNumbersMax(1)
                                                    .SetCityDistricts(new List <Guid> {
                Guid.NewGuid()
            })
                                                    .Build();

            flatForRentAnnouncementPreference.ChangeRoomNumbersMax(null);

            flatForRentAnnouncementPreference.RoomNumbersMax.Should().BeNull();
        }
示例#17
0
        public void VerifyFlatForRentAnnouncementPreferences_Should_Return_Success_VerificationResult()
        {
            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(1000)
                .SetRoomNumbersMin(1)
                .SetRoomNumbersMax(1)
                .SetCityDistricts(cityDistricts)
                .Build(),
                FlatForRentAnnouncementPreference.Builder()
                .SetId(Guid.NewGuid())
                .SetCityId(cityId)
                .SetPriceMin(0)
                .SetPriceMax(2000)
                .SetRoomNumbersMin(1)
                .SetRoomNumbersMax(2)
                .SetCityDistricts(cityDistricts)
                .Build(),
                FlatForRentAnnouncementPreference.Builder()
                .SetId(Guid.NewGuid())
                .SetCityId(Guid.NewGuid())
                .SetPriceMin(0)
                .SetPriceMax(2000)
                .SetRoomNumbersMin(1)
                .SetRoomNumbersMax(2)
                .SetCityDistricts(new List <Guid> {
                    Guid.NewGuid()
                })
                .Build()
            };
            var expectedResult = VerificationResult.Ok();

            var result = _service.VerifyFlatForRentAnnouncementPreferences(flatForRentAnnouncementPreferences);

            result.Should().BeEquivalentTo(expectedResult);
        }
示例#18
0
        public void ChangeRoomNumbersMax_Should_Throw_FlatForRentAnnouncementPreferenceRoomNumbersMaxLowerThanRoomNumbersMinException_When_RoomNumbersMax_Is_Lower_Than_RoomNumbersMin()
        {
            var flatForRentAnnouncementPreference = FlatForRentAnnouncementPreference.Builder()
                                                    .SetId(Guid.NewGuid())
                                                    .SetCityId(Guid.NewGuid())
                                                    .SetPriceMin(0)
                                                    .SetPriceMax(2000)
                                                    .SetRoomNumbersMin(2)
                                                    .SetRoomNumbersMax(2)
                                                    .SetCityDistricts(new List <Guid> {
                Guid.NewGuid()
            })
                                                    .Build();

            Action result = () => flatForRentAnnouncementPreference.ChangeRoomNumbersMax(1);

            result.Should().ThrowExactly <FlatForRentAnnouncementPreferenceRoomNumbersMaxLowerThanRoomNumbersMinException>()
            .WithMessage("RoomNumbersMax argument cannot be lower than RoomNumbersMin.");
        }
示例#19
0
        public void ChangeRoomNumbersMax_Should_Throw_FlatForRentAnnouncementPreferenceRoomNumbersMaxMinValueException_When_RoomNumbersMax_Is_Negative_Value()
        {
            var flatForRentAnnouncementPreference = FlatForRentAnnouncementPreference.Builder()
                                                    .SetId(Guid.NewGuid())
                                                    .SetCityId(Guid.NewGuid())
                                                    .SetPriceMin(0)
                                                    .SetPriceMax(2000)
                                                    .SetRoomNumbersMin(1)
                                                    .SetRoomNumbersMax(1)
                                                    .SetCityDistricts(new List <Guid> {
                Guid.NewGuid()
            })
                                                    .Build();

            Action result = () => flatForRentAnnouncementPreference.ChangeRoomNumbersMax(0);

            result.Should().ThrowExactly <FlatForRentAnnouncementPreferenceRoomNumbersMaxMinValueException>()
            .WithMessage("RoomNumbersMax argument min value is 1.");
        }
示例#20
0
        public void ChangeCityId_Should_Throw_FlatForRentAnnouncementPreferenceCityIdNullException_When_CityId_Is_New_Guid()
        {
            var flatForRentAnnouncementPreference = FlatForRentAnnouncementPreference.Builder()
                                                    .SetId(Guid.NewGuid())
                                                    .SetCityId(Guid.NewGuid())
                                                    .SetPriceMin(0)
                                                    .SetPriceMax(2000)
                                                    .SetRoomNumbersMin(1)
                                                    .SetRoomNumbersMax(1)
                                                    .SetCityDistricts(new List <Guid> {
                Guid.NewGuid()
            })
                                                    .Build();

            Action result = () => flatForRentAnnouncementPreference.ChangeCityId(new Guid());

            result.Should().ThrowExactly <FlatForRentAnnouncementPreferenceCityIdNullException>()
            .WithMessage("CityId argument is required.");
        }
示例#21
0
        public void ChangeCityId_Should_Change_CityId()
        {
            var flatForRentAnnouncementPreference = FlatForRentAnnouncementPreference.Builder()
                                                    .SetId(Guid.NewGuid())
                                                    .SetCityId(Guid.NewGuid())
                                                    .SetPriceMin(0)
                                                    .SetPriceMax(2000)
                                                    .SetRoomNumbersMin(1)
                                                    .SetRoomNumbersMax(1)
                                                    .SetCityDistricts(new List <Guid> {
                Guid.NewGuid()
            })
                                                    .Build();
            var newCityId = Guid.NewGuid();

            flatForRentAnnouncementPreference.ChangeCityId(newCityId);

            flatForRentAnnouncementPreference.CityId.Should().Be(newCityId);
        }
示例#22
0
 private static void ProcessFlatForRentAnnouncementPreferenceForPriceMax(FlatForRentAnnouncement flatForRentAnnouncement,
                                                                         FlatForRentAnnouncementPreference flatForRentAnnouncementPreference)
 {
     if (flatForRentAnnouncementPreference.PriceMax.HasValue && flatForRentAnnouncement.Price.HasValue)
     {
         if (PriceMaxMatches(flatForRentAnnouncement.Price.Value, flatForRentAnnouncementPreference.PriceMax.Value) &&
             CityDistrictsMatch(flatForRentAnnouncement, flatForRentAnnouncementPreference))
         {
             flatForRentAnnouncementPreference.AnnouncementUrlsToSend.Add(flatForRentAnnouncement.SourceUrl);
         }
     }
     else
     {
         if (CityDistrictsMatch(flatForRentAnnouncement, flatForRentAnnouncementPreference))
         {
             flatForRentAnnouncementPreference.AnnouncementUrlsToSend.Add(flatForRentAnnouncement.SourceUrl);
         }
     }
 }
示例#23
0
        public void Should_Throw_FlatForRentAnnouncementPreferencePriceMaxLowerThanPriceMinException_When_PriceMax_Is_Lower_Than_PriceMin()
        {
            Action result = () =>
            {
                var unused = FlatForRentAnnouncementPreference.Builder()
                             .SetId(Guid.NewGuid())
                             .SetCityId(Guid.NewGuid())
                             .SetPriceMin(1000)
                             .SetPriceMax(0)
                             .SetRoomNumbersMin(1)
                             .SetRoomNumbersMax(1)
                             .SetCityDistricts(new List <Guid> {
                    Guid.NewGuid()
                })
                             .Build();
            };

            result.Should().ThrowExactly <FlatForRentAnnouncementPreferencePriceMaxLowerThanPriceMinException>()
            .WithMessage("PriceMax argument cannot be lower than PriceMin.");
        }
示例#24
0
        public void Should_Throw_FlatForRentAnnouncementPreferenceIdNullException_When_Id_Is_Empty_Guid()
        {
            Action result = () =>
            {
                var unused = FlatForRentAnnouncementPreference.Builder()
                             .SetId(Guid.Empty)
                             .SetCityId(Guid.NewGuid())
                             .SetPriceMin(0)
                             .SetPriceMax(2000)
                             .SetRoomNumbersMin(1)
                             .SetRoomNumbersMax(1)
                             .SetCityDistricts(new List <Guid> {
                    Guid.NewGuid()
                })
                             .Build();
            };

            result.Should().ThrowExactly <FlatForRentAnnouncementPreferenceIdNullException>()
            .WithMessage("Id argument is required.");
        }
示例#25
0
        public void Should_Throw_FlatForRentAnnouncementPreferencePriceMaxMinValueException_When_PriceMax_Is_Negative_Value()
        {
            Action result = () =>
            {
                var unused = FlatForRentAnnouncementPreference.Builder()
                             .SetId(Guid.NewGuid())
                             .SetCityId(Guid.NewGuid())
                             .SetPriceMin(0)
                             .SetPriceMax(-1)
                             .SetRoomNumbersMin(1)
                             .SetRoomNumbersMax(1)
                             .SetCityDistricts(new List <Guid> {
                    Guid.NewGuid()
                })
                             .Build();
            };

            result.Should().ThrowExactly <FlatForRentAnnouncementPreferencePriceMaxMinValueException>()
            .WithMessage("PriceMax argument min value is 0.");
        }
示例#26
0
        public async Task HandleAsync_Should_Delete_Flat_For_Rent_Announcement_Preference()
        {
            var command = new DeleteFlatForRentAnnouncementPreferenceCommand(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 flatForRentAnnouncementPreference = FlatForRentAnnouncementPreference.Builder()
                                                    .SetId(command.FlatForRentAnnouncementPreferenceId)
                                                    .SetCityId(Guid.NewGuid())
                                                    .SetPriceMin(1)
                                                    .SetPriceMax(1000)
                                                    .SetRoomNumbersMin(1)
                                                    .SetRoomNumbersMax(1)
                                                    .SetCityDistricts(new List <Guid> {
                Guid.NewGuid()
            })
                                                    .Build();
            var getFlatForRentAnnouncementPreferenceResult =
                GetResult <FlatForRentAnnouncementPreference> .Ok(flatForRentAnnouncementPreference);

            _userGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>())).ReturnsAsync(getUserResult);
            _flatForRentAnnouncementPreferenceGetterServiceMock
            .Setup(x => x.GetByByUserAndId(It.IsAny <User>(), It.IsAny <Guid>()))
            .Returns(getFlatForRentAnnouncementPreferenceResult);
            _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>();
        }
示例#27
0
        public async Task HandleAsync_Should_Return_FlatForRentAnnouncementPreferenceOutputQuery()
        {
            var inputQuery = new GetFlatForRentAnnouncementPreferenceInputQuery(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 flatForRentAnnouncementPreference = FlatForRentAnnouncementPreference.Builder()
                                                    .SetId(inputQuery.FlatForRentAnnouncementPreferenceId)
                                                    .SetCityId(Guid.NewGuid())
                                                    .SetPriceMin(1)
                                                    .SetPriceMax(1000)
                                                    .SetRoomNumbersMin(1)
                                                    .SetRoomNumbersMax(1000)
                                                    .Build();
            var getFlatForRentAnnouncementPreferenceResult =
                GetResult <FlatForRentAnnouncementPreference> .Ok(flatForRentAnnouncementPreference);

            var expectedResult = new FlatForRentAnnouncementPreferenceOutputQuery(flatForRentAnnouncementPreference.Id,
                                                                                  flatForRentAnnouncementPreference.CityId, flatForRentAnnouncementPreference.PriceMin,
                                                                                  flatForRentAnnouncementPreference.PriceMax, flatForRentAnnouncementPreference.RoomNumbersMin,
                                                                                  flatForRentAnnouncementPreference.RoomNumbersMax, flatForRentAnnouncementPreference.CityDistricts);

            _userGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>())).ReturnsAsync(getUserResult);
            _flatForRentAnnouncementPreferenceGetterServiceMock
            .Setup(x => x.GetByByUserAndId(It.IsAny <User>(), It.IsAny <Guid>()))
            .Returns(getFlatForRentAnnouncementPreferenceResult);
            _mapperMock.Setup(x =>
                              x.Map <FlatForRentAnnouncementPreference, FlatForRentAnnouncementPreferenceOutputQuery>(
                                  It.IsAny <FlatForRentAnnouncementPreference>()))
            .Returns(expectedResult);

            var result = await _queryHandler.HandleAsync(inputQuery);

            result.Should().BeEquivalentTo(expectedResult);
        }
示例#28
0
        public void Should_Throw_FlatForRentAnnouncementPreferenceCityDistrictsDuplicateValuesException_When_CityDistricts_Contains_Duplicates()
        {
            var    cityDistrict = Guid.NewGuid();
            Action result       = () =>
            {
                var unused = FlatForRentAnnouncementPreference.Builder()
                             .SetId(Guid.NewGuid())
                             .SetCityId(Guid.NewGuid())
                             .SetPriceMin(0)
                             .SetPriceMax(1000)
                             .SetRoomNumbersMin(1)
                             .SetRoomNumbersMax(1)
                             .SetCityDistricts(new List <Guid> {
                    cityDistrict, cityDistrict
                })
                             .Build();
            };

            result.Should().ThrowExactly <FlatForRentAnnouncementPreferenceCityDistrictsDuplicateValuesException>()
            .WithMessage("CityDistricts argument contains duplicate values.");
        }
示例#29
0
        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());
        }
示例#30
0
        public void VerifyFlatForRentAnnouncementPreferences_Should_Return_Fail_VerificationResult_When_CityDistricts_Can_Be_Expanded()
        {
            var cityId = Guid.NewGuid();
            var flatForRentAnnouncementPreferences = new List <FlatForRentAnnouncementPreference>
            {
                FlatForRentAnnouncementPreference.Builder()
                .SetId(Guid.NewGuid())
                .SetCityId(cityId)
                .SetPriceMin(0)
                .SetPriceMax(1000)
                .SetRoomNumbersMin(1)
                .SetRoomNumbersMax(1)
                .SetCityDistricts(new List <Guid> {
                    Guid.NewGuid()
                })
                .Build(),
                FlatForRentAnnouncementPreference.Builder()
                .SetId(Guid.NewGuid())
                .SetCityId(cityId)
                .SetPriceMin(0)
                .SetPriceMax(1000)
                .SetRoomNumbersMin(1)
                .SetRoomNumbersMax(1)
                .SetCityDistricts(new List <Guid> {
                    Guid.NewGuid()
                })
                .Build()
            };
            var errors = new List <IError>
            {
                new Error(FlatForRentAnnouncementPreferenceErrorCode.ExpansibleCityDistricts, FlatForRentAnnouncementPreferenceErrorMessage.ExpansibleCityDistricts)
            };
            var expectedResult = VerificationResult.Fail(errors);

            var result = _service.VerifyFlatForRentAnnouncementPreferences(flatForRentAnnouncementPreferences);

            result.Should().BeEquivalentTo(expectedResult);
        }