Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

LuDboModelExpressionConverterTests.cs 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq.Expressions;
  4. using System.Reflection;
  5. using Luticate2.Auth.Business;
  6. using Luticate2.Auth.Business.Fields;
  7. using Luticate2.Auth.Business.Fields.DMEC;
  8. using Luticate2.Auth.Dbo;
  9. using Luticate2.Auth.Dbo.Result;
  10. using Luticate2.Auth.Interfaces;
  11. using Microsoft.Extensions.DependencyInjection;
  12. using Xunit;
  13. namespace Luticate2.Auth.Tests.Business.Fields
  14. {
  15. public class TestDbo1
  16. {
  17. public Guid Id { get; set; }
  18. public string Name { get; set; }
  19. public IList<TestDbo2> TestDbo2s { get; set; }
  20. }
  21. public class TestDbo2
  22. {
  23. public Guid Id { get; set; }
  24. public string Name { get; set; }
  25. public TestDbo1 TestDbo1 { get; set; }
  26. }
  27. public class TestModel1
  28. {
  29. public Guid Id { get; set; }
  30. public string Name { get; set; }
  31. public ICollection<TestModel2> TestModel2 { get; set; }
  32. }
  33. public class TestModel2
  34. {
  35. public Guid Id { get; set; }
  36. public string Name { get; set; }
  37. public Guid TestModel1Id { get; set; }
  38. public TestModel1 TestModel1 { get; set; }
  39. }
  40. public class LuDMECTest1 : LuExpressionConverter<TestDbo1, TestModel1>
  41. {
  42. public LuDMECTest1(IServiceProvider serviceProvider) : base(serviceProvider)
  43. {
  44. }
  45. protected override LuResult<Expression> ConvertInternal(Stack<Expression> expressions, Expression baseExpression, LuExpressionConverterOptions options)
  46. {
  47. var expression = expressions.Peek();
  48. if (expression is MemberExpression memberExpression)
  49. {
  50. if (MemberMatch(x => x.Id, memberExpression))
  51. {
  52. return MakeMemberAccess(x => x.Id, expressions, baseExpression, options);
  53. }
  54. if (MemberMatch(x => x.Name, memberExpression))
  55. {
  56. return MakeMemberAccess(x => x.Name, expressions, baseExpression, options);
  57. }
  58. if (MemberMatch(x => x.TestDbo2s, memberExpression))
  59. {
  60. return MakeMemberAccess(x => x.TestModel2, expressions, baseExpression, options);
  61. }
  62. }
  63. return base.ConvertInternal(expressions, baseExpression, options);
  64. }
  65. }
  66. public class LuDMECTest2 : LuExpressionConverter<TestDbo2, TestModel2>
  67. {
  68. public LuDMECTest2(IServiceProvider serviceProvider) : base(serviceProvider)
  69. {
  70. }
  71. protected override LuResult<Expression> ConvertInternal(Stack<Expression> expressions, Expression baseExpression, LuExpressionConverterOptions options)
  72. {
  73. var expression = expressions.Peek();
  74. if (expression is MemberExpression memberExpression)
  75. {
  76. if (MemberMatch(x => x.Id, memberExpression))
  77. {
  78. return MakeMemberAccess(x => x.Id, expressions, baseExpression, options);
  79. }
  80. if (MemberMatch(x => x.Name, memberExpression))
  81. {
  82. return MakeMemberAccess(x => x.Name, expressions, baseExpression, options);
  83. }
  84. if (MemberMatch(x => x.TestDbo1, memberExpression))
  85. {
  86. return MakeMemberAccess(x => x.TestModel1, expressions, baseExpression, options);
  87. }
  88. }
  89. return base.ConvertInternal(expressions, baseExpression, options);
  90. }
  91. }
  92. public class LuDboModelExpressionConverterTests
  93. {
  94. public IServiceProvider GetServiceProvider()
  95. {
  96. var services = new ServiceCollection();
  97. services.AddSingleton<ILuExpressionConverter<TestDbo1, TestModel1>, LuDMECTest1>();
  98. services.AddSingleton<ILuExpressionConverter<TestDbo2, TestModel2>, LuDMECTest2>();
  99. services.AddSingleton<ILuExpressionConverter<string, string>, LuExpressionConverterIdentity<string>>();
  100. services.AddSingleton<ILuExpressionConverter<Guid, Guid>, LuExpressionConverterIdentity<Guid>>();
  101. var serviceProvider = services.BuildServiceProvider();
  102. return serviceProvider;
  103. }
  104. // [Fact]
  105. // public void Test0()
  106. // {
  107. // var serviceProvider = GetServiceProvider();
  108. // var converter = serviceProvider.GetService<ILuDboModelExpressionConverter<TestDbo1, TestModel1>>();
  109. // Expression<Func<TestDbo1, TestDbo1>> expDbo = (x => x);
  110. // Expression<Func<TestModel1, object>> expModel = (x => (object) x);
  111. // var convertResult = converter.ConvertLamdba(expDbo);
  112. // Assert.Equal(LuStatus.Success.ToInt(), convertResult.Status);
  113. // Assert.NotNull(convertResult.Data);
  114. // Assert.Equal(expModel.ToString(), convertResult.Data.ToString());
  115. // }
  116. //
  117. // [Fact]
  118. // public void Test1()
  119. // {
  120. // var serviceProvider = GetServiceProvider();
  121. // var converter = serviceProvider.GetService<ILuDboModelExpressionConverter<TestDbo1, TestModel1>>();
  122. // Expression<Func<TestDbo1, Guid>> expDbo = (x => x.Id);
  123. // Expression<Func<TestModel1, object>> expModel = (x => (object) x.Id);
  124. // var convertResult = converter.ConvertLamdba(expDbo);
  125. // Assert.Equal(LuStatus.Success.ToInt(), convertResult.Status);
  126. // Assert.NotNull(convertResult.Data);
  127. // Assert.Equal(expModel.ToString(), convertResult.Data.ToString());
  128. // }
  129. //
  130. // [Fact]
  131. // public void Test2()
  132. // {
  133. // var serviceProvider = GetServiceProvider();
  134. // var converter = serviceProvider.GetService<ILuDboModelExpressionConverter<TestDbo2, TestModel2>>();
  135. // Expression<Func<TestDbo2, Guid>> expDbo = (x => x.TestDbo1.Id);
  136. // Expression<Func<TestModel2, object>> expModel = (x => (object) x.TestModel1.Id);
  137. // var convertResult = converter.ConvertLamdba(expDbo);
  138. // Assert.Equal(LuStatus.Success.ToInt(), convertResult.Status);
  139. // Assert.NotNull(convertResult.Data);
  140. // Assert.Equal(expModel.ToString(), convertResult.Data.ToString());
  141. // }
  142. //
  143. // [Fact]
  144. // public void Test3()
  145. // {
  146. // var serviceProvider = GetServiceProvider();
  147. // var converter = serviceProvider.GetService<ILuDboModelExpressionConverter<TestDbo2, TestModel2>>();
  148. // Expression<Func<TestDbo2, int>> expDbo = (x => x.TestDbo1.Name.Length);
  149. // Expression<Func<TestModel2, object>> expModel = (x => (object) x.TestModel1.Name.Length);
  150. // var convertResult = converter.ConvertLamdba(expDbo);
  151. // Assert.Equal(LuStatus.Success.ToInt(), convertResult.Status);
  152. // Assert.NotNull(convertResult.Data);
  153. // Assert.Equal(expModel.ToString(), convertResult.Data.ToString());
  154. // }
  155. //
  156. // [Fact]
  157. // public void Test4()
  158. // {
  159. // var serviceProvider = GetServiceProvider();
  160. // var converter = serviceProvider.GetService<ILuDboModelExpressionConverter<TestDbo2, TestModel2>>();
  161. // Expression<Func<TestDbo2, bool>> expDbo = (x => x.TestDbo1.Name.Length == 0 || x.Name.Length != 0);
  162. // Expression<Func<TestModel2, object>> expModel = (x => (object) (x.TestModel1.Name.Length == 0 || x.Name.Length != 0));
  163. // var convertResult = converter.ConvertLamdba(expDbo);
  164. // Assert.Equal(LuStatus.Success.ToInt(), convertResult.Status);
  165. // Assert.NotNull(convertResult.Data);
  166. // Assert.Equal(expModel.ToString(), convertResult.Data.ToString());
  167. // }
  168. }
  169. }