Merge branch '6.2.0' into 6.2.0-pubcontent

This commit is contained in:
Stephan
2013-09-17 10:49:46 +02:00
8 changed files with 99 additions and 81 deletions
+7 -7
View File
@@ -3,8 +3,8 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using Moq;
using NUnit.Framework;
using Rhino.Mocks;
using Umbraco.Core.Models;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.TestHelpers.Entities;
@@ -94,14 +94,14 @@ namespace Umbraco.Tests.Models
var content = MockedContent.CreateTextpageContent(contentType, "Textpage", -1);
var stream = new MemoryStream(System.Text.Encoding.Default.GetBytes("TestContent"));
var httpPostedFileBase = MockRepository.GenerateMock<HttpPostedFileBase>();
httpPostedFileBase.Stub(x => x.ContentLength).Return(Convert.ToInt32(stream.Length));
httpPostedFileBase.Stub(x => x.ContentType).Return("text/plain");
httpPostedFileBase.Stub(x => x.FileName).Return("sample.txt");
httpPostedFileBase.Stub(x => x.InputStream).Return(stream);
var postedFileMock = new Mock<HttpPostedFileBase>();
postedFileMock.Setup(x => x.ContentLength).Returns(Convert.ToInt32(stream.Length));
postedFileMock.Setup(x => x.ContentType).Returns("text/plain");
postedFileMock.Setup(x => x.FileName).Returns("sample.txt");
postedFileMock.Setup(x => x.InputStream).Returns(stream);
// Assert
content.SetValue("title", httpPostedFileBase);
content.SetValue("title", postedFileMock.Object);
// Assert
Assert.That(content.Properties.Any(), Is.True);
@@ -1,9 +1,8 @@
using System;
using System.Diagnostics;
using System.Xml;
using Moq;
using NUnit.Framework;
using Rhino.Mocks;
using Rhino.Mocks.Interfaces;
using Umbraco.Core.Models;
using Umbraco.Core.Services;
using Umbraco.Core.Strings;
@@ -26,37 +25,35 @@ namespace Umbraco.Tests.Models
public void LoadValueFromDatabase_Is_Not_Called_When_SetValue_Is_Used()
{
// Arrange
var baseDataType = MockRepository.GenerateStub<BaseDataType>();
var dataTypeData = MockRepository.GenerateMock<DefaultData>(baseDataType);
dataTypeData.Stub(x => x.Value).CallOriginalMethod(OriginalCallOptions.NoExpectation);
var dataTypeMock = new Mock<BaseDataType>();
var dataTypeDataMock = new Mock<DefaultData>(dataTypeMock.Object);
// Act
((IDataValueSetter)dataTypeData).SetValue("Hello world", DataTypeDatabaseType.Nvarchar.ToString());
var val = dataTypeData.Value;
((IDataValueSetter)dataTypeDataMock.Object).SetValue("Hello world", DataTypeDatabaseType.Nvarchar.ToString());
var val = dataTypeDataMock.Object.Value;
// Assert
dataTypeData.AssertWasNotCalled(data => data.LoadValueFromDatabase());
dataTypeDataMock.Verify(data => data.LoadValueFromDatabase(), Times.Never());
}
[Test]
public void LoadValueFromDatabase_Is_Called_When_SetValue_Is_Not_Used()
{
// Arrange
var baseDataType = MockRepository.GenerateStub<BaseDataType>();
var dataTypeData = MockRepository.GenerateMock<DefaultData>(baseDataType);
dataTypeData
.Stub(data => data.LoadValueFromDatabase()).WhenCalled(invocation => Debug.WriteLine("asdf"));
dataTypeData.Stub(x => x.Value).CallOriginalMethod(OriginalCallOptions.NoExpectation);
var dataTypeMock = new Mock<BaseDataType>();
var dataTypeDataMock = new Mock<DefaultData>(dataTypeMock.Object) {CallBase = true};
dataTypeDataMock
.Setup(data => data.LoadValueFromDatabase()).Callback(() => Debug.WriteLine("asdf"));
// Act
var val = dataTypeData.Value;
var val = dataTypeDataMock.Object.Value;
// Assert
dataTypeData.AssertWasCalled(data => data.LoadValueFromDatabase());
dataTypeDataMock.Verify(data => data.LoadValueFromDatabase());
}
[Test]
@@ -65,22 +62,18 @@ namespace Umbraco.Tests.Models
// Arrange
var dataTypeId = Guid.NewGuid();
var dataTypeData = MockRepository.GenerateMock<IData, IDataValueSetter>();
dataTypeData
.Stub(data => data.ToXMl(Arg<XmlDocument>.Is.Anything))
.Return(null) // you have to call Return() even though we're about to override it
.WhenCalled(invocation =>
{
var xmlDoc = (XmlDocument) invocation.Arguments[0];
invocation.ReturnValue = xmlDoc.CreateElement("test");
});
var dataTypeDataMock = new Mock<IData>();
var dataValueSetterMock = dataTypeDataMock.As<IDataValueSetter>();
var dataType = MockRepository.GenerateStub<IDataType>();
dataType.Stub(type => type.Data).Return(dataTypeData);
dataTypeDataMock
.Setup(data => data.ToXMl(It.IsAny<XmlDocument>()))
.Returns((XmlDocument xdoc) => xdoc.CreateElement("test"));
var dataTypeSvc = MockRepository.GenerateStub<IDataTypeService>();
dataTypeSvc.Stub(service => service.GetDataTypeById(dataTypeId)).Return(dataType);
var dataTypeMock = new Mock<IDataType>();
dataTypeMock.Setup(type => type.Data).Returns(dataTypeDataMock.Object);
var dataTypeSvcMock = new Mock<IDataTypeService>();
dataTypeSvcMock.Setup(service => service.GetDataTypeById(dataTypeId)).Returns(dataTypeMock.Object);
var property = new Property(
1234,
@@ -92,11 +85,11 @@ namespace Umbraco.Tests.Models
// Act
var xml = property.ToXml(dataTypeSvc);
var xml = property.ToXml(dataTypeSvcMock.Object);
// Assert
((IDataValueSetter)dataTypeData).AssertWasCalled(setter => setter.SetValue("Hello world", DataTypeDatabaseType.Nvarchar.ToString()));
dataValueSetterMock.Verify(setter => setter.SetValue("Hello world", DataTypeDatabaseType.Nvarchar.ToString()));
}
[TestCase(DataTypeDatabaseType.Nvarchar)]
@@ -105,7 +98,7 @@ namespace Umbraco.Tests.Models
[TestCase(DataTypeDatabaseType.Ntext)]
public void DefaultData_SetValue_Ensures_Empty_String_When_Null_Value_Any_Data_Type(DataTypeDatabaseType type)
{
var defaultData = new DefaultData(MockRepository.GenerateMock<BaseDataType>());
var defaultData = new DefaultData(new Mock<BaseDataType>().Object);
((IDataValueSetter)defaultData).SetValue(null, type.ToString());
@@ -1,5 +1,5 @@
using Moq;
using NUnit.Framework;
using Rhino.Mocks;
using Umbraco.Tests.TestHelpers;
using Umbraco.Web.Routing;
using umbraco.BusinessLogic;
@@ -31,8 +31,10 @@ namespace Umbraco.Tests.Routing
var lookup = new ContentFinderByPageIdQuery();
//we need to manually stub the return output of HttpContext.Request["umbPageId"]
routingContext.UmbracoContext.HttpContext.Request.Stub(x => x["umbPageID"])
.Return(routingContext.UmbracoContext.HttpContext.Request.QueryString["umbPageID"]);
var requestMock = Mock.Get(routingContext.UmbracoContext.HttpContext.Request);
requestMock.Setup(x => x["umbPageID"])
.Returns(routingContext.UmbracoContext.HttpContext.Request.QueryString["umbPageID"]);
var result = lookup.TryFindContent(docRequest);
@@ -1,6 +1,6 @@
using System.Web;
using System.Web.Routing;
using Rhino.Mocks;
using Moq;
using Umbraco.Tests.TestHelpers;
namespace Umbraco.Tests.Routing
@@ -31,7 +31,8 @@ namespace Umbraco.Tests.Routing
var data = routes.GetRouteData(httpContext);
//set the route data on the request context
httpContext.Request.RequestContext.Stub(x => x.RouteData).Return(data);
var requestMock = Mock.Get(httpContext.Request.RequestContext);
requestMock.Setup(x => x.RouteData).Returns(data);
return data;
}
@@ -6,7 +6,7 @@ using System.Security;
using System.Text;
using System.Web;
using System.Web.Routing;
using Rhino.Mocks;
using Moq;
namespace Umbraco.Tests.TestHelpers
{
@@ -53,55 +53,61 @@ namespace Umbraco.Tests.TestHelpers
{
//Request context
RequestContext = MockRepository.GenerateMock<RequestContext>();
var requestContextMock = new Mock<RequestContext>();
RequestContext = requestContextMock.Object;
//Cookie collection
var cookieCollection = new HttpCookieCollection();
cookieCollection.Add(new HttpCookie("UMB_UCONTEXT", "FBA996E7-D6BE-489B-B199-2B0F3D2DD826"));
//Request
var request = MockRepository.GenerateMock<HttpRequestBase>();
request.Stub(x => x.AppRelativeCurrentExecutionFilePath).Return("~" + fullUrl.AbsolutePath);
request.Stub(x => x.PathInfo).Return(string.Empty);
request.Stub(x => x.RawUrl).Return(VirtualPathUtility.ToAbsolute("~" + fullUrl.AbsolutePath, "/"));
request.Stub(x => x.RequestContext).Return(RequestContext);
request.Stub(x => x.Url).Return(fullUrl);
request.Stub(x => x.ApplicationPath).Return("/");
request.Stub(x => x.Cookies).Return(cookieCollection);
request.Stub(x => x.ServerVariables).Return(new NameValueCollection());
var requestMock = new Mock<HttpRequestBase>();
requestMock.Setup(x => x.AppRelativeCurrentExecutionFilePath).Returns("~" + fullUrl.AbsolutePath);
requestMock.Setup(x => x.PathInfo).Returns(string.Empty);
requestMock.Setup(x => x.RawUrl).Returns(VirtualPathUtility.ToAbsolute("~" + fullUrl.AbsolutePath, "/"));
requestMock.Setup(x => x.RequestContext).Returns(RequestContext);
requestMock.Setup(x => x.Url).Returns(fullUrl);
requestMock.Setup(x => x.ApplicationPath).Returns("/");
requestMock.Setup(x => x.Cookies).Returns(cookieCollection);
requestMock.Setup(x => x.ServerVariables).Returns(new NameValueCollection());
var queryStrings = HttpUtility.ParseQueryString(fullUrl.Query);
request.Stub(x => x.QueryString).Return(queryStrings);
request.Stub(x => x.Form).Return(new NameValueCollection());
requestMock.Setup(x => x.QueryString).Returns(queryStrings);
requestMock.Setup(x => x.Form).Returns(new NameValueCollection());
//Cache
var cache = MockRepository.GenerateMock<HttpCachePolicyBase>();
var cacheMock = new Mock<HttpCachePolicyBase>();
//Response
//var response = new FakeHttpResponse();
var response = MockRepository.GenerateMock<HttpResponseBase>();
response.Stub(x => x.ApplyAppPathModifier(null)).IgnoreArguments().Do(new Func<string, string>(appPath => appPath));
response.Stub(x => x.Cache).Return(cache);
var responseMock = new Mock<HttpResponseBase>();
responseMock.Setup(x => x.ApplyAppPathModifier(It.IsAny<string>())).Returns((string s) => s);
responseMock.Setup(x => x.Cache).Returns(cacheMock.Object);
//Server
var server = MockRepository.GenerateStub<HttpServerUtilityBase>();
server.Stub(x => x.MapPath(Arg<string>.Is.Anything)).Return(Environment.CurrentDirectory);
var serverMock = new Mock<HttpServerUtilityBase>();
serverMock.Setup(x => x.MapPath(It.IsAny<string>())).Returns(Environment.CurrentDirectory);
//HTTP Context
HttpContext = MockRepository.GenerateMock<HttpContextBase>();
HttpContext.Stub(x => x.Cache).Return(HttpRuntime.Cache);
HttpContext.Stub(x => x.Items).Return(new Dictionary<object, object>());
HttpContext.Stub(x => x.Request).Return(request);
HttpContext.Stub(x => x.Server).Return(server);
HttpContext.Stub(x => x.Response).Return(response);
var httpContextMock = new Mock<HttpContextBase>();
httpContextMock.Setup(x => x.Cache).Returns(HttpRuntime.Cache);
httpContextMock.Setup(x => x.Items).Returns(new Dictionary<object, object>());
httpContextMock.Setup(x => x.Request).Returns(requestMock.Object);
httpContextMock.Setup(x => x.Server).Returns(serverMock.Object);
httpContextMock.Setup(x => x.Response).Returns(responseMock.Object);
RequestContext.Stub(x => x.HttpContext).Return(HttpContext);
HttpContext = httpContextMock.Object;
requestContextMock.Setup(x => x.HttpContext).Returns(httpContextMock.Object);
if (routeData != null)
{
RequestContext.Stub(x => x.RouteData).Return(routeData);
requestContextMock.Setup(x => x.RouteData).Returns(routeData);
}
}
}
+3 -3
View File
@@ -68,6 +68,9 @@
<Private>True</Private>
<HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
</Reference>
<Reference Include="Moq">
<HintPath>..\packages\Moq.4.1.1309.1617\lib\net40\Moq.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll</HintPath>
@@ -76,9 +79,6 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\NUnit.2.6.2\lib\nunit.framework.dll</HintPath>
</Reference>
<Reference Include="Rhino.Mocks">
<HintPath>..\packages\RhinoMocks.3.6.1\lib\net\Rhino.Mocks.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.configuration" />
<Reference Include="System.Core" />
+1 -1
View File
@@ -12,9 +12,9 @@
<package id="Microsoft.AspNet.WebPages" version="2.0.30506.0" targetFramework="net40" />
<package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net40" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
<package id="Moq" version="4.1.1309.1617" targetFramework="net40" />
<package id="Newtonsoft.Json" version="4.5.11" targetFramework="net40" />
<package id="NUnit" version="2.6.2" targetFramework="net40" />
<package id="RhinoMocks" version="3.6.1" targetFramework="net40" />
<package id="Selenium.WebDriver" version="2.32.0" targetFramework="net40" />
<package id="SharpZipLib" version="0.86.0" targetFramework="net40" />
<package id="SqlServerCE" version="4.0.0.0" targetFramework="net40" />
+22 -6
View File
@@ -103,19 +103,24 @@ namespace Umbraco.Web.Mvc
private void UpdateRouteDataForRequest(RenderModel renderModel, RequestContext requestContext)
{
if (renderModel == null) throw new ArgumentNullException("renderModel");
if (requestContext == null) throw new ArgumentNullException("requestContext");
requestContext.RouteData.DataTokens["umbraco"] = renderModel;
// the rest should not change -- it's only the published content that has changed
}
/// <summary>
/// <summary>
/// Checks the request and query strings to see if it matches the definition of having a Surface controller
/// posted/get value, if so, then we return a PostedDataProxyInfo object with the correct information.
/// </summary>
/// <param name="requestContext"></param>
/// <returns></returns>
private static PostedDataProxyInfo GetFormInfo(RequestContext requestContext)
{
//if it is a POST/GET then a value must be in the request
{
if (requestContext == null) throw new ArgumentNullException("requestContext");
//if it is a POST/GET then a value must be in the request
if (requestContext.HttpContext.Request.QueryString["ufprt"].IsNullOrWhiteSpace()
&& requestContext.HttpContext.Request.Form["ufprt"].IsNullOrWhiteSpace())
{
@@ -197,7 +202,10 @@ namespace Umbraco.Web.Mvc
/// <param name="postedInfo"></param>
private IHttpHandler HandlePostedValues(RequestContext requestContext, PostedDataProxyInfo postedInfo)
{
//set the standard route values/tokens
if (requestContext == null) throw new ArgumentNullException("requestContext");
if (postedInfo == null) throw new ArgumentNullException("postedInfo");
//set the standard route values/tokens
requestContext.RouteData.Values["controller"] = postedInfo.ControllerName;
requestContext.RouteData.Values["action"] = postedInfo.ActionName;
@@ -256,6 +264,9 @@ namespace Umbraco.Web.Mvc
/// <returns></returns>
internal virtual RouteDefinition GetUmbracoRouteDefinition(RequestContext requestContext, PublishedContentRequest publishedContentRequest)
{
if (requestContext == null) throw new ArgumentNullException("requestContext");
if (publishedContentRequest == null) throw new ArgumentNullException("publishedContentRequest");
var defaultControllerType = DefaultRenderMvcControllerResolver.Current.GetDefaultControllerType();
var defaultControllerName = ControllerExtensions.GetControllerName(defaultControllerType);
//creates the default route definition which maps to the 'UmbracoController' controller
@@ -319,7 +330,9 @@ namespace Umbraco.Web.Mvc
internal IHttpHandler GetHandlerOnMissingTemplate(PublishedContentRequest pcr)
{
// missing template, so we're in a 404 here
if (pcr == null) throw new ArgumentNullException("pcr");
// missing template, so we're in a 404 here
// so the content, if any, is a custom 404 page of some sort
if (!pcr.HasPublishedContent)
@@ -348,7 +361,10 @@ namespace Umbraco.Web.Mvc
/// <param name="publishedContentRequest"></param>
internal IHttpHandler GetHandlerForRoute(RequestContext requestContext, PublishedContentRequest publishedContentRequest)
{
var routeDef = GetUmbracoRouteDefinition(requestContext, publishedContentRequest);
if (requestContext == null) throw new ArgumentNullException("requestContext");
if (publishedContentRequest == null) throw new ArgumentNullException("publishedContentRequest");
var routeDef = GetUmbracoRouteDefinition(requestContext, publishedContentRequest);
//Need to check for a special case if there is form data being posted back to an Umbraco URL
var postedInfo = GetFormInfo(requestContext);