Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

LuEfCrudTests.cs 8.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq.Expressions;
  4. using Luticate2.Auth.Tests.DataAccess.Crud.Models;
  5. using Luticate2.Auth.Utils.Business.Converters;
  6. using Luticate2.Auth.Utils.Business.Converters.ObjectConverterDescriptor;
  7. using Luticate2.Auth.Utils.Business.Fields;
  8. using Luticate2.Auth.Utils.DataAccess.Crud;
  9. using Luticate2.Auth.Utils.Dbo;
  10. using Luticate2.Auth.Utils.Dbo.Fields;
  11. using Luticate2.Auth.Utils.Dbo.Pagination;
  12. using Luticate2.Auth.Utils.Dbo.Result;
  13. using Luticate2.Auth.Utils.Interfaces;
  14. using Microsoft.EntityFrameworkCore;
  15. using Microsoft.Extensions.DependencyInjection;
  16. using Xunit;
  17. namespace Luticate2.Auth.Tests.DataAccess.Crud
  18. {
  19. public class LuEfCrudTests
  20. {
  21. public class TableSimple1Dbo
  22. {
  23. public Guid Id { get; set; }
  24. public string Name { get; set; }
  25. public int Priority { get; set; }
  26. public string Comment { get; set; }
  27. public int? OptionalInt { get; set; }
  28. public DateTime CreatedAt { get; set; }
  29. public DateTime? UpdatedAt { get; set; }
  30. }
  31. public class TableSimple1DboDescriptor : LuObjectConverterDescriptor<TableSimple1Dbo, table_simple_1>
  32. {
  33. public TableSimple1DboDescriptor()
  34. {
  35. AddStaticMemberConverter(dbo => dbo.Id, model => model.id);
  36. AddStaticMemberConverter(dbo => dbo.Name, model => model.name);
  37. AddStaticMemberConverter(dbo => dbo.Priority, model => model.priority);
  38. AddStaticMemberConverter(dbo => dbo.Comment, model => model.comment);
  39. AddStaticMemberConverter(dbo => dbo.OptionalInt, model => model.optional_int);
  40. AddStaticMemberConverter(dbo => dbo.CreatedAt, model => model.created_at);
  41. AddStaticMemberConverter(dbo => dbo.UpdatedAt, model => model.updated_at);
  42. }
  43. }
  44. public class TableSimple1DataAccess : LuEfCrudDataAccess<TableSimple1Dbo, table_simple_1, luticate2_unit_testsContext>
  45. {
  46. public TableSimple1DataAccess(IServiceProvider serviceProvider) : base(serviceProvider)
  47. {
  48. }
  49. }
  50. protected IServiceProvider GetServiceProvider()
  51. {
  52. var services = new ServiceCollection();
  53. services.AddLuObjectConverterDescriptors();
  54. services.AddSingleton<ILuObjectConverterDescriptor<TableSimple1Dbo, table_simple_1>, TableSimple1DboDescriptor>();
  55. services.AddLuObjectConverters();
  56. services.AddLuObjectConverterPoco<table_simple_1, TableSimple1Dbo>(); // DB read
  57. services.AddDbContext<luticate2_unit_testsContext>(options =>
  58. {
  59. options.UseNpgsql(@"Host=localhost;Database=luticate2_unit_tests;Username=dev;Password=dev");
  60. options.UseInternalServiceProvider(new ServiceCollection()
  61. .AddEntityFrameworkNpgsql()
  62. .BuildServiceProvider());
  63. }, ServiceLifetime.Transient);
  64. services.AddSingleton<TableSimple1DataAccess>();
  65. services.AddSingleton<ILuConvertersTypeConverter>(new LuConvertersTypeConverter(new Dictionary<Type, Type>
  66. {
  67. {typeof(TableSimple1Dbo), typeof(table_simple_1)} // DB read
  68. }));
  69. var serviceProvider = services.BuildServiceProvider();
  70. return serviceProvider;
  71. }
  72. [Fact]
  73. public void TestSimpleReadFilter1()
  74. {
  75. var serviceProvider = GetServiceProvider();
  76. var crudDataAccess = serviceProvider.GetRequiredService<TableSimple1DataAccess>();
  77. var result = crudDataAccess.Read(LuPartialFieldsParser.Parse("*").Data, new LuPaginatedParamsDbo
  78. {
  79. Filter = new LuFilterDbo
  80. {
  81. Expression = (Expression<Func<TableSimple1Dbo, bool>>) (x => x.Name == "test1")
  82. },
  83. Page = 0,
  84. OrderBy = new LuOrderByDbo
  85. {
  86. OrderByFields = new List<LuOrderByFieldDbo>()
  87. },
  88. PerPage = 10
  89. });
  90. Assert.NotNull(result);
  91. Assert.Equal(LuStatus.Success.ToInt(), result.Status);
  92. var items = result.Data;
  93. Assert.NotNull(items);
  94. Assert.Equal(1, items.Count);
  95. Assert.NotNull(items.Data);
  96. Assert.Equal(1, items.Data.Count);
  97. var item = items.Data[0];
  98. Assert.NotNull(item);
  99. Assert.Equal("test1", item.Name);
  100. Assert.Equal(42, item.Priority);
  101. Assert.Null(item.Comment);
  102. Assert.Null(item.OptionalInt);
  103. }
  104. [Fact]
  105. public void TestSimpleReadOrderBy1()
  106. {
  107. var serviceProvider = GetServiceProvider();
  108. var crudDataAccess = serviceProvider.GetRequiredService<TableSimple1DataAccess>();
  109. var result = crudDataAccess.Read(LuPartialFieldsParser.Parse("*").Data, new LuPaginatedParamsDbo
  110. {
  111. Filter = new LuFilterDbo
  112. {
  113. Expression = (Expression<Func<TableSimple1Dbo, bool>>) (x => true)
  114. },
  115. Page = 0,
  116. OrderBy = new LuOrderByDbo
  117. {
  118. OrderByFields = new List<LuOrderByFieldDbo>
  119. {
  120. new LuOrderByFieldDbo
  121. {
  122. Asc = true,
  123. Expression = (Expression<Func<TableSimple1Dbo, object>>) (x => x.Priority)
  124. }
  125. }
  126. },
  127. PerPage = 10
  128. });
  129. Assert.NotNull(result);
  130. Assert.Equal(LuStatus.Success.ToInt(), result.Status);
  131. var items = result.Data;
  132. Assert.NotNull(items);
  133. Assert.Equal(2, items.Count);
  134. Assert.NotNull(items.Data);
  135. Assert.Equal(2, items.Data.Count);
  136. var item = items.Data[0];
  137. Assert.NotNull(item);
  138. Assert.Equal("test2", item.Name);
  139. Assert.Equal(24, item.Priority);
  140. Assert.Null(item.Comment);
  141. Assert.Equal(1, item.OptionalInt);
  142. item = items.Data[1];
  143. Assert.NotNull(item);
  144. Assert.Equal("test1", item.Name);
  145. Assert.Equal(42, item.Priority);
  146. Assert.Null(item.Comment);
  147. Assert.Null(item.OptionalInt);
  148. }
  149. [Fact]
  150. public void TestSimpleReadOrderBy2()
  151. {
  152. var serviceProvider = GetServiceProvider();
  153. var crudDataAccess = serviceProvider.GetRequiredService<TableSimple1DataAccess>();
  154. var partialRespone = new LuPartialFieldsDbo
  155. {
  156. Fields = new List<LuFieldDbo>
  157. {
  158. new LuFieldDbo
  159. {
  160. Parts = new List<string>
  161. {
  162. "*"
  163. }
  164. }
  165. }
  166. };
  167. var paginationParams = new LuPaginatedParamsDbo
  168. {
  169. Filter = new LuFilterDbo
  170. {
  171. Expression = (Expression<Func<TableSimple1Dbo, bool>>) (x => true)
  172. },
  173. Page = 0,
  174. OrderBy = new LuOrderByDbo
  175. {
  176. OrderByFields = new List<LuOrderByFieldDbo>
  177. {
  178. new LuOrderByFieldDbo
  179. {
  180. Asc = false,
  181. Expression = (Expression<Func<TableSimple1Dbo, object>>) (x => x.Priority)
  182. }
  183. }
  184. },
  185. PerPage = 10
  186. };
  187. var result = crudDataAccess.Read(partialRespone, paginationParams);
  188. Assert.NotNull(result);
  189. Assert.Equal(LuStatus.Success.ToInt(), result.Status);
  190. var items = result.Data;
  191. Assert.NotNull(items);
  192. Assert.Equal(2, items.Count);
  193. Assert.NotNull(items.Data);
  194. Assert.Equal(2, items.Data.Count);
  195. var item = items.Data[0];
  196. Assert.NotNull(item);
  197. Assert.Equal("test1", item.Name);
  198. Assert.Equal(42, item.Priority);
  199. Assert.Null(item.Comment);
  200. Assert.Null(item.OptionalInt);
  201. item = items.Data[1];
  202. Assert.NotNull(item);
  203. Assert.Equal("test2", item.Name);
  204. Assert.Equal(24, item.Priority);
  205. Assert.Null(item.Comment);
  206. Assert.Equal(1, item.OptionalInt);
  207. }
  208. }
  209. }