Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions TestAssembly/Controllers/BarApiControler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace TestAssembly.Controllers
{
using System.Web.Http;

public class BarApiControler : ApiController
{

}
}
9 changes: 9 additions & 0 deletions TestAssembly/Controllers/FooControler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace TestAssembly.Controllers
{
using System.Web.Mvc;

public class FooControler : Controller
{

}
}
9 changes: 9 additions & 0 deletions TestAssembly/Controllers/MyApiController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace TestAssembly.Controllers
{
using System.Web.Http;

public class MyApiController : ApiController
{

}
}
7 changes: 7 additions & 0 deletions TestAssembly/Controllers/TestApiController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace TestAssembly.Controllers
{
public class TestApiController
{

}
}
7 changes: 7 additions & 0 deletions TestAssembly/Controllers/TestController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace TestAssembly.Controllers
{
public class TestController
{

}
}
31 changes: 31 additions & 0 deletions TestAssembly/TestAssembly.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,31 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<Private>True</Private>
<HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json">
<HintPath>..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.Formatting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.4.0.30506.0\lib\net40\System.Net.Http.Formatting.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.WebRequest, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.0.20710.0\lib\net40\System.Net.Http.WebRequest.dll</HintPath>
</Reference>
<Reference Include="System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Core.4.0.30506.0\lib\net40\System.Web.Http.dll</HintPath>
</Reference>
<Reference Include="System.Web.Http.WebHost, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.WebHost.4.0.30506.0\lib\net40\System.Web.Http.WebHost.dll</HintPath>
</Reference>
<Reference Include="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
Expand All @@ -50,11 +73,19 @@
<Compile Include="Collections\ICanRemove.cs" />
<Compile Include="Collections\Leaf.cs" />
<Compile Include="Collections\Tree.cs" />
<Compile Include="Controllers\BarApiControler.cs" />
<Compile Include="Controllers\FooControler.cs" />
<Compile Include="Controllers\MyApiController.cs" />
<Compile Include="Controllers\TestApiController.cs" />
<Compile Include="Controllers\TestController.cs" />
<Compile Include="Dtos\AnotherClass.cs" />
<Compile Include="Dtos\BlahDto.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SomeDto.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
Expand Down
10 changes: 10 additions & 0 deletions TestAssembly/packages.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.AspNet.WebApi" version="4.0.30506.0" targetFramework="net40" />
<package id="Microsoft.AspNet.WebApi.Client" version="4.0.30506.0" targetFramework="net40" />
<package id="Microsoft.AspNet.WebApi.Core" version="4.0.30506.0" targetFramework="net40" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="4.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="Newtonsoft.Json" version="4.5.11" targetFramework="net40" />
</packages>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
'Api Controllers must be suffixed with Controller' for 'TestAssembly'
---------------------------------------------------------------------

TestAssembly.Controllers.BarApiControler

'Types named *Controller must inherit from ApiController or Controller' for 'TestAssembly'
------------------------------------------------------------------------------------------

TestAssembly.Controllers.TestApiController
TestAssembly.Controllers.TestController
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
'Mvc Controllers must be suffixed with Controller' for 'TestAssembly'
---------------------------------------------------------------------

TestAssembly.Controllers.FooControler

'Types named *Controller must inherit from ApiController or Controller' for 'TestAssembly'
------------------------------------------------------------------------------------------

