From 0427ecc7f42f65fe2d2a41552d595437afffc809 Mon Sep 17 00:00:00 2001 From: Stephan Date: Wed, 20 Feb 2013 08:12:48 -0100 Subject: [PATCH] Tests.Routing - add tests for wildcard domains --- .../Routing/DomainsAndCulturesTests.cs | 217 ++++++++++++++++++ src/Umbraco.Tests/Umbraco.Tests.csproj | 1 + .../Routing/PublishedContentRequestEngine.cs | 2 +- 3 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs diff --git a/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs b/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs new file mode 100644 index 0000000000..d568c19ac8 --- /dev/null +++ b/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs @@ -0,0 +1,217 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using Umbraco.Tests.TestHelpers; +using Umbraco.Web.Routing; +using umbraco.cms.businesslogic.web; +using umbraco.cms.businesslogic.language; + +namespace Umbraco.Tests.Routing +{ + [TestFixture] + class DomainsAndCulturesTests : BaseRoutingTest + { + public override void Initialize() + { + base.Initialize(); + + // ensure we can create them although the content is not in the database + TestHelper.DropForeignKeys("umbracoDomains"); + + InitializeLanguagesAndDomains(); + } + + void InitializeLanguagesAndDomains() + { + var domains = Domain.GetDomains(); + foreach (var d in domains) + d.Delete(); + + var langs = Language.GetAllAsList(); + foreach (var l in langs.Skip(1)) + l.Delete(); + + // en-US is there by default + Language.MakeNew("fr-FR"); + Language.MakeNew("de-DE"); + + Language.MakeNew("da-DK"); + Language.MakeNew("cs-CZ"); + Language.MakeNew("nl-NL"); + } + + void SetDomains1() + { + var langEn = Language.GetByCultureCode("en-US"); + var langFr = Language.GetByCultureCode("fr-FR"); + var langDe = Language.GetByCultureCode("de-DE"); + + Domain.MakeNew("domain1.com/", 1001, langDe.id); + Domain.MakeNew("domain1.com/en", 10011, langEn.id); + Domain.MakeNew("domain1.com/fr", 10012, langFr.id); + } + + void SetDomains2() + { + SetDomains1(); + + var langDk = Language.GetByCultureCode("da-DK"); + var langCz = Language.GetByCultureCode("cs-CZ"); + var langNl = Language.GetByCultureCode("nl-NL"); + + Domain.MakeNew("*1001", 1001, langDk.id); + Domain.MakeNew("*10011", 10011, langCz.id); + Domain.MakeNew("*10012", 10012, langNl.id); + } + + protected override string GetXmlContent(int templateId) + { + return @" + + +]> + + + + + + This is some content]]> + + + + + + + + + + + + + + + + + This is some content]]> + + + + + + + + + + + + + + + + + + + + + + + + + This is some content]]> + + + + + + + + + + + + + + + This is some content]]> + + + + + + + + + + + + + + + + +"; + } + + [TestCase("http://domain1.com/", "de-DE", 1001)] + [TestCase("http://domain1.com/1001-1", "de-DE", 10011)] + [TestCase("http://domain1.com/1001-1/1001-1-1", "de-DE", 100111)] + [TestCase("http://domain1.com/en", "en-US", 10011)] + [TestCase("http://domain1.com/en/1001-1-1", "en-US", 100111)] + [TestCase("http://domain1.com/fr", "fr-FR", 10012)] + [TestCase("http://domain1.com/fr/1001-2-1", "fr-FR", 100121)] + public void DomainAndCulture(string inputUrl, string expectedCulture, int expectedNode) + { + SetDomains1(); + + var routingContext = GetRoutingContext(inputUrl); + var url = routingContext.UmbracoContext.CleanedUmbracoUrl; //very important to use the cleaned up umbraco url + var pcr = new PublishedContentRequest(url, routingContext); + + // lookup domain + pcr.Engine.FindDomain(); + + Assert.AreEqual(expectedCulture, pcr.Culture.Name); + + var finder = new ContentFinderByNiceUrl(); + var result = finder.TryFindDocument(pcr); + + Assert.IsTrue(result); + Assert.AreEqual(pcr.PublishedContent.Id, expectedNode); + } + + [TestCase("http://domain1.com/", "de-DE", 1001)] // domain takes over wildcard FIXME + [TestCase("http://domain1.com/1001-1", "cs-CZ", 10011)] // wildcard applies + [TestCase("http://domain1.com/1001-1/1001-1-1", "cs-CZ", 100111)] // wildcard applies + [TestCase("http://domain1.com/1001-2", "nl-NL", 10012)] // wildcard applies + [TestCase("http://domain1.com/1001-2/1001-2-1", "nl-NL", 100121)] // wildcard applies + [TestCase("http://domain1.com/en", "en-US", 10011)] // domain takes over wildcard FIXME + [TestCase("http://domain1.com/en/1001-1-1", "cs-CZ", 100111)] // wildcard applies + [TestCase("http://domain1.com/fr", "fr-FR", 10012)] // domain takes over wildcard FIXME + [TestCase("http://domain1.com/fr/1001-2-1", "nl-NL", 100121)] // wildcard applies + public void DomainAndCultureWithWildcards(string inputUrl, string expectedCulture, int expectedNode) + { + SetDomains2(); + + var routingContext = GetRoutingContext(inputUrl); + var url = routingContext.UmbracoContext.CleanedUmbracoUrl; //very important to use the cleaned up umbraco url + var pcr = new PublishedContentRequest(url, routingContext); + + // lookup domain + pcr.Engine.FindDomain(); + + // find document + var finder = new ContentFinderByNiceUrl(); + var result = finder.TryFindDocument(pcr); + + // apply wildcard domain + pcr.Engine.HandleWildcardDomains(); + + Assert.AreEqual(expectedCulture, pcr.Culture.Name); + Assert.IsTrue(result); + Assert.AreEqual(pcr.PublishedContent.Id, expectedNode); + } + } +} diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 3b9c93ffec..0251eed133 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -254,6 +254,7 @@ + diff --git a/src/Umbraco.Web/Routing/PublishedContentRequestEngine.cs b/src/Umbraco.Web/Routing/PublishedContentRequestEngine.cs index ddd9aece32..9b6face92c 100644 --- a/src/Umbraco.Web/Routing/PublishedContentRequestEngine.cs +++ b/src/Umbraco.Web/Routing/PublishedContentRequestEngine.cs @@ -208,7 +208,7 @@ namespace Umbraco.Web.Routing /// /// Looks for wildcard domains in the path and updates Culture accordingly. /// - private void HandleWildcardDomains() + internal void HandleWildcardDomains() { const string tracePrefix = "HandleWildcardDomains: ";