Mercurial > pub > bltoolkit
comparison UnitTests/Fluent/FluentMapTest.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 using System; | |
2 using System.Collections.Generic; | |
3 using System.Linq; | |
4 using BLToolkit.Data; | |
5 using BLToolkit.Data.Linq; | |
6 using BLToolkit.DataAccess; | |
7 using BLToolkit.Fluent.Test.MockDataBase; | |
8 using BLToolkit.Mapping; | |
9 using BLToolkit.Mapping.Fluent; | |
10 using BLToolkit.Reflection.Extension; | |
11 using Microsoft.VisualStudio.TestTools.UnitTesting; | |
12 | |
13 namespace BLToolkit.Fluent.Test | |
14 { | |
15 /// <summary> | |
16 /// Тестирование FluentMap | |
17 /// </summary> | |
18 [TestClass] | |
19 public class FluentMapTest | |
20 { | |
21 [TestInitialize] | |
22 public void Initialize() | |
23 { | |
24 DbManager.AddDataProvider(typeof(MockDataProvider)); | |
25 } | |
26 | |
27 /// <summary> | |
28 /// TableName mapping | |
29 /// </summary> | |
30 [TestMethod] | |
31 public void ShouldMapTableName() | |
32 { | |
33 // db config | |
34 var conn = new MockDb() | |
35 .NewReader("Field1") | |
36 .NewRow(1); | |
37 | |
38 using (conn) | |
39 using (var db = new DbManager(conn)) | |
40 { | |
41 // fluent config | |
42 new FluentMap<TableNameDbo>() | |
43 .TableName("TableNameDboT1") | |
44 .MapTo(db); | |
45 | |
46 // when | |
47 db.GetTable<TableNameDbo>().ToArray(); | |
48 | |
49 // then | |
50 conn.Commands[0] | |
51 .Assert().AreTable("TableNameDboT1", "Fail mapping"); | |
52 } | |
53 } | |
54 | |
55 /// <summary> | |
56 /// TableName mapping fro child | |
57 /// </summary> | |
58 [TestMethod] | |
59 public void ShouldMapTableNameForChild() | |
60 { | |
61 // db config | |
62 var conn = new MockDb() | |
63 .NewReader("Field1") | |
64 .NewRow(1); | |
65 | |
66 using (conn) | |
67 using (var db = new DbManager(conn)) | |
68 { | |
69 // fluent config | |
70 new FluentMap<TableNameDbo>() | |
71 .TableName("TableNameDboT1") | |
72 .MapTo(db); | |
73 | |
74 // when | |
75 db.GetTable<TableNameChildDbo>().ToArray(); | |
76 | |
77 // then | |
78 conn.Commands[0] | |
79 .Assert().AreTable("TableNameDboT1", "Fail mapping"); | |
80 } | |
81 } | |
82 | |
83 /// <summary> | |
84 /// MapField mapping | |
85 /// </summary> | |
86 [TestMethod] | |
87 public void ShouldMapField() | |
88 { | |
89 // db config | |
90 var conn = new MockDb() | |
91 .NewNonQuery(); | |
92 | |
93 using (conn) | |
94 using (var db = new DbManager(conn)) | |
95 { | |
96 // fluent config | |
97 new FluentMap<MapFieldDbo>() | |
98 .MapField(_ => _.Field1, "f1") | |
99 .MapTo(db); | |
100 | |
101 // when | |
102 db.GetTable<MapFieldDbo>().Insert(() => new MapFieldDbo { Field1 = 1 }); | |
103 | |
104 // then | |
105 conn.Commands[0] | |
106 .Assert().AreField("f1", "Fail mapping"); | |
107 } | |
108 } | |
109 | |
110 /// <summary> | |
111 /// MapField mapping for child | |
112 /// </summary> | |
113 [TestMethod] | |
114 public void ShouldMapFieldforChild() | |
115 { | |
116 // db config | |
117 var conn = new MockDb() | |
118 .NewNonQuery(); | |
119 | |
120 using (conn) | |
121 using (var db = new DbManager(conn)) | |
122 { | |
123 // fluent config | |
124 new FluentMap<MapFieldDbo>() | |
125 .MapField(_ => _.Field1, "f1") | |
126 .MapTo(db); | |
127 | |
128 // when | |
129 db.GetTable<MapFieldChild1Dbo>().Insert(() => new MapFieldChild1Dbo { Field1 = 1 }); | |
130 | |
131 // then | |
132 conn.Commands[0] | |
133 .Assert().AreField("f1", "Fail mapping"); | |
134 } | |
135 } | |
136 | |
137 /// <summary> | |
138 /// MapField mapping for child override | |
139 /// </summary> | |
140 [TestMethod] | |
141 public void ShouldMapFieldforChildOverride() | |
142 { | |
143 // db config | |
144 var conn = new MockDb() | |
145 .NewNonQuery(); | |
146 | |
147 using (conn) | |
148 using (var db = new DbManager(conn)) | |
149 { | |
150 // fluent config | |
151 new FluentMap<MapFieldDbo>() | |
152 .MapField(_ => _.Field1, "f1") | |
153 .MapTo(db); | |
154 new FluentMap<MapFieldChild2Dbo>() | |
155 .MapField(_ => _.Field1, "fc1") | |
156 .MapTo(db); | |
157 | |
158 // when | |
159 db.GetTable<MapFieldChild2Dbo>().Insert(() => new MapFieldChild2Dbo { Field1 = 1 }); | |
160 | |
161 // then | |
162 conn.Commands[0] | |
163 .Assert().AreField("fc1", "Fail mapping"); | |
164 } | |
165 } | |
166 | |
167 /// <summary> | |
168 /// PrimaryKey mapping | |
169 /// </summary> | |
170 [TestMethod] | |
171 public void ShouldMapPrimaryKey() | |
172 { | |
173 // db config | |
174 var conn = new MockDb() | |
175 .NewReader("Field1", "Field2") | |
176 .NewRow(1, 2); | |
177 | |
178 using (conn) | |
179 using (var db = new DbManager(conn)) | |
180 { | |
181 // fluent config | |
182 new FluentMap<PrimaryKeyDbo>() | |
183 .PrimaryKey(_ => _.Field2) | |
184 .MapTo(db); | |
185 | |
186 // when | |
187 AssertExceptionEx.AreNotException<Exception>(() => new SqlQuery<PrimaryKeyDbo>(db).SelectByKey(1) | |
188 , "Fail query"); | |
189 | |
190 // then | |
191 Assert.AreEqual(1, conn.Commands[0].Parameters.Count, "Fail params"); | |
192 conn.Commands[0] | |
193 .Assert().AreField("Field2", 2, "Not where part"); | |
194 } | |
195 } | |
196 | |
197 /// <summary> | |
198 /// PrimaryKey mapping for child | |
199 /// </summary> | |
200 [TestMethod] | |
201 public void ShouldMapPrimaryKeyForChild() | |
202 { | |
203 // db config | |
204 var conn = new MockDb() | |
205 .NewReader("Field1", "Field2") | |
206 .NewRow(1, 2); | |
207 | |
208 using (conn) | |
209 using (var db = new DbManager(conn)) | |
210 { | |
211 // fluent config | |
212 new FluentMap<PrimaryKeyDbo>() | |
213 .PrimaryKey(_ => _.Field2) | |
214 .MapTo(db); | |
215 | |
216 // when | |
217 AssertExceptionEx.AreNotException<Exception>(() => new SqlQuery<PrimaryKeyChildDbo>(db).SelectByKey(1) | |
218 , "Fail query"); | |
219 | |
220 // then | |
221 Assert.AreEqual(1, conn.Commands[0].Parameters.Count, "Fail params"); | |
222 conn.Commands[0] | |
223 .Assert().AreField("Field2", 2, "Not where part"); | |
224 } | |
225 } | |
226 | |
227 /// <summary> | |
228 /// NonUpdatable use | |
229 /// </summary> | |
230 [TestMethod] | |
231 public void ShouldMapNonUpdatable() | |
232 { | |
233 // db config | |
234 var conn = new MockDb() | |
235 .NewNonQuery(); | |
236 | |
237 using (conn) | |
238 using (var db = new DbManager(conn)) | |
239 { | |
240 // fluent config | |
241 new FluentMap<NonUpdatableDbo>() | |
242 .NonUpdatable(_ => _.Field1) | |
243 .MapTo(db); | |
244 | |
245 // when | |
246 new SqlQuery<NonUpdatableDbo>(db).Insert(new NonUpdatableDbo { Field1 = 10, Field2 = 1 }); | |
247 | |
248 // then | |
249 Assert.AreEqual(1, conn.Commands[0].Parameters.Count, "Fail params"); | |
250 } | |
251 } | |
252 | |
253 /// <summary> | |
254 /// NonUpdatable use for child | |
255 /// </summary> | |
256 [TestMethod] | |
257 public void ShouldMapNonUpdatableForChild() | |
258 { | |
259 // db config | |
260 var conn = new MockDb() | |
261 .NewNonQuery(); | |
262 | |
263 using (conn) | |
264 using (var db = new DbManager(conn)) | |
265 { | |
266 // fluent config | |
267 new FluentMap<NonUpdatableDbo>() | |
268 .NonUpdatable(_ => _.Field1) | |
269 .MapTo(db); | |
270 | |
271 // when | |
272 new SqlQuery<NonUpdatableChildDbo>(db).Insert(new NonUpdatableChildDbo { Field1 = 10, Field2 = 1 }); | |
273 | |
274 // then | |
275 Assert.AreEqual(1, conn.Commands[0].Parameters.Count, "Fail params"); | |
276 } | |
277 } | |
278 | |
279 /// <summary> | |
280 /// SqlIgnore mapping on insert | |
281 /// </summary> | |
282 [TestMethod] | |
283 public void ShouldMapSqlIgnoreInsert() | |
284 { | |
285 // db config | |
286 var conn = new MockDb() | |
287 .NewNonQuery(); | |
288 | |
289 using (conn) | |
290 using (var db = new DbManager(conn)) | |
291 { | |
292 // fluent config | |
293 new FluentMap<SqlIgnoreInsertDbo>() | |
294 .SqlIgnore(_ => _.Field2) | |
295 .MapTo(db); | |
296 | |
297 // when / then | |
298 new SqlQuery<SqlIgnoreInsertDbo>(db).Insert(new SqlIgnoreInsertDbo { Field1 = 20, Field2 = 2 }); | |
299 AssertExceptionEx.AreException<LinqException>( | |
300 () => db.GetTable<SqlIgnoreInsertDbo>().Insert(() => new SqlIgnoreInsertDbo { Field1 = 10, Field2 = 1 }) | |
301 , "Fail for linq"); | |
302 | |
303 // then | |
304 conn.Commands[0] | |
305 .Assert().AreNotField("Field2", "Field exists"); | |
306 Assert.AreEqual(1, conn.Commands[0].Parameters.Count, "Fail params"); | |
307 } | |
308 } | |
309 | |
310 /// <summary> | |
311 /// SqlIgnore mapping on select | |
312 /// </summary> | |
313 [TestMethod] | |
314 public void ShouldMapSqlIgnoreSelect() | |
315 { | |
316 // db config | |
317 var conn = new MockDb() | |
318 .NewReader("Field1") | |
319 .NewRow(10); | |
320 | |
321 using (conn) | |
322 using (var db = new DbManager(conn)) | |
323 { | |
324 // fluent config | |
325 new FluentMap<SqlIgnoreSelectDbo>() | |
326 .SqlIgnore(_ => _.Field2) | |
327 .MapTo(db); | |
328 | |
329 var table = db.GetTable<SqlIgnoreSelectDbo>(); | |
330 | |
331 // when | |
332 (from t in table where t.Field1 == 10 select t).First(); | |
333 | |
334 // then | |
335 conn.Commands[0] | |
336 .Assert().AreNotField("Field2", "Field exists"); | |
337 } | |
338 } | |
339 | |
340 /// <summary> | |
341 /// SqlIgnore mapping for child | |
342 /// </summary> | |
343 [TestMethod] | |
344 public void ShouldMapSqlIgnoreForChild() | |
345 { | |
346 // db config | |
347 var conn = new MockDb() | |
348 .NewReader("Field1") | |
349 .NewRow(10); | |
350 | |
351 using (conn) | |
352 using (var db = new DbManager(conn)) | |
353 { | |
354 // fluent config | |
355 new FluentMap<SqlIgnoreSelectDbo>() | |
356 .SqlIgnore(_ => _.Field2) | |
357 .MapTo(db); | |
358 | |
359 var table = db.GetTable<SqlIgnoreChildDbo>(); | |
360 | |
361 // when | |
362 (from t in table where t.Field1 == 10 select t).First(); | |
363 | |
364 // then | |
365 conn.Commands[0] | |
366 .Assert().AreNotField("Field2", "Field exists"); | |
367 } | |
368 } | |
369 | |
370 /// <summary> | |
371 /// MapIgnore mapping on insert | |
372 /// </summary> | |
373 [TestMethod] | |
374 public void ShouldMapIgnoreInsert() | |
375 { | |
376 // db config | |
377 var conn = new MockDb() | |
378 .NewNonQuery(); | |
379 | |
380 using (conn) | |
381 using (var db = new DbManager(conn)) | |
382 { | |
383 // fluent config | |
384 new FluentMap<MapIgnoreInsertDbo>() | |
385 .MapIgnore(_ => _.Field2) | |
386 .MapTo(db); | |
387 | |
388 // when / then | |
389 new SqlQuery<MapIgnoreInsertDbo>(db).Insert(new MapIgnoreInsertDbo { Field1 = 20, Field2 = 2 }); | |
390 | |
391 AssertExceptionEx.AreException<LinqException>( | |
392 () => db.GetTable<MapIgnoreInsertDbo>().Insert(() => new MapIgnoreInsertDbo { Field1 = 10, Field2 = 1 }) | |
393 , "Fail for linq"); | |
394 | |
395 // then | |
396 conn.Commands[0] | |
397 .Assert().AreNotField("Field2", "Field exists"); | |
398 Assert.AreEqual(1, conn.Commands[0].Parameters.Count, "Fail params"); | |
399 } | |
400 } | |
401 | |
402 /// <summary> | |
403 /// MapIgnore mapping on select | |
404 /// </summary> | |
405 [TestMethod] | |
406 public void ShouldMapIgnoreSelect() | |
407 { | |
408 // db config | |
409 var conn = new MockDb() | |
410 .NewReader("Field1") | |
411 .NewRow(10, 1); | |
412 | |
413 using (conn) | |
414 using (var db = new DbManager(conn)) | |
415 { | |
416 // fluent config | |
417 new FluentMap<MapIgnoreSelectDbo>() | |
418 .MapIgnore(_ => _.Field2) | |
419 .MapTo(db); | |
420 | |
421 var table = db.GetTable<MapIgnoreSelectDbo>(); | |
422 | |
423 // when | |
424 (from t in table where t.Field1 == 10 select t).First(); | |
425 | |
426 // then | |
427 conn.Commands[0] | |
428 .Assert().AreNotField("Field2", "Field exists"); | |
429 } | |
430 } | |
431 | |
432 /// <summary> | |
433 /// MapIgnore mapping for child | |
434 /// </summary> | |
435 [TestMethod] | |
436 public void ShouldMapIgnoreForChild() | |
437 { | |
438 // db config | |
439 var conn = new MockDb() | |
440 .NewReader("Field1") | |
441 .NewRow(10, 1); | |
442 | |
443 using (conn) | |
444 using (var db = new DbManager(conn)) | |
445 { | |
446 // fluent config | |
447 new FluentMap<MapIgnoreSelectDbo>() | |
448 .MapIgnore(_ => _.Field2) | |
449 .MapTo(db); | |
450 | |
451 var table = db.GetTable<MapIgnoreChildDbo>(); | |
452 | |
453 // when | |
454 (from t in table where t.Field1 == 10 select t).First(); | |
455 | |
456 // then | |
457 conn.Commands[0] | |
458 .Assert().AreNotField("Field2", "Field exists"); | |
459 } | |
460 } | |
461 | |
462 /// <summary> | |
463 /// Trimmable mapping | |
464 /// </summary> | |
465 [TestMethod] | |
466 public void ShouldMapTrimmable() | |
467 { | |
468 // db config | |
469 var conn = new MockDb() | |
470 .NewReader("Field1") | |
471 .NewRow("test "); | |
472 | |
473 using (conn) | |
474 using (var db = new DbManager(conn)) | |
475 { | |
476 // fluent config | |
477 new FluentMap<TrimmableDbo>() | |
478 .Trimmable(_ => _.Field1) | |
479 .MapTo(db); | |
480 | |
481 var table = db.GetTable<TrimmableDbo>(); | |
482 | |
483 // when | |
484 var dbo = (from t in table select t).First(); | |
485 | |
486 // then | |
487 Assert.AreEqual("test", dbo.Field1, "Not trimmable"); | |
488 } | |
489 } | |
490 | |
491 /// <summary> | |
492 /// Trimmable mapping for child | |
493 /// </summary> | |
494 [TestMethod] | |
495 public void ShouldMapTrimmableForChild() | |
496 { | |
497 // db config | |
498 var conn = new MockDb() | |
499 .NewReader("Field1") | |
500 .NewRow("test "); | |
501 | |
502 using (conn) | |
503 using (var db = new DbManager(conn)) | |
504 { | |
505 // fluent config | |
506 new FluentMap<TrimmableDbo>() | |
507 .Trimmable(_ => _.Field1) | |
508 .MapTo(db); | |
509 | |
510 var table = db.GetTable<TrimmableChildDbo>(); | |
511 | |
512 // when | |
513 var dbo = (from t in table select t).First(); | |
514 | |
515 // then | |
516 Assert.AreEqual("test", dbo.Field1, "Not trimmable"); | |
517 } | |
518 } | |
519 | |
520 /// <summary> | |
521 /// MapValue mapping for member | |
522 /// </summary> | |
523 [TestMethod] | |
524 public void ShouldMapValueForMember() | |
525 { | |
526 // db config | |
527 var conn = new MockDb() | |
528 .NewReader("Field1", "Field2") | |
529 .NewRow(true, false); | |
530 | |
531 using (conn) | |
532 using (var db = new DbManager(conn)) | |
533 { | |
534 #warning bug for maping TO db | |
535 // fluent config | |
536 new FluentMap<MapValueMemberDbo>() | |
537 .MapField(_ => _.Field1) | |
538 .MapValue("result true", true) | |
539 .MapValue("result false", false) | |
540 .MapField(_ => _.Field2) | |
541 .MapValue("value true", true) | |
542 .MapValue("value false", false) | |
543 .MapTo(db); | |
544 | |
545 var table = db.GetTable<MapValueMemberDbo>(); | |
546 | |
547 // when | |
548 var dbo = (from t in table select t).First(); | |
549 | |
550 // then | |
551 Assert.AreEqual("result true", dbo.Field1, "Not map from value1"); | |
552 Assert.AreEqual("value false", dbo.Field2, "Not map from value2"); | |
553 } | |
554 } | |
555 | |
556 /// <summary> | |
557 /// MapValue mapping for member for child | |
558 /// </summary> | |
559 [TestMethod] | |
560 public void ShouldMapValueForMemberForChild() | |
561 { | |
562 // db config | |
563 var conn = new MockDb() | |
564 .NewReader("Field1", "Field2") | |
565 .NewRow(true, false); | |
566 | |
567 using (conn) | |
568 using (var db = new DbManager(conn)) | |
569 { | |
570 #warning bug for maping TO db | |
571 // fluent config | |
572 new FluentMap<MapValueMemberDbo>() | |
573 .MapField(_ => _.Field1) | |
574 .MapValue("result true", true) | |
575 .MapValue("result false", false) | |
576 .MapField(_ => _.Field2) | |
577 .MapValue("value true", true) | |
578 .MapValue("value false", false) | |
579 .MapTo(db); | |
580 | |
581 var table = db.GetTable<MapValueMemberChildDbo>(); | |
582 | |
583 // when | |
584 var dbo = (from t in table select t).First(); | |
585 | |
586 // then | |
587 Assert.AreEqual("result true", dbo.Field1, "Not map from value1"); | |
588 Assert.AreEqual("value false", dbo.Field2, "Not map from value2"); | |
589 } | |
590 } | |
591 | |
592 /// <summary> | |
593 /// MapValue mapping for enum | |
594 /// </summary> | |
595 [TestMethod] | |
596 public void ShouldMapValueForEnum() | |
597 { | |
598 // db config | |
599 var conn = new MockDb() | |
600 .NewReader("Field1", "Field2", "Field3", "Field4") | |
601 .NewRow("ok", "super", "yes", 10); | |
602 | |
603 using (conn) | |
604 using (var db = new DbManager(conn)) | |
605 { | |
606 #warning bug for maping TO db | |
607 // fluent config | |
608 new FluentMap<MapValueEnumDbo>() | |
609 .MapValue(MapValueEnum.Value1, "ok", "yes") | |
610 .MapValue(MapValueEnum.Value2, "super") | |
611 .MapTo(db); | |
612 | |
613 var table = db.GetTable<MapValueEnumDbo>(); | |
614 | |
615 // when | |
616 var dbo = (from t in table select t).First(); | |
617 | |
618 // then | |
619 Assert.AreEqual(MapValueEnum.Value1, dbo.Field1, "Not map from value1"); | |
620 Assert.AreEqual(MapValueEnum.Value2, dbo.Field2, "Not map from value2"); | |
621 Assert.AreEqual(MapValueEnum.Value1, dbo.Field3, "Not map from value3"); | |
622 } | |
623 } | |
624 | |
625 /// <summary> | |
626 /// MapValue mapping for enum for child | |
627 /// </summary> | |
628 [TestMethod] | |
629 public void ShouldMapValueForEnumForChild() | |
630 { | |
631 // db config | |
632 var conn = new MockDb() | |
633 .NewReader("Field1", "Field2", "Field3", "Field4") | |
634 .NewRow("ok", "super", "yes", 10); | |
635 | |
636 using (conn) | |
637 using (var db = new DbManager(conn)) | |
638 { | |
639 #warning bug for maping TO db | |
640 // fluent config | |
641 new FluentMap<MapValueEnumDbo>() | |
642 .MapValue(MapValueEnum.Value1, "ok", "yes") | |
643 .MapValue(MapValueEnum.Value2, "super") | |
644 .MapTo(db); | |
645 | |
646 var table = db.GetTable<MapValueEnumChildDbo>(); | |
647 | |
648 // when | |
649 var dbo = (from t in table select t).First(); | |
650 | |
651 // then | |
652 Assert.AreEqual(MapValueEnum.Value1, dbo.Field1, "Not map from value1"); | |
653 Assert.AreEqual(MapValueEnum.Value2, dbo.Field2, "Not map from value2"); | |
654 Assert.AreEqual(MapValueEnum.Value1, dbo.Field3, "Not map from value3"); | |
655 } | |
656 } | |
657 | |
658 /// <summary> | |
659 /// MapValue mapping for type | |
660 /// </summary> | |
661 [TestMethod] | |
662 public void ShouldMapValueForType() | |
663 { | |
664 // db config | |
665 var conn = new MockDb() | |
666 .NewReader("Field1", "Field2", "Field3") | |
667 .NewRow("one", "two", true); | |
668 | |
669 using (conn) | |
670 using (var db = new DbManager(conn)) | |
671 { | |
672 #warning bug for property any different types | |
673 #warning bug for maping TO db | |
674 // fluent config | |
675 new FluentMap<MapValueTypeDbo>() | |
676 .MapValue(1, "one", "1") | |
677 .MapValue(2, "two") | |
678 .MapValue(3, true) | |
679 .MapTo(db); | |
680 | |
681 var table = db.GetTable<MapValueTypeDbo>(); | |
682 | |
683 // when | |
684 var dbo = (from t in table select t).First(); | |
685 | |
686 // then | |
687 Assert.AreEqual(1, dbo.Field1, "Not map from value1"); | |
688 Assert.AreEqual(2, dbo.Field2, "Not map from value2"); | |
689 Assert.AreEqual(3, dbo.Field3, "Not map from value3"); | |
690 } | |
691 } | |
692 | |
693 /// <summary> | |
694 /// MapValue mapping for type for child | |
695 /// </summary> | |
696 [TestMethod] | |
697 public void ShouldMapValueForTypeForChild() | |
698 { | |
699 // db config | |
700 var conn = new MockDb() | |
701 .NewReader("Field1", "Field2", "Field3") | |
702 .NewRow("one", "two", true); | |
703 | |
704 using (conn) | |
705 using (var db = new DbManager(conn)) | |
706 { | |
707 #warning bug for property any different types | |
708 #warning bug for maping TO db | |
709 // fluent config | |
710 new FluentMap<MapValueTypeDbo>() | |
711 .MapValue(1, "one", "1") | |
712 .MapValue(2, "two") | |
713 .MapValue(3, true) | |
714 .MapTo(db); | |
715 | |
716 var table = db.GetTable<MapValueTypeChildDbo>(); | |
717 | |
718 // when | |
719 var dbo = (from t in table select t).First(); | |
720 | |
721 // then | |
722 Assert.AreEqual(1, dbo.Field1, "Not map from value1"); | |
723 Assert.AreEqual(2, dbo.Field2, "Not map from value2"); | |
724 Assert.AreEqual(3, dbo.Field3, "Not map from value3"); | |
725 } | |
726 } | |
727 | |
728 /// <summary> | |
729 /// InheritanceMapping mapping | |
730 /// </summary> | |
731 [TestMethod] | |
732 public void ShouldMapInheritanceMapping() | |
733 { | |
734 // db config | |
735 var conn = new MockDb() | |
736 .NewReader("Field1", "Field2") | |
737 .NewRow(1, 1) | |
738 .NewRow(2, 2); | |
739 | |
740 using (conn) | |
741 using (var db = new DbManager(conn)) | |
742 { | |
743 // fluent config | |
744 new FluentMap<InheritanceMappingDbo>() | |
745 .InheritanceMapping<InheritanceMappingDbo1>(1) | |
746 .InheritanceMapping<InheritanceMappingDbo2>(2) | |
747 .InheritanceField(_ => _.Field2) | |
748 .MapTo(db); | |
749 | |
750 var table = db.GetTable<InheritanceMappingDbo>(); | |
751 | |
752 // when | |
753 var dbos = (from t in table select t).ToArray(); | |
754 | |
755 // then | |
756 Assert.IsInstanceOfType(dbos[0], typeof(InheritanceMappingDbo1), "Invalid type1"); | |
757 Assert.IsInstanceOfType(dbos[1], typeof(InheritanceMappingDbo2), "Invalid type2"); | |
758 } | |
759 } | |
760 | |
761 /// <summary> | |
762 /// InheritanceMapping mapping select only child | |
763 /// </summary> | |
764 [TestMethod] | |
765 public void ShouldMapInheritanceMappingSelectChild() | |
766 { | |
767 // db config | |
768 var conn = new MockDb() | |
769 .NewReader("Field1", "Field2") | |
770 .NewRow(1, 1); | |
771 | |
772 using (conn) | |
773 using (var db = new DbManager(conn)) | |
774 { | |
775 // fluent config | |
776 new FluentMap<InheritanceMappingChDbo>() | |
777 .TableName("tt") | |
778 .InheritanceMapping<InheritanceMappingChDbo1>(11111) | |
779 .InheritanceMapping<InheritanceMappingChDbo2>(22222) | |
780 .InheritanceField(_ => _.Field2) | |
781 .MapTo(db); | |
782 | |
783 var table = db.GetTable<InheritanceMappingChDbo1>(); | |
784 | |
785 // when | |
786 var dbos = (from t in table select t).ToArray(); | |
787 | |
788 // then | |
789 Assert.IsInstanceOfType(dbos[0], typeof(InheritanceMappingChDbo1), "Invalid type"); | |
790 Assert.IsTrue(conn.Commands[0].CommandText.ToLower().Contains("where"), "Not condition"); | |
791 Assert.IsTrue(conn.Commands[0].CommandText.ToLower().Contains("11111"), "Fail condition value"); | |
792 conn.Commands[0] | |
793 .Assert().AreField("Field2", 2, "Not in where part"); | |
794 } | |
795 } | |
796 | |
797 /// <summary> | |
798 /// Association mapping to many | |
799 /// </summary> | |
800 [TestMethod] | |
801 public void ShouldMapAssociationToMany() | |
802 { | |
803 // db config | |
804 var conn = new MockDb() | |
805 .NewReader("Field4") | |
806 .NewRow("TestMany"); | |
807 | |
808 using (conn) | |
809 using (var db = new DbManager(conn)) | |
810 { | |
811 // fluent config | |
812 new FluentMap<AssociationThis1Dbo>() | |
813 .MapField(_ => _.FieldThis1, "ThisId") | |
814 .MapField(_ => _.FieldThis2) | |
815 .Association(_ => _.FieldThis1).ToMany((AssociationOtherDbo _) => _.FieldOther2) | |
816 .MapTo(db); | |
817 | |
818 var table = db.GetTable<AssociationThis1Dbo>(); | |
819 | |
820 // when | |
821 var dbo = (from t in table select t.FieldThis2.First().FieldOther4).First(); | |
822 | |
823 // then | |
824 Assert.AreEqual("TestMany", dbo, "Fail result for many"); | |
825 conn.Commands[0] | |
826 .Assert().AreField("ThisId", "Fail this key"); | |
827 conn.Commands[0] | |
828 .Assert().AreField("FieldOther2", "Fail other key"); | |
829 conn.Commands[0] | |
830 .Assert().AreField("FieldOther4", "Fail other result"); | |
831 Assert.AreEqual(3, conn.Commands[0].Fields.Count, "More fields"); | |
832 } | |
833 } | |
834 | |
835 /// <summary> | |
836 /// Association mapping to one | |
837 /// </summary> | |
838 [TestMethod] | |
839 public void ShouldMapAssociationToOne() | |
840 { | |
841 // db config | |
842 var conn = new MockDb() | |
843 .NewReader("Field4") | |
844 .NewRow("TestOne"); | |
845 | |
846 using (conn) | |
847 using (var db = new DbManager(conn)) | |
848 { | |
849 // fluent config | |
850 new FluentMap<AssociationThis2Dbo>() | |
851 .MapField(_ => _.FieldThis1, "ThisId") | |
852 .MapField(_ => _.FieldThis3) | |
853 .Association(_ => _.FieldThis1).ToOne(_ => _.FieldOther3) | |
854 .MapTo(db); | |
855 | |
856 var table = db.GetTable<AssociationThis2Dbo>(); | |
857 | |
858 // when | |
859 var dbo = (from t in table select t.FieldThis3.FieldOther4).First(); | |
860 | |
861 // then | |
862 Assert.AreEqual("TestOne", dbo, "Fail result for many"); | |
863 conn.Commands[0] | |
864 .Assert().AreField("ThisId", "Fail this key"); | |
865 conn.Commands[0] | |
866 .Assert().AreField("FieldOther3", "Fail other key"); | |
867 conn.Commands[0] | |
868 .Assert().AreField("FieldOther4", "Fail other result"); | |
869 Assert.AreEqual(3, conn.Commands[0].Fields.Count, "More fields"); | |
870 } | |
871 } | |
872 | |
873 /// <summary> | |
874 /// Association mapping for child | |
875 /// </summary> | |
876 [TestMethod] | |
877 public void ShouldMapAssociationForChild() | |
878 { | |
879 // db config | |
880 var conn = new MockDb() | |
881 .NewReader("Field4") | |
882 .NewRow("TestOne"); | |
883 | |
884 using (conn) | |
885 using (var db = new DbManager(conn)) | |
886 { | |
887 // fluent config | |
888 new FluentMap<AssociationThis2Dbo>() | |
889 .MapField(_ => _.FieldThis1, "ThisId") | |
890 .MapField(_ => _.FieldThis3) | |
891 .Association(_ => _.FieldThis1).ToOne(_ => _.FieldOther3) | |
892 .MapTo(db); | |
893 | |
894 var table = db.GetTable<AssociationThis2ChildDbo>(); | |
895 | |
896 // when | |
897 var dbo = (from t in table select t.FieldThis3.FieldOther4).First(); | |
898 | |
899 // then | |
900 Assert.AreEqual("TestOne", dbo, "Fail result for many"); | |
901 conn.Commands[0] | |
902 .Assert().AreField("ThisId", "Fail this key"); | |
903 conn.Commands[0] | |
904 .Assert().AreField("FieldOther3", "Fail other key"); | |
905 conn.Commands[0] | |
906 .Assert().AreField("FieldOther4", "Fail other result"); | |
907 Assert.AreEqual(3, conn.Commands[0].Fields.Count, "More fields"); | |
908 } | |
909 } | |
910 | |
911 /// <summary> | |
912 /// Relation mapping | |
913 /// </summary> | |
914 [TestMethod] | |
915 public void ShouldMapRelation() | |
916 { | |
917 // given | |
918 List<Parent> parents = new List<Parent>(); | |
919 MapResultSet[] sets = new MapResultSet[3]; | |
920 | |
921 sets[0] = new MapResultSet(typeof(Parent), parents); | |
922 sets[1] = new MapResultSet(typeof(Child)); | |
923 sets[2] = new MapResultSet(typeof(Grandchild)); | |
924 | |
925 // db config | |
926 var conn = new MockDb() | |
927 .NewReader("ParentID") | |
928 .NewRow(1) | |
929 .NewRow(2) | |
930 .NextResult("ChildID", "ParentID") | |
931 .NewRow(4, 1) | |
932 .NewRow(5, 2) | |
933 .NewRow(6, 2) | |
934 .NewRow(7, 1) | |
935 .NextResult("GrandchildID", "ChildID") | |
936 .NewRow(1, 4) | |
937 .NewRow(2, 4) | |
938 .NewRow(3, 5) | |
939 .NewRow(4, 5) | |
940 .NewRow(5, 6) | |
941 .NewRow(6, 6) | |
942 .NewRow(7, 7) | |
943 .NewRow(8, 7); | |
944 | |
945 using (conn) | |
946 using (var db = new DbManager(conn)) | |
947 { | |
948 // fluent config | |
949 new FluentMap<Parent>() | |
950 .MapField(_ => _.ID, "ParentID").PrimaryKey() | |
951 .MapField(_ => _.Children).Relation() | |
952 .MapTo(db); | |
953 new FluentMap<Child>() | |
954 .MapField(_ => _.Parent.ID, "ParentID") | |
955 .MapField(_ => _.ID, "ChildID").PrimaryKey() | |
956 .MapField(_ => _.Parent).Relation() | |
957 .MapField(_ => _.Grandchildren).Relation() | |
958 .MapTo(db); | |
959 new FluentMap<Grandchild>() | |
960 .MapField(_ => _.Child.ID, "ChildID") | |
961 .MapField(_ => _.ID, "GrandchildID").PrimaryKey() | |
962 .MapField(_ => _.Child).Relation() | |
963 .MapTo(db); | |
964 | |
965 // when | |
966 db.SetCommand("select *").ExecuteResultSet(sets); | |
967 } | |
968 | |
969 // then | |
970 Assert.IsTrue(parents.Any()); | |
971 | |
972 foreach (Parent parent in parents) | |
973 { | |
974 Assert.IsNotNull(parent); | |
975 Assert.IsTrue(parent.Children.Any()); | |
976 | |
977 foreach (Child child in parent.Children) | |
978 { | |
979 Assert.AreEqual(parent, child.Parent); | |
980 Assert.IsTrue(child.Grandchildren.Any()); | |
981 | |
982 foreach (Grandchild grandchild in child.Grandchildren) | |
983 { | |
984 Assert.AreEqual(child, grandchild.Child); | |
985 Assert.AreEqual(parent, grandchild.Child.Parent); | |
986 } | |
987 } | |
988 } | |
989 } | |
990 | |
991 /// <summary> | |
992 /// Relation mapping for child | |
993 /// </summary> | |
994 [TestMethod] | |
995 public void ShouldMapRelationForChild() | |
996 { | |
997 // given | |
998 List<Parent2Child> parents = new List<Parent2Child>(); | |
999 MapResultSet[] sets = new MapResultSet[2]; | |
1000 | |
1001 sets[0] = new MapResultSet(typeof(Parent2Child), parents); | |
1002 sets[1] = new MapResultSet(typeof(Child2)); | |
1003 | |
1004 // db config | |
1005 var conn = new MockDb() | |
1006 .NewReader("ParentID") | |
1007 .NewRow(1) | |
1008 .NewRow(2) | |
1009 .NextResult("ChildID", "ParentID") | |
1010 .NewRow(4, 1) | |
1011 .NewRow(5, 2) | |
1012 .NewRow(6, 2) | |
1013 .NewRow(7, 1); | |
1014 | |
1015 using (conn) | |
1016 using (var db = new DbManager(conn)) | |
1017 { | |
1018 // fluent config | |
1019 new FluentMap<Parent2>() | |
1020 .MapField(_ => _.ID, "ParentID").PrimaryKey() | |
1021 .MapField(_ => _.Children).Relation() | |
1022 .MapTo(db); | |
1023 new FluentMap<Child2>() | |
1024 .MapField(_ => _.Parent.ID, "ParentID") | |
1025 .MapField(_ => _.ID, "ChildID").PrimaryKey() | |
1026 .MapField(_ => _.Parent).Relation() | |
1027 .MapTo(db); | |
1028 | |
1029 // when | |
1030 db.SetCommand("select *").ExecuteResultSet(sets); | |
1031 } | |
1032 | |
1033 // then | |
1034 Assert.IsTrue(parents.Any()); | |
1035 | |
1036 foreach (Parent2Child parent in parents) | |
1037 { | |
1038 Assert.IsNotNull(parent); | |
1039 Assert.IsTrue(parent.Children.Any()); | |
1040 | |
1041 foreach (Child2 child in parent.Children) | |
1042 { | |
1043 Assert.AreEqual(parent, child.Parent); | |
1044 } | |
1045 } | |
1046 } | |
1047 | |
1048 #region Dbo | |
1049 public class TableNameDbo | |
1050 { | |
1051 public int Field1 { get; set; } | |
1052 } | |
1053 public class TableNameChildDbo : TableNameDbo | |
1054 { | |
1055 } | |
1056 public class MapFieldDbo | |
1057 { | |
1058 public int Field1 { get; set; } | |
1059 } | |
1060 public class MapFieldChild1Dbo : MapFieldDbo | |
1061 { | |
1062 } | |
1063 public class MapFieldChild2Dbo : MapFieldDbo | |
1064 { | |
1065 } | |
1066 public class PrimaryKeyDbo | |
1067 { | |
1068 public int Field1 { get; set; } | |
1069 public int Field2 { get; set; } | |
1070 } | |
1071 public class PrimaryKeyChildDbo : PrimaryKeyDbo | |
1072 { | |
1073 } | |
1074 public class NonUpdatableDbo | |
1075 { | |
1076 public int Field1 { get; set; } | |
1077 public int Field2 { get; set; } | |
1078 } | |
1079 public class NonUpdatableChildDbo : NonUpdatableDbo | |
1080 { | |
1081 } | |
1082 public class SqlIgnoreInsertDbo | |
1083 { | |
1084 public int Field1 { get; set; } | |
1085 public int Field2 { get; set; } | |
1086 } | |
1087 public class SqlIgnoreSelectDbo | |
1088 { | |
1089 public int Field1 { get; set; } | |
1090 public int Field2 { get; set; } | |
1091 } | |
1092 public class SqlIgnoreChildDbo : SqlIgnoreSelectDbo | |
1093 { | |
1094 } | |
1095 public class MapIgnoreInsertDbo | |
1096 { | |
1097 public int Field1 { get; set; } | |
1098 public int Field2 { get; set; } | |
1099 } | |
1100 public class MapIgnoreSelectDbo | |
1101 { | |
1102 public int Field1 { get; set; } | |
1103 public int Field2 { get; set; } | |
1104 } | |
1105 public class MapIgnoreChildDbo : MapIgnoreSelectDbo | |
1106 { | |
1107 } | |
1108 public class TrimmableDbo | |
1109 { | |
1110 public string Field1 { get; set; } | |
1111 } | |
1112 public class TrimmableChildDbo : TrimmableDbo | |
1113 { | |
1114 } | |
1115 public class MapValueMemberDbo | |
1116 { | |
1117 public string Field1 { get; set; } | |
1118 public string Field2 { get; set; } | |
1119 } | |
1120 public class MapValueMemberChildDbo : MapValueMemberDbo | |
1121 { | |
1122 } | |
1123 public class MapValueEnumDbo | |
1124 { | |
1125 public MapValueEnum Field1 { get; set; } | |
1126 public MapValueEnum Field2 { get; set; } | |
1127 public MapValueEnum Field3 { get; set; } | |
1128 public int Field4 { get; set; } | |
1129 } | |
1130 public class MapValueEnumChildDbo : MapValueEnumDbo | |
1131 { | |
1132 } | |
1133 public enum MapValueEnum | |
1134 { | |
1135 Value1, | |
1136 Value2 | |
1137 } | |
1138 public class MapValueTypeDbo | |
1139 { | |
1140 public int Field1 { get; set; } | |
1141 public int Field2 { get; set; } | |
1142 public int Field3 { get; set; } | |
1143 } | |
1144 public class MapValueTypeChildDbo : MapValueTypeDbo | |
1145 { | |
1146 } | |
1147 public abstract class InheritanceMappingDbo | |
1148 { | |
1149 public int Field1 { get; set; } | |
1150 public int Field2 { get; set; } | |
1151 } | |
1152 public class InheritanceMappingDbo1 : InheritanceMappingDbo | |
1153 { | |
1154 } | |
1155 public class InheritanceMappingDbo2 : InheritanceMappingDbo | |
1156 { | |
1157 } | |
1158 public abstract class InheritanceMappingChDbo | |
1159 { | |
1160 public int Field1 { get; set; } | |
1161 public int Field2 { get; set; } | |
1162 } | |
1163 public class InheritanceMappingChDbo1 : InheritanceMappingChDbo | |
1164 { | |
1165 } | |
1166 public class InheritanceMappingChDbo2 : InheritanceMappingChDbo | |
1167 { | |
1168 } | |
1169 public class AssociationThis1Dbo | |
1170 { | |
1171 public int FieldThis1 { get; set; } | |
1172 public List<AssociationOtherDbo> FieldThis2 { get; set; } | |
1173 } | |
1174 public class AssociationThis2Dbo | |
1175 { | |
1176 public int FieldThis1 { get; set; } | |
1177 public AssociationOtherDbo FieldThis3 { get; set; } | |
1178 } | |
1179 public class AssociationThis2ChildDbo : AssociationThis2Dbo | |
1180 { | |
1181 } | |
1182 public class AssociationOtherDbo | |
1183 { | |
1184 public int FieldOther1 { get; set; } | |
1185 public int FieldOther2 { get; set; } | |
1186 public int FieldOther3 { get; set; } | |
1187 public string FieldOther4 { get; set; } | |
1188 } | |
1189 public class Parent | |
1190 { | |
1191 public int ID; | |
1192 public List<Child> Children = new List<Child>(); | |
1193 } | |
1194 public class Child | |
1195 { | |
1196 public int ID; | |
1197 public Parent Parent = new Parent(); | |
1198 public List<Grandchild> Grandchildren = new List<Grandchild>(); | |
1199 } | |
1200 public class Grandchild | |
1201 { | |
1202 public int ID; | |
1203 public Child Child = new Child(); | |
1204 } | |
1205 public class Parent2 | |
1206 { | |
1207 public int ID; | |
1208 public List<Child2> Children = new List<Child2>(); | |
1209 } | |
1210 public class Parent2Child : Parent2 | |
1211 { | |
1212 } | |
1213 public class Child2 | |
1214 { | |
1215 public int ID; | |
1216 public Parent2Child Parent = new Parent2Child(); | |
1217 } | |
1218 #endregion | |
1219 } | |
1220 } |