public void Map_WithLocationWith7Fields_Returns7AddressLines()
            {
                var model = new Location(_mockDataReader.Object, _mockLocationFormatter.Object);

                var sut = new LocationModelMapper();
                var result = sut.Map(model);

                Assert.Equal(7, result.AddressLines.Count());
            }
            public void Map_WithLocationWithZeroHouseNumber_ExcludesHouseNumberInAddressLines()
            {
                _mockDataReader.Setup(r => r[LocationFields.PaoStartNumber]).Returns(0);
                var model = new Location(_mockDataReader.Object, _mockLocationFormatter.Object);

                var sut = new LocationModelMapper();
                var result = sut.Map(model);

                Assert.False(result.AddressLines.Any(a => a.Contains("0")));
            }
            public void Map_WithDuplicateFields_DoesntRepeatLines()
            {
                _mockDataReader.Setup(r => r[LocationFields.BlpuOrganisation]).Returns("something");
                _mockDataReader.Setup(r => r[LocationFields.BuildingName]).Returns("something");
                var model = new Location(_mockDataReader.Object, _mockLocationFormatter.Object);

                var sut = new LocationModelMapper();
                var result = sut.Map(model);

                Assert.Equal(6, result.AddressLines.Count());
            }
        protected LocationServiceTestsBase()
        {
            _mockIdEncoder = new Mock<ILocationIdEncoder>();
            _mockIdEncoder.Setup(e => e.Decode(It.IsAny<string>())).Returns<string>(x => x);
            _mockIdEncoder.Setup(e => e.Encode(It.IsAny<string>())).Returns<string>(x => x);

            var mockMapper = new LocationModelMapper();

            _mockLocationQueryFields = new Mock<ILocationQueryFields>();

            _mockQueryValidator = new Mock<ILocationQueryValidator>();
            _mockQueryValidator.Setup(v => v.IsValid(It.IsAny<string>())).Returns(true);

            _mockLocationRepository = new Mock<ILocationRepository>();
            _mockLocationGroupRepository = new Mock<ILocationGroupRepository>();
            _mockQuerySanitiser = new Mock<ILocationQuerySanitiser>();
            _mockQuerySanitiser.Setup(s => s.Sanitise(It.IsAny<string>())).Returns<string>(q => q.ToLower());

            _mockLocationGroupFormatter = new Mock<IConditionalFormatter<string, LocationDataField>>();
            _mockLocationGroupFormatter.Setup(
                r => r.DetermineConditionsAndFormat(It.IsAny<string>(), It.IsAny<LocationDataField>())).Returns((string value, LocationDataField type) => value);

            _mockLocationFormatter = new Mock<IConditionalFormatter<string, string>>();
            _mockLocationFormatter.Setup(
                r => r.DetermineConditionsAndFormat(It.IsAny<string>(), It.IsAny<string>())).Returns((string value, string type) => value);

            _sutSearch = new LocationSearchService(_mockLocationGroupRepository.Object, _mockQueryValidator.Object, _mockQuerySanitiser.Object, _mockLocationQueryFields.Object, _mockIdEncoder.Object);
            _sutPostcode = new LocationSearchPostcodeService(_mockLocationRepository.Object, _mockQueryValidator.Object, _mockQuerySanitiser.Object, mockMapper);
            _sutGet = new LocationRetrievalService(_mockLocationRepository.Object, _mockIdEncoder.Object, mockMapper);

            _mockDataReader = new Mock<IDataRecord>();
            _mockDataReader.Setup(r => r[It.IsAny<string>()]).Returns("");
            _mockDataReader.Setup(r => r["UPRN"]).Returns("1");
            _mockDataReader.Setup(r => r[It.Is<string>(x => x == "X_COORDINATE")]).Returns("1.0");
            _mockDataReader.Setup(r => r[It.Is<string>(y => y == "Y_COORDINATE")]).Returns("2.0");

            _builder = new LocationGroupBuilder(_mockLocationGroupFormatter.Object);
            _locationQueryFields = new SqlIteLocationQueryFields();
        }
            public void Map_WithLocation_MapsAllFields()
            {
                var model = new Location(_mockDataReader.Object, _mockLocationFormatter.Object);

                var sut = new LocationModelMapper();
                var result = sut.Map(model);

                //mapping
                Assert.Equal(model.OrganisationName, result.OrganisationName);
                Assert.Equal(model.BuildingName, result.BuildingName);
                Assert.Equal(model.StreetDescription, result.StreetDescription);
                Assert.Equal(model.HouseNumber, result.HouseNumber);
                Assert.Equal(model.Locality, result.Locality);
                Assert.Equal(model.TownName, result.TownName);
                Assert.Equal(model.AdministrativeArea, result.AdministrativeArea);
                Assert.Equal(model.PostalTown, result.PostTown);
                Assert.Equal(model.PostCode, result.Postcode);
                Assert.Equal(model.PostcodeLocator, result.PostcodeLocator);
                Assert.NotNull(result.Coordinate);
                Assert.Equal(1.0f, result.Coordinate.X);
                Assert.Equal(2.0f, result.Coordinate.Y);

                var dtoSettableProperties = typeof (Location).GetProperties().Where(p => p.GetSetMethod() != null);
                var modelSettableProperties = typeof (LocationModel).GetProperties()
                    .Where(p => p.GetSetMethod() != null);

                //modelSettableProperties.Where(p => p.)

                //missing fields on model
                foreach (var prop in modelSettableProperties) {
                    Console.Write("Testing LocationModel." + prop.Name + " has been mapped...");
                    Assert.NotNull(prop.GetValue(result));
                    Console.WriteLine("pass");
                }

                //missing fields from DTO
            }