示例#1
0
        public async Task HandleAsync_Should_Delete_FlatForRentAnnouncement()
        {
            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 deleteFlatForRentAnnouncementCommand = new DeleteFlatForRentAnnouncementCommand(flatForRentAnnouncement.Id);

            _flatForRentAnnouncementGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>()))
            .ReturnsAsync(getFlatForRentAnnouncementResult);
            _flatForRentAnnouncementRepositoryMock
            .Setup(x => x.DeleteAsync(It.IsAny <FlatForRentAnnouncement>()))
            .Returns(Task.CompletedTask);

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

            await result.Should().NotThrowAsync <Exception>();
        }
示例#2
0
        public async Task HandleAsync_Should_Return_CollectionOutputQuery_With_FlatForRentAnnouncementOutputQuery_When_Input_Is_Null()
        {
            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 flatForRentAnnouncements = new List <FlatForRentAnnouncement> {
                flatForRentAnnouncement
            };
            var forRentAnnouncementOutputQueries = flatForRentAnnouncements
                                                   .Select(x => new FlatForRentAnnouncementOutputQuery(x.Id, x.Title, x.SourceUrl, x.CityId, x.Created, x.Description,
                                                                                                       x.Price, x.NumberOfRooms, x.CityDistricts)).ToList();
            var collectionOutputQuery = new CollectionOutputQuery <FlatForRentAnnouncementOutputQuery>(forRentAnnouncementOutputQueries.Count,
                                                                                                       forRentAnnouncementOutputQueries);

            _flatForRentAnnouncementRepositoryMock.Setup(x => x.GetAllAsync()).ReturnsAsync(flatForRentAnnouncements);
            _flatForRentAnnouncementRepositoryMock.Setup(x => x.CountAsync())
            .ReturnsAsync(flatForRentAnnouncements.Count);
            _mapperMock
            .Setup(x => x.Map <List <FlatForRentAnnouncement>, IEnumerable <FlatForRentAnnouncementOutputQuery> >(It.IsAny <List <FlatForRentAnnouncement> >()))
            .Returns(forRentAnnouncementOutputQueries);

            var result = await _queryHandler.HandleAsync(null);

            result.Should().BeEquivalentTo(collectionOutputQuery);
        }
示例#3
0
        public Task UpdateAsync(FlatForRentAnnouncement flatForRentAnnouncement)
        {
            var flatForRentAnnouncementEntity =
                _mapper.Map <FlatForRentAnnouncement, FlatForRentAnnouncementEntity>(flatForRentAnnouncement);

            return(_cosmosStore.UpdateAsync(flatForRentAnnouncementEntity));
        }
示例#4
0
        public async Task HandleAsync_Should_Return_FlatForRentAnnouncementOutputQuery()
        {
            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 flatForRentAnnouncementOutputQuery = new FlatForRentAnnouncementOutputQuery(flatForRentAnnouncement.Id,
                                                                                            flatForRentAnnouncement.Title, flatForRentAnnouncement.SourceUrl, flatForRentAnnouncement.CityId,
                                                                                            flatForRentAnnouncement.Created, flatForRentAnnouncement.Description, flatForRentAnnouncement.Price,
                                                                                            flatForRentAnnouncement.NumberOfRooms, flatForRentAnnouncement.CityDistricts);

            _flatForRentAnnouncementGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>()))
            .ReturnsAsync(getFlatForRentAnnouncementResult);
            _mapperMock
            .Setup(x => x.Map <FlatForRentAnnouncement, FlatForRentAnnouncementOutputQuery>(It.IsAny <FlatForRentAnnouncement>()))
            .Returns(flatForRentAnnouncementOutputQuery);

            var result = await _queryHandler.HandleAsync(new GetFlatForRentAnnouncementInputQuery(flatForRentAnnouncement.Id));

            result.Should().BeEquivalentTo(flatForRentAnnouncementOutputQuery);
        }
示例#5
0
 public FlatForRentAnnouncementRepositoryTestFixture(DatabaseFixture fixture)
 {
     CosmosStore = fixture.FlatForRentAnnouncementCosmosStore;
     MapperMock  = new Mock <IMapper>();
     OrderByExpressionCreatorMock = new Mock <IOrderByExpressionCreator <FlatForRentAnnouncementEntity> >();
     Repository = new FlatForRentAnnouncementRepository(CosmosStore, MapperMock.Object, OrderByExpressionCreatorMock.Object);
     FlatForRentAnnouncement = InsertFlatForRentAnnouncementAsync().GetAwaiter().GetResult();
 }
