using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Reflection; using Luticate2.Auth.Business; using Luticate2.Auth.Business.Fields; using Luticate2.Auth.Business.Fields.DMEC; using Luticate2.Auth.Dbo; using Luticate2.Auth.Dbo.Result; using Luticate2.Auth.Interfaces; using Microsoft.Extensions.DependencyInjection; using Xunit; namespace Luticate2.Auth.Tests.Business.Fields { public class TestDbo1 { public Guid Id { get; set; } public string Name { get; set; } public IList TestDbo2s { get; set; } } public class TestDbo2 { public Guid Id { get; set; } public string Name { get; set; } public TestDbo1 TestDbo1 { get; set; } } public class TestModel1 { public Guid Id { get; set; } public string Name { get; set; } public ICollection TestModel2 { get; set; } } public class TestModel2 { public Guid Id { get; set; } public string Name { get; set; } public Guid TestModel1Id { get; set; } public TestModel1 TestModel1 { get; set; } } public class LuDMECTest1 : LuExpressionConverter { public LuDMECTest1(IServiceProvider serviceProvider) : base(serviceProvider) { } protected override LuResult ConvertInternal(Stack expressions, Expression baseExpression, LuExpressionConverterOptions options) { var expression = expressions.Peek(); if (expression is MemberExpression memberExpression) { if (MemberMatch(x => x.Id, memberExpression)) { return MakeMemberAccess(x => x.Id, expressions, baseExpression, options); } if (MemberMatch(x => x.Name, memberExpression)) { return MakeMemberAccess(x => x.Name, expressions, baseExpression, options); } if (MemberMatch(x => x.TestDbo2s, memberExpression)) { return MakeMemberAccess(x => x.TestModel2, expressions, baseExpression, options); } } return base.ConvertInternal(expressions, baseExpression, options); } } public class LuDMECTest2 : LuExpressionConverter { public LuDMECTest2(IServiceProvider serviceProvider) : base(serviceProvider) { } protected override LuResult ConvertInternal(Stack expressions, Expression baseExpression, LuExpressionConverterOptions options) { var expression = expressions.Peek(); if (expression is MemberExpression memberExpression) { if (MemberMatch(x => x.Id, memberExpression)) { return MakeMemberAccess(x => x.Id, expressions, baseExpression, options); } if (MemberMatch(x => x.Name, memberExpression)) { return MakeMemberAccess(x => x.Name, expressions, baseExpression, options); } if (MemberMatch(x => x.TestDbo1, memberExpression)) { return MakeMemberAccess(x => x.TestModel1, expressions, baseExpression, options); } } return base.ConvertInternal(expressions, baseExpression, options); } } public class LuDboModelExpressionConverterTests { public IServiceProvider GetServiceProvider() { var services = new ServiceCollection(); services.AddSingleton, LuDMECTest1>(); services.AddSingleton, LuDMECTest2>(); services.AddSingleton, LuExpressionConverterIdentity>(); services.AddSingleton, LuExpressionConverterIdentity>(); var serviceProvider = services.BuildServiceProvider(); return serviceProvider; } // [Fact] // public void Test0() // { // var serviceProvider = GetServiceProvider(); // var converter = serviceProvider.GetService>(); // Expression> expDbo = (x => x); // Expression> expModel = (x => (object) x); // var convertResult = converter.ConvertLamdba(expDbo); // Assert.Equal(LuStatus.Success.ToInt(), convertResult.Status); // Assert.NotNull(convertResult.Data); // Assert.Equal(expModel.ToString(), convertResult.Data.ToString()); // } // // [Fact] // public void Test1() // { // var serviceProvider = GetServiceProvider(); // var converter = serviceProvider.GetService>(); // Expression> expDbo = (x => x.Id); // Expression> expModel = (x => (object) x.Id); // var convertResult = converter.ConvertLamdba(expDbo); // Assert.Equal(LuStatus.Success.ToInt(), convertResult.Status); // Assert.NotNull(convertResult.Data); // Assert.Equal(expModel.ToString(), convertResult.Data.ToString()); // } // // [Fact] // public void Test2() // { // var serviceProvider = GetServiceProvider(); // var converter = serviceProvider.GetService>(); // Expression> expDbo = (x => x.TestDbo1.Id); // Expression> expModel = (x => (object) x.TestModel1.Id); // var convertResult = converter.ConvertLamdba(expDbo); // Assert.Equal(LuStatus.Success.ToInt(), convertResult.Status); // Assert.NotNull(convertResult.Data); // Assert.Equal(expModel.ToString(), convertResult.Data.ToString()); // } // // [Fact] // public void Test3() // { // var serviceProvider = GetServiceProvider(); // var converter = serviceProvider.GetService>(); // Expression> expDbo = (x => x.TestDbo1.Name.Length); // Expression> expModel = (x => (object) x.TestModel1.Name.Length); // var convertResult = converter.ConvertLamdba(expDbo); // Assert.Equal(LuStatus.Success.ToInt(), convertResult.Status); // Assert.NotNull(convertResult.Data); // Assert.Equal(expModel.ToString(), convertResult.Data.ToString()); // } // // [Fact] // public void Test4() // { // var serviceProvider = GetServiceProvider(); // var converter = serviceProvider.GetService>(); // Expression> expDbo = (x => x.TestDbo1.Name.Length == 0 || x.Name.Length != 0); // Expression> expModel = (x => (object) (x.TestModel1.Name.Length == 0 || x.Name.Length != 0)); // var convertResult = converter.ConvertLamdba(expDbo); // Assert.Equal(LuStatus.Success.ToInt(), convertResult.Status); // Assert.NotNull(convertResult.Data); // Assert.Equal(expModel.ToString(), convertResult.Data.ToString()); // } } }