PageRenderTime 49ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/tags/1.31/src/Tests/ExtensionModel/ExtensionObjectSerializerTests.cs

#
C# | 135 lines | 104 code | 11 blank | 20 comment | 3 complexity | fe9cc47c42827016b3e50e4d6ceddb20 MD5 | raw file
Possible License(s): AGPL-1.0, LGPL-2.1
  1. /****************************************************************************************************
  2. Copyright (C) 2010 RapidWebDev Organization (http://rapidwebdev.org)
  3. Author: Eunge, Legal Name: Jian Liu, Email: eunge.liu@RapidWebDev.org
  4. This program is free software: you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation, either version 2 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program. If not, see <http://www.gnu.org/licenses/>.
  14. ****************************************************************************************************/
  15. using System;
  16. using System.Collections.Generic;
  17. using System.Collections.ObjectModel;
  18. using System.Configuration;
  19. using System.Data;
  20. using System.Data.SqlClient;
  21. using System.Drawing;
  22. using System.IO;
  23. using System.Linq;
  24. using System.Text;
  25. using System.Xml;
  26. using System.Xml.Linq;
  27. using BaoJianSoft.Common;
  28. using BaoJianSoft.Common.Data;
  29. using BaoJianSoft.ExtensionModel;
  30. using BaoJianSoft.ExtensionModel.Linq;
  31. using BaoJianSoft.Platform;
  32. using NUnit.Framework;
  33. namespace BaoJianSoft.Tests.ExtensionModel
  34. {
  35. /// <summary>
  36. /// 测试ExtensionObject的序列化
  37. /// </summary>
  38. [TestFixture]
  39. public class ExtensionObjectSerializerTests
  40. {
  41. [TearDown]
  42. public void TearDown()
  43. {
  44. using (ExtensionModelDataContext ctx = DataContextFactory.Create<ExtensionModelDataContext>())
  45. {
  46. IAuthenticationContext authenticationContext = SpringContext.Current.GetObject<IAuthenticationContext>();
  47. List<ObjectMetadata> objectMetadataToDelete = ctx.ObjectMetadatas.Where(o => o.ApplicationId == authenticationContext.ApplicationId).ToList();
  48. List<FieldMetadata> fieldMetadataToDelete = ctx.FieldMetadatas.Where(f => objectMetadataToDelete.Select(o => o.ObjectMetadataId).ToArray().Contains(f.ObjectMetadataId)).ToList();
  49. ctx.FieldMetadatas.DeleteAllOnSubmit(fieldMetadataToDelete);
  50. ctx.ObjectMetadatas.DeleteAllOnSubmit(objectMetadataToDelete);
  51. ctx.SubmitChanges();
  52. }
  53. }
  54. [Test(Description = "测试各个类型的字段的序列化")]
  55. public void AllFieldTypesSerializationTest()
  56. {
  57. MockExtensionObject4Serializer entityToSerialize = new MockExtensionObject4Serializer();
  58. entityToSerialize["Name"] = "Eunge";
  59. entityToSerialize["Birthday"] = new DateTime(1982, 2, 7);
  60. entityToSerialize["Level"] = 10;
  61. entityToSerialize["Salary"] = 13000m;
  62. entityToSerialize["Position"] = new HierarchyNodeValueCollection { "Dev" };
  63. entityToSerialize["HuKou"] = new EnumerationValueCollection { "SiChuan" };
  64. entityToSerialize["UnknownProperty"] = "Lucy";
  65. entityToSerialize.ExtensionDataTypeId = this.UserTypeId;
  66. IMetadataApi metadataApi = SpringContext.Current.GetObject<IMetadataApi>();
  67. ExtensionObjectSerializer serializer = new ExtensionObjectSerializer(metadataApi);
  68. serializer.Serialize(entityToSerialize);
  69. using(StringReader stringReader = new StringReader(entityToSerialize.ExtensionData))
  70. using (XmlReader xmlreader = XmlReader.Create(stringReader))
  71. {
  72. XDocument xmldoc = XDocument.Load(xmlreader);
  73. IEnumerable<XElement> fieldNameValuePairs = xmldoc.Descendants(XName.Get("FieldNameValuePair", ServiceNamespaces.ExtensionModel));
  74. Assert.AreEqual(7, fieldNameValuePairs.Count());
  75. }
  76. MockExtensionObject4Serializer entityToDeserialize = new MockExtensionObject4Serializer()
  77. {
  78. ExtensionData = entityToSerialize.ExtensionData,
  79. ExtensionDataTypeId = entityToSerialize.ExtensionDataTypeId
  80. };
  81. IDictionary<string, object> properties = serializer.Deserialize(entityToDeserialize);
  82. Assert.AreEqual("Eunge", properties["Name"]);
  83. Assert.AreEqual(new DateTime(1982, 2, 7), properties["Birthday"]);
  84. Assert.AreEqual(10, properties["Level"]);
  85. Assert.AreEqual(13000m, properties["Salary"]);
  86. Assert.AreEqual("Dev", (properties["Position"] as HierarchyNodeValueCollection)[0]);
  87. Assert.AreEqual("SiChuan", (properties["HuKou"] as EnumerationValueCollection)[0]);
  88. Assert.AreEqual("Lucy", properties["UnknownProperty"]);
  89. }
  90. private Guid userTypeId;
  91. private Guid UserTypeId
  92. {
  93. get
  94. {
  95. if (userTypeId == Guid.Empty)
  96. {
  97. IMetadataApi metadataApi = SpringContext.Current.GetObject<IMetadataApi>();
  98. userTypeId = metadataApi.AddType("User", "Membership", "User Extension Description", ObjectMetadataTypes.Custom, false, null);
  99. metadataApi.SaveField(userTypeId, new StringFieldMetadata() { Name = "Name", IsRequired = true, MaxLengthSpecified = true, MaxLength = 32, Ordinal = 1 });
  100. metadataApi.SaveField(userTypeId, new DateTimeFieldMetadata() { Name = "Birthday", DefaultValue = new DateTimeValue { DateTimeValueType = DateTimeValueTypes.Now }, Ordinal = 2 });
  101. metadataApi.SaveField(userTypeId, new IntegerFieldMetadata() { Name = "Level", IsRequired = true, DefaultSpecified = true, Default = 10, Ordinal = 3 });
  102. metadataApi.SaveField(userTypeId, new DecimalFieldMetadata() { Name = "Salary", IsRequired = true, MinValueSpecified = true, MinValue = 800m, DefaultSpecified = true, Default = 2500m, Ordinal = 4 });
  103. HierarchyNode hierarchyNodeQA = new HierarchyNode { Name = "QA", Value = "QA" };
  104. HierarchyNode hierarchyNodeDev = new HierarchyNode { Name = "Dev", Value = "Dev" };
  105. HierarchyNode hierarchyNodeLeader = new HierarchyNode { Name = "Leader", Value = "Leader", Node = new HierarchyNode[] { hierarchyNodeQA, hierarchyNodeDev } };
  106. HierarchyNode hierarchyNodeManager = new HierarchyNode { Name = "Manager", Value = "Manager", Node = new HierarchyNode[] { hierarchyNodeLeader } };
  107. HierarchyNode hierarchyNodeDirector = new HierarchyNode { Name = "Director", Value = "Director", Node = new HierarchyNode[] { hierarchyNodeManager } };
  108. HierarchyFieldMetadata hierarchyFieldMetadata = new HierarchyFieldMetadata { Name = "Position", Description = "Position in hierarchy", IsRequired = true, Ordinal = 5, SelectionMode = SelectionModes.Single, Node = new HierarchyNode[] { hierarchyNodeDirector } };
  109. metadataApi.SaveField(userTypeId, hierarchyFieldMetadata);
  110. SelectionItem selectionItemShangHai = new SelectionItem { Name = "ShangHai", Value = "ShangHai" };
  111. SelectionItem selectionItemJiangSu = new SelectionItem { Name = "JiangSu", Value = "JiangSu" };
  112. SelectionItem selectionItemSiChuan = new SelectionItem { Name = "SiChuan", Value = "SiChuan" };
  113. SelectionItem selectionItemBlank = new SelectionItem { Name = "", Value = "" };
  114. EnumerationFieldMetadata selectionFieldMetadata = new EnumerationFieldMetadata { Name = "HuKou", Ordinal = 6, SelectionMode = SelectionModes.Single, Items = new SelectionItem[] { selectionItemBlank, selectionItemJiangSu, selectionItemShangHai, selectionItemSiChuan } };
  115. metadataApi.SaveField(userTypeId, selectionFieldMetadata);
  116. }
  117. return userTypeId;
  118. }
  119. }
  120. }
  121. }