From 0eaf46677fff2250e654070592e134f0f144da03 Mon Sep 17 00:00:00 2001 From: Peter Nazarov Date: Tue, 26 Mar 2019 12:06:38 +0100 Subject: [PATCH] Fixed Multisite current site evaluation issue: the site selector does not show the current site selection bases on the current Site context. --- .../Language/Tests/LanguageRepositoryTests.cs | 4 +-- .../tests/SiteConfigurationRepositoryTests.cs | 2 +- .../code/Providers/SiteDefinitionsProvider.cs | 5 ++-- .../Multisite/code/SiteDefinition.cs | 28 ++++++++++++------- .../Multisite/tests/SiteContextTests.cs | 3 +- .../tests/SiteSettingsProviderTests.cs | 2 +- 6 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/Feature/Language/Tests/LanguageRepositoryTests.cs b/src/Feature/Language/Tests/LanguageRepositoryTests.cs index a444793a31..c4d125e7e3 100644 --- a/src/Feature/Language/Tests/LanguageRepositoryTests.cs +++ b/src/Feature/Language/Tests/LanguageRepositoryTests.cs @@ -75,7 +75,7 @@ public void GetSupportedLanguages_OneSelected_ShouldReturnSelected(Db db, [Conte linkManager.Setup(x => x.GetItemUrl(contextItem, It.IsAny())).Returns(url); var siteContext = new Mock(siteProvider); - siteContext.Setup(x => x.GetSiteDefinition(contextItem)).Returns(new SiteDefinition + siteContext.Setup(x => x.GetSiteDefinition(contextItem)).Returns(new SiteDefinition(siteInfo => true) { Item = db.GetItem(siteRootId) }); @@ -122,7 +122,7 @@ public void GetSupportedLanguages_NoneSelected_ShouldReturnEmptyList(Db db, [Con var contextItem = db.GetItem(item.ID); var siteContext = new Mock(siteProvider); - siteContext.Setup(x => x.GetSiteDefinition(contextItem)).Returns(new SiteDefinition + siteContext.Setup(x => x.GetSiteDefinition(contextItem)).Returns(new SiteDefinition(siteInfo => true) { Item = db.GetItem(siteRootId) }); diff --git a/src/Feature/Multisite/tests/SiteConfigurationRepositoryTests.cs b/src/Feature/Multisite/tests/SiteConfigurationRepositoryTests.cs index d0e4bba3e7..4fb5522695 100644 --- a/src/Feature/Multisite/tests/SiteConfigurationRepositoryTests.cs +++ b/src/Feature/Multisite/tests/SiteConfigurationRepositoryTests.cs @@ -46,7 +46,7 @@ public void GetSiteDefinitions_ShouldReturnSiteDefinitiosModel([Frozen] ISiteDef {"name", name}, }; - siteDefinitionProvider.SiteDefinitions.Returns(new List {new SiteDefinition {Item = item, Site = new SiteInfo(siteSettings) } }); + siteDefinitionProvider.SiteDefinitions.Returns(new List {new SiteDefinition (siteInfo => true) {Item = item, Site = new SiteInfo(siteSettings) } }); var definitions = repository.Get(); definitions.Should().BeOfType(); var sites = definitions.Items.ToList(); diff --git a/src/Foundation/Multisite/code/Providers/SiteDefinitionsProvider.cs b/src/Foundation/Multisite/code/Providers/SiteDefinitionsProvider.cs index 5359605b86..c97b4b1404 100644 --- a/src/Foundation/Multisite/code/Providers/SiteDefinitionsProvider.cs +++ b/src/Foundation/Multisite/code/Providers/SiteDefinitionsProvider.cs @@ -62,12 +62,11 @@ private SiteDefinition Create([NotNull] SiteInfo site) } var siteItem = this.GetSiteRootItem(site); - return new SiteDefinition - { + return new SiteDefinition(this.IsCurrent) + { Item = siteItem, Name = site.Name, HostName = GetHostName(site), - IsCurrent = this.IsCurrent(site), Site = site }; } diff --git a/src/Foundation/Multisite/code/SiteDefinition.cs b/src/Foundation/Multisite/code/SiteDefinition.cs index 1ee141b611..d30733131a 100644 --- a/src/Foundation/Multisite/code/SiteDefinition.cs +++ b/src/Foundation/Multisite/code/SiteDefinition.cs @@ -1,14 +1,22 @@ namespace Sitecore.Foundation.Multisite { - using Sitecore.Data.Items; - using Sitecore.Web; + using System; + using Sitecore.Data.Items; + using Sitecore.Web; - public class SiteDefinition - { - public Item Item { get; set; } - public string HostName { get; set; } - public string Name { get; set; } - public bool IsCurrent { get; set; } - public SiteInfo Site { get; set; } - } + public class SiteDefinition + { + private readonly Func isCurrentSiteFunc; + + public SiteDefinition(Func isCurrentSiteFunc) + { + this.isCurrentSiteFunc = isCurrentSiteFunc; + } + + public Item Item { get; set; } + public string HostName { get; set; } + public string Name { get; set; } + public bool IsCurrent => this.isCurrentSiteFunc(this.Site); + public SiteInfo Site { get; set; } + } } \ No newline at end of file diff --git a/src/Foundation/Multisite/tests/SiteContextTests.cs b/src/Foundation/Multisite/tests/SiteContextTests.cs index c9b1e735e0..8204c7afc8 100644 --- a/src/Foundation/Multisite/tests/SiteContextTests.cs +++ b/src/Foundation/Multisite/tests/SiteContextTests.cs @@ -24,8 +24,7 @@ public void GetSiteDefinition_ProviderReturnsDefinition_ShouldReturnDefinition(I db.Add(new DbItem(siteName, siteDefinitionId, Templates.Site.ID) { item }); var definitionItem = db.GetItem(siteDefinitionId); - var definition = new SiteDefinition(); - definition.Item = definitionItem; + var definition = new SiteDefinition(siteInfo => true) {Item = definitionItem}; provider.GetContextSiteDefinition(Arg.Any()).Returns(definition); var siteContext = new SiteContext(provider); diff --git a/src/Foundation/Multisite/tests/SiteSettingsProviderTests.cs b/src/Foundation/Multisite/tests/SiteSettingsProviderTests.cs index 27d2c5d526..9413bd6115 100644 --- a/src/Foundation/Multisite/tests/SiteSettingsProviderTests.cs +++ b/src/Foundation/Multisite/tests/SiteSettingsProviderTests.cs @@ -37,7 +37,7 @@ public void GetSettingsItem_ShouldReturnSettingItem(string settingName, [Frozen] }); var definitionItem = db.GetItem(definitionId); var setting = db.GetItem(settingItemId); - context.GetSiteDefinition(Arg.Any()).Returns(new SiteDefinition {Item = definitionItem }); + context.GetSiteDefinition(Arg.Any()).Returns(new SiteDefinition(siteInfo => true) { Item = definitionItem }); var settingItem = provider.GetSetting(contextItem, DatasourceProvider.DatasourceSettingsName, settingName); settingItem.ID.Should().BeEquivalentTo(setting.ID); }