示例#6
0
 public FlatForRentAnnouncementRepositoryTest(FlatForRentAnnouncementRepositoryTestFixture fixture)
 {
     _cosmosStore = fixture.CosmosStore;
     _mapperMock  = fixture.MapperMock;
     _orderByExpressionCreatorMock = fixture.OrderByExpressionCreatorMock;
     _repository = fixture.Repository;
     _flatForRentAnnouncement = fixture.FlatForRentAnnouncement;
     _fixture = fixture;
 }
示例#7
0
        private static bool CityDistrictsMatch(FlatForRentAnnouncement flatForRentAnnouncement, FlatForRentAnnouncementPreference flatForRentAnnouncementPreference)
        {
            if (flatForRentAnnouncement.CityDistricts.Any() && flatForRentAnnouncementPreference.CityDistricts.Any())
            {
                return(flatForRentAnnouncementPreference.CityDistricts.Intersect(flatForRentAnnouncementPreference.CityDistricts).Any());
            }

            return(true);
        }
示例#8
0
 private static void UpdateDetails(FlatForRentAnnouncement flatForRentAnnouncement, UpdateFlatForRentAnnouncementCommand command)
 {
     flatForRentAnnouncement.ChangeTitle(command.Title);
     flatForRentAnnouncement.ChangeSourceUrl(command.SourceUrl);
     flatForRentAnnouncement.ChangeCityId(command.CityId);
     flatForRentAnnouncement.ChangeDescription(command.Description);
     flatForRentAnnouncement.ChangePrice(command.Price);
     flatForRentAnnouncement.ChangeNumberOfRooms(command.NumberOfRooms);
 }
示例#9
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);
     }
 }
示例#10
0
        private static void UpdateCityDistricts(FlatForRentAnnouncement flatForRentAnnouncement, ICollection <Guid> cityDistricts)
        {
            var cityDistrictsToRemove = flatForRentAnnouncement.CityDistricts.Except(cityDistricts).ToList();
            var cityDistrictsToAdd    = cityDistricts.Except(flatForRentAnnouncement.CityDistricts).ToList();

            foreach (var cityDistrict in cityDistrictsToRemove)
            {
                flatForRentAnnouncement.RemoveCityDistrict(cityDistrict);
            }

            foreach (var cityDistrict in cityDistrictsToAdd)
            {
                flatForRentAnnouncement.AddCityDistrict(cityDistrict);
            }
        }
示例#11
0
        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);
        }
示例#12
0
        public FlatForRentAnnouncementProfile()
        {
            CreateMap <FlatForRentAnnouncement, FlatForRentAnnouncementOutputQuery>();

            CreateMap <CreateFlatForRentAnnouncementCommand, FlatForRentAnnouncement>()
            .ForMember(x => x.CityDistricts, opt => opt.Ignore())
            .ConstructUsing(x => FlatForRentAnnouncement.Builder()
                            .SetId(x.FlatForRentAnnouncementId)
                            .SetTitle(x.Title)
                            .SetSourceUrl(x.SourceUrl)
                            .SetCityId(x.CityId)
                            .SetCreated(DateTimeOffset.UtcNow)
                            .SetDescription(x.Description)
                            .SetNumberOfRooms(x.NumberOfRooms)
                            .SetPrice(x.Price)
                            .SetCityDistricts(x.CityDistricts)
                            .Build());
        }
示例#13
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);
         }
     }
 }
示例#14
0
        public void Should_Create_FlatForRentAnnouncement()
        {
            var result = 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();


            result.Should().NotBeNull();
        }
示例#15
0
        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);
        }
示例#16
0
        public FlatForRentAnnouncementProfile()
        {
            CreateMap <FlatForRentAnnouncementEntity, FlatForRentAnnouncement>()
            .ForMember(x => x.CityDistricts, opt => opt.Ignore())
            .ConvertUsing(x => FlatForRentAnnouncement.Builder()
                          .SetId(x.Id)
                          .SetTitle(x.Title)
                          .SetSourceUrl(x.SourceUrl)
                          .SetCityId(x.CityId)
                          .SetCreated(x.Created)
                          .SetDescription(x.Description)
                          .SetNumberOfRooms(x.NumberOfRooms.ConvertToEnumeration())
                          .SetPrice(x.Price)
                          .SetCityDistricts(x.CityDistricts)
                          .Build());

            CreateMap <FlatForRentAnnouncement, FlatForRentAnnouncementEntity>()
            .ForMember(x => x.NumberOfRooms,
                       opt => opt.MapFrom <NumberOfRoomsEnumerationToNumberOfRoomsEnumValueResolver>());
        }
