StandardMapperTests.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. using System;
  2. using Shouldly;
  3. using Xunit;
  4. namespace PetaPoco.Tests.Unit.Core
  5. {
  6. public class StandardMapperTests
  7. {
  8. private readonly IMapper _mapper;
  9. public StandardMapperTests()
  10. : this(null)
  11. {
  12. }
  13. protected StandardMapperTests(IMapper mapper)
  14. {
  15. _mapper = mapper ?? new StandardMapper();
  16. }
  17. [Fact]
  18. public void GetTableInfo_GivenEntityWithoutTableAttribute_ShouldBeValid()
  19. {
  20. var exaEntity = _mapper.GetTableInfo(typeof(ExaEntity));
  21. var zettaEntity = _mapper.GetTableInfo(typeof(ZettaEntity));
  22. exaEntity.TableName.ShouldBe("ExaEntity");
  23. exaEntity.PrimaryKey.ShouldBe("Id");
  24. exaEntity.AutoIncrement.ShouldBeTrue();
  25. exaEntity.SequenceName.ShouldBeNull();
  26. zettaEntity.TableName.ShouldBe("ZettaEntity");
  27. zettaEntity.PrimaryKey.ShouldBeNull();
  28. zettaEntity.AutoIncrement.ShouldBeFalse();
  29. zettaEntity.SequenceName.ShouldBeNull();
  30. }
  31. [Fact]
  32. public void GetTableInfo_GivenEntityWithTableAttribute_ShouldBeValid()
  33. {
  34. var teraEntity = _mapper.GetTableInfo(typeof(TeraEntity));
  35. var yottaEntity = _mapper.GetTableInfo(typeof(YottaEntity));
  36. teraEntity.TableName.ShouldBe("TblTeraEntity");
  37. teraEntity.PrimaryKey.ShouldBe("TheId");
  38. teraEntity.AutoIncrement.ShouldBeFalse();
  39. teraEntity.SequenceName.ShouldBeNull();
  40. yottaEntity.TableName.ShouldBe("yotta_entities");
  41. yottaEntity.PrimaryKey.ShouldBe("Id");
  42. yottaEntity.AutoIncrement.ShouldBeTrue();
  43. yottaEntity.SequenceName.ShouldBe("SEQ_1");
  44. }
  45. [Fact]
  46. public void GetColumnInfo_GivenPropertyWithoutColumnAttribute_ShouldBeValid()
  47. {
  48. var columnInfo1 = _mapper.GetColumnInfo(typeof(ExaEntity).GetProperty(nameof(ExaEntity.Id)));
  49. var columnInfo2 = _mapper.GetColumnInfo(typeof(ExaEntity).GetProperty(nameof(ExaEntity.AnotherColumn)));
  50. columnInfo1.ColumnName.ShouldBe("Id");
  51. columnInfo1.ForceToUtc.ShouldBeFalse();
  52. columnInfo1.ResultColumn.ShouldBeFalse();
  53. columnInfo2.ColumnName.ShouldBe("AnotherColumn");
  54. columnInfo2.ForceToUtc.ShouldBeFalse();
  55. columnInfo2.ResultColumn.ShouldBeFalse();
  56. }
  57. [Fact]
  58. public void GetColumnInfo_GivenPropertyWithoutColumnAttributeAndEntityWithExplicitAttribute_ShouldBeNull()
  59. {
  60. var columnInfo = _mapper.GetColumnInfo(typeof(TeraEntity).GetProperty(nameof(TeraEntity.NotAColumn)));
  61. columnInfo.ShouldBeNull();
  62. }
  63. [Fact]
  64. public void GetColumnInfo_GivenPropertyWithIgnoreColumnAttributeAndEntityWithoutExplicitAttribute_ShouldBeNull()
  65. {
  66. var columnInfo = _mapper.GetColumnInfo(typeof(YottaEntity).GetProperty(nameof(YottaEntity.NotAColumn)));
  67. columnInfo.ShouldBeNull();
  68. }
  69. [Fact]
  70. public void GetColumnInfo_GivenPropertyWithColumnAttribute_ShouldBeValid()
  71. {
  72. var columnInfo1 = _mapper.GetColumnInfo(typeof(TeraEntity).GetProperty(nameof(TeraEntity.TheId)));
  73. var columnInfo2 = _mapper.GetColumnInfo(typeof(TeraEntity).GetProperty(nameof(TeraEntity.AnotherColumn)));
  74. var columnInfo3 = _mapper.GetColumnInfo(typeof(TeraEntity).GetProperty(nameof(TeraEntity.ColumnWithInsertTemplate)));
  75. columnInfo1.ColumnName.ShouldBe("Id");
  76. columnInfo1.ForceToUtc.ShouldBeFalse();
  77. columnInfo1.ResultColumn.ShouldBeFalse();
  78. columnInfo2.ColumnName.ShouldBe("another_column");
  79. columnInfo2.ForceToUtc.ShouldBeFalse();
  80. columnInfo2.ResultColumn.ShouldBeFalse();
  81. columnInfo3.ColumnName.ShouldBe("ColumnWithInsertTemplate");
  82. columnInfo3.InsertTemplate.ShouldBe("test");
  83. columnInfo3.UpdateTemplate.ShouldBe("test1");
  84. }
  85. [Fact]
  86. public void GetColumnInfo_GivenPropertyWithResultAttribute_ShouldBeValdid()
  87. {
  88. var columnInfo1 = _mapper.GetColumnInfo(typeof(TeraEntity).GetProperty(nameof(TeraEntity.ResultColumn)));
  89. var columnInfo2 = _mapper.GetColumnInfo(typeof(YottaEntity).GetProperty(nameof(YottaEntity.ResultColumn)));
  90. columnInfo1.ColumnName.ShouldBe("result_column");
  91. columnInfo1.ForceToUtc.ShouldBeFalse();
  92. columnInfo1.ResultColumn.ShouldBeTrue();
  93. columnInfo2.ColumnName.ShouldBe("ResultColumn");
  94. columnInfo2.ForceToUtc.ShouldBeFalse();
  95. columnInfo2.ResultColumn.ShouldBeTrue();
  96. }
  97. [Fact]
  98. public void GetFromDbConverter_GivenPropertyAndType_ShouldBeNull()
  99. {
  100. var func = _mapper.GetFromDbConverter(typeof(TeraEntity).GetProperty(nameof(TeraEntity.TheId)), typeof(int));
  101. func.ShouldBeNull();
  102. }
  103. [Fact]
  104. public void GetToDbConverter_GivenProperty_ShouldBeNull()
  105. {
  106. var func = _mapper.GetToDbConverter(typeof(TeraEntity).GetProperty(nameof(TeraEntity.TheId)));
  107. func.ShouldBeNull();
  108. }
  109. [TableName("TblTeraEntity")]
  110. [PrimaryKey("TheId", AutoIncrement = false)]
  111. [ExplicitColumns]
  112. public class TeraEntity
  113. {
  114. [Column("Id")]
  115. public int TheId { get; set; }
  116. [Column("another_column")]
  117. public string AnotherColumn { get; set; }
  118. [ResultColumn("result_column")]
  119. public string ResultColumn { get; set; }
  120. public string NotAColumn { get; set; }
  121. [Column(ForceToUtc = true)]
  122. public DateTime Created { get; set; }
  123. [Column(InsertTemplate = "test", UpdateTemplate = "test1")]
  124. public string ColumnWithInsertTemplate { get; set; }
  125. }
  126. [TableName("yotta_entities")]
  127. [PrimaryKey("Id", AutoIncrement = true, SequenceName = "SEQ_1")]
  128. public class YottaEntity
  129. {
  130. [Column]
  131. public int Id { get; set; }
  132. [Column]
  133. public string AnotherColumn { get; set; }
  134. [ResultColumn]
  135. public string ResultColumn { get; set; }
  136. [Ignore]
  137. public string NotAColumn { get; set; }
  138. [Column(ForceToUtc = true)]
  139. public DateTime Created { get; set; }
  140. }
  141. public class ExaEntity
  142. {
  143. public int Id { get; set; }
  144. public string AnotherColumn { get; set; }
  145. }
  146. public class ZettaEntity
  147. {
  148. public int TheId { get; set; }
  149. public string AnotherColumn { get; set; }
  150. }
  151. }
  152. }