diff --git a/src/Umbraco.Infrastructure/Composing/UmbracoServiceProviderFactory.cs b/src/Umbraco.Infrastructure/Composing/UmbracoServiceProviderFactory.cs
index cc78577f7e..56a972a64b 100644
--- a/src/Umbraco.Infrastructure/Composing/UmbracoServiceProviderFactory.cs
+++ b/src/Umbraco.Infrastructure/Composing/UmbracoServiceProviderFactory.cs
@@ -2,7 +2,6 @@
using LightInject.Microsoft.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using System;
-using System.Diagnostics;
using Umbraco.Composing;
using Umbraco.Core.Composing.LightInject;
using Umbraco.Core.Configuration;
diff --git a/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs b/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs
index 6c338fc260..05d4744526 100644
--- a/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs
+++ b/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs
@@ -112,16 +112,16 @@ namespace Umbraco.Web.Media
if (content == null) throw new ArgumentNullException(nameof(content));
if (autoFillConfig == null) throw new ArgumentNullException(nameof(autoFillConfig));
- if (!string.IsNullOrEmpty(autoFillConfig.WidthFieldAlias) && content.Properties.Contains(autoFillConfig.WidthFieldAlias))
+ if (!string.IsNullOrWhiteSpace(autoFillConfig.WidthFieldAlias) && content.Properties.Contains(autoFillConfig.WidthFieldAlias))
content.Properties[autoFillConfig.WidthFieldAlias].SetValue(size.HasValue ? size.Value.Width.ToInvariantString() : string.Empty, culture, segment);
- if (!string.IsNullOrEmpty(autoFillConfig.HeightFieldAlias) && content.Properties.Contains(autoFillConfig.HeightFieldAlias))
+ if (!string.IsNullOrWhiteSpace(autoFillConfig.HeightFieldAlias) && content.Properties.Contains(autoFillConfig.HeightFieldAlias))
content.Properties[autoFillConfig.HeightFieldAlias].SetValue(size.HasValue ? size.Value.Height.ToInvariantString() : string.Empty, culture, segment);
- if (!string.IsNullOrEmpty(autoFillConfig.LengthFieldAlias) && content.Properties.Contains(autoFillConfig.LengthFieldAlias))
+ if (!string.IsNullOrWhiteSpace(autoFillConfig.LengthFieldAlias) && content.Properties.Contains(autoFillConfig.LengthFieldAlias))
content.Properties[autoFillConfig.LengthFieldAlias].SetValue(length, culture, segment);
- if (!string.IsNullOrEmpty(autoFillConfig.ExtensionFieldAlias) && content.Properties.Contains(autoFillConfig.ExtensionFieldAlias))
+ if (!string.IsNullOrWhiteSpace(autoFillConfig.ExtensionFieldAlias) && content.Properties.Contains(autoFillConfig.ExtensionFieldAlias))
content.Properties[autoFillConfig.ExtensionFieldAlias].SetValue(extension, culture, segment);
}
diff --git a/src/Umbraco.Tests.Integration/TestServerTest/UmbracoTestServerTestBase.cs b/src/Umbraco.Tests.Integration/TestServerTest/UmbracoTestServerTestBase.cs
index d366ea49ee..d5c2616c6c 100644
--- a/src/Umbraco.Tests.Integration/TestServerTest/UmbracoTestServerTestBase.cs
+++ b/src/Umbraco.Tests.Integration/TestServerTest/UmbracoTestServerTestBase.cs
@@ -32,7 +32,16 @@ namespace Umbraco.Tests.Integration.TestServerTest
}
+ ///
+ /// Get the service from the underlying container that is also used by the .
+ ///
protected T GetRequiredService() => Factory.Services.GetRequiredService();
+
+ ///
+ /// Prepare a url before using .
+ /// This returns the url but also sets the HttpContext.request into to use this url.
+ ///
+ /// The string URL of the controller action.
protected string PrepareUrl(Expression> methodSelector)
where T : UmbracoApiController
{
diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj
index a2ebdd5e66..d09c756cdd 100644
--- a/src/Umbraco.Tests/Umbraco.Tests.csproj
+++ b/src/Umbraco.Tests/Umbraco.Tests.csproj
@@ -252,7 +252,6 @@
-
diff --git a/src/Umbraco.Tests/Web/Controllers/ContentControllerTests.cs b/src/Umbraco.Tests/Web/Controllers/ContentControllerTests.cs
deleted file mode 100644
index b92db6d4ee..0000000000
--- a/src/Umbraco.Tests/Web/Controllers/ContentControllerTests.cs
+++ /dev/null
@@ -1,518 +0,0 @@
-// using System;
-// using System.Collections.Generic;
-// using System.Globalization;
-// using System.Linq;
-// using System.Net;
-// using System.Net.Http;
-// using System.Net.Http.Headers;
-// using System.Web.Http;
-// using Moq;
-// using Newtonsoft.Json;
-// using Newtonsoft.Json.Linq;
-// using NUnit.Framework;
-// using Umbraco.Core;
-// using Umbraco.Core.Cache;
-// using Umbraco.Core.Configuration;
-// using Umbraco.Core.Dictionary;
-// using Umbraco.Core.Logging;
-// using Umbraco.Core.Models;
-// using Umbraco.Core.Models.Entities;
-// using Umbraco.Core.Models.Membership;
-// using Umbraco.Core.Persistence;
-// using Umbraco.Core.PropertyEditors;
-// using Umbraco.Core.Services;
-// using Umbraco.Tests.TestHelpers;
-// using Umbraco.Tests.TestHelpers.ControllerTesting;
-// using Umbraco.Tests.TestHelpers.Entities;
-// using Umbraco.Tests.Testing;
-// using Umbraco.Web;
-// using Umbraco.Web.Actions;
-// using Umbraco.Web.Editors;
-// using Umbraco.Web.Models.ContentEditing;
-// using Umbraco.Web.PropertyEditors;
-// using Umbraco.Web.Trees;
-// using Umbraco.Web.WebApi;
-// using Umbraco.Web.Composing;
-// using Task = System.Threading.Tasks.Task;
-// using Umbraco.Core.Mapping;
-// using Umbraco.Web.Routing;
-//
-// namespace Umbraco.Tests.Web.Controllers
-// {
-// [TestFixture]
-// [UmbracoTest(Database = UmbracoTestOptions.Database.None)]
-// public class ContentControllerTests : TestWithDatabaseBase
-// {
-// private IContentType _contentTypeForMockedContent;
-//
-// public override void SetUp()
-// {
-// base.SetUp();
-// _contentTypeForMockedContent = null;
-// }
-//
-// protected override void ComposeApplication(bool withApplication)
-// {
-// base.ComposeApplication(withApplication);
-//
-// //Replace with mockable services:
-//
-// var userServiceMock = new Mock();
-// userServiceMock.Setup(service => service.GetUserById(It.IsAny()))
-// .Returns((int id) => id == 1234 ? new User(TestObjects.GetGlobalSettings(), 1234, "Test", "test@test.com", "test@test.com", "", null, new List(), new int[0], new int[0]) : null);
-// userServiceMock.Setup(x => x.GetProfileById(It.IsAny()))
-// .Returns((int id) => id == 1234 ? new User(TestObjects.GetGlobalSettings(), 1234, "Test", "test@test.com", "test@test.com", "", null, new List(), new int[0], new int[0]) : null);
-// userServiceMock.Setup(service => service.GetPermissionsForPath(It.IsAny(), It.IsAny()))
-// .Returns(new EntityPermissionSet(123, new EntityPermissionCollection(new[]
-// {
-// new EntityPermission(0, 123, new[]
-// {
-// ActionBrowse.ActionLetter.ToString(),
-// ActionUpdate.ActionLetter.ToString(),
-// ActionPublish.ActionLetter.ToString(),
-// ActionNew.ActionLetter.ToString()
-// }),
-// })));
-//
-// var entityService = new Mock();
-// entityService.Setup(x => x.GetAllPaths(UmbracoObjectTypes.Document, It.IsAny()))
-// .Returns((UmbracoObjectTypes objType, int[] ids) => ids.Select(x => new TreeEntityPath { Path = $"-1,{x}", Id = x }).ToList());
-// entityService.Setup(x => x.GetKey(It.IsAny(), UmbracoObjectTypes.DataType))
-// .Returns((int id, UmbracoObjectTypes objType) =>
-// {
-// switch (id)
-// {
-// case Constants.DataTypes.Textbox:
-// return Attempt.Succeed(Constants.DataTypes.Guids.TextstringGuid);
-// case Constants.DataTypes.RichtextEditor:
-// return Attempt.Succeed(Constants.DataTypes.Guids.RichtextEditorGuid);
-// }
-// return Attempt.Fail();
-// });
-//
-//
-// var dataTypeService = new Mock();
-// dataTypeService.Setup(service => service.GetDataType(It.IsAny()))
-// .Returns(Mock.Of(type => type.Id == 9876 && type.Name == "text"));
-// dataTypeService.Setup(service => service.GetDataType(-87)) //the RTE
-// .Returns(Mock.Of(type => type.Id == -87 && type.Name == "Rich text" && type.Configuration == new RichTextConfiguration()));
-//
-// var langService = new Mock();
-// langService.Setup(x => x.GetAllLanguages()).Returns(new[] {
-// Mock.Of(x => x.IsoCode == "en-US"),
-// Mock.Of(x => x.IsoCode == "es-ES"),
-// Mock.Of(x => x.IsoCode == "fr-FR")
-// });
-//
-// var textService = new Mock();
-// textService.Setup(x => x.Localize(It.IsAny(), It.IsAny(), It.IsAny>())).Returns("text");
-//
-// Composition.RegisterUnique(f => Mock.Of());
-// Composition.RegisterUnique(f => Mock.Of());
-// Composition.RegisterUnique(f => userServiceMock.Object);
-// Composition.RegisterUnique(f => entityService.Object);
-// Composition.RegisterUnique(f => dataTypeService.Object);
-// Composition.RegisterUnique(f => langService.Object);
-// Composition.RegisterUnique(f => textService.Object);
-// Composition.RegisterUnique(f => Mock.Of());
-// Composition.RegisterUnique(f => new UmbracoApiControllerTypeCollection(new Type[] { }));
-// }
-//
-// private MultipartFormDataContent GetMultiPartRequestContent(string json)
-// {
-// var multiPartBoundary = "----WebKitFormBoundary123456789";
-// return new MultipartFormDataContent(multiPartBoundary)
-// {
-// new StringContent(json)
-// {
-// Headers =
-// {
-// ContentDisposition = new ContentDispositionHeaderValue("form-data")
-// {
-// Name = "contentItem"
-// }
-// }
-// }
-// };
-// }
-//
-// private IContentType GetMockedContentType()
-// {
-// var contentType = MockedContentTypes.CreateSimpleContentType();
-// //ensure things have ids
-// var ids = 888;
-// foreach (var g in contentType.CompositionPropertyGroups)
-// {
-// g.Id = ids;
-// ids++;
-// }
-// foreach (var p in contentType.CompositionPropertyGroups)
-// {
-// p.Id = ids;
-// ids++;
-// }
-//
-// return contentType;
-// }
-//
-// private IContent GetMockedContent()
-// {
-// if (_contentTypeForMockedContent == null)
-// {
-// _contentTypeForMockedContent = GetMockedContentType();
-// Mock.Get(ServiceContext.ContentTypeService)
-// .Setup(x => x.Get(_contentTypeForMockedContent.Id))
-// .Returns(_contentTypeForMockedContent);
-// Mock.Get(ServiceContext.ContentTypeService)
-// .As()
-// .Setup(x => x.Get(_contentTypeForMockedContent.Id))
-// .Returns(_contentTypeForMockedContent);
-// }
-//
-// var content = MockedContent.CreateSimpleContent(_contentTypeForMockedContent);
-// content.Id = 123;
-// content.Path = "-1,123";
-// return content;
-// }
-//
-// private const string PublishJsonInvariant = @"{
-// ""id"": 123,
-// ""contentTypeAlias"": ""page"",
-// ""parentId"": -1,
-// ""action"": ""save"",
-// ""variants"": [
-// {
-// ""name"": ""asdf"",
-// ""properties"": [
-// {
-// ""id"": 1,
-// ""alias"": ""title"",
-// ""value"": ""asdf""
-// }
-// ],
-// ""culture"": null,
-// ""save"": true,
-// ""publish"": true
-// }
-// ]
-// }";
-//
-// private const string PublishJsonVariant = @"{
-// ""id"": 123,
-// ""contentTypeAlias"": ""page"",
-// ""parentId"": -1,
-// ""action"": ""save"",
-// ""variants"": [
-// {
-// ""name"": ""asdf"",
-// ""properties"": [
-// {
-// ""id"": 1,
-// ""alias"": ""title"",
-// ""value"": ""asdf""
-// }
-// ],
-// ""culture"": ""en-US"",
-// ""save"": true,
-// ""publish"": true
-// },
-// {
-// ""name"": ""asdf"",
-// ""properties"": [
-// {
-// ""id"": 1,
-// ""alias"": ""title"",
-// ""value"": ""asdf""
-// }
-// ],
-// ""culture"": ""fr-FR"",
-// ""save"": true,
-// ""publish"": true
-// },
-// {
-// ""name"": ""asdf"",
-// ""properties"": [
-// {
-// ""id"": 1,
-// ""alias"": ""title"",
-// ""value"": ""asdf""
-// }
-// ],
-// ""culture"": ""es-ES"",
-// ""save"": true,
-// ""publish"": true
-// }
-// ]
-// }";
-//
-// ///
-// /// Returns 404 if the content wasn't found based on the ID specified
-// ///
-// ///
-// [Test]
-// public async Task PostSave_Validate_Existing_Content()
-// {
-// ApiController CtrlFactory(HttpRequestMessage message, IUmbracoContextAccessor umbracoContextAccessor)
-// {
-// var contentServiceMock = Mock.Get(ServiceContext.ContentService);
-// contentServiceMock.Setup(x => x.GetById(123)).Returns(() => null); //do not find it
-//
-// var propertyEditorCollection = new PropertyEditorCollection(new DataEditorCollection(Enumerable.Empty()));
-//
-// var controller = new ContentController(
-// Factory.GetInstance(),
-// propertyEditorCollection,
-// Factory.GetInstance(),
-// umbracoContextAccessor,
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// ShortStringHelper,
-// Factory.GetInstance(),
-// Factory.GetInstance());
-//
-// return controller;
-// }
-//
-// var runner = new TestRunner(CtrlFactory);
-// var response = await runner.Execute("Content", "PostSave", HttpMethod.Post,
-// content: GetMultiPartRequestContent(PublishJsonInvariant),
-// mediaTypeHeader: new MediaTypeWithQualityHeaderValue("multipart/form-data"),
-// assertOkResponse: false);
-//
-// Assert.AreEqual(HttpStatusCode.NotFound, response.Item1.StatusCode);
-// Assert.AreEqual(")]}',\n{\"Message\":\"content was not found\"}", response.Item1.Content.ReadAsStringAsync().Result);
-//
-// //var obj = JsonConvert.DeserializeObject>(response.Item2);
-// //Assert.AreEqual(0, obj.TotalItems);
-// }
-//
-// [Test]
-// public async Task PostSave_Validate_At_Least_One_Variant_Flagged_For_Saving()
-// {
-// ApiController CtrlFactory(HttpRequestMessage message, IUmbracoContextAccessor umbracoContextAccessor)
-// {
-// var propertyEditorCollection = new PropertyEditorCollection(new DataEditorCollection(Enumerable.Empty()));
-// var controller = new ContentController(
-// Factory.GetInstance(),
-// propertyEditorCollection,
-// Factory.GetInstance(),
-// umbracoContextAccessor,
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// ShortStringHelper,
-// Factory.GetInstance(),
-// Factory.GetInstance());
-//
-// return controller;
-// }
-//
-// var json = JsonConvert.DeserializeObject(PublishJsonInvariant);
-// //remove all save flaggs
-// ((JArray)json["variants"])[0]["save"] = false;
-//
-// var runner = new TestRunner(CtrlFactory);
-// var response = await runner.Execute("Content", "PostSave", HttpMethod.Post,
-// content: GetMultiPartRequestContent(JsonConvert.SerializeObject(json)),
-// mediaTypeHeader: new MediaTypeWithQualityHeaderValue("multipart/form-data"),
-// assertOkResponse: false);
-//
-// Assert.AreEqual(HttpStatusCode.NotFound, response.Item1.StatusCode);
-// Assert.AreEqual(")]}',\n{\"Message\":\"No variants flagged for saving\"}", response.Item1.Content.ReadAsStringAsync().Result);
-// }
-//
-// ///
-// /// Returns 404 if any of the posted properties dont actually exist
-// ///
-// ///
-// [Test]
-// public async Task PostSave_Validate_Properties_Exist()
-// {
-// ApiController CtrlFactory(HttpRequestMessage message, IUmbracoContextAccessor umbracoContextAccessor)
-// {
-// var contentServiceMock = Mock.Get(ServiceContext.ContentService);
-// contentServiceMock.Setup(x => x.GetById(123)).Returns(() => GetMockedContent());
-//
-// var propertyEditorCollection = new PropertyEditorCollection(new DataEditorCollection(Enumerable.Empty()));
-// var controller = new ContentController(
-// Factory.GetInstance(),
-// propertyEditorCollection,
-// Factory.GetInstance(),
-// umbracoContextAccessor,
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// ShortStringHelper,
-// Factory.GetInstance(),
-// Factory.GetInstance());
-//
-// return controller;
-// }
-//
-// var json = JsonConvert.DeserializeObject(PublishJsonInvariant);
-// //add a non-existent property to a variant being saved
-// var variantProps = (JArray)json["variants"].ElementAt(0)["properties"];
-// variantProps.Add(JObject.FromObject(new
-// {
-// id = 2,
-// alias = "doesntExist",
-// value = "hello"
-// }));
-//
-// var runner = new TestRunner(CtrlFactory);
-// var response = await runner.Execute("Content", "PostSave", HttpMethod.Post,
-// content: GetMultiPartRequestContent(JsonConvert.SerializeObject(json)),
-// mediaTypeHeader: new MediaTypeWithQualityHeaderValue("multipart/form-data"),
-// assertOkResponse: false);
-//
-// Assert.AreEqual(HttpStatusCode.NotFound, response.Item1.StatusCode);
-// }
-//
-// [Test]
-// public async Task PostSave_Simple_Invariant()
-// {
-// var content = GetMockedContent();
-//
-// ApiController CtrlFactory(HttpRequestMessage message, IUmbracoContextAccessor umbracoContextAccessor)
-// {
-// var contentServiceMock = Mock.Get(ServiceContext.ContentService);
-// contentServiceMock.Setup(x => x.GetById(123)).Returns(() => content);
-// contentServiceMock.Setup(x => x.Save(It.IsAny(), It.IsAny(), It.IsAny()))
-// .Returns(new OperationResult(OperationResultType.Success, new Core.Events.EventMessages())); //success
-//
-// var propertyEditorCollection = new PropertyEditorCollection(new DataEditorCollection(Enumerable.Empty()));
-// var controller = new ContentController(
-// Factory.GetInstance(),
-// propertyEditorCollection,
-// Factory.GetInstance(),
-// umbracoContextAccessor,
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// ShortStringHelper,
-// Factory.GetInstance(),
-// Factory.GetInstance());
-//
-// return controller;
-// }
-//
-// var runner = new TestRunner(CtrlFactory);
-// var response = await runner.Execute("Content", "PostSave", HttpMethod.Post,
-// content: GetMultiPartRequestContent(PublishJsonInvariant),
-// mediaTypeHeader: new MediaTypeWithQualityHeaderValue("multipart/form-data"),
-// assertOkResponse: false);
-//
-// Assert.AreEqual(HttpStatusCode.OK, response.Item1.StatusCode);
-// var display = JsonConvert.DeserializeObject(response.Item2);
-// Assert.AreEqual(1, display.Variants.Count());
-// }
-//
-// [Test]
-// public async Task PostSave_Validate_Empty_Name()
-// {
-// var content = GetMockedContent();
-//
-// ApiController CtrlFactory(HttpRequestMessage message, IUmbracoContextAccessor umbracoContextAccessor)
-// {
-// var contentServiceMock = Mock.Get(ServiceContext.ContentService);
-// contentServiceMock.Setup(x => x.GetById(123)).Returns(() => content);
-// contentServiceMock.Setup(x => x.Save(It.IsAny(), It.IsAny(), It.IsAny()))
-// .Returns(new OperationResult(OperationResultType.Success, new Core.Events.EventMessages())); //success
-//
-// var propertyEditorCollection = new PropertyEditorCollection(new DataEditorCollection(Enumerable.Empty()));
-// var controller = new ContentController(
-// Factory.GetInstance(),
-// propertyEditorCollection,
-// Factory.GetInstance(),
-// umbracoContextAccessor,
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// ShortStringHelper,
-// Factory.GetInstance(),
-// Factory.GetInstance()
-// );
-//
-// return controller;
-// }
-//
-// //clear out the name
-// var json = JsonConvert.DeserializeObject(PublishJsonInvariant);
-// json["variants"].ElementAt(0)["name"] = null;
-//
-// var runner = new TestRunner(CtrlFactory);
-// var response = await runner.Execute("Content", "PostSave", HttpMethod.Post,
-// content: GetMultiPartRequestContent(JsonConvert.SerializeObject(json)),
-// mediaTypeHeader: new MediaTypeWithQualityHeaderValue("multipart/form-data"),
-// assertOkResponse: false);
-//
-// Assert.AreEqual(HttpStatusCode.BadRequest, response.Item1.StatusCode);
-// var display = JsonConvert.DeserializeObject(response.Item2);
-// Assert.AreEqual(1, display.Errors.Count());
-// Assert.IsTrue(display.Errors.ContainsKey("Variants[0].Name"));
-// //ModelState":{"Variants[0].Name":["Required"]}
-// }
-//
-// [Test]
-// public async Task PostSave_Validate_Variants_Empty_Name()
-// {
-// var content = GetMockedContent();
-//
-// ApiController CtrlFactory(HttpRequestMessage message, IUmbracoContextAccessor umbracoContextAccessor)
-// {
-// var contentServiceMock = Mock.Get(ServiceContext.ContentService);
-// contentServiceMock.Setup(x => x.GetById(123)).Returns(() => content);
-// contentServiceMock.Setup(x => x.Save(It.IsAny(), It.IsAny(), It.IsAny()))
-// .Returns(new OperationResult(OperationResultType.Success, new Core.Events.EventMessages())); //success
-//
-// var propertyEditorCollection = new PropertyEditorCollection(new DataEditorCollection(Enumerable.Empty()));
-// var controller = new ContentController(
-// Factory.GetInstance(),
-// propertyEditorCollection,
-// Factory.GetInstance(),
-// umbracoContextAccessor,
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// Factory.GetInstance(),
-// ShortStringHelper,
-// Factory.GetInstance(),
-// Factory.GetInstance()
-// );
-//
-// return controller;
-// }
-//
-// //clear out one of the names
-// var json = JsonConvert.DeserializeObject(PublishJsonVariant);
-// json["variants"].ElementAt(0)["name"] = null;
-//
-// var runner = new TestRunner(CtrlFactory);
-// var response = await runner.Execute("Content", "PostSave", HttpMethod.Post,
-// content: GetMultiPartRequestContent(JsonConvert.SerializeObject(json)),
-// mediaTypeHeader: new MediaTypeWithQualityHeaderValue("multipart/form-data"),
-// assertOkResponse: false);
-//
-// Assert.AreEqual(HttpStatusCode.BadRequest, response.Item1.StatusCode);
-// var display = JsonConvert.DeserializeObject(response.Item2);
-// Assert.AreEqual(2, display.Errors.Count());
-// Assert.IsTrue(display.Errors.ContainsKey("Variants[0].Name"));
-// Assert.IsTrue(display.Errors.ContainsKey("_content_variant_en-US_null_"));
-// }
-//
-// // TODO: There are SOOOOO many more tests we should write - a lot of them to do with validation
-//
-// }
-// }
diff --git a/src/Umbraco.Web.BackOffice/Controllers/DetermineAmbiguousActionByPassingParameters.cs b/src/Umbraco.Web.BackOffice/Controllers/DetermineAmbiguousActionByPassingParameters.cs
index caa3b8348a..726d61fe80 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/DetermineAmbiguousActionByPassingParameters.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/DetermineAmbiguousActionByPassingParameters.cs
@@ -15,6 +15,12 @@ using Newtonsoft.Json.Linq;
namespace Umbraco.Web.BackOffice.Controllers
{
+ ///
+ /// This method determine ambiguous controller actions by making a tryparse of the string (from request) into the type of the argument.
+ ///
+ ///
+ /// By using this methods you are allowed to to have multiple controller actions named equally. E.g. GetById(Guid id), GetById(int id),...
+ ///
public class DetermineAmbiguousActionByPassingParameters : ActionMethodSelectorAttribute
{
private string _requestBody = null;
diff --git a/src/Umbraco.Web.BackOffice/Controllers/MediaController.cs b/src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
index efe14a2c3c..21b403c9cd 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
@@ -215,7 +215,7 @@ namespace Umbraco.Web.BackOffice.Controllers
///
///
///
- //[FilterAllowedOutgoingMedia(typeof(IEnumerable))] // TODO introduce when moved to .NET Core
+ [FilterAllowedOutgoingMedia(typeof(IEnumerable))]
public IEnumerable GetByIds([FromQuery]int[] ids)
{
var foundMedia = _mediaService.GetByIds(ids);
@@ -259,7 +259,7 @@ namespace Umbraco.Web.BackOffice.Controllers
///
/// Returns the root media objects
///
- //[FilterAllowedOutgoingMedia(typeof(IEnumerable>))] // TODO introduce when moved to .NET Core
+ [FilterAllowedOutgoingMedia(typeof(IEnumerable>))]
public IEnumerable> GetRootMedia()
{
// TODO: Add permissions check!
diff --git a/src/Umbraco.Web.BackOffice/Filters/PrefixlessBodyModelValidatorAttribute.cs b/src/Umbraco.Web.BackOffice/Filters/PrefixlessBodyModelValidatorAttribute.cs
index a19655f8ce..36cc241976 100644
--- a/src/Umbraco.Web.BackOffice/Filters/PrefixlessBodyModelValidatorAttribute.cs
+++ b/src/Umbraco.Web.BackOffice/Filters/PrefixlessBodyModelValidatorAttribute.cs
@@ -6,6 +6,9 @@ using Microsoft.AspNetCore.Mvc.ModelBinding;
namespace Umbraco.Web.BackOffice.Filters
{
+ ///
+ /// Applying this attribute to any controller will ensure that the parameter name (prefix) is not part of the validation error keys.
+ ///
public class PrefixlessBodyModelValidatorAttribute : TypeFilterAttribute
{
public PrefixlessBodyModelValidatorAttribute() : base(typeof(PrefixlessBodyModelValidatorFilter))
diff --git a/src/Umbraco.Web.BackOffice/ModelBinders/BlueprintItemBinder.cs b/src/Umbraco.Web.BackOffice/ModelBinders/BlueprintItemBinder.cs
index 0e9444ae3a..744d125bf9 100644
--- a/src/Umbraco.Web.BackOffice/ModelBinders/BlueprintItemBinder.cs
+++ b/src/Umbraco.Web.BackOffice/ModelBinders/BlueprintItemBinder.cs
@@ -10,11 +10,11 @@ namespace Umbraco.Web.BackOffice.ModelBinders
{
internal class BlueprintItemBinder : ContentItemBinder
{
- private readonly ContentService _contentService;
+ private readonly IContentService _contentService;
- public BlueprintItemBinder(IJsonSerializer jsonSerializer, UmbracoMapper umbracoMapper, IContentService contentService, IContentTypeService contentTypeService, IHostingEnvironment hostingEnvironment, ContentService contentService2) : base(jsonSerializer, umbracoMapper, contentService, contentTypeService, hostingEnvironment)
+ public BlueprintItemBinder(IJsonSerializer jsonSerializer, UmbracoMapper umbracoMapper, IContentService contentService, IContentTypeService contentTypeService, IHostingEnvironment hostingEnvironment) : base(jsonSerializer, umbracoMapper, contentService, contentTypeService, hostingEnvironment)
{
- _contentService = contentService2;
+ _contentService = contentService;
}
protected override IContent GetExisting(ContentItemSave model)
diff --git a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj
index eecac784c8..911a157223 100644
--- a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj
+++ b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj
@@ -14,7 +14,6 @@
-
diff --git a/src/Umbraco.Web.Common/ApplicationModels/UmbracoApiBehaviorApplicationModelProvider.cs b/src/Umbraco.Web.Common/ApplicationModels/UmbracoApiBehaviorApplicationModelProvider.cs
index ac23516b9b..e76ae1ff6b 100644
--- a/src/Umbraco.Web.Common/ApplicationModels/UmbracoApiBehaviorApplicationModelProvider.cs
+++ b/src/Umbraco.Web.Common/ApplicationModels/UmbracoApiBehaviorApplicationModelProvider.cs
@@ -36,7 +36,6 @@ namespace Umbraco.Web.Common.ApplicationModels
ActionModelConventions = new List()
{
new ClientErrorResultFilterConvention(), // Ensures the responses without any body is converted into a simple json object with info instead of a string like "Status Code: 404; Not Found"
- //new InvalidModelStateFilterConvention(), // automatically 400 responses if ModelState is invalid before hitting the controller
new ConsumesConstraintForFormFileParameterConvention(), // If an controller accepts files, it must accept multipart/form-data.
new InferParameterBindingInfoConvention(modelMetadataProvider), // no need for [FromBody] everywhere, A complex type parameter is assigned to FromBody
diff --git a/src/Umbraco.Web.Common/Filters/AngularJsonOnlyConfigurationAttribute.cs b/src/Umbraco.Web.Common/Filters/AngularJsonOnlyConfigurationAttribute.cs
index e185491f0e..85eb55b6d9 100644
--- a/src/Umbraco.Web.Common/Filters/AngularJsonOnlyConfigurationAttribute.cs
+++ b/src/Umbraco.Web.Common/Filters/AngularJsonOnlyConfigurationAttribute.cs
@@ -13,7 +13,6 @@ namespace Umbraco.Web.Common.Filters
{
public AngularJsonOnlyConfigurationAttribute() : base(typeof(AngularJsonOnlyConfigurationFilter))
{
- Order = -2400;
}
private class AngularJsonOnlyConfigurationFilter : IResultFilter