PageRenderTime 24ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 0ms

/Tests/Projections/DynamicProjetionsTests.cs

http://tgh.codeplex.com
C# | 646 lines | 534 code | 101 blank | 11 comment | 3 complexity | 25c43416bc0c79055bf85168563bfa42 MD5 | raw file
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Linq.Dynamic;
  4. using AutoMapper;
  5. using ExampleWebApplication;
  6. using ExampleWebApplication.Entities;
  7. using ExampleWebApplication.Infraestruture;
  8. using ExampleWebApplication.Models;
  9. using FizzWare.NBuilder;
  10. using FluentAssertions;
  11. using NUnit.Framework;
  12. using TelerikMvcGridCustomBindingHelper.Mapper;
  13. using TelerikMvcGridCustomBindingHelper.Projections;
  14. using Tests.Entity;
  15. using Tests.ViewModel;
  16. namespace Tests.Projections
  17. {
  18. public class DynamicProjetionsTests
  19. {
  20. private ProjectionsEngine _engine;
  21. [SetUp]
  22. public void SetUp()
  23. {
  24. Mapper.Reset();
  25. GridModelMapper.Reset();
  26. _engine = new ProjectionsEngine();
  27. }
  28. [Test]
  29. public void projections_to()
  30. {
  31. Mapper.CreateMap<Product, ProductModel>();
  32. Mapper.CreateMap<Category, CategoryModel>();
  33. var data = Builder<Product>.CreateListOfSize(50).All()
  34. .With(p => p.Category = Builder<Category>.CreateNew().Build())
  35. .Build().AsQueryable();
  36. var dynamicLinqSelector = _engine.BuildSelector<Product, ProductModel>(null);
  37. var queryable = data.Select(dynamicLinqSelector.Expression);
  38. var products = _engine.GetData<Product, ProductModel>(queryable);
  39. var productModels = Mapper.Map<List<ProductModel>>(products);
  40. productModels.Should().HaveCount(50);
  41. }
  42. [Test]
  43. public void projections_to_2()
  44. {
  45. GridModelMapper.CreateMap<Order, OrderModel>()
  46. .MapProperty(order => order.Freight, model => model.Freight, options => options.SetValueResolver<DecimalValueResolver>());
  47. var data = Builder<Order>.CreateListOfSize(50).All()
  48. .Build().AsQueryable();
  49. var dynamicLinqSelector = _engine.BuildSelector<Order, OrderModel>(null);
  50. var queryable = data.Select(dynamicLinqSelector.Expression);
  51. var products = _engine.GetData<Order, OrderModel>(queryable);
  52. var productModels = Mapper.Map<List<OrderModel>>(products);
  53. productModels.Should().HaveCount(50);
  54. }
  55. [Test]
  56. public void projections_to_3()
  57. {
  58. MvcApplication.CreateMaps(false);
  59. var engine = new ProjectionsEngine();
  60. var properties = engine.PropertiesIntersection<Order, OrderModel>().ToList();
  61. properties.Should().HaveCount(14);
  62. properties.Where(x => x.Contains('.')).Should().HaveCount(8);
  63. properties.Where(x => !x.Contains('.')).Should().HaveCount(6);
  64. var dynamicLinqSelector = engine.BuildSelector<Order, OrderModel>(null);
  65. var orders = new List<Order>().AsQueryable();
  66. orders.Select(dynamicLinqSelector.Expression);
  67. }
  68. [Test]
  69. public void projections_to_with_custom_mappins()
  70. {
  71. Mapper.CreateMap<Foo, FooModel>()
  72. .ForMember(trg => trg.BarName, opt => opt.MapFrom(src => src.Name));
  73. Mapper.CreateMap<Bar, BarModel>();
  74. Mapper.CreateMap<Bee, BeeModel>();
  75. var data = Builder<Foo>.CreateListOfSize(50)
  76. .All().With(x => x.Name = "FooName").Build().AsQueryable();
  77. var dynamicLinqSelector = _engine.BuildSelector<Foo, FooModel>(null);
  78. var queryable = data.Select(dynamicLinqSelector.Expression);
  79. var foos = _engine.GetData<Foo, FooModel>(queryable);
  80. var fooModels = Mapper.Map<List<FooModel>>(foos);
  81. fooModels.Should().HaveCount(50);
  82. fooModels.ForEach(model => model.BarName.Should().Be("FooName"));
  83. }
  84. [Test]
  85. public void projections_to_with_custom_mappins_1()
  86. {
  87. GridModelMapper.CreateMap<Category, CategoryModel>();
  88. //GridModelMapper.CreateMap<CategoryModel, Category>();
  89. GridModelMapper.CreateMap<Product, ProductModel>()
  90. .MapProperty(product => product.Units_On_Order, productModel => productModel.Units_OnOrder)
  91. .MapProperty(product => product.ProductName, productModel => productModel.ViewModelProp);
  92. Mapper.CreateMap<Product, ProductModel>().ForMember(trg => trg.ViewModelProp, opt => opt.MapFrom(src => "[Agreggates] " + src.ProductName));
  93. var data = Builder<Product>.CreateListOfSize(50).All().With(product => product.Category = new Category()).Build().AsQueryable();
  94. var dynamicLinqSelector = _engine.BuildSelector<Product, ProductModel>(null);
  95. var queryable = data.Select(dynamicLinqSelector.Expression);
  96. var products = _engine.GetData<Product, ProductModel>(queryable);
  97. var productModels = Mapper.Map<List<ProductModel>>(products);
  98. productModels.Should().HaveCount(50);
  99. }
  100. [Test]
  101. public void projections_to_with_custom_mappins_2()
  102. {
  103. GridModelMapper.CreateMap<Category, CategoryModel>();
  104. //GridModelMapper.CreateMap<CategoryModel, Category>();
  105. GridModelMapper.CreateMap<Product, ProductModel>()
  106. .MapProperty(product => product.Units_On_Order, productModel => productModel.Units_OnOrder)
  107. .MapProperty(product => product.ProductName, productModel => productModel.ViewModelProp);
  108. Mapper.CreateMap<Product, ProductModel>().ForMember(trg => trg.ViewModelProp, opt => opt.MapFrom(src => "[Agreggates] " + src.ProductName));
  109. var data = Builder<Product>.CreateListOfSize(50).All()
  110. .With(product => product.Category = new Category { CategoryName = "CategoryNameValue" })
  111. .And(product => product.ProductName = "ProductNameValue").Build().AsQueryable();
  112. var dynamicLinqSelector = _engine.BuildSelector<Product, ProductModel>(null);
  113. var queryable = data.Select(dynamicLinqSelector.Expression);
  114. var products = _engine.GetData<Product, ProductModel>(queryable);
  115. var productModels = Mapper.Map<List<ProductModel>>(products);
  116. productModels.Should().HaveCount(50);
  117. productModels.Should().OnlyContain(productModel => productModel.ProductName == "ProductNameValue");
  118. productModels.Should().OnlyContain(productModel => productModel.Category != null);
  119. productModels.Should().OnlyContain(productModel => productModel.Category.CategoryName == "CategoryNameValue");
  120. }
  121. [Test]
  122. public void projections_to_assert_all_object_graph()
  123. {
  124. Mapper.CreateMap<Foo, FooModel>()
  125. .ForMember(trg => trg.ImInAViewModel, opt => opt.MapFrom(src => src.ImInAnEntity));
  126. Mapper.CreateMap<Bar, BarModel>()
  127. .ForMember(trg => trg.ImInAViewModel, opt => opt.MapFrom(src => src.ImInAnEntity));
  128. Mapper.CreateMap<Bee, BeeModel>();
  129. var bar = Builder<Bar>.CreateNew()
  130. .With(y => y.ImInAnEntity = "BarImInAnEntity")
  131. .With(y => y.Name = "BarName")
  132. .With(y => y.Bee = Builder<Bee>.CreateNew()
  133. .With(z => z.Name = "BeeName")
  134. .With(z => z.UnitPrice = 33.33M)
  135. .Build())
  136. .Build();
  137. var data = Builder<Foo>.CreateListOfSize(50).All()
  138. .With(x => x.ImInAnEntity = "FooImInAnEntity")
  139. .With(x => x.Name = "FooName")
  140. .With(x => x.UnitPrice = 11.11M)
  141. .With(x => x.UnitsInStock = 22.22M)
  142. .With(x => x.Bar = bar)
  143. .With(x => x.Bars = Builder<Bar>.CreateListOfSize(10).All()
  144. .With(g => g.Bee = bar.Bee)
  145. .With(g => g.ImInAnEntity = bar.ImInAnEntity)
  146. .With(g => g.Name = bar.Name)
  147. .Build())
  148. .Build().AsQueryable();
  149. var dynamicLinqSelector = _engine.BuildSelector<Foo, FooModel>(null);
  150. var queryable = data.Select(dynamicLinqSelector.Expression);
  151. var foos = _engine.GetData<Foo, FooModel>(queryable);
  152. var fooModels = Mapper.Map<IList<FooModel>>(foos).ToList();
  153. fooModels.Should().HaveCount(50);
  154. fooModels.ForEach(foo => foo.ImInAViewModel.Should().Be("FooImInAnEntity"));
  155. fooModels.ForEach(foo => foo.BarName.Should().Be("BarName"));
  156. fooModels.ForEach(foo => foo.Bar.ImInAViewModel.Should().Be("BarImInAnEntity"));
  157. fooModels.ForEach(foo => foo.Bar.Name.Should().Be("BarName"));
  158. fooModels.ForEach(foo => foo.Bar.Bee.Should().NotBeNull());
  159. fooModels.ForEach(foo => foo.Bar.Bee.Name.Should().Be("BeeName"));
  160. fooModels.ForEach(foo => foo.Bar.Bee.UnitPrice.Should().Be(33.33M));
  161. fooModels.ForEach(foo => foo.Bars.Should().HaveCount(10));
  162. fooModels.ForEach(foo => foo.Bars.ToList().ForEach(barModel => barModel.Name.Should().Be("BarName")));
  163. fooModels.ForEach(foo => foo.Bars.ToList().ForEach(barModel => barModel.ImInAViewModel.Should().Be("BarImInAnEntity")));
  164. fooModels.ForEach(foo => foo.Bars.ToList().ForEach(barModel => barModel.Bee.Should().NotBeNull()));
  165. fooModels.ForEach(foo => foo.Bars.ToList().ForEach(barModel => barModel.Bee.Name.Should().Be("BeeName")));
  166. fooModels.ForEach(foo => foo.Bars.ToList().ForEach(barModel => barModel.Bee.UnitPrice.Should().Be(33.33M)));
  167. }
  168. [Test]
  169. public void projections_cache()
  170. {
  171. Mapper.CreateMap<Product, ProductModel>();
  172. Mapper.CreateMap<Category, CategoryModel>();
  173. var selector1 = _engine.BuildSelector<Product, ProductModel>(null);
  174. var selector2 = _engine.BuildSelector<Category, CategoryModel>(null);
  175. var selector3 = _engine.BuildSelector<Product, ProductModel>(null);
  176. var selector4 = _engine.BuildSelector<Category, CategoryModel>(null);
  177. selector1.Should().NotBe(selector2);
  178. selector1.Should().Be(selector3);
  179. selector2.Should().Be(selector4);
  180. }
  181. [Test]
  182. public void projections_from()
  183. {
  184. Mapper.CreateMap<Product, ProductModel>();
  185. Mapper.CreateMap<Category, CategoryModel>();
  186. var data = Builder<Product>.CreateListOfSize(50).All()
  187. .With(p => p.Category = Builder<Category>.CreateNew().Build())
  188. .Build().AsQueryable();
  189. var dynamicLinqSelector = _engine.BuildSelector<Product, ProductModel>(null);
  190. var queryable = data.Select(dynamicLinqSelector.Expression);
  191. var products = _engine.GetData<Product, ProductModel>(queryable);
  192. products.Should().HaveCount(50);
  193. }
  194. [Test]
  195. public void projections_from_assert_all_object_graph()
  196. {
  197. Mapper.CreateMap<Foo, FooModel>()
  198. .ForMember(trg => trg.ImInAViewModel, opt => opt.MapFrom(src => src.ImInAnEntity));
  199. Mapper.CreateMap<Bar, BarModel>()
  200. .ForMember(trg => trg.ImInAViewModel, opt => opt.MapFrom(src => src.ImInAnEntity));
  201. Mapper.CreateMap<Bee, BeeModel>();
  202. var bar = Builder<Bar>.CreateNew()
  203. .With(y => y.ImInAnEntity = "BarImInAnEntity")
  204. .With(y => y.Name = "BarName")
  205. .With(y => y.Bee = Builder<Bee>.CreateNew()
  206. .With(z => z.Name = "BeeName")
  207. .With(z => z.UnitPrice = 33.33M)
  208. .Build())
  209. .Build();
  210. var data = Builder<Foo>.CreateListOfSize(50).All()
  211. .With(x => x.ImInAnEntity = "FooImInAnEntity")
  212. .With(x => x.Name = "FooName")
  213. .With(x => x.UnitPrice = 11.11M)
  214. .With(x => x.UnitsInStock = 22.22M)
  215. .With(x => x.Bar = bar)
  216. .With(x => x.Bars = Builder<Bar>.CreateListOfSize(10).All()
  217. .With(g => g.Bee = bar.Bee)
  218. .With(g => g.ImInAnEntity = bar.ImInAnEntity)
  219. .With(g => g.Name = bar.Name)
  220. .Build())
  221. .Build().AsQueryable();
  222. var dynamicLinqSelector = _engine.BuildSelector<Foo, FooModel>(null);
  223. var queryable = data.Select(dynamicLinqSelector.Expression);
  224. var foos = _engine.GetData<Foo, FooModel>(queryable);
  225. foos.Should().HaveCount(50);
  226. foos.ForEach(foo => foo.ImInAnEntity.Should().Be("FooImInAnEntity"));
  227. foos.ForEach(foo => foo.Bar.ImInAnEntity.Should().Be("BarImInAnEntity"));
  228. foos.ForEach(foo => foo.Bar.Name.Should().Be("BarName"));
  229. foos.ForEach(foo => foo.Bar.Bee.Should().NotBeNull());
  230. foos.ForEach(foo => foo.Bar.Bee.Name.Should().Be("BeeName"));
  231. foos.ForEach(foo => foo.Bar.Bee.UnitPrice.Should().Be(33.33M));
  232. foos.ForEach(foo => foo.Bars.Should().HaveCount(10));
  233. foos.ForEach(foo => foo.Bars.ToList().ForEach(barModel => barModel.Name.Should().Be("BarName")));
  234. foos.ForEach(foo => foo.Bars.ToList().ForEach(barModel => barModel.ImInAnEntity.Should().Be("BarImInAnEntity")));
  235. foos.ForEach(foo => foo.Bars.ToList().ForEach(barModel => barModel.Bee.Should().NotBeNull()));
  236. foos.ForEach(foo => foo.Bars.ToList().ForEach(barModel => barModel.Bee.Name.Should().Be("BeeName")));
  237. foos.ForEach(foo => foo.Bars.ToList().ForEach(barModel => barModel.Bee.UnitPrice.Should().Be(33.33M)));
  238. }
  239. [Test]
  240. public void projections_from_with_custom_mappins()
  241. {
  242. Mapper.CreateMap<Foo, FooModel>()
  243. .ForMember(trg => trg.BarName, opt => opt.MapFrom(src => src.Name));
  244. Mapper.CreateMap<Bar, BarModel>();
  245. Mapper.CreateMap<Bee, BeeModel>();
  246. var data = Builder<Foo>.CreateListOfSize(50).All()
  247. .With(x => x.Bar = Builder<Bar>.CreateNew().Build())
  248. .With(x => x.Bar.Name = "FooBarName").Build().AsQueryable();
  249. var dynamicLinqSelector = _engine.BuildSelector<Foo, FooModel>(null);
  250. var queryable = data.Select(dynamicLinqSelector.Expression);
  251. var foos = _engine.GetData<Foo, FooModel>(queryable);
  252. foos.Should().HaveCount(50);
  253. foos.ForEach(foo => foo.Bar.Name.Should().Be("FooBarName"));
  254. }
  255. #region Dynamic Linq selector builder
  256. [Test]
  257. public void build_selector()
  258. {
  259. Mapper.CreateMap<Foo, FooModel>()
  260. .ForMember(trg => trg.BarName, opt => opt.MapFrom(src => src.Name));
  261. Mapper.CreateMap<Bar, BarModel>();
  262. Mapper.CreateMap<Bee, BeeModel>();
  263. var options = new ProjectionsOptionsImpl<Foo>();
  264. options.Use(foo => new
  265. {
  266. foo.Name,
  267. foo.ImInAnEntity,
  268. foo.Bars,
  269. foo.UnitPrice,
  270. foo.UnitsInStock
  271. })
  272. .Use(foo => new
  273. {
  274. foo.Bar.Bee.Name,
  275. foo.Bar.ImInAnEntity,
  276. foo.Bar.Bee.UnitPrice
  277. });
  278. var dynamicLinqSelector = _engine.BuildSelector<Foo, FooModel>(null);
  279. dynamicLinqSelector.Expression.Should().Be(
  280. "new(Name, Bar.Name as Bar_Name, Bar.Bee.Name as Bar_Bee_Name, Bar.Bee.UnitPrice as Bar_Bee_UnitPrice, Bars)");
  281. }
  282. #endregion
  283. #region Dynamic Linq selector builder - With options
  284. [Test]
  285. public void build_selector_with_options_use()
  286. {
  287. Mapper.CreateMap<Foo, FooModel>()
  288. .ForMember(trg => trg.BarName, opt => opt.MapFrom(src => src.Name));
  289. Mapper.CreateMap<Bar, BarModel>();
  290. Mapper.CreateMap<Bee, BeeModel>();
  291. var options = new ProjectionsOptionsImpl<Foo>();
  292. options.Use(foo => new
  293. {
  294. foo.Name,
  295. foo.ImInAnEntity,
  296. foo.Bars,
  297. foo.UnitPrice,
  298. foo.UnitsInStock
  299. })
  300. .Use(foo => new
  301. {
  302. foo.Bar.Bee.Name,
  303. foo.Bar.ImInAnEntity,
  304. foo.Bar.Bee.UnitPrice
  305. });
  306. var dynamicLinqSelector = _engine.BuildSelector<Foo, FooModel>(options);
  307. dynamicLinqSelector.Expression.Should().Be(
  308. "new(Name, ImInAnEntity, Bars, UnitPrice, UnitsInStock, Bar.Bee.Name as Bar_Bee_Name, Bar.ImInAnEntity as Bar_ImInAnEntity, Bar.Bee.UnitPrice as Bar_Bee_UnitPrice)");
  309. }
  310. [Test]
  311. public void build_selector_with_options_use_2()
  312. {
  313. Mapper.CreateMap<Foo, FooModel>()
  314. .ForMember(trg => trg.BarName, opt => opt.MapFrom(src => src.Name));
  315. Mapper.CreateMap<Bar, BarModel>();
  316. Mapper.CreateMap<Bee, BeeModel>();
  317. var options = new ProjectionsOptionsImpl<Foo>();
  318. options.Use(foo => new
  319. {
  320. foo.Name,
  321. foo.ImInAnEntity,
  322. foo.Bars,
  323. foo.UnitPrice,
  324. foo.UnitsInStock
  325. })
  326. .Use(foo => new
  327. {
  328. foo.Bar.Bee.Name,
  329. foo.Bar.ImInAnEntity,
  330. //foo.Bar.Bee.UnitPrice
  331. });
  332. var dynamicLinqSelector = _engine.BuildSelector<Foo, FooModel>(options);
  333. dynamicLinqSelector.Expression.Should().Be(
  334. "new(Name, ImInAnEntity, Bars, UnitPrice, UnitsInStock, Bar.Bee.Name as Bar_Bee_Name, Bar.ImInAnEntity as Bar_ImInAnEntity)");
  335. }
  336. [Test]
  337. public void build_selector_with_options_ignore()
  338. {
  339. Mapper.CreateMap<Foo, FooModel>()
  340. .ForMember(trg => trg.BarName, opt => opt.MapFrom(src => src.Name));
  341. Mapper.CreateMap<Bar, BarModel>();
  342. Mapper.CreateMap<Bee, BeeModel>();
  343. var options = new ProjectionsOptionsImpl<Foo>();
  344. options.Ignore(foo => new
  345. {
  346. //foo.Name,
  347. foo.ImInAnEntity,
  348. foo.Bars,
  349. foo.UnitPrice,
  350. foo.UnitsInStock
  351. })
  352. .Ignore(foo => new
  353. {
  354. //foo.Bar.Bee.Name,
  355. foo.Bar.ImInAnEntity,
  356. foo.Bar.Bee.UnitPrice
  357. });
  358. var dynamicLinqSelector = _engine.BuildSelector<Foo, FooModel>(options);
  359. dynamicLinqSelector.Expression.Should().Be("new(Name, Bar.Name as Bar_Name, Bar.Bee.Name as Bar_Bee_Name)");
  360. }
  361. [Test]
  362. public void build_selector_with_options_include()
  363. {
  364. Mapper.CreateMap<Foo, FooModel>()
  365. .ForMember(trg => trg.BarName, opt => opt.MapFrom(src => src.Name));
  366. Mapper.CreateMap<Bar, BarModel>();
  367. Mapper.CreateMap<Bee, BeeModel>();
  368. var options = new ProjectionsOptionsImpl<Foo>();
  369. options.Include(foo => new
  370. {
  371. foo.Name,
  372. foo.ImInAnEntity,
  373. foo.Bars,
  374. foo.UnitPrice,
  375. foo.UnitsInStock
  376. })
  377. .Include(foo => new
  378. {
  379. foo.Bar.Bee.Name,
  380. foo.Bar.ImInAnEntity,
  381. foo.Bar.Bee.UnitPrice
  382. });
  383. var dynamicLinqSelector = _engine.BuildSelector<Foo, FooModel>(options);
  384. dynamicLinqSelector.Expression.Should().Be(
  385. "new(Name, Bar.Name as Bar_Name, Bar.Bee.Name as Bar_Bee_Name, Bar.Bee.UnitPrice as Bar_Bee_UnitPrice, Bars, ImInAnEntity, UnitPrice, UnitsInStock, Bar.ImInAnEntity as Bar_ImInAnEntity)");
  386. }
  387. [Test]
  388. public void build_selector_with_options_include_and_ignore()
  389. {
  390. Mapper.CreateMap<Foo, FooModel>()
  391. .ForMember(trg => trg.BarName, opt => opt.MapFrom(src => src.Name));
  392. Mapper.CreateMap<Bar, BarModel>();
  393. Mapper.CreateMap<Bee, BeeModel>();
  394. var options = new ProjectionsOptionsImpl<Foo>();
  395. options.Ignore(foo => new
  396. {
  397. foo.Name,
  398. foo.ImInAnEntity,
  399. //foo.Bars,
  400. foo.UnitPrice,
  401. foo.UnitsInStock,
  402. //foo.Bar.Name,
  403. })
  404. .Include(foo => new
  405. {
  406. foo.Bars,
  407. foo.Bar.Bee.Name,
  408. foo.Bar.ImInAnEntity,
  409. foo.Bar.Bee.UnitPrice
  410. });
  411. var dynamicLinqSelector = _engine.BuildSelector<Foo, FooModel>(options);
  412. dynamicLinqSelector.Expression.Should().Be(
  413. "new(Bar.Name as Bar_Name, Bar.Bee.Name as Bar_Bee_Name, Bar.Bee.UnitPrice as Bar_Bee_UnitPrice, Bars, Bar.ImInAnEntity as Bar_ImInAnEntity)");
  414. }
  415. #endregion
  416. #region Dynamic Linq selector builder - With options and GetData
  417. [Test]
  418. public void build_selector_with_options_use_and_getData()
  419. {
  420. Mapper.CreateMap<Foo, FooModel>()
  421. .ForMember(trg => trg.BarName, opt => opt.MapFrom(src => src.Name));
  422. Mapper.CreateMap<Bar, BarModel>();
  423. Mapper.CreateMap<Bee, BeeModel>();
  424. var options = new ProjectionsOptionsImpl<Foo>();
  425. options.Use(foo => new
  426. {
  427. foo.Name,
  428. foo.ImInAnEntity,
  429. foo.Bars,
  430. foo.UnitPrice,
  431. foo.UnitsInStock
  432. })
  433. .Use(foo => new
  434. {
  435. foo.Bar.Name,
  436. foo.Bar.ImInAnEntity,
  437. foo.Bar.Bee.UnitPrice
  438. });
  439. var data = Builder<Foo>.CreateListOfSize(50).All()
  440. .With(x => x.Bar = Builder<Bar>.CreateNew().Build())
  441. .With(x => x.Bar.Name = "FooBarName").Build().AsQueryable();
  442. var dynamicLinqSelector = _engine.BuildSelector<Foo, FooModel>(null);
  443. var queryable = data.Select(dynamicLinqSelector.Expression);
  444. var foos = _engine.GetData<Foo, FooModel>(queryable);
  445. foos.Should().HaveCount(50);
  446. foos.ForEach(foo => foo.Bar.Name.Should().Be("FooBarName"));
  447. }
  448. [Test]
  449. public void build_selector_with_options_ignore_and_getData()
  450. {
  451. Mapper.CreateMap<Foo, FooModel>()
  452. .ForMember(trg => trg.BarName, opt => opt.MapFrom(src => src.Name));
  453. Mapper.CreateMap<Bar, BarModel>();
  454. Mapper.CreateMap<Bee, BeeModel>();
  455. var options = new ProjectionsOptionsImpl<Foo>();
  456. options.Ignore(foo => new
  457. {
  458. //foo.Name,
  459. foo.ImInAnEntity,
  460. foo.Bars,
  461. foo.UnitPrice,
  462. foo.UnitsInStock
  463. })
  464. .Ignore(foo => new
  465. {
  466. //foo.Bar.Bee.Name,
  467. foo.Bar.ImInAnEntity,
  468. foo.Bar.Bee.UnitPrice
  469. });
  470. var data = Builder<Foo>.CreateListOfSize(50).All()
  471. .With(x => x.Bar = Builder<Bar>.CreateNew().Build())
  472. .With(x => x.Bar.Name = "FooBarName").Build().AsQueryable();
  473. var dynamicLinqSelector = _engine.BuildSelector<Foo, FooModel>(null);
  474. var queryable = data.Select(dynamicLinqSelector.Expression);
  475. var foos = _engine.GetData<Foo, FooModel>(queryable);
  476. foos.Should().HaveCount(50);
  477. foos.ForEach(foo => foo.Bar.Name.Should().Be("FooBarName"));
  478. }
  479. [Test]
  480. public void build_selector_with_options_include_and_getData()
  481. {
  482. Mapper.CreateMap<Foo, FooModel>()
  483. .ForMember(trg => trg.BarName, opt => opt.MapFrom(src => src.Name));
  484. Mapper.CreateMap<Bar, BarModel>();
  485. Mapper.CreateMap<Bee, BeeModel>();
  486. var options = new ProjectionsOptionsImpl<Foo>();
  487. options.Include(foo => new
  488. {
  489. foo.Name,
  490. foo.ImInAnEntity,
  491. foo.Bars,
  492. foo.UnitPrice,
  493. foo.UnitsInStock
  494. })
  495. .Include(foo => new
  496. {
  497. foo.Bar.Bee.Name,
  498. foo.Bar.ImInAnEntity,
  499. foo.Bar.Bee.UnitPrice
  500. });
  501. var data = Builder<Foo>.CreateListOfSize(50).All()
  502. .With(x => x.Bar = Builder<Bar>.CreateNew().Build())
  503. .With(x => x.Bar.Name = "FooBarName").Build().AsQueryable();
  504. var dynamicLinqSelector = _engine.BuildSelector<Foo, FooModel>(null);
  505. var queryable = data.Select(dynamicLinqSelector.Expression);
  506. var foos = _engine.GetData<Foo, FooModel>(queryable);
  507. foos.Should().HaveCount(50);
  508. foos.ForEach(foo => foo.Bar.Name.Should().Be("FooBarName"));
  509. }
  510. [Test]
  511. public void build_selector_with_options_include_and_ignore_and_getData()
  512. {
  513. Mapper.CreateMap<Foo, FooModel>()
  514. .ForMember(trg => trg.BarName, opt => opt.MapFrom(src => src.Name));
  515. Mapper.CreateMap<Bar, BarModel>();
  516. Mapper.CreateMap<Bee, BeeModel>();
  517. var options = new ProjectionsOptionsImpl<Foo>();
  518. options.Ignore(foo => new
  519. {
  520. foo.Name,
  521. foo.ImInAnEntity,
  522. //foo.Bars,
  523. foo.UnitPrice,
  524. foo.UnitsInStock,
  525. //foo.Bar.Name,
  526. })
  527. .Include(foo => new
  528. {
  529. foo.Bars,
  530. foo.Bar.Bee.Name,
  531. foo.Bar.ImInAnEntity,
  532. foo.Bar.Bee.UnitPrice
  533. });
  534. var data = Builder<Foo>.CreateListOfSize(50).All()
  535. .With(x => x.Bar = Builder<Bar>.CreateNew().Build())
  536. .With(x => x.Bar.Name = "FooBarName").Build().AsQueryable();
  537. var dynamicLinqSelector = _engine.BuildSelector<Foo, FooModel>(null);
  538. var queryable = data.Select(dynamicLinqSelector.Expression);
  539. var foos = _engine.GetData<Foo, FooModel>(queryable);
  540. foos.Should().HaveCount(50);
  541. foos.ForEach(foo => foo.Bar.Name.Should().Be("FooBarName"));
  542. }
  543. #endregion
  544. }
  545. }