// No cities, thus no point of interest
        public void TestGetPointNoCities()
        {
            var cities = new List <City> {
            }.AsQueryable();

            var points = new List <PointOfInterest> {
            }.AsQueryable();

            var mockSet = new Mock <DbSet <City> >();

            mockSet.As <IQueryable <City> >().Setup(m => m.Provider).Returns(cities.Provider);
            mockSet.As <IQueryable <City> >().Setup(m => m.Expression).Returns(cities.Expression);
            mockSet.As <IQueryable <City> >().Setup(m => m.ElementType).Returns(cities.ElementType);

            var mockSetP = new Mock <DbSet <PointOfInterest> >();

            mockSetP.As <IQueryable <City> >().Setup(m => m.Provider).Returns(points.Provider);
            mockSetP.As <IQueryable <City> >().Setup(m => m.Expression).Returns(points.Expression);
            mockSetP.As <IQueryable <City> >().Setup(m => m.ElementType).Returns(points.ElementType);

            var mockContext = new Mock <CityInfoContext>();

            mockContext.Setup(m => m.Cities).Returns(mockSet.Object);
            mockContext.Setup(m => m.PointsOfInterest).Returns(mockSetP.Object);

            var repo = new CityInfoRepository(mockContext.Object);

            Assert.Null(repo.GetPointOfInterestForCity(1, 1));
        }
        // Cities with existing city id, no points of interest
        public void TestGetPointNoPoints()
        {
            var cities = new List <City>
            {
                new City {
                    Id = 1, Name = "Richmond", Description = "Small"
                },
                new City {
                    Id = 2, Name = "Vancouver", Description = "Big"
                }
            }.AsQueryable();

            var points = new List <PointOfInterest> {
            }.AsQueryable();

            var mockSet = new Mock <DbSet <City> >();

            mockSet.As <IQueryable <City> >().Setup(m => m.Provider).Returns(cities.Provider);
            mockSet.As <IQueryable <City> >().Setup(m => m.Expression).Returns(cities.Expression);
            mockSet.As <IQueryable <City> >().Setup(m => m.ElementType).Returns(cities.ElementType);

            var mockSetP = new Mock <DbSet <PointOfInterest> >();

            mockSetP.As <IQueryable <City> >().Setup(m => m.Provider).Returns(points.Provider);
            mockSetP.As <IQueryable <City> >().Setup(m => m.Expression).Returns(points.Expression);
            mockSetP.As <IQueryable <City> >().Setup(m => m.ElementType).Returns(points.ElementType);

            var mockContext = new Mock <CityInfoContext>();

            mockContext.Setup(m => m.Cities).Returns(mockSet.Object);
            mockContext.Setup(m => m.PointsOfInterest).Returns(mockSetP.Object);

            var repo = new CityInfoRepository(mockContext.Object);

            Assert.Null(repo.GetPointOfInterestForCity(1, 1));
        }
        // Cities with existing city id, correct poi id
        public void TestGetPoint()
        {
            PointOfInterest poi1 = new PointOfInterest
            {
                Id          = 1,
                Name        = "Downtown",
                Description = "Lots of food",
                CityId      = 1
            };

            PointOfInterest poi2 = new PointOfInterest
            {
                Id          = 2,
                Name        = "Stanley Park",
                Description = "Lots to do",
                CityId      = 1
            };

            PointOfInterest poi3 = new PointOfInterest
            {
                Id          = 3,
                Name        = "Science World",
                Description = "Lots of science",
                CityId      = 2
            };

            PointOfInterest poi4 = new PointOfInterest
            {
                Id          = 4,
                Name        = "UBC",
                Description = "School",
                CityId      = 2
            };

            var cities = new List <City>
            {
                new City {
                    Id = 1, Name = "Richmond", Description = "Small"
                },
                new City {
                    Id = 2, Name = "Vancouver", Description = "Big"
                }
            }.AsQueryable();

            var points = new List <PointOfInterest> {
                poi1, poi2, poi3, poi4
            }.AsQueryable();

            var mockSet = new Mock <DbSet <City> >();

            mockSet.As <IQueryable <City> >().Setup(m => m.Provider).Returns(cities.Provider);
            mockSet.As <IQueryable <City> >().Setup(m => m.Expression).Returns(cities.Expression);
            mockSet.As <IQueryable <City> >().Setup(m => m.ElementType).Returns(cities.ElementType);

            var mockSetP = new Mock <DbSet <PointOfInterest> >();

            mockSetP.As <IQueryable <City> >().Setup(m => m.Provider).Returns(points.Provider);
            mockSetP.As <IQueryable <City> >().Setup(m => m.Expression).Returns(points.Expression);
            mockSetP.As <IQueryable <City> >().Setup(m => m.ElementType).Returns(points.ElementType);

            var mockContext = new Mock <CityInfoContext>();

            mockContext.Setup(m => m.Cities).Returns(mockSet.Object);
            mockContext.Setup(m => m.PointsOfInterest).Returns(mockSetP.Object);

            var repo = new CityInfoRepository(mockContext.Object);

            Assert.Equal(2, repo.GetPointOfInterestForCity(1, 2).Id);
            Assert.Equal("Stanley Park", repo.GetPointOfInterestForCity(1, 2).Name);
            Assert.Equal("Lots to do", repo.GetPointOfInterestForCity(1, 2).Description);
            Assert.Equal(1, repo.GetPointOfInterestForCity(1, 2).CityId);
        }