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.

ObjectConverterTests.cs 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Linq;
  5. using System.Linq.Expressions;
  6. using Luticate2.Auth.Utils.Business.Converters;
  7. using Luticate2.Auth.Utils.Business.Fields;
  8. using Luticate2.Auth.Utils.Business.ObjectConverter;
  9. using Luticate2.Auth.Utils.Business.ObjectConverterDescriptor;
  10. using Luticate2.Auth.Utils.Dbo;
  11. using Luticate2.Auth.Utils.Dbo.Fields;
  12. using Luticate2.Auth.Utils.Dbo.Result;
  13. using Luticate2.Auth.Utils.Interfaces;
  14. using Microsoft.Extensions.DependencyInjection;
  15. using Xunit;
  16. namespace Luticate2.Auth.Tests.Business.ObjectConverter
  17. {
  18. public class ObjectConverterTests
  19. {
  20. protected IServiceProvider GetServiceProvider()
  21. {
  22. var typeILuObjectConverterDescriptor = typeof(ILuObjectConverterDescriptor<,>);
  23. var typeILuObjectConverterDescriptorEnumerable =
  24. typeILuObjectConverterDescriptor.MakeGenericType(typeof(Enumerable), typeof(Enumerable));
  25. var typeILuObjectConverter = typeof(ILuObjectConverter<,>);
  26. var listTypes = new []
  27. {
  28. typeof(IEnumerable<>),
  29. typeof(ICollection<>),
  30. typeof(Collection<>),
  31. typeof(IList<>),
  32. typeof(List<>)
  33. };
  34. var listImplemType = new Dictionary<Type, Type>
  35. {
  36. {typeof(IEnumerable<>), typeof(LuObjectConverterList)},
  37. {typeof(ICollection<>), typeof(LuObjectConverterCollection)},
  38. {typeof(Collection<>), typeof(LuObjectConverterCollection)},
  39. {typeof(IList<>), typeof(LuObjectConverterList)},
  40. {typeof(List<>), typeof(LuObjectConverterList)}
  41. };
  42. var services = new ServiceCollection();
  43. services.AddSingleton<ILuObjectConverterDescriptorIdentity, LuObjectConverterDescriptorIdentity>();
  44. services.AddSingleton(typeILuObjectConverterDescriptorEnumerable, typeof(LuObjectConverterDescriptorEnumerable));
  45. services.AddSingleton<ILuObjectConverterDescriptor<TestDbo1, TestModel1>, LuOcdTest1>();
  46. services.AddSingleton<ILuObjectConverterDescriptor<TestDbo2, TestModel2>, LuOcdTest2>();
  47. services.AddSingleton<ILuObjectConverterIdentity, LuObjectConverterIdentity>();
  48. foreach (var typeFrom in listTypes)
  49. {
  50. foreach (var typeTo in listTypes)
  51. {
  52. services.AddSingleton(typeILuObjectConverter.MakeGenericType(typeFrom, typeTo), listImplemType[typeTo]);
  53. }
  54. }
  55. services.AddSingleton<ILuObjectConverter<TestModel1, TestDbo1>, LuObjectConverterPoco<TestModel1, TestDbo1>>();
  56. services.AddSingleton<ILuObjectConverter<TestModel2, TestDbo2>, LuObjectConverterPoco<TestModel2, TestDbo2>>();
  57. var serviceProvider = services.BuildServiceProvider();
  58. return serviceProvider;
  59. }
  60. protected ILuObjectConverterOptions GetConverterOptions()
  61. {
  62. var options = new LuConvertersOptions
  63. {
  64. Parameters = new Dictionary<ParameterExpression, Expression>(),
  65. TypeConverter = new LuConvertersTypeConverter(new Dictionary<Type, Type>
  66. {
  67. {typeof(TestDbo1), typeof(TestModel1)},
  68. {typeof(TestDbo2), typeof(TestModel2)},
  69. {typeof(TestModel1), typeof(TestDbo1)},
  70. {typeof(TestModel2), typeof(TestDbo2)}
  71. }),
  72. Allocator = new LuConvertersAllocator()
  73. };
  74. return options;
  75. }
  76. protected TestModel1 GetBasicModel()
  77. {
  78. return new TestModel1
  79. {
  80. id = Guid.NewGuid(),
  81. name = "Test.",
  82. test_model2 = new List<TestModel2>
  83. {
  84. new TestModel2
  85. {
  86. id = Guid.NewGuid(),
  87. name = "bla",
  88. parent = null,
  89. test_model1 = null,
  90. test_model1_id = Guid.Empty
  91. }
  92. }
  93. };
  94. }
  95. [Fact]
  96. public void TestBasic1()
  97. {
  98. var serviceProvider = GetServiceProvider();
  99. var converter = serviceProvider.GetService<ILuObjectConverter<TestModel1, TestDbo1>>();
  100. var model = GetBasicModel();
  101. var result = converter.Convert(model, new LuFieldDbo(), LuPartialFieldsParser.Parse("*").Data, GetConverterOptions());
  102. Assert.Equal(LuStatus.Success.ToInt(), result.Status);
  103. var dbo = result.Data as TestDbo1;
  104. Assert.NotNull(dbo);
  105. Assert.Equal(model.id, dbo.Id);
  106. Assert.Equal(model.name, dbo.Name);
  107. Assert.NotNull(dbo.TestDbo2s);
  108. Assert.Equal(model.test_model2.Count, dbo.TestDbo2s.Count);
  109. foreach (var e in model.test_model2.Zip(dbo.TestDbo2s, (model2, dbo2) => new {Model = model2, Dbo = dbo2}))
  110. {
  111. Assert.Equal(e.Model.id, e.Dbo.Id);
  112. Assert.Equal(e.Model.name, e.Dbo.Name);
  113. Assert.Equal(e.Model.name + " " + e.Model.name, e.Dbo.NameVirtual);
  114. Assert.Null(e.Dbo.Parent);
  115. Assert.Null(e.Dbo.TestDbo1);
  116. }
  117. }
  118. [Fact]
  119. void TestPath1()
  120. {
  121. var serviceProvider = GetServiceProvider();
  122. var converter = serviceProvider.GetService<ILuObjectConverter<TestModel1, TestDbo1>>();
  123. var model = GetBasicModel();
  124. var result = converter.Convert(model, new LuFieldDbo(), LuPartialFieldsParser.Parse("Id").Data, GetConverterOptions());
  125. Assert.Equal(LuStatus.Success.ToInt(), result.Status);
  126. var dbo = result.Data as TestDbo1;
  127. Assert.NotNull(dbo);
  128. Assert.Equal(model.id, dbo.Id);
  129. Assert.Null(dbo.Name);
  130. Assert.Null(dbo.TestDbo2s);
  131. }
  132. [Fact]
  133. void TestPath2()
  134. {
  135. var serviceProvider = GetServiceProvider();
  136. var converter = serviceProvider.GetService<ILuObjectConverter<TestModel1, TestDbo1>>();
  137. var model = GetBasicModel();
  138. var result = converter.Convert(model, new LuFieldDbo(), LuPartialFieldsParser.Parse("id").Data, GetConverterOptions());
  139. Assert.Equal(LuStatus.Success.ToInt(), result.Status);
  140. var dbo = result.Data as TestDbo1;
  141. Assert.NotNull(dbo);
  142. Assert.Equal(model.id, dbo.Id);
  143. Assert.Null(dbo.Name);
  144. Assert.Null(dbo.TestDbo2s);
  145. }
  146. [Fact]
  147. public void TestPath3()
  148. {
  149. var serviceProvider = GetServiceProvider();
  150. var converter = serviceProvider.GetService<ILuObjectConverter<TestModel1, TestDbo1>>();
  151. var model = GetBasicModel();
  152. var result = converter.Convert(model, new LuFieldDbo(), LuPartialFieldsParser.Parse("Id, TestDbo2s(Id, Name)").Data, GetConverterOptions());
  153. Assert.Equal(LuStatus.Success.ToInt(), result.Status);
  154. var dbo = result.Data as TestDbo1;
  155. Assert.NotNull(dbo);
  156. Assert.Equal(model.id, dbo.Id);
  157. Assert.Null(dbo.Name);
  158. Assert.NotNull(dbo.TestDbo2s);
  159. Assert.Equal(model.test_model2.Count, dbo.TestDbo2s.Count);
  160. foreach (var e in model.test_model2.Zip(dbo.TestDbo2s, (model2, dbo2) => new {Model = model2, Dbo = dbo2}))
  161. {
  162. Assert.Equal(e.Model.id, e.Dbo.Id);
  163. Assert.Equal(e.Model.name, e.Dbo.Name);
  164. Assert.Null(e.Dbo.NameVirtual);
  165. Assert.Null(e.Dbo.Parent);
  166. Assert.Null(e.Dbo.TestDbo1);
  167. }
  168. }
  169. }
  170. }