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)); }); }
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()); }
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()); }
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()); }
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)); }
public void CanConnectToMongoDb() { var birdSearch = Substitute.For <IBirdSearch>(); mongoBirdSearch = new MongoBirdSearch(birdSearch, default); }