You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LuFieldsExpressionsTests.cs 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. using System;
  2. using System.Linq.Expressions;
  3. using Luticate2.Auth.Business;
  4. using Luticate2.Auth.Business.Fields;
  5. using Luticate2.Auth.Business.FieldsExpressions;
  6. using Luticate2.Auth.Business.FieldsExpressions.Basic;
  7. using Luticate2.Auth.Dbo;
  8. using Luticate2.Auth.Dbo.Fields;
  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.FieldsExpressions
  14. {
  15. public class LuFieldsExpressionsTestDbo1TestModel1 : LuFieldsExpressions<TestDbo1, TestModel1>
  16. {
  17. public LuFieldsExpressionsTestDbo1TestModel1(IServiceProvider serviceProvider) : base(serviceProvider)
  18. {
  19. }
  20. protected override LuResult<Expression<Func<TType1, object>>> GetExpressionInternal<TType1>(Expression<Func<TType1, TestModel1>> modelProperty, LuFieldDbo field)
  21. {
  22. if (field.StartsWith<TestDbo1>(x => x.MyInt))
  23. {
  24. return GetSubField<TType1, int, int>(modelProperty, field, x => x.MyInt);
  25. }
  26. else if (field.StartsWith<TestDbo1>(x => x.Metadata))
  27. {
  28. return GetSubField<TType1, MetadataDbo, MetadataModel>(modelProperty, field, x => x.MetadataModel);
  29. }
  30. return base.GetExpressionInternal(modelProperty, field);
  31. }
  32. }
  33. public class LuFieldsExpressionsMetadataDboMetadataModel : LuFieldsExpressions<MetadataDbo, MetadataModel>
  34. {
  35. public LuFieldsExpressionsMetadataDboMetadataModel(IServiceProvider serviceProvider) : base(serviceProvider)
  36. {
  37. }
  38. protected override LuResult<Expression<Func<TType1, object>>> GetExpressionInternal<TType1>(Expression<Func<TType1, MetadataModel>> modelProperty, LuFieldDbo field)
  39. {
  40. if (field.StartsWith<MetadataDbo>(x => x.Id))
  41. {
  42. return GetSubField<TType1, Guid, Guid>(modelProperty, field, x => x.Id);
  43. }
  44. return base.GetExpressionInternal(modelProperty, field);
  45. }
  46. }
  47. public class TestDbo1
  48. {
  49. public string MyString { get; set; }
  50. public int MyInt { get; set; }
  51. public MetadataDbo Metadata { get; set; }
  52. }
  53. public class MetadataDbo
  54. {
  55. public Guid Id { get; set; }
  56. public DateTime CreatedAt { get; set; }
  57. }
  58. public class TestModel1
  59. {
  60. public string MyString { get; set; }
  61. public int MyInt { get; set; }
  62. public MetadataModel MetadataModel { get; set; }
  63. }
  64. public class MetadataModel
  65. {
  66. public Guid Id { get; set; }
  67. public DateTime CreatedAt { get; set; }
  68. }
  69. public class LuFieldsExpressionsTests
  70. {
  71. public IServiceProvider GetServiceProvider()
  72. {
  73. var serviceCollection = new ServiceCollection();
  74. serviceCollection.AddSingleton<ILuFieldsExpressions<TestDbo1, TestModel1>, LuFieldsExpressionsTestDbo1TestModel1>();
  75. serviceCollection.AddSingleton<ILuFieldsExpressions<MetadataDbo, MetadataModel>, LuFieldsExpressionsMetadataDboMetadataModel>();
  76. serviceCollection.AddSingleton<ILuFieldsExpressions<string, string>, LuFieldsExpressionsString>();
  77. serviceCollection.AddSingleton<ILuFieldsExpressions<int, int>, LuFieldsExpressions<int, int>>();
  78. serviceCollection.AddSingleton<ILuFieldsExpressions<Guid, Guid>, LuFieldsExpressions<Guid, Guid>>();
  79. var serviceProvider = serviceCollection.BuildServiceProvider();
  80. return serviceProvider;
  81. }
  82. [Fact]
  83. public void Test1()
  84. {
  85. var serviceProvider = GetServiceProvider();
  86. var fieldExpression = serviceProvider.GetService<ILuFieldsExpressions<TestDbo1, TestModel1>>();
  87. var exprResult = fieldExpression.GetExpression<TestModel1>(x => x, LuFieldDbo.Make("Metadata.Id"));
  88. Assert.Equal(LuStatus.Success.ToInt(), exprResult.Status);
  89. Assert.NotNull(exprResult.Data);
  90. var operand = LuExpressionUtils.GetFromConvert(exprResult.Data);
  91. var str = operand.ToString();
  92. Assert.Equal("x.MetadataModel.Id", str);
  93. }
  94. [Fact]
  95. public void TestError1()
  96. {
  97. var serviceProvider = GetServiceProvider();
  98. var fieldExpression = serviceProvider.GetService<ILuFieldsExpressions<TestDbo1, TestModel1>>();
  99. var exprResult = fieldExpression.GetExpression<TestModel1>(x => x, LuFieldDbo.Make("Metadata.Id.NxField"));
  100. Assert.Equal(LuStatus.InputError.ToInt(), exprResult.Status);
  101. Assert.Null(exprResult.Data);
  102. }
  103. [Fact]
  104. public void TestError2()
  105. {
  106. var serviceProvider = GetServiceProvider();
  107. var fieldExpression = serviceProvider.GetService<ILuFieldsExpressions<TestDbo1, TestModel1>>();
  108. var exprResult = fieldExpression.GetExpression<TestModel1>(x => x, LuFieldDbo.Make("Metadata.*"));
  109. Assert.Equal(LuStatus.InputError.ToInt(), exprResult.Status);
  110. Assert.Null(exprResult.Data);
  111. }
  112. }
  113. }