示例#17
0
        public void Should_Throw_FlatForRentAnnouncementCityDistrictsNullException_When_CityDistricts_Is_Null()
        {
            Action result = () =>
            {
                var unused = FlatForRentAnnouncement.Builder()
                             .SetId(Guid.NewGuid())
                             .SetTitle("Title")
                             .SetSourceUrl("http://source")
                             .SetCityId(Guid.NewGuid())
                             .SetCreated(DateTimeOffset.UtcNow)
                             .SetDescription("Description")
                             .SetNumberOfRooms(NumberOfRoomsEnumeration.One)
                             .SetPrice(1000)
                             .SetCityDistricts(null)
                             .Build();
            };

            result.Should().ThrowExactly <FlatForRentAnnouncementCityDistrictsNullException>()
            .WithMessage("CityDistricts argument is required.");
        }
示例#18
0
        public void RemoveCityDistrict_Should_Throw_FlatForRentAnnouncementCityDistrictNullException_When_CityDistrict_Is_Empty_Guid()
        {
            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();

            Action result = () => flatForRentAnnouncement.RemoveCityDistrict(Guid.Empty);

            result.Should().ThrowExactly <FlatForRentAnnouncementCityDistrictNullException>()
            .WithMessage("CityDistrict argument is required.");
        }
示例#19
0
        public void ChangeNumberOfRooms_Should_Change_NumberOfRooms()
        {
            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 newNumberOfRooms = NumberOfRoomsEnumeration.FiveAndMore;

            flatForRentAnnouncement.ChangeNumberOfRooms(newNumberOfRooms);

            flatForRentAnnouncement.NumberOfRooms.Should().BeEquivalentTo(newNumberOfRooms);
        }
示例#20
0
        public void RemoveCityDistrict_Should_Remove_CityDistrict()
        {
            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 cityDistrict = Guid.NewGuid();

            flatForRentAnnouncement.RemoveCityDistrict(cityDistrict);

            flatForRentAnnouncement.CityDistricts.Should().NotContain(cityDistrict);
        }
示例#21
0
        public void ChangeChangePrice_Should_Change_ChangePrice()
        {
            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 newPrice = 2000;

            flatForRentAnnouncement.ChangePrice(newPrice);

            flatForRentAnnouncement.Price.Should().Be(newPrice);
        }
示例#22
0
        public void ChangeTitle_Should_Throw_FlatForRentAnnouncementTitleMaxLengthException_When_Title_Exceeds_Allowed_Max_Length_Value()
        {
            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 title = CreateString(257);

            Action result = () => flatForRentAnnouncement.ChangeTitle(title);

            result.Should().ThrowExactly <FlatForRentAnnouncementTitleMaxLengthException>()
            .WithMessage("Title argument max length is 256.");
        }
示例#23
0
        public void Should_Throw_FlatForRentAnnouncementCityDistrictsInvalidValueException_When_CityDistricts_Contains_Empty_Guid()
        {
            Action result = () =>
            {
                var unused = 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.Empty
                })
                             .Build();
            };

            result.Should().ThrowExactly <FlatForRentAnnouncementCityDistrictsInvalidValueException>()
            .WithMessage("CityDistricts argument is invalid.");
        }
