public void GetById_ReturnsCorrectData()
        {
            // arrange
            var model = new ZipCodeModel
            {
                Id  = 1,
                Zip = 1
            };

            var dataStoreMock = new Mock <IDataStore>(MockBehavior.Loose);

            dataStoreMock.Setup(mock => mock.GetById <ZipCodeModel, int>(It.IsAny <int>()))
            .Returns(model);

            var locationServiceMock = new Mock <ILocationService>(MockBehavior.Loose);

            var repository = new ZipCodesRepository(
                dataStoreMock.Object,
                locationServiceMock.Object
                );

            // act
            var item = repository.GetById(1);

            // assert
            Assert.AreEqual(1, item.Id);
        }
        public void GetById_CallsDataStore()
        {
            // arrange
            var model = new ZipCodeModel
            {
                Id  = 1,
                Zip = 1
            };

            var dataStoreMock = new Mock <IDataStore>(MockBehavior.Loose);

            dataStoreMock.Setup(mock => mock.GetById <ZipCodeModel, int>(It.IsAny <int>()))
            .Returns(model);

            var locationServiceMock = new Mock <ILocationService>(MockBehavior.Loose);

            var repository = new ZipCodesRepository(
                dataStoreMock.Object,
                locationServiceMock.Object
                );

            // act
            repository.GetById(1);

            // assert
            dataStoreMock.Verify(mock => mock.GetById <ZipCodeModel, int>(It.Is <int>(item => item == 1)), Times.Once());
        }
        public void AddAll_CallsDataStore()
        {
            // arrange
            var dataStoreMock = new Mock <IDataStore>(MockBehavior.Loose);

            var locationServiceMock = new Mock <ILocationService>(MockBehavior.Loose);

            var repository = new ZipCodesRepository(
                dataStoreMock.Object,
                locationServiceMock.Object
                );

            // act
            repository.AddAll(new[]
            {
                new ZipCodeModel
                {
                    Id  = 1,
                    Zip = 1
                }
            });

            // assert
            dataStoreMock.Verify(mock => mock.InsertAll(It.Is <IEnumerable <ZipCodeModel> >(item => item.First().Id == 1)), Times.Once());
        }
        public void GetNearby_ReturnsCorrectData()
        {
            // arrange
            var models = new[]
            {
                new ZipCodeModel
                {
                    Id        = 1,
                    Zip       = 1,
                    Latitude  = 1,
                    Longitude = 1
                },
                new ZipCodeModel
                {
                    Id        = 4,
                    Zip       = 4,
                    Latitude  = 4,
                    Longitude = 4
                },
                new ZipCodeModel
                {
                    Id        = 3,
                    Zip       = 3,
                    Latitude  = 3,
                    Longitude = 3
                },
                new ZipCodeModel
                {
                    Id        = 2,
                    Zip       = 2,
                    Latitude  = 2,
                    Longitude = 2
                }
            };

            var dataStoreMock = new Mock <IDataStore>(MockBehavior.Loose);

            dataStoreMock.Setup(mock => mock.GetById <ZipCodeModel, int>(It.IsAny <int>()))
            .Returns <int>(item => models.FirstOrDefault(i => i.Id == item));
            dataStoreMock.Setup(mock => mock.GetAll <ZipCodeModel>())
            .Returns(models.AsQueryable());

            var locationServiceMock = new Mock <ILocationService>(MockBehavior.Loose);

            locationServiceMock.Setup(mock => mock.GetDistance(It.IsAny <LocationModel>(), It.IsAny <LocationModel>()))
            .Returns <LocationModel, LocationModel>((item1, item2) => Math.Sqrt(Math.Pow(item2.Latitude - item1.Latitude, 2) + Math.Pow(item2.Longitude - item1.Latitude, 2)));

            var repository = new ZipCodesRepository(
                dataStoreMock.Object,
                locationServiceMock.Object
                );

            // act
            var items = repository.GetNearby(2, 2).ToList();

            // assert
            Assert.AreEqual(2, items.Count);
        }
        public void GetFirstForCity_CallsDataStore()
        {
            var dataStoreMock = new Mock <IDataStore>(MockBehavior.Loose);

            var locationServiceMock = new Mock <ILocationService>(MockBehavior.Loose);

            var repository = new ZipCodesRepository(
                dataStoreMock.Object,
                locationServiceMock.Object
                );

            // act
            var result = repository.GetFirstForCity(0);

            // assert
            dataStoreMock.Verify(mock => mock.FirstOrDefault(It.IsAny <Expression <Func <ZipCodeModel, bool> > >()), Times.Once());
        }
        public void Clear_CallsDataStore()
        {
            // arrange
            var dataStoreMock = new Mock <IDataStore>(MockBehavior.Loose);

            var locationServiceMock = new Mock <ILocationService>(MockBehavior.Loose);

            var repository = new ZipCodesRepository(
                dataStoreMock.Object,
                locationServiceMock.Object
                );

            // act
            repository.Clear();

            // assert
            dataStoreMock.Verify(mock => mock.ClearAll <ZipCodeModel>(), Times.Once());
        }
        public void GetAllForCity_CallsDataStore()
        {
            // arrange
            var dataStoreMock = new Mock <IDataStore>(MockBehavior.Loose);

            var locationServiceMock = new Mock <ILocationService>(MockBehavior.Loose);

            var repository = new ZipCodesRepository(
                dataStoreMock.Object,
                locationServiceMock.Object
                );

            // act
            var items = repository.GetAll().ToList();

            // assert
            dataStoreMock.Verify(mock => mock.GetAll <ZipCodeModel>(), Times.Once());
        }
        public void GetAllForCity_ReturnsCorrectData()
        {
            // arrange
            var models = new[]
            {
                new ZipCodeModel
                {
                    Id     = 1,
                    Zip    = 1,
                    CityId = 1
                },
                new ZipCodeModel
                {
                    Id     = 3,
                    Zip    = 3,
                    CityId = 0
                },
                new ZipCodeModel
                {
                    Id     = 2,
                    Zip    = 2,
                    CityId = 1
                }
            };

            var dataStoreMock = new Mock <IDataStore>(MockBehavior.Loose);

            dataStoreMock.Setup(mock => mock.GetAll <ZipCodeModel>())
            .Returns(models.AsQueryable());

            var locationServiceMock = new Mock <ILocationService>(MockBehavior.Loose);

            var repository = new ZipCodesRepository(
                dataStoreMock.Object,
                locationServiceMock.Object
                );

            // act
            var items = repository.GetAllForCity(1).ToList();

            // assert
            Assert.AreEqual(2, items.Count);
        }
        public void GetNearby_CallsDataStore()
        {
            // arrange
            var dataStoreMock = new Mock <IDataStore>(MockBehavior.Loose);

            dataStoreMock.Setup(mock => mock.GetById <ZipCodeModel, int>(It.IsAny <int>()))
            .Returns(new ZipCodeModel());

            var locationServiceMock = new Mock <ILocationService>(MockBehavior.Loose);

            var repository = new ZipCodesRepository(
                dataStoreMock.Object,
                locationServiceMock.Object
                );

            // act
            var items = repository.GetNearby(0, 1).ToList();

            // assert
            dataStoreMock.Verify(mock => mock.GetAll <ZipCodeModel>(), Times.Once());
        }
        public void GetZipCodesCount_ReturnsCorrectData()
        {
            // arrange
            var dataStoreMock = new Mock <IDataStore>(MockBehavior.Loose);

            dataStoreMock.Setup(mock => mock.Count(It.IsAny <Expression <Func <ZipCodeModel, bool> > >()))
            .Returns(3);

            var locationServiceMock = new Mock <ILocationService>(MockBehavior.Loose);

            var repository = new ZipCodesRepository(
                dataStoreMock.Object,
                locationServiceMock.Object
                );

            // act
            var result = repository.GetZipCodesCount(0);

            // assert
            Assert.AreEqual(3, result);
        }
        public void GetAll_CallsDataStore()
        {
            // arrange
            var models = new[]
            {
                new ZipCodeModel
                {
                    Id  = 1,
                    Zip = 1
                },
                new ZipCodeModel
                {
                    Id  = 3,
                    Zip = 3
                },
                new ZipCodeModel
                {
                    Id  = 2,
                    Zip = 2
                }
            };

            var dataStoreMock = new Mock <IDataStore>(MockBehavior.Loose);

            dataStoreMock.Setup(mock => mock.GetAll <ZipCodeModel>())
            .Returns(models.AsQueryable());

            var locationServiceMock = new Mock <ILocationService>(MockBehavior.Loose);

            var repository = new ZipCodesRepository(
                dataStoreMock.Object,
                locationServiceMock.Object
                );

            // act
            var items = repository.GetAll().ToList();

            // assert
            dataStoreMock.Verify(mock => mock.GetAll <ZipCodeModel>(), Times.Once());
        }
        public void GetFirstForCity_ReturnsCorrectData()
        {
            // arrange
            var dataStoreMock = new Mock <IDataStore>(MockBehavior.Loose);

            dataStoreMock.Setup(mock => mock.FirstOrDefault(It.IsAny <Expression <Func <ZipCodeModel, bool> > >()))
            .Returns(new ZipCodeModel {
                Id = 1
            });

            var locationServiceMock = new Mock <ILocationService>(MockBehavior.Loose);

            var repository = new ZipCodesRepository(
                dataStoreMock.Object,
                locationServiceMock.Object
                );

            // act
            var result = repository.GetFirstForCity(0);

            // assert
            Assert.AreEqual(1, result.Id);
        }