TestAssembly.Controllers.TestApiController
TestAssembly.Controllers.TestController
34 changes: 34 additions & 0 deletions TestStack.ConventionTests.Tests/MvcConventions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
namespace TestStack.ConventionTests.Tests
{
using ApprovalTests;
using ApprovalTests.Reporters;
using NUnit.Framework;
using TestAssembly.Controllers;
using TestStack.ConventionTests.ConventionData;
using TestStack.ConventionTests.Conventions;

[TestFixture]
[UseReporter(typeof(DiffReporter))]
public class MvcConventions
{
[Test]
public void controller_conventions()
{
var types = Types.InAssemblyOf<TestController>();
var convention = new MvcControllerNameAndBaseClassConvention();

var ex = Assert.Throws<ConventionFailedException>(() => Convention.Is(convention, types));
Approvals.Verify(ex.Message);
}

[Test]
public void api_controller_conventions()
{
var types = Types.InAssemblyOf<TestController>();
var convention = new ApiControllerNamingAndBaseClassConvention();

var ex = Assert.Throws<ConventionFailedException>(() => Convention.Is(convention, types));
Approvals.Verify(ex.Message);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
<ItemGroup>
<Compile Include="ConventionAssertionClassTests.cs" />
<Compile Include="CsvReportTests.cs" />
<Compile Include="MvcConventions.cs" />
<Compile Include="ProjectBasedConventions.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
Expand Down
1 change: 0 additions & 1 deletion TestStack.ConventionTests/ConventionData/Types.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
namespace TestStack.ConventionTests.ConventionData
{
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
namespace TestStack.ConventionTests.Conventions
{
using System;
using System.Collections.Generic;
using System.Linq;
using TestStack.ConventionTests.ConventionData;

public class ApiControllerNamingAndBaseClassConvention : MvcControllerNameAndBaseClassConvention
{
protected override IEnumerable<Type> GetControllers(Types data)
{
return data.TypesToVerify.Where(IsWebApiController);
}

protected override string GetControllerTypeName()
{
return "Api Controller";
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
namespace TestStack.ConventionTests.Conventions
{
using System;
using System.Collections.Generic;
using System.Linq;
using TestStack.ConventionTests.ConventionData;

public class MvcControllerNameAndBaseClassConvention : IConvention<Types>
{
public void Execute(Types data, IConventionResultContext result)
{
var controllers = GetControllers(data);
var typesWhichDoNotEndInController = controllers.Where(c => !c.Name.EndsWith("Controller"));

var typesWhichEndInController = data.TypesToVerify.Where(t => t.Name.EndsWith("Controller"));
var controllersWhichDoNotInheritFromController =
typesWhichEndInController.Where(t => !IsMvcController(t) && !IsWebApiController(t));

result.IsSymmetric(
GetControllerTypeName() + "s must be suffixed with Controller", typesWhichDoNotEndInController,
"Types named *Controller must inherit from ApiController or Controller",
controllersWhichDoNotInheritFromController);
}

protected virtual string GetControllerTypeName()
{
return "Mvc Controller";
}

protected virtual IEnumerable<Type> GetControllers(Types data)
{
return data.TypesToVerify.Where(IsMvcController);
}

static bool IsMvcController(Type arg)
{
var isController = arg.FullName == "System.Web.Mvc.Controller";
if (arg.BaseType == null)
return isController;
return isController || IsMvcController(arg.BaseType);
}

protected static bool IsWebApiController(Type arg)
{
var isController = arg.FullName == "System.Web.Http.ApiController";
if (arg.BaseType == null)
return isController;
return isController || IsWebApiController(arg.BaseType);
}
}
}
2 changes: 2 additions & 0 deletions TestStack.ConventionTests/TestStack.ConventionTests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@
<Compile Include="ConventionData\TypeExtensions.cs" />
<Compile Include="ConventionFailedException.cs" />
<Compile Include="IConventionResultContext.cs" />
<Compile Include="Conventions\ApiControllerNamingAndBaseClassConvention.cs" />
<Compile Include="Conventions\MvcControllerNameAndBaseClassConvention.cs" />
<Compile Include="Internal\ConventionReportFailure.cs" />
<Compile Include="Internal\ConventionContext.cs" />
<Compile Include="Internal\ConventionResult.cs" />
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>Microsoft.AspNet.WebApi</id>
<version>4.0.30506.0</version>
<title>Microsoft ASP.NET Web API</title>
<authors>Microsoft</authors>
<owners>Microsoft</owners>
<licenseUrl>http://www.microsoft.com/web/webpi/eula/mvc_4_eula_enu.htm</licenseUrl>
<projectUrl>http://www.asp.net/web-api</projectUrl>
<requireLicenseAcceptance>true</requireLicenseAcceptance>
<description>This package contains everything you need to host ASP.NET Web API on IIS. ASP.NET Web API is a framework that makes it easy to build HTTP services that reach a broad range of clients, including browsers and mobile devices. ASP.NET Web API is an ideal platform for building RESTful applications on the .NET Framework.</description>
<releaseNotes />
<copyright />
<language>en-US</language>
<tags>Microsoft AspNet WebApi AspNetWebApi</tags>
<dependencies>
<dependency id="Microsoft.AspNet.WebApi.WebHost" version="4.0.20710.0" />
</dependencies>
</metadata>
</package>
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>Microsoft.AspNet.WebApi.Client</id>
<version>4.0.30506.0</version>
<title>Microsoft ASP.NET Web API Client Libraries</title>
<authors>Microsoft</authors>
<owners>Microsoft</owners>
<licenseUrl>http://www.microsoft.com/web/webpi/eula/mvc_4_eula_enu.htm</licenseUrl>
<projectUrl>http://www.asp.net/web-api</projectUrl>
<requireLicenseAcceptance>true</requireLicenseAcceptance>
<description>This package adds support for formatting and content negotiation to System.Net.Http. It includes support for JSON, XML, and form URL encoded data.</description>
<language>en-US</language>
<tags>Microsoft AspNet WebApi AspNetWebApi HttpClient</tags>
<dependencies>
<dependency id="Microsoft.Net.Http" version="2.0.20710.0" />
<dependency id="Newtonsoft.Json" version="4.5.6" />
</dependencies>
</metadata>
</package>
Binary file not shown.
Loading