示例#24
0
        public async Task HandleAsync_Should_Create_FlatForRentAnnouncement()
        {
            var cityVerificationResult          = VerificationResult.Ok();
            var cityDistrictsVerificationResult = VerificationResult.Ok();
            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 createFlatForRentAnnouncementCommand = new CreateFlatForRentAnnouncementCommand(
                flatForRentAnnouncement.Id, flatForRentAnnouncement.Title, flatForRentAnnouncement.SourceUrl,
                flatForRentAnnouncement.CityId, flatForRentAnnouncement.Description, flatForRentAnnouncement.Price,
                flatForRentAnnouncement.NumberOfRooms, flatForRentAnnouncement.CityDistricts);

            _cityVerificationServiceMock.Setup(x => x.VerifyCityExistsAsync(It.IsAny <Guid>()))
            .ReturnsAsync(cityVerificationResult);
            _cityDistrictVerificationServiceMock
            .Setup(x => x.VerifyCityDistrictsExistAsync(It.IsAny <Guid>(), It.IsAny <IEnumerable <Guid> >()))
            .ReturnsAsync(cityDistrictsVerificationResult);
            _mapperMock.Setup(x =>
                              x.Map <CreateFlatForRentAnnouncementCommand, FlatForRentAnnouncement>(
                                  It.IsAny <CreateFlatForRentAnnouncementCommand>())).Returns(flatForRentAnnouncement);
            _flatForRentAnnouncementRepositoryMock.Setup(x => x.AddAsync(It.IsAny <FlatForRentAnnouncement>()))
            .Returns(Task.CompletedTask);

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

            await result.Should().NotThrowAsync <Exception>();
        }
示例#25
0
        public async Task GetByIdAsync_Should_Return_GetResult_Ok()
        {
            var flatForRentAnnouncement = FlatForRentAnnouncement.Builder()
                                          .SetId(Guid.NewGuid())
                                          .SetTitle("Title")
                                          .SetSourceUrl("http://sourceUrl")
                                          .SetCityId(Guid.NewGuid())
                                          .SetCreated(DateTimeOffset.UtcNow)
                                          .SetDescription("Description")
                                          .SetNumberOfRooms(NumberOfRoomsEnumeration.FiveAndMore)
                                          .SetPrice(100)
                                          .SetCityDistricts(new List <Guid> {
                Guid.NewGuid()
            })
                                          .Build();
            var expectedResult = GetResult <FlatForRentAnnouncement> .Ok(flatForRentAnnouncement);

            _flatForRentAnnouncementRepositoryMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>()))
            .ReturnsAsync(flatForRentAnnouncement);

            var result = await _service.GetByIdAsync(flatForRentAnnouncement.Id);

            result.Should().BeEquivalentTo(expectedResult);
        }
示例#26
0
 public Task DeleteAsync(FlatForRentAnnouncement flatForRentAnnouncement)
 {
     return(_cosmosStore.RemoveByIdAsync(flatForRentAnnouncement.Id.ToString()));
 }
示例#27
0
 private static void ProcessFlatForRentAnnouncementPreferenceForNumberOfRoomsMax(FlatForRentAnnouncement flatForRentAnnouncement,
                                                                                 FlatForRentAnnouncementPreference flatForRentAnnouncementPreference, int?numberOfRooms)
 {
     if (flatForRentAnnouncementPreference.RoomNumbersMax.HasValue && numberOfRooms.HasValue)
     {
         if (NumberOfRoomsMaxMatches(numberOfRooms.Value, flatForRentAnnouncementPreference.RoomNumbersMax.Value))
         {
             ProcessFlatForRentAnnouncementPreferenceForPriceMin(flatForRentAnnouncement, flatForRentAnnouncementPreference);
         }
     }
     else
     {
         ProcessFlatForRentAnnouncementPreferenceForPriceMin(flatForRentAnnouncement, flatForRentAnnouncementPreference);
     }
 }
示例#28
0
        public async Task GetAllAsync_Should_Return_FlatForRentAnnouncements()
        {
            var flatForRentAnnouncementEntities = await _cosmosStore.Query().ToListAsync();

            var flatForRentAnnouncements = flatForRentAnnouncementEntities.Select(x => FlatForRentAnnouncement.Builder()
                                                                                  .SetId(x.Id)
                                                                                  .SetTitle(x.Title)
                                                                                  .SetSourceUrl(x.SourceUrl)
                                                                                  .SetCityId(x.CityId)
                                                                                  .SetCreated(x.Created)
                                                                                  .SetDescription(x.Description)
                                                                                  .SetNumberOfRooms(x.NumberOfRooms.ConvertToEnumeration())
                                                                                  .SetPrice(x.Price)
                                                                                  .SetCityDistricts(x.CityDistricts)
                                                                                  .Build())
                                           .ToList();

            _mapperMock
            .Setup(x => x.Map <List <FlatForRentAnnouncementEntity>, List <FlatForRentAnnouncement> >(It.IsAny <List <FlatForRentAnnouncementEntity> >()))
            .Returns(flatForRentAnnouncements);
            var result = await _repository.GetAllAsync();

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