diff --git a/src/Umbraco.Tests/Models/ContentTests.cs b/src/Umbraco.Tests/Models/ContentTests.cs index 0268689d39..beae30fd77 100644 --- a/src/Umbraco.Tests/Models/ContentTests.cs +++ b/src/Umbraco.Tests/Models/ContentTests.cs @@ -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.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(); + 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); diff --git a/src/Umbraco.Tests/Models/DataValueSetterTests.cs b/src/Umbraco.Tests/Models/DataValueSetterTests.cs index 891c53dd0d..1785bda3c7 100644 --- a/src/Umbraco.Tests/Models/DataValueSetterTests.cs +++ b/src/Umbraco.Tests/Models/DataValueSetterTests.cs @@ -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(); - var dataTypeData = MockRepository.GenerateMock(baseDataType); - dataTypeData.Stub(x => x.Value).CallOriginalMethod(OriginalCallOptions.NoExpectation); + var dataTypeMock = new Mock(); + var dataTypeDataMock = new Mock(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(); - var dataTypeData = MockRepository.GenerateMock(baseDataType); - dataTypeData - .Stub(data => data.LoadValueFromDatabase()).WhenCalled(invocation => Debug.WriteLine("asdf")); - dataTypeData.Stub(x => x.Value).CallOriginalMethod(OriginalCallOptions.NoExpectation); + var dataTypeMock = new Mock(); + var dataTypeDataMock = new Mock(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(); - - dataTypeData - .Stub(data => data.ToXMl(Arg.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(); + var dataValueSetterMock = dataTypeDataMock.As(); - var dataType = MockRepository.GenerateStub(); - dataType.Stub(type => type.Data).Return(dataTypeData); + dataTypeDataMock + .Setup(data => data.ToXMl(It.IsAny())) + .Returns((XmlDocument xdoc) => xdoc.CreateElement("test")); - var dataTypeSvc = MockRepository.GenerateStub(); - dataTypeSvc.Stub(service => service.GetDataTypeById(dataTypeId)).Return(dataType); + var dataTypeMock = new Mock(); + dataTypeMock.Setup(type => type.Data).Returns(dataTypeDataMock.Object); + + var dataTypeSvcMock = new Mock(); + 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()); + var defaultData = new DefaultData(new Mock().Object); ((IDataValueSetter)defaultData).SetValue(null, type.ToString()); diff --git a/src/Umbraco.Tests/Routing/ContentFinderByPageIdQueryTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByPageIdQueryTests.cs index 4807a02ae1..c21360fa7c 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByPageIdQueryTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByPageIdQueryTests.cs @@ -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); diff --git a/src/Umbraco.Tests/Routing/RouteTestExtensions.cs b/src/Umbraco.Tests/Routing/RouteTestExtensions.cs index 09c1635f63..a47ed3ef02 100644 --- a/src/Umbraco.Tests/Routing/RouteTestExtensions.cs +++ b/src/Umbraco.Tests/Routing/RouteTestExtensions.cs @@ -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; } diff --git a/src/Umbraco.Tests/TestHelpers/FakeHttpContextFactory.cs b/src/Umbraco.Tests/TestHelpers/FakeHttpContextFactory.cs index 05ba17839c..abb477d3c6 100644 --- a/src/Umbraco.Tests/TestHelpers/FakeHttpContextFactory.cs +++ b/src/Umbraco.Tests/TestHelpers/FakeHttpContextFactory.cs @@ -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(); + var requestContextMock = new Mock(); + + 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(); - 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(); + 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(); + var cacheMock = new Mock(); //Response //var response = new FakeHttpResponse(); - var response = MockRepository.GenerateMock(); - response.Stub(x => x.ApplyAppPathModifier(null)).IgnoreArguments().Do(new Func(appPath => appPath)); - response.Stub(x => x.Cache).Return(cache); + var responseMock = new Mock(); + responseMock.Setup(x => x.ApplyAppPathModifier(It.IsAny())).Returns((string s) => s); + responseMock.Setup(x => x.Cache).Returns(cacheMock.Object); //Server - var server = MockRepository.GenerateStub(); - server.Stub(x => x.MapPath(Arg.Is.Anything)).Return(Environment.CurrentDirectory); + var serverMock = new Mock(); + serverMock.Setup(x => x.MapPath(It.IsAny())).Returns(Environment.CurrentDirectory); //HTTP Context - HttpContext = MockRepository.GenerateMock(); - HttpContext.Stub(x => x.Cache).Return(HttpRuntime.Cache); - HttpContext.Stub(x => x.Items).Return(new Dictionary()); - 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(); + httpContextMock.Setup(x => x.Cache).Returns(HttpRuntime.Cache); + httpContextMock.Setup(x => x.Items).Returns(new Dictionary()); + 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); } + + } } diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 0003de7785..13daaf791c 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -68,6 +68,9 @@ True ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll + + ..\packages\Moq.4.1.1309.1617\lib\net40\Moq.dll + False ..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll @@ -76,9 +79,6 @@ False ..\packages\NUnit.2.6.2\lib\nunit.framework.dll - - ..\packages\RhinoMocks.3.6.1\lib\net\Rhino.Mocks.dll - diff --git a/src/Umbraco.Tests/packages.config b/src/Umbraco.Tests/packages.config index fbf89daf7d..e9ff4d1afc 100644 --- a/src/Umbraco.Tests/packages.config +++ b/src/Umbraco.Tests/packages.config @@ -12,9 +12,9 @@ + - diff --git a/src/Umbraco.Web/Mvc/RenderRouteHandler.cs b/src/Umbraco.Web/Mvc/RenderRouteHandler.cs index 56c4059f95..d44ca73a59 100644 --- a/src/Umbraco.Web/Mvc/RenderRouteHandler.cs +++ b/src/Umbraco.Web/Mvc/RenderRouteHandler.cs @@ -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 } - /// + /// /// 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. /// /// /// 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 /// 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 /// 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 /// 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);