diff --git a/src/Umbraco.Core/Configuration/GlobalSettings.cs b/src/Umbraco.Core/Configuration/GlobalSettings.cs
index 9855cf38ed..eb20a92e74 100644
--- a/src/Umbraco.Core/Configuration/GlobalSettings.cs
+++ b/src/Umbraco.Core/Configuration/GlobalSettings.cs
@@ -498,9 +498,14 @@ namespace Umbraco.Core.Configuration
{
get
{
- if (HttpContext != null)
- return bool.Parse(ConfigurationManager.AppSettings["umbracoHideTopLevelNodeFromPath"]);
- return false;
+ try
+ {
+ return bool.Parse(ConfigurationManager.AppSettings["umbracoHideTopLevelNodeFromPath"]);
+ }
+ catch
+ {
+ return false;
+ }
}
}
diff --git a/src/Umbraco.Tests/DynamicDocument/DynamicDocumentTests.cs b/src/Umbraco.Tests/DynamicDocument/DynamicDocumentTests.cs
index 666b98b5dc..40aec8da96 100644
--- a/src/Umbraco.Tests/DynamicDocument/DynamicDocumentTests.cs
+++ b/src/Umbraco.Tests/DynamicDocument/DynamicDocumentTests.cs
@@ -53,7 +53,7 @@ namespace Umbraco.Tests.DynamicDocument
protected override dynamic GetDynamicNode(int id)
{
var template = Template.MakeNew("test", new User(0));
- var ctx = GetUmbracoContext("/test", template);
+ var ctx = GetUmbracoContext("/test", template.Id);
var contentStore = new XmlPublishedContentStore();
var doc = contentStore.GetDocumentById(ctx, id);
Assert.IsNotNull(doc);
diff --git a/src/Umbraco.Tests/DynamicDocument/DynamicNodeTests.cs b/src/Umbraco.Tests/DynamicDocument/DynamicNodeTests.cs
index d21e3ad34d..020451936a 100644
--- a/src/Umbraco.Tests/DynamicDocument/DynamicNodeTests.cs
+++ b/src/Umbraco.Tests/DynamicDocument/DynamicNodeTests.cs
@@ -34,7 +34,7 @@ namespace Umbraco.Tests.DynamicDocument
protected override dynamic GetDynamicNode(int id)
{
var template = Template.MakeNew("test", new User(0));
- var ctx = GetUmbracoContext("/test", template);
+ var ctx = GetUmbracoContext("/test", template.Id);
var contentStore = new XmlPublishedContentStore();
var node = new DynamicNode(
new DynamicBackingItem(
diff --git a/src/Umbraco.Tests/Routing/BaseRoutingTest.cs b/src/Umbraco.Tests/Routing/BaseRoutingTest.cs
index ea99d55bad..eb489b01d0 100644
--- a/src/Umbraco.Tests/Routing/BaseRoutingTest.cs
+++ b/src/Umbraco.Tests/Routing/BaseRoutingTest.cs
@@ -23,11 +23,21 @@ namespace Umbraco.Tests.Routing
base.TearDown();
ConfigurationManager.AppSettings.Set("umbracoHideTopLevelNodeFromPath", "");
- }
+ }
- protected RoutingContext GetRoutingContext(string url, Template template, RouteData routeData = null)
+ ///
+ /// Return a new RoutingContext
+ ///
+ ///
+ ///
+ /// The template Id to insert into the Xml cache file for each node, this is helpful for unit testing with templates but you
+ /// should normally create the template in the database with this id
+ ///
+ ///
+ ///
+ protected RoutingContext GetRoutingContext(string url, int templateId, RouteData routeData = null)
{
- var umbracoContext = GetUmbracoContext(url, template, routeData);
+ var umbracoContext = GetUmbracoContext(url, templateId, routeData);
var contentStore = new XmlPublishedContentStore();
var niceUrls = new NiceUrlProvider(contentStore, umbracoContext);
var routingRequest = new RoutingContext(
@@ -39,6 +49,29 @@ namespace Umbraco.Tests.Routing
return routingRequest;
}
+ ///
+ /// Return a new RoutingContext
+ ///
+ ///
+ ///
+ ///
+ ///
+ protected RoutingContext GetRoutingContext(string url, Template template, RouteData routeData = null)
+ {
+ return GetRoutingContext(url, template.Id, routeData);
+ }
+
+ ///
+ /// Return a new RoutingContext that doesn't require testing based on template
+ ///
+ ///
+ ///
+ ///
+ protected RoutingContext GetRoutingContext(string url, RouteData routeData = null)
+ {
+ return GetRoutingContext(url, 1234, routeData);
+ }
+
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Tests/Routing/LookupByAliasTests.cs b/src/Umbraco.Tests/Routing/LookupByAliasTests.cs
index 0f71362b78..4b524f5a76 100644
--- a/src/Umbraco.Tests/Routing/LookupByAliasTests.cs
+++ b/src/Umbraco.Tests/Routing/LookupByAliasTests.cs
@@ -8,6 +8,15 @@ namespace Umbraco.Tests.Routing
[TestFixture]
public class LookupByAliasTests : BaseRoutingTest
{
+
+ ///
+ /// We don't need a db for this test, will run faster without one
+ ///
+ protected override bool RequiresDbSetup
+ {
+ get { return false; }
+ }
+
[TestCase("/this/is/my/alias", 1046)]
[TestCase("/anotheralias", 1046)]
[TestCase("/page2/alias", 1173)]
@@ -16,8 +25,7 @@ namespace Umbraco.Tests.Routing
[TestCase("/ONLY/one/Alias", 1174)]
public void Lookup_By_Url_Alias(string urlAsString, int nodeMatch)
{
- var template = Template.MakeNew("test", new User(0));
- var routingContext = GetRoutingContext(urlAsString, template);
+ var routingContext = GetRoutingContext(urlAsString);
var url = routingContext.UmbracoContext.UmbracoUrl; //very important to use the cleaned up umbraco url
var docRequest = new DocumentRequest(url, routingContext);
var lookup = new LookupByAlias();
diff --git a/src/Umbraco.Tests/Routing/LookupByIdTests.cs b/src/Umbraco.Tests/Routing/LookupByIdTests.cs
index cee11afc1e..e592a37ca7 100644
--- a/src/Umbraco.Tests/Routing/LookupByIdTests.cs
+++ b/src/Umbraco.Tests/Routing/LookupByIdTests.cs
@@ -8,12 +8,19 @@ namespace Umbraco.Tests.Routing
[TestFixture]
public class LookupByIdTests : BaseRoutingTest
{
+ ///
+ /// We don't need a db for this test, will run faster without one
+ ///
+ protected override bool RequiresDbSetup
+ {
+ get { return false; }
+ }
+
[TestCase("/1046", 1046)]
[TestCase("/1046.aspx", 1046)]
public void Lookup_By_Id(string urlAsString, int nodeMatch)
{
- var template = Template.MakeNew("test", new User(0));
- var routingContext = GetRoutingContext(urlAsString, template);
+ var routingContext = GetRoutingContext(urlAsString);
var url = routingContext.UmbracoContext.UmbracoUrl; //very important to use the cleaned up umbraco url
var docRequest = new DocumentRequest(url, routingContext);
var lookup = new LookupByIdPath();
diff --git a/src/Umbraco.Tests/Routing/LookupByNiceUrlTests.cs b/src/Umbraco.Tests/Routing/LookupByNiceUrlTests.cs
index e3c05e14b1..0af2460b88 100644
--- a/src/Umbraco.Tests/Routing/LookupByNiceUrlTests.cs
+++ b/src/Umbraco.Tests/Routing/LookupByNiceUrlTests.cs
@@ -10,6 +10,14 @@ namespace Umbraco.Tests.Routing
public class LookupByNiceUrlTests : BaseRoutingTest
{
+ ///
+ /// We don't need a db for this test, will run faster without one
+ ///
+ protected override bool RequiresDbSetup
+ {
+ get { return false; }
+ }
+
[TestCase("/")]
[TestCase("/default.aspx")] //this one is actually rather important since this is the path that comes through when we are running in pre-IIS 7 for the root document '/' !
[TestCase("/Sub1")]
@@ -17,8 +25,7 @@ namespace Umbraco.Tests.Routing
[TestCase("/sub1.aspx")]
public void Match_Document_By_Url_Hide_Top_Level(string urlAsString)
{
- var template = Template.MakeNew("test", new User(0));
- var routingContext = GetRoutingContext(urlAsString, template);
+ var routingContext = GetRoutingContext(urlAsString);
var url = routingContext.UmbracoContext.UmbracoUrl; //very important to use the cleaned up umbraco url
var docRequest = new DocumentRequest(url, routingContext);
var lookup = new LookupByNiceUrl();
@@ -37,8 +44,7 @@ namespace Umbraco.Tests.Routing
[TestCase("/home/Sub1.aspx")]
public void Match_Document_By_Url(string urlAsString)
{
- var template = Template.MakeNew("test", new User(0));
- var routingContext = GetRoutingContext(urlAsString, template);
+ var routingContext = GetRoutingContext(urlAsString);
var url = routingContext.UmbracoContext.UmbracoUrl; //very important to use the cleaned up umbraco url
var docRequest = new DocumentRequest(url, routingContext);
var lookup = new LookupByNiceUrl();
diff --git a/src/Umbraco.Tests/Routing/LookupByPageIdQueryTests.cs b/src/Umbraco.Tests/Routing/LookupByPageIdQueryTests.cs
index 53cbf3ec10..d68ac45d8c 100644
--- a/src/Umbraco.Tests/Routing/LookupByPageIdQueryTests.cs
+++ b/src/Umbraco.Tests/Routing/LookupByPageIdQueryTests.cs
@@ -9,18 +9,22 @@ namespace Umbraco.Tests.Routing
[TestFixture]
public class LookupByPageIdQueryTests : BaseRoutingTest
{
+ ///
+ /// We don't need a db for this test, will run faster without one
+ ///
+ protected override bool RequiresDbSetup
+ {
+ get { return false; }
+ }
+
[TestCase("/?umbPageId=1046", 1046)]
[TestCase("/?UMBPAGEID=1046", 1046)]
[TestCase("/default.aspx?umbPageId=1046", 1046)] //TODO: Should this match??
[TestCase("/some/other/page?umbPageId=1046", 1046)] //TODO: Should this match??
[TestCase("/some/other/page.aspx?umbPageId=1046", 1046)] //TODO: Should this match??
public void Lookup_By_Page_Id(string urlAsString, int nodeMatch)
- {
-
-
-
- var template = Template.MakeNew("test", new User(0));
- var routingContext = GetRoutingContext(urlAsString, template);
+ {
+ var routingContext = GetRoutingContext(urlAsString);
var url = routingContext.UmbracoContext.UmbracoUrl; //very important to use the cleaned up umbraco url
var docRequest = new DocumentRequest(url, routingContext);
var lookup = new LookupByPageIdQuery();
diff --git a/src/Umbraco.Tests/Routing/NiceUrlProviderTests.cs b/src/Umbraco.Tests/Routing/NiceUrlProviderTests.cs
new file mode 100644
index 0000000000..b5737d1d30
--- /dev/null
+++ b/src/Umbraco.Tests/Routing/NiceUrlProviderTests.cs
@@ -0,0 +1,85 @@
+using System.Configuration;
+using NUnit.Framework;
+
+namespace Umbraco.Tests.Routing
+{
+ [TestFixture]
+ public class NiceUrlProviderTests : BaseRoutingTest
+ {
+
+ [TestCase(1046, "/home.aspx")]
+ [TestCase(1173, "/home/sub1.aspx")]
+ [TestCase(1174, "/home/sub1/sub2.aspx")]
+ [TestCase(1176, "/home/sub1/sub-3.aspx")]
+ [TestCase(1177, "/home/sub1/custom-sub-1.aspx")]
+ [TestCase(1178, "/home/sub1/custom-sub-2.aspx")]
+ [TestCase(1175, "/home/sub-2.aspx")]
+ [TestCase(1172, "/test-page.aspx")]
+ public void Get_Nice_Url_Not_Hiding_Top_Level_No_Directory_Urls(int nodeId, string niceUrlMatch)
+ {
+ var routingContext = GetRoutingContext("/test", 1111);
+
+ var result = routingContext.NiceUrlProvider.GetNiceUrl(nodeId);
+
+ Assert.AreEqual(niceUrlMatch, result);
+ }
+
+ [TestCase(1046, "/home")]
+ [TestCase(1173, "/home/sub1")]
+ [TestCase(1174, "/home/sub1/sub2")]
+ [TestCase(1176, "/home/sub1/sub-3")]
+ [TestCase(1177, "/home/sub1/custom-sub-1")]
+ [TestCase(1178, "/home/sub1/custom-sub-2")]
+ [TestCase(1175, "/home/sub-2")]
+ [TestCase(1172, "/test-page")]
+ public void Get_Nice_Url_Not_Hiding_Top_Level_With_Directory_Urls(int nodeId, string niceUrlMatch)
+ {
+ var routingContext = GetRoutingContext("/test", 1111);
+
+ ConfigurationManager.AppSettings.Set("umbracoUseDirectoryUrls", "true");
+
+ var result = routingContext.NiceUrlProvider.GetNiceUrl(nodeId);
+
+ Assert.AreEqual(niceUrlMatch, result);
+ }
+
+ [TestCase(1046, "/")]
+ [TestCase(1173, "/sub1.aspx")]
+ [TestCase(1174, "/sub1/sub2.aspx")]
+ [TestCase(1176, "/sub1/sub-3.aspx")]
+ [TestCase(1177, "/sub1/custom-sub-1.aspx")]
+ [TestCase(1178, "/sub1/custom-sub-2.aspx")]
+ [TestCase(1175, "/sub-2.aspx")]
+ [TestCase(1172, "/test-page.aspx")]
+ public void Get_Nice_Url_Hiding_Top_Level_No_Directory_Urls(int nodeId, string niceUrlMatch)
+ {
+ var routingContext = GetRoutingContext("/test", 1111);
+
+ ConfigurationManager.AppSettings.Set("umbracoHideTopLevelNodeFromPath", "true");
+
+ var result = routingContext.NiceUrlProvider.GetNiceUrl(nodeId);
+
+ Assert.AreEqual(niceUrlMatch, result);
+ }
+
+ [TestCase(1046, "/")]
+ [TestCase(1173, "/sub1")]
+ [TestCase(1174, "/sub1/sub2")]
+ [TestCase(1176, "/sub1/sub-3")]
+ [TestCase(1177, "/sub1/custom-sub-1")]
+ [TestCase(1178, "/sub1/custom-sub-2")]
+ [TestCase(1175, "/sub-2")]
+ [TestCase(1172, "/test-page")]
+ public void Get_Nice_Url_Hiding_Top_Level_With_Directory_Urls(int nodeId, string niceUrlMatch)
+ {
+ var routingContext = GetRoutingContext("/test", 1111);
+
+ ConfigurationManager.AppSettings.Set("umbracoHideTopLevelNodeFromPath", "true");
+ ConfigurationManager.AppSettings.Set("umbracoUseDirectoryUrls", "true");
+
+ var result = routingContext.NiceUrlProvider.GetNiceUrl(nodeId);
+
+ Assert.AreEqual(niceUrlMatch, result);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs
index 7211e81441..cfd41d6631 100644
--- a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs
+++ b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs
@@ -19,7 +19,8 @@ namespace Umbraco.Tests.TestHelpers
public virtual void Initialize()
{
TestHelper.SetupLog4NetForTests();
- TestHelper.InitializeDatabase();
+ if (RequiresDbSetup)
+ TestHelper.InitializeDatabase();
Resolution.Freeze();
ApplicationContext = new ApplicationContext() { IsReady = true };
}
@@ -32,10 +33,19 @@ namespace Umbraco.Tests.TestHelpers
//reset the context on global settings
Umbraco.Core.Configuration.GlobalSettings.HttpContext = null;
Resolution.IsFrozen = false;
- TestHelper.ClearDatabase();
+ if (RequiresDbSetup)
+ TestHelper.ClearDatabase();
Cache.ClearAllCache();
}
+ ///
+ /// By default this unit test will create and initialize an umbraco database
+ ///
+ protected virtual bool RequiresDbSetup
+ {
+ get { return true; }
+ }
+
protected FakeHttpContextFactory GetHttpContextFactory(string url, RouteData routeData = null)
{
var factory = routeData != null
@@ -51,17 +61,17 @@ namespace Umbraco.Tests.TestHelpers
protected ApplicationContext ApplicationContext { get; private set; }
- protected UmbracoContext GetUmbracoContext(string url, Template template, RouteData routeData = null)
+ protected UmbracoContext GetUmbracoContext(string url, int templateId, RouteData routeData = null)
{
var ctx = new UmbracoContext(
GetHttpContextFactory(url, routeData).HttpContext,
ApplicationContext,
new FakeRoutesCache());
- SetupUmbracoContextForTest(ctx, template);
+ SetupUmbracoContextForTest(ctx, templateId);
return ctx;
}
- protected virtual string GetXmlContent(Template template)
+ protected virtual string GetXmlContent(int templateId)
{
return @"
]>
-
+
1
-
+
This is some content]]>
-
+
-
+
-
-
+
+
-
+
-
+
";
}
@@ -100,8 +110,8 @@ namespace Umbraco.Tests.TestHelpers
/// Initlializes the UmbracoContext with specific XML
///
///
- ///
- protected void SetupUmbracoContextForTest(UmbracoContext umbracoContext, Template template)
+ ///
+ protected void SetupUmbracoContextForTest(UmbracoContext umbracoContext, int templateId)
{
umbracoContext.GetXmlDelegate = () =>
{
@@ -109,7 +119,7 @@ namespace Umbraco.Tests.TestHelpers
//create a custom xml structure to return
- xDoc.LoadXml(GetXmlContent(template));
+ xDoc.LoadXml(GetXmlContent(templateId));
//return the custom x doc
return xDoc;
};
diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj
index a38a046910..30300c8f4c 100644
--- a/src/Umbraco.Tests/Umbraco.Tests.csproj
+++ b/src/Umbraco.Tests/Umbraco.Tests.csproj
@@ -70,6 +70,7 @@
+
diff --git a/src/Umbraco.Web/Routing/NiceUrlProvider.cs b/src/Umbraco.Web/Routing/NiceUrlProvider.cs
index 355609022c..5938bd921e 100644
--- a/src/Umbraco.Web/Routing/NiceUrlProvider.cs
+++ b/src/Umbraco.Web/Routing/NiceUrlProvider.cs
@@ -97,7 +97,14 @@ namespace Umbraco.Web.Routing
{
pathParts.Add(_publishedContentStore.GetDocumentProperty(_umbracoContext, node, UrlNameProperty));
node = node.Parent; // set to parent node
- id = int.Parse(_publishedContentStore.GetDocumentProperty(_umbracoContext, node, "@id")); // will be -1 or 1234
+ if (node == null)
+ {
+ id = -1;
+ }
+ else
+ {
+ id = int.Parse(_publishedContentStore.GetDocumentProperty(_umbracoContext, node, "@id")); // will be -1 or 1234
+ }
domainUri = id > 0 ? DomainUriAtNode(id, current) : null;
}
diff --git a/src/umbraco.sln b/src/umbraco.sln
index 7464b07fd9..661245f906 100644
--- a/src/umbraco.sln
+++ b/src/umbraco.sln
@@ -25,17 +25,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{FD962632-1
..\docs\ReleaseNotes.txt = ..\docs\ReleaseNotes.txt
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nant", "Nant", "{17E547B1-D89B-4C76-AB9C-F05888397FA4}"
- ProjectSection(SolutionItems) = preProject
- ..\build\Nant\aspnet35.build = ..\build\Nant\aspnet35.build
- ..\build\Nant\aspnet35.config = ..\build\Nant\aspnet35.config
- ..\build\Nant\build.xml = ..\build\Nant\build.xml
- ..\build\Nant\default.build = ..\build\Nant\default.build
- ..\build\Nant\nuget.build = ..\build\Nant\nuget.build
- ..\build\Nant\umbraco weekly.build = ..\build\Nant\umbraco weekly.build
- ..\build\Nant\umbraco.build = ..\build\Nant\umbraco.build
- EndProjectSection
-EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Web", "Umbraco.Web\Umbraco.Web.csproj", "{651E1350-91B6-44B7-BD60-7207006D7003}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "umbraco.businesslogic", "umbraco.businesslogic\umbraco.businesslogic.csproj", "{E469A9CE-1BEC-423F-AC44-713CD72457EA}"
@@ -154,7 +143,6 @@ Global
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {17E547B1-D89B-4C76-AB9C-F05888397FA4} = {2849E9D4-3B4E-40A3-A309-F3CB4F0E125F}
{6277C9FB-3A9A-4537-AA86-82DA9B2527FD} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
{5D3B8245-ADA6-453F-A008-50ED04BFE770} = {B5BD12C1-A454-435E-8A46-FF4A364C0382}
EndGlobalSection