Пример #1
0
        public void ShouldReturnOnlyOneKindOfSourceDestinationPair()
        {
            const string FlightSrc = "TST1";
            const string FlightDst = "TST2";
            var          expected  = GetRandomFlights(10, 1, FlightSrc, FlightDst).ToList();

            var birdSearch = Substitute.For <IBirdSearch>();

            birdSearch.Search(Arg.Is(FlightSrc), Arg.Is(FlightDst), Arg.Any <DateTime>())
            .Returns(expected);
            birdSearch.Search(Arg.Is(FlightDst), Arg.Is(FlightSrc), Arg.Any <DateTime>())
            .Returns(GetRandomFlights(10, 2, FlightDst, FlightSrc));
            mongoBirdSearch = new MongoBirdSearch(birdSearch, TimeSpan.FromHours(1));

            mongoBirdSearch.Search(FlightSrc, FlightDst, DateTime.Today);
            mongoBirdSearch.Search(FlightDst, FlightSrc, DateTime.Today);

            var actual = mongoBirdSearch.Search(FlightSrc, FlightDst, DateTime.Today)
                         .ToList();

            Assert.All(actual, x =>
            {
                Assert.Equal(FlightSrc, x.Origin);
                Assert.Equal(FlightDst, x.Destination);
            });

            Assert.Equal(expected.Count, actual.Count);
            Assert.All(actual, act =>
            {
                Assert.True(expected.Any(exp => exp.Id == act.Id));
            });
        }
Пример #2
0
        public void ShouldNotCallUnderlyingBirdTwiceWithHighExpirationTime()
        {
            var birdSearch = Substitute.For <IBirdSearch>();

            birdSearch.Search(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <DateTime>())
            .Returns(GetRandomFlights(10));
            mongoBirdSearch = new MongoBirdSearch(birdSearch, TimeSpan.FromHours(1));

            Assert.Empty(birdSearch.ReceivedCalls());
            mongoBirdSearch.Search("mockSrc", "mockDst", DateTime.Now);
            Assert.Single(birdSearch.ReceivedCalls());
            mongoBirdSearch.Search("mockSrc", "mockDst", DateTime.Now);
            Assert.Single(birdSearch.ReceivedCalls());
        }
Пример #3
0
        public void CacheShouldWorkOnlyWithASpecificTrip()
        {
            var birdSearch = Substitute.For <IBirdSearch>();

            birdSearch.Search(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <DateTime>())
            .Returns(GetRandomFlights(10));
            mongoBirdSearch = new MongoBirdSearch(birdSearch, TimeSpan.FromHours(1));

            Assert.Empty(birdSearch.ReceivedCalls());
            mongoBirdSearch.Search("mockSrc1", "mockDst", DateTime.Now);
            Assert.Single(birdSearch.ReceivedCalls());
            mongoBirdSearch.Search("mockSrc2", "mockDst", DateTime.Now);
            Assert.Equal(2, birdSearch.ReceivedCalls().Count());
            Assert.Equal("mockSrc1", birdSearch.ReceivedCalls().Skip(0).First().GetArguments().First());
            Assert.Equal("mockSrc2", birdSearch.ReceivedCalls().Skip(1).First().GetArguments().First());
        }
Пример #4
0
        public void ShouldCallUnderlyingBirdTwiceWhenCacheExpires()
        {
            var birdSearch = Substitute.For <IBirdSearch>();

            birdSearch.Search(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <DateTime>())
            .Returns(GetRandomFlights(10));
            mongoBirdSearch = new MongoBirdSearch(birdSearch, TimeSpan.FromMilliseconds(500));

            Assert.Empty(birdSearch.ReceivedCalls());
            mongoBirdSearch.Search("mockSrc", "mockDst", DateTime.Now);
            Assert.Single(birdSearch.ReceivedCalls());
            mongoBirdSearch.Search("mockSrc", "mockDst", DateTime.Now);
            Assert.Single(birdSearch.ReceivedCalls());

            Thread.Sleep(500);
            mongoBirdSearch.Search("mockSrc", "mockDst", DateTime.Now);
            Assert.Equal(2, birdSearch.ReceivedCalls().Count());
        }
Пример #5
0
        public void ShouldReturnOnlyLatestVersionOfAFlight()
        {
            const string FlightSrc = "TST1";
            const string FlightDst = "TST2";

            var birdSearch = Substitute.For <IBirdSearch>();

            birdSearch.Search(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <DateTime>())
            .Returns(GetRandomFlights(10, 0, FlightSrc, FlightDst));
            mongoBirdSearch = new MongoBirdSearch(birdSearch, TimeSpan.FromMilliseconds(0));

            var oldItems = mongoBirdSearch.Search(FlightSrc, FlightDst, DateTime.Now).ToList();

            Assert.Equal(10, oldItems.Count);

            var newItems = mongoBirdSearch.Search(FlightSrc, FlightDst, DateTime.Now).ToList();

            mongoBirdSearch.Expiration = TimeSpan.FromHours(1);
            var actualItems = mongoBirdSearch.Search(FlightSrc, FlightDst, DateTime.Now).ToList();

            Assert.Equal(10, actualItems.Count);

            Assert.Equal(2, birdSearch.ReceivedCalls().Count());

            var expected1 = newItems.Join(oldItems, x => x.ProviderId, x => x.ProviderId, (newer
                                                                                           , older) => new { newer, older })
                            .ToList();

            Assert.Equal(10, expected1.Count());
            Assert.All(expected1, x => Assert.True(x.newer.RegisteredDate > x.older.RegisteredDate));

            var expected2 = newItems.Join(actualItems, x => x.ProviderId, x => x.ProviderId, (newer
                                                                                              , actual) => new { newer, actual })
                            .ToList();

            Assert.Equal(10, expected2.Count());
            Assert.All(expected2, x => Assert.True(x.newer.Id == x.actual.Id));
        }
Пример #6
0
        public void CanConnectToMongoDb()
        {
            var birdSearch = Substitute.For <IBirdSearch>();

            mongoBirdSearch = new MongoBirdSearch(birdSearch, default);
        }