From 4234bb1cd9f0520c17cf4490d424ec663cc4ce99 Mon Sep 17 00:00:00 2001 From: sitereactor Date: Tue, 6 Nov 2012 12:42:59 -0100 Subject: [PATCH] Moving content xml test to seperate test class for easier teardown of test. Adding test to account for UserService using httpcontext for looking up current backoffice user. --- src/Umbraco.Tests/Models/ContentXmlTest.cs | 70 ++++++++++++++++ .../Services/ContentServiceTests.cs | 82 +++++++++---------- .../TestHelpers/FakeHttpContextFactory.cs | 7 +- src/Umbraco.Tests/Umbraco.Tests.csproj | 1 + 4 files changed, 115 insertions(+), 45 deletions(-) create mode 100644 src/Umbraco.Tests/Models/ContentXmlTest.cs diff --git a/src/Umbraco.Tests/Models/ContentXmlTest.cs b/src/Umbraco.Tests/Models/ContentXmlTest.cs new file mode 100644 index 0000000000..1c8bca9bdd --- /dev/null +++ b/src/Umbraco.Tests/Models/ContentXmlTest.cs @@ -0,0 +1,70 @@ +using System; +using System.Xml.Linq; +using NUnit.Framework; +using Umbraco.Core; +using Umbraco.Core.Models; +using Umbraco.Core.ObjectResolution; +using Umbraco.Tests.TestHelpers; +using Umbraco.Tests.TestHelpers.Entities; +using umbraco.editorControls.tinyMCE3; +using umbraco.interfaces; + +namespace Umbraco.Tests.Models +{ + [TestFixture] + public class ContentXmlTest : BaseDatabaseFactoryTest + { + [SetUp] + public override void Initialize() + { + //this ensures its reset + PluginManager.Current = new PluginManager(); + + //for testing, we'll specify which assemblies are scanned for the PluginTypeResolver + PluginManager.Current.AssembliesToScan = new[] + { + typeof(IDataType).Assembly, + typeof(tinyMCE3dataType).Assembly + }; + + DataTypesResolver.Current = new DataTypesResolver( + PluginManager.Current.ResolveDataTypes()); + + base.Initialize(); + } + + [TearDown] + public override void TearDown() + { + DatabaseContext.Database.Dispose(); + + TestHelper.ClearDatabase(); + + //reset the app context + ApplicationContext.Current = null; + Resolution.IsFrozen = false; + + string path = TestHelper.CurrentAssemblyDirectory; + AppDomain.CurrentDomain.SetData("DataDirectory", null); + } + [Test] + public void Can_Generate_Xml_Representation_Of_Content() + { + // Arrange + var contentType = MockedContentTypes.CreateTextpageContentType(); + ServiceContext.ContentTypeService.Save(contentType); + + var content = MockedContent.CreateTextpageContent(contentType, "Root Home", -1); + ServiceContext.ContentService.Save(content, 0); + + var nodeName = content.ContentType.Alias.ToUmbracoAlias(StringAliasCaseType.CamelCase, true); + + // Act + XElement element = content.ToXml(); + + // Assert + Assert.That(element, Is.Not.Null); + Assert.That(element.Name.LocalName, Is.EqualTo(nodeName)); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs index 96cfc45fc4..21c61c1061 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs @@ -1,14 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; using NUnit.Framework; -using Umbraco.Core; using Umbraco.Core.Models; +using Umbraco.Core.Models.Rdbms; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; -using umbraco.editorControls.tinyMCE3; -using umbraco.interfaces; namespace Umbraco.Tests.Services { @@ -23,19 +20,6 @@ namespace Umbraco.Tests.Services [SetUp] public override void Initialize() { - //this ensures its reset - PluginManager.Current = new PluginManager(); - - //for testing, we'll specify which assemblies are scanned for the PluginTypeResolver - PluginManager.Current.AssembliesToScan = new[] - { - typeof(IDataType).Assembly, - typeof(tinyMCE3dataType).Assembly - }; - - DataTypesResolver.Current = new DataTypesResolver( - PluginManager.Current.ResolveDataTypes()); - base.Initialize(); CreateTestData(); @@ -44,15 +28,9 @@ namespace Umbraco.Tests.Services [TearDown] public override void TearDown() { - TestHelper.ClearDatabase(); - base.TearDown(); } - //TODO Write a test that creates content, but uses the HttpContext to resolve the backoffice user - //Just need to add a contextId cookie to the FakeHttpContextFactory in Umbraco.Tests.TestHelpers - //Create/insert a new UserDto for testing. - [Test] public void Can_Create_Content() { @@ -67,6 +45,44 @@ namespace Umbraco.Tests.Services Assert.That(content.HasIdentity, Is.False); } + [Test] + public void Can_Create_Content_Using_HttpContext() + { + // Arrange + var userId = + Convert.ToInt32( + DatabaseContext.Database.Insert(new UserDto + { + ContentStartId = -1, + DefaultPermissions = null, + DefaultToLiveEditing = false, + Disabled = false, + Email = "my@email.com", + Login = "editor", + MediaStartId = -1, + NoConsole = false, + Password = "1234", + Type = 3, + UserLanguage = "en", + UserName = "John Doe the Editor" + })); + DatabaseContext.Database.Insert(new UserLoginDto + { + UserId = userId, + ContextId = new Guid("FBA996E7-D6BE-489B-B199-2B0F3D2DD826"), + Timeout = 634596443995451258 + }); + var contentService = ServiceContext.ContentService; + + // Act + var content = contentService.CreateContent(-1, "umbTextpage"); + + // Assert + Assert.That(content, Is.Not.Null); + Assert.That(content.HasIdentity, Is.False); + Assert.That(content.Creator.Id, Is.EqualTo(userId)); + } + [Test] public void Cannot_Create_Content_With_Non_Existing_ContentType_Alias() { @@ -568,26 +584,6 @@ namespace Umbraco.Tests.Services Assert.AreEqual(subpage2.Name, rollback.Name); } - [Test] - public void Can_Generate_Xml_Representation_Of_Content() - { - // Arrange - var contentType = MockedContentTypes.CreateTextpageContentType(); - ServiceContext.ContentTypeService.Save(contentType); - - var content = MockedContent.CreateTextpageContent(contentType, "Root Home", -1); - ServiceContext.ContentService.Save(content, 0); - - var nodeName = content.ContentType.Alias.ToUmbracoAlias(StringAliasCaseType.CamelCase, true); - - // Act - XElement element = content.ToXml(); - - // Assert - Assert.That(element, Is.Not.Null); - Assert.That(element.Name.LocalName, Is.EqualTo(nodeName)); - } - public void CreateTestData() { //NOTE Maybe not the best way to create/save test data as we are using the services, which are being tested. diff --git a/src/Umbraco.Tests/TestHelpers/FakeHttpContextFactory.cs b/src/Umbraco.Tests/TestHelpers/FakeHttpContextFactory.cs index 20a83fd7d4..05ba17839c 100644 --- a/src/Umbraco.Tests/TestHelpers/FakeHttpContextFactory.cs +++ b/src/Umbraco.Tests/TestHelpers/FakeHttpContextFactory.cs @@ -55,8 +55,11 @@ namespace Umbraco.Tests.TestHelpers RequestContext = MockRepository.GenerateMock(); - //Request + //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); @@ -64,7 +67,7 @@ namespace Umbraco.Tests.TestHelpers 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(new HttpCookieCollection()); + request.Stub(x => x.Cookies).Return(cookieCollection); request.Stub(x => x.ServerVariables).Return(new NameValueCollection()); var queryStrings = HttpUtility.ParseQueryString(fullUrl.Query); request.Stub(x => x.QueryString).Return(queryStrings); diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index aee1088fbd..abbb7caa1c 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -95,6 +95,7 @@ +