public void GetPointsOfInterestById_RouteWithMultipleAttributes_ShouldReturnIt()
        {
            var poiId   = "poiId";
            var feature = GetValidFeature(poiId, _adapter.Source);

            feature.Attributes.DeleteAttribute(FeatureAttributes.NAME);
            feature.Attributes.Add(FeatureAttributes.IMAGE_URL, FeatureAttributes.IMAGE_URL);
            feature.Attributes.Add(FeatureAttributes.IMAGE_URL + "1", FeatureAttributes.IMAGE_URL + "1");
            feature.Attributes.Add(FeatureAttributes.DESCRIPTION, FeatureAttributes.DESCRIPTION);
            feature.Attributes.Add(FeatureAttributes.WIKIPEDIA + ":en", "page with space");
            _elasticSearchGateway.GetPointOfInterestById(poiId, _adapter.Source).Returns(feature);
            _wikipediaGateway.GetReference("page with space", "en").Returns(new Reference {
                Url = "page_with_space"
            });
            _dataContainerConverterService.ToDataContainer(Arg.Any <byte[]>(), Arg.Any <string>()).Returns(
                new DataContainer
            {
                Routes = new List <RouteData>
                {
                    new RouteData
                    {
                        Segments = new List <RouteSegmentData>
                        {
                            new RouteSegmentData
                            {
                                Latlngs = new List <LatLngTime>
                                {
                                    new LatLngTime(0, 0),
                                    new LatLngTime(0.1, 0.1)
                                }
                            },
                            new RouteSegmentData()
                        }
                    }
                }
            });

            var result = _adapter.GetPointOfInterestById(Sources.OSM, poiId, "en").Result;

            Assert.IsNotNull(result);
            Assert.AreEqual(string.Empty, result.Title);
            Assert.AreEqual(FeatureAttributes.DESCRIPTION, result.Description);
            Assert.AreEqual(2, result.ImagesUrls.Length);
            Assert.AreEqual(FeatureAttributes.IMAGE_URL, result.ImagesUrls.First());
            Assert.IsTrue(result.References.First().Url.Contains("page_with_space"));
            Assert.IsTrue(result.IsRoute);
            Assert.IsTrue(result.LengthInKm > 0);
        }
        /// <inheritdoc />
        private Reference[] GetReferences(IFeature feature, string language)
        {
            var references = new List <Reference>();

            foreach (var websiteUrl in feature.Attributes.GetNames().Where(n => n.StartsWith(FeatureAttributes.WEBSITE)))
            {
                var url            = feature.Attributes[websiteUrl].ToString();
                var indexString    = websiteUrl.Substring(FeatureAttributes.WEBSITE.Length);
                var sourceImageUrl = string.Empty;
                if (feature.Attributes.Exists(FeatureAttributes.POI_SOURCE_IMAGE_URL + indexString))
                {
                    sourceImageUrl = feature.Attributes[FeatureAttributes.POI_SOURCE_IMAGE_URL + indexString].ToString();
                }
                else if (feature.Attributes.Exists(FeatureAttributes.POI_SOURCE_IMAGE_URL))
                {
                    sourceImageUrl = feature.Attributes[FeatureAttributes.POI_SOURCE_IMAGE_URL].ToString();
                }
                references.Add(new Reference
                {
                    Url            = url,
                    SourceImageUrl = sourceImageUrl
                });
            }
            var title = feature.Attributes.GetWikipediaTitle(language);

            if (string.IsNullOrWhiteSpace(title))
            {
                return(references.ToArray());
            }
            var wikipediaReference = _wikipediaGateway.GetReference(title, language);

            return(references.Concat(new[] { wikipediaReference }).ToArray());
        }
        /// <inheritdoc />
        protected override Reference[] GetReferences(IFeature feature, string language)
        {
            var references = base.GetReferences(feature, language);
            var title      = feature.Attributes.GetWikipediaTitle(language);

            if (string.IsNullOrWhiteSpace(title))
            {
                return(references);
            }
            var wikipediaReference = _wikipediaGateway.GetReference(title, language);

            return(references.Concat(new[] { wikipediaReference }).ToArray());
        }
        /// <inheritdoc />
        private Reference[] GetReferences(IFeature feature, string language)
        {
            var references = new List <Reference>();

            foreach (var websiteUrl in feature.Attributes.GetNames().Where(n => n.StartsWith(FeatureAttributes.WEBSITE)))
            {
                var url            = feature.Attributes[websiteUrl].ToString();
                var indexString    = websiteUrl.Substring(FeatureAttributes.WEBSITE.Length);
                var sourceImageUrl = string.Empty;
                if (feature.Attributes.Exists(FeatureAttributes.POI_SOURCE_IMAGE_URL + indexString))
                {
                    sourceImageUrl = feature.Attributes[FeatureAttributes.POI_SOURCE_IMAGE_URL + indexString].ToString();
                }
                else if (feature.Attributes.Exists(FeatureAttributes.POI_SOURCE_IMAGE_URL))
                {
                    sourceImageUrl = feature.Attributes[FeatureAttributes.POI_SOURCE_IMAGE_URL].ToString();
                }
                references.Add(new Reference
                {
                    Url            = url,
                    SourceImageUrl = sourceImageUrl
                });
            }
            // HM TODO: is this needed after the merge is taking into account wikipedia too?
            var title = feature.Attributes.GetWikipediaTitle(language);

            if (!string.IsNullOrWhiteSpace(title))
            {
                var wikipediaReference = _wikipediaGateway.GetReference(title, language);
                references.Add(wikipediaReference);
            }
            // unique by url
            return(references.GroupBy(r => r.Url)
                   .Select(r => r.FirstOrDefault())
                   .ToArray());
        }