public void TestLoad() { var actualClassification = _classificator.Load(); var firstLevelClass1 = new FoodClass("FirstLevelClass1"); var spAttr1 = new StoragePeriodInfo() { FromTime = TimeSpan.FromHours(48), ToTime = TimeSpan.FromDays(6 * 30), FromTemperature = 6, ToTemperature = 10, DerivedFromClass = "FirstLevelClass1" }; var spAttr2 = new StoragePeriodInfo() { FromTime = TimeSpan.FromDays(2), ToTime = TimeSpan.FromDays(3), FromTemperature = 1, ToTemperature = 3, DerivedFromClass = "FirstLevelClass1" }; firstLevelClass1.StoragePeriods = new List <StoragePeriodInfo>() { spAttr1, spAttr2 }; var secondLevelClass11 = new FoodClass("SecondLevelClass11"); secondLevelClass11.Parent = firstLevelClass1; var secondLevelClass12 = new FoodClass("SecondLevelClass12"); secondLevelClass12.Parent = firstLevelClass1; firstLevelClass1.Childs.Add(secondLevelClass11.Title, secondLevelClass11); firstLevelClass1.Childs.Add(secondLevelClass12.Title, secondLevelClass12); var firstLevelClass2 = new FoodClass("FirstLevelClass2"); var secondLevelClass21 = new FoodClass("SecondLevelClass21"); secondLevelClass21.Parent = firstLevelClass2; firstLevelClass2.Childs.Add(secondLevelClass21.Title, secondLevelClass21); var expected = new FoodClassification.Model.FoodClassification(); expected.FoodClasses.Add(firstLevelClass1.Title, firstLevelClass1); expected.FoodClasses.Add(firstLevelClass2.Title, firstLevelClass2); Assert.AreEqual(expected, actualClassification); }
private IDictionary <string, FoodClass> _DeserializeFoodClassification(IEnumerable <XmlNode> nodes, FoodClass parent, Model.FoodClassification classification) { var foodClasses = new Dictionary <string, FoodClass>(); foreach (var node in nodes) { var xmlNode = (XmlNode)node; var className = xmlNode.Attributes["name"].Value; var newFoodClass = new FoodClass(className); if (parent != null) { newFoodClass.Parent = parent; } foodClasses.Add(className, newFoodClass); // storage attribute var storagePeriodAttributes = xmlNode.ChildNodes.Cast <XmlNode>() .Where(n => n.Name == "attribute" && n.Attributes["type"].Value == "storagePeriod"); foreach (var storPeriodAttr in storagePeriodAttributes) { // period var childPeriodNodesEnumerable = storPeriodAttr.ChildNodes.Cast <XmlNode>() .Single(n => n.Name == "period").ChildNodes.Cast <XmlNode>(); // from var fromNode = childPeriodNodesEnumerable .Single(n => n.Name == "from"); var fromQuantityNode = fromNode.ChildNodes.Cast <XmlNode>() .Single(n => n.Name == "quantity"); var fromQuantityValue = fromQuantityNode.LastChild.Value; var fromUnitNode = fromNode.ChildNodes.Cast <XmlNode>() .Single(n => n.Name == "unit"); var fromUnitValue = fromUnitNode.LastChild.Value; //to var toNode = childPeriodNodesEnumerable .Single(n => n.Name == "to"); var toQuantityNode = toNode.ChildNodes.Cast <XmlNode>() .Single(n => n.Name == "quantity"); var toQuantityValue = toQuantityNode.LastChild.Value; var toUnitNode = toNode.ChildNodes.Cast <XmlNode>() .Single(n => n.Name == "unit"); var toUnitValue = toUnitNode.LastChild.Value; // temperature var childTemperatureNodesEnumerable = storPeriodAttr.ChildNodes.Cast <XmlNode>() .Single(n => n.Name == "temperature").ChildNodes.Cast <XmlNode>(); // from var fromTemperatureNode = childTemperatureNodesEnumerable .Single(n => n.Name == "from"); var fromTemperatureValue = fromTemperatureNode.LastChild.Value; //to var toemperatureNode = childTemperatureNodesEnumerable .Single(n => n.Name == "to"); var toTemperatureValue = toemperatureNode.LastChild.Value; var storagePeriodInfo = new StoragePeriodInfo(); storagePeriodInfo.FromTime = UnitQuantityConverter.Convert(fromUnitValue, fromQuantityValue); storagePeriodInfo.ToTime = UnitQuantityConverter.Convert(toUnitValue, toQuantityValue); storagePeriodInfo.FromTemperature = int.Parse(fromTemperatureValue); storagePeriodInfo.ToTemperature = int.Parse(toTemperatureValue); storagePeriodInfo.DerivedFromClass = newFoodClass.Title; newFoodClass.StoragePeriods.Add(storagePeriodInfo); } // storage advise var storageAdviseAttribute = xmlNode.ChildNodes.Cast <XmlNode>() .SingleOrDefault(n => n.Name == "attribute" && n.Attributes["type"].Value == "storageAdvise"); if (storageAdviseAttribute != null) { var advice = storageAdviseAttribute.LastChild.Value; newFoodClass.StorageAdvice = advice; } var childClasses = _DeserializeFoodClassification(xmlNode.ChildNodes.Cast <XmlNode>().Where(n => n.Name == "class"), newFoodClass, classification); newFoodClass.Childs = childClasses; } return(foodClasses); }