Skip to content

Commit

Permalink
Merge branch 'feature/#167' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
i4004 committed Nov 21, 2021
2 parents 2f9ef8e + d64f360 commit 64e7126
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using SampleApp.Classic.Infrastructure.Log;
using SampleApp.Classic.Models.Accounts;
using SampleApp.Classic.Views;
using SampleApp.Classic.Views.Accounts;
Expand All @@ -14,12 +15,14 @@
namespace SampleApp.Classic.Controllers.Accounts
{
[Post("login")]
public class LoginController : AsyncController<LoginViewModel>
public class LoginController : LoggableController<LoginViewModel>
{
public override async Task<ControllerResponse> Invoke()
{
await ReadModelAsync();

Log("Login controller executed");

if (Model.Password == "1" && Model.UserName == "Foo")
{
var claims = new List<Claim>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using System;
using Simplify.Web;

namespace SampleApp.Classic.Infrastructure.Log;

public abstract class LoggableController<T> : AsyncController<T>
where T : class
{
protected void Log(string message) => Console.WriteLine(message);
}
4 changes: 3 additions & 1 deletion src/Simplify.Web.Tests/Meta/ControllersMetaStoreTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,21 @@ public void GetControllersMetaData_LocalControllers_GetWithoutIgnored()

factory.SetupSequence(x => x.CreateControllerMetaData(It.IsAny<Type>()))
.Returns(new ControllerMetaData(typeof(TestController1), new ControllerExecParameters(null, 2)))
.Returns(new ControllerMetaData(typeof(TestController6)))
.Returns(new ControllerMetaData(typeof(TestController2), new ControllerExecParameters(null, 1)))
.Returns(new ControllerMetaData(typeof(TestController4)))
.Returns(new ControllerMetaData(typeof(TestController5)));

// Act
var metaData = store.ControllersMetaData;

Assert.AreEqual(4, metaData.Count);
Assert.AreEqual(5, metaData.Count);

factory.Verify(x => x.CreateControllerMetaData(It.Is<Type>(t => t == typeof(TestController1))));
factory.Verify(x => x.CreateControllerMetaData(It.Is<Type>(t => t == typeof(TestController2))));
factory.Verify(x => x.CreateControllerMetaData(It.Is<Type>(t => t == typeof(TestController4))));
factory.Verify(x => x.CreateControllerMetaData(It.Is<Type>(t => t == typeof(TestController5))));
factory.Verify(x => x.CreateControllerMetaData(It.Is<Type>(t => t == typeof(TestController6))));
}
}
}
3 changes: 2 additions & 1 deletion src/Simplify.Web.Tests/Meta/SimplifyWebTypesFinderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,11 @@ public void FindTypesDerivedFrom_TypeHave3TypesDerived_3TestControllersReturned(

// Assert

Assert.AreEqual(2, types.Count);
Assert.AreEqual(3, types.Count);
Assert.AreEqual(1, types2.Count);
Assert.AreEqual("Simplify.Web.Tests.TestEntities.TestController1", types[0].FullName);
Assert.AreEqual("Simplify.Web.Tests.TestEntities.TestController3", types[1].FullName);
Assert.AreEqual("Simplify.Web.Tests.TestEntities.TestController6", types[2].FullName);
Assert.AreEqual("Simplify.Web.Tests.TestEntities.TestController2", types2[0].FullName);
}

Expand Down
6 changes: 6 additions & 0 deletions src/Simplify.Web.Tests/TestEntities/ControllerBase.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Simplify.Web.Tests.TestEntities
{
public abstract class ControllerBase : Controller
{
}
}
9 changes: 9 additions & 0 deletions src/Simplify.Web.Tests/TestEntities/TestController6.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using System;

namespace Simplify.Web.Tests.TestEntities
{
public class TestController6 : ControllerBase
{
public override ControllerResponse Invoke() => throw new NotImplementedException();
}
}
1 change: 1 addition & 0 deletions src/Simplify.Web.sln.DotSettings
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=Catched/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=intellisense/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Katana/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Loggable/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=middlewares/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Redirector/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Katana/@EntryIndexedValue">True</s:Boolean>
Expand Down
37 changes: 32 additions & 5 deletions src/Simplify.Web/Meta/SimplifyWebTypesFinder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,25 @@ public static class SimplifyWebTypesFinder
/// <param name="type">The type.</param>
/// <returns></returns>
public static IList<Type> FindTypesDerivedFrom(Type type) =>
CurrentDomainAssembliesTypes.Where(t => t.BaseType != null
&& ((t.BaseType.IsGenericType == false && t.BaseType == type)
||
(t.BaseType.IsGenericType && t.BaseType.GetGenericTypeDefinition() == type)))
.ToList();
CurrentDomainAssembliesTypes.Where(t =>
{
if (t.IsAbstract)
return false;
if (t.BaseType == null)
return false;
if (t.BaseType.IsTypeOf(type))
return true;
if (t.BaseType.BaseType == null)
return false;
if (t.BaseType.BaseType.IsTypeOf(type))
return true;
return false;
}).ToList();

/// <summary>
/// Gets all types.
Expand Down Expand Up @@ -102,6 +116,19 @@ public static void CleanLoadedTypesAndAssembliesInfo()
_currentDomainAssembliesTypes = null;
}

private static bool IsTypeOf(this Type t, Type type)
{
switch (t.IsGenericType)
{
case false when t == type:
case true when t.GetGenericTypeDefinition() == type:
return true;

default:
return false;
}
}

private static IEnumerable<Type> GetAssembliesTypes(IEnumerable<Assembly> assemblies)
{
var types = new List<Type>();
Expand Down

0 comments on commit 64e7126

Please sign in to comment.