public void GetCatalogItems_ByIds_WithReferencedAssociations_Test() { // Each of association source items has an association with 'target1' item var associationSourceItems = new[] { new CatalogProduct { Id = "source1" }, new CatalogProduct { Id = "source2" } }; _associationService.LoadAssociations(associationSourceItems); var associationTargetItems = new[] { new CatalogProduct { Id = "target1" } }; _associationService.LoadReferencedAssociations(associationTargetItems); Assert.True(associationTargetItems[0].ReferencedAssociations.Count == 2); }
public CatalogProduct[] GetByIds(string[] itemIds, ItemResponseGroup respGroup, string catalogId = null) { CatalogProduct[] result; using (var repository = _repositoryFactory()) { //Optimize performance and CPU usage repository.DisableChangesTracking(); result = repository.GetItemByIds(itemIds, respGroup) .Select(x => x.ToModel(AbstractTypeFactory <CatalogProduct> .TryCreateInstance())) .ToArray(); } LoadDependencies(result); ApplyInheritanceRules(result); // Fill referenced associations if (respGroup.HasFlag(ItemResponseGroup.ReferencedAssociations)) { _associationService.LoadReferencedAssociations(result); } // Fill outlines for products if (respGroup.HasFlag(ItemResponseGroup.Outlines)) { _outlineService.FillOutlinesForObjects(result, catalogId); } // Fill SEO info for products, variations and outline items if ((respGroup & ItemResponseGroup.Seo) == ItemResponseGroup.Seo) { var objectsWithSeo = new List <ISeoSupport>(result); var variations = result.Where(p => p.Variations != null) .SelectMany(p => p.Variations); objectsWithSeo.AddRange(variations); var outlineItems = result.Where(p => p.Outlines != null) .SelectMany(p => p.Outlines.SelectMany(o => o.Items)); objectsWithSeo.AddRange(outlineItems); _commerceService.LoadSeoForObjects(objectsWithSeo.ToArray()); } //Reduce details according to response group foreach (var product in result) { if (!respGroup.HasFlag(ItemResponseGroup.ItemAssets)) { product.Assets = null; } if (!respGroup.HasFlag(ItemResponseGroup.ItemAssociations)) { product.Associations = null; product.ReferencedAssociations = null; } if (!respGroup.HasFlag(ItemResponseGroup.ItemEditorialReviews)) { product.Reviews = null; } if (!respGroup.HasFlag(ItemResponseGroup.Inventory)) { product.Inventories = null; } if (!respGroup.HasFlag(ItemResponseGroup.ItemProperties)) { product.Properties = null; } if (!respGroup.HasFlag(ItemResponseGroup.Links)) { product.Links = null; } if (!respGroup.HasFlag(ItemResponseGroup.Outlines)) { product.Outlines = null; } if (!respGroup.HasFlag(ItemResponseGroup.Seo)) { product.SeoInfos = null; } if (!respGroup.HasFlag(ItemResponseGroup.Variations)) { product.Variations = null; } } return(result); }