コード例 #1
0
        public void Get_Fidelity_Client_Lowest_Hotel_Price_With_Wee_And_Weekend_Days_Test()
        {
            // Arrange
            var input = new RequestLowestPriceDto(
                (int)ClientTypeEnum.Fidelity,
                new List <DateTime>(new DateTime[] {
                new DateTime(2020, 03, 26), //Thur
                new DateTime(2020, 03, 27), //Fri
                new DateTime(2020, 03, 28)
            })                              //Sat
                );
            var expected = "Mar Atlântico";

            this._hotelRepository
            .Setup(x => x.GetHotels())
            .Returns(SelectAllFromHotel());

            // Act
            var hotelTest = new HotelService(this._hotelRepository.Object);
            var result    = hotelTest.GetLowestPriceHotel(input);

            // Assert
            Assert.Equal(expected, result.HotelName);

            this._mocker.VerifyAll();
        }
コード例 #2
0
        public void Get_Regular_Client_Lowest_Hotel_Price_With_Invalid_ClientType_Test()
        {
            // Arrange
            var input = new RequestLowestPriceDto(
                0,
                new List <DateTime>(new DateTime[] {
                new DateTime(2020, 03, 16),
                new DateTime(2020, 03, 17),
                new DateTime(2020, 03, 18)
            })
                );

            this._hotelRepository
            .Setup(x => x.GetHotels())
            .Returns(SelectAllFromHotel());

            // Act
            var hotelTest = new HotelService(this._hotelRepository.Object);
            var result    = hotelTest.GetLowestPriceHotel(input);

            // Assert
            Assert.Null(result);

            this._mocker.VerifyAll();
        }
コード例 #3
0
        public void Get_Regular_Client_Lowest_Hotel_Price_With_3_Week_Days_Test()
        {
            // Arrange
            var input = new RequestLowestPriceDto(
                (int)ClientTypeEnum.Regular,
                new List <DateTime>(new DateTime[] {
                new DateTime(2020, 03, 16), //Mon
                new DateTime(2020, 03, 17), //Tues
                new DateTime(2020, 03, 18)
            })                              //Wed
                );
            var expected = "Parque das flores";

            this._hotelRepository
            .Setup(x => x.GetHotels())
            .Returns(SelectAllFromHotel());

            // Act
            var hotelTest = new HotelService(this._hotelRepository.Object);
            var result    = hotelTest.GetLowestPriceHotel(input);

            // Assert
            Assert.Equal(expected, result.HotelName);

            this._mocker.VerifyAll();
        }
コード例 #4
0
        public void Get_Fidelity_Client_Lowest_Hotel_Price_With_Full_Week_Test()
        {
            // Arrange

            List <DateTime> days = new List <DateTime>();

            for (int a = 6; a <= 12; a++)
            {
                days.Add(new DateTime(2020, 09, a));
            }

            var input = new RequestLowestPriceDto((int)ClientTypeEnum.Fidelity, days);

            var expected = "Parque das flores";

            this._hotelRepository
            .Setup(x => x.GetHotels())
            .Returns(SelectAllFromHotel());

            // Act
            var hotelTest = new HotelService(this._hotelRepository.Object);
            var result    = hotelTest.GetLowestPriceHotel(input);

            // Assert
            Assert.Equal(expected, result.HotelName);

            this._mocker.VerifyAll();
        }
コード例 #5
0
        public void Get_Regular_Client_Lowest_Hotel_Price_Without_Dates_Test()
        {
            // Arrange
            var input = new RequestLowestPriceDto(
                (int)ClientTypeEnum.Regular,
                null
                );

            this._hotelRepository
            .Setup(x => x.GetHotels())
            .Returns(SelectAllFromHotel());

            // Act
            var hotelTest = new HotelService(this._hotelRepository.Object);
            var result    = hotelTest.GetLowestPriceHotel(input);

            // Assert
            Assert.Null(result);

            this._mocker.VerifyAll();
        }
コード例 #6
0
        public HotelEntity GetLowestPriceHotel(RequestLowestPriceDto request)
        {
            var         hotels      = _hotelRepository.GetHotels();
            HotelEntity lowestHotel = null;

            if (request == null ||
                !request.IsValide())
            {
                return(null);
            }

            var weekDays    = request.Dates.Where(x => !IsWeekEnd(x)).Count();
            var weekendDays = request.Dates.Where(x => IsWeekEnd(x)).Count();

            foreach (var hotel in hotels)
            {
                if (lowestHotel == null)
                {
                    lowestHotel = hotel;
                    continue;
                }

                var actualHotelDaily = hotel.DailyValue(weekDays, weekendDays, request.ClientType);
                var lowestHotelDaily = lowestHotel.DailyValue(weekDays, weekendDays, request.ClientType);

                if (actualHotelDaily == lowestHotelDaily)
                {
                    lowestHotel = lowestHotel.Rating > hotel.Rating ? lowestHotel : hotel;
                }

                if (actualHotelDaily < lowestHotelDaily)
                {
                    lowestHotel = hotel;
                }
            }

            return(lowestHotel);
        }