public void CanConvertShippingOptions()
        {
            var shippingOption = new ShippingOption
            {
                ShippingMethodId = 2,
                Name             = "Name",
                Description      = "Desc",
                Rate             = 1,
                ShippingRateComputationMethodSystemName = "SystemName"
            };
            var soStr = shippingOption.Convert <string>();

            Assert.IsNotEmpty(soStr);

            var arr = (new[] { shippingOption.Convert <string>() }).Convert <ShippingOption[]>();

            arr.ShouldBe <ShippingOption[]>();
            Assert.AreEqual(1, arr.Length);
            Assert.AreEqual(arr[0].Name, "Name");

            shippingOption = soStr.Convert <ShippingOption>();
            Assert.IsNotNull(shippingOption);
            Assert.AreEqual(shippingOption.ShippingMethodId, 2);
            Assert.AreEqual(shippingOption.Name, "Name");
            Assert.AreEqual(shippingOption.Description, "Desc");
            Assert.AreEqual(shippingOption.Rate, 1);
            Assert.AreEqual(shippingOption.ShippingRateComputationMethodSystemName, "SystemName");

            var shippingOptions = new List <ShippingOption>
            {
                new ShippingOption {
                    ShippingMethodId = 1, Name = "Name1", Description = "Desc1"
                },
                new ShippingOption {
                    ShippingMethodId = 2, Name = "Name2", Description = "Desc2"
                }
            };

            soStr = shippingOptions.Convert <string>();
            Assert.IsNotEmpty(soStr);

            shippingOptions = soStr.Convert <List <ShippingOption> >();
            Assert.AreEqual(shippingOptions.Count, 2);
            Assert.AreEqual(shippingOptions[1].ShippingMethodId, 2);
            Assert.AreEqual(shippingOptions[1].Description, "Desc2");

            var shippingOptions2 = soStr.Convert <IList <ShippingOption> >();

            Assert.AreEqual(shippingOptions2.Count, 2);
            Assert.AreEqual(shippingOptions[1].ShippingMethodId, 2);
            Assert.AreEqual(shippingOptions2.First().Description, "Desc1");
        }
        public void Can_get_typed_value()
        {
            "1000".Convert <int>().ShouldBe <int>();
            "1000".Convert <int>().ShouldEqual(1000);

            var intList = "1,2,3,4,5".Convert <List <int> >();

            intList.ShouldBe <List <int> >();
            Assert.AreEqual(5, intList.Count);
            Assert.AreEqual(3, intList[2]);

            var strList = "one,two,three".Convert <List <string> >();

            strList.ShouldBe <List <string> >();
            Assert.AreEqual(3, strList.Count);
            Assert.AreEqual("two", strList[1]);

            double dbl = 3;
            var    r1  = dbl.Convert <int?>();

            r1.ShouldBe <int?>();
            Assert.AreEqual(r1.Value, 3);

            var shippingOption = new ShippingOption {
                Name = "Name", Description = "Desc", Rate = 1, ShippingRateComputationMethodSystemName = "SystemName"
            };
            var soStr = shippingOption.Convert <string>();

            Assert.IsNotEmpty(soStr);

            shippingOption = soStr.Convert <ShippingOption>();
            Assert.IsNotNull(shippingOption);
            Assert.AreEqual(shippingOption.Name, "Name");
            Assert.AreEqual(shippingOption.Description, "Desc");
            Assert.AreEqual(shippingOption.Rate, 1);
            Assert.AreEqual(shippingOption.ShippingRateComputationMethodSystemName, "SystemName");

            var shippingOptions = new List <ShippingOption> {
                new ShippingOption {
                    Name = "Name1", Description = "Desc1"
                },
                new ShippingOption {
                    Name = "Name2", Description = "Desc2"
                }
            };

            soStr = shippingOptions.Convert <string>();
            Assert.IsNotEmpty(soStr);

            shippingOptions = soStr.Convert <List <ShippingOption> >();
            Assert.AreEqual(shippingOptions.Count, 2);
            Assert.AreEqual(shippingOptions[1].Description, "Desc2");

            var shippingOptions2 = soStr.Convert <IList <ShippingOption> >();

            Assert.AreEqual(shippingOptions2.Count, 2);
            Assert.AreEqual(shippingOptions2[1].Description, "Desc2");

            var enu = SmartStore.Core.Domain.Catalog.AttributeControlType.FileUpload;

            Assert.AreEqual((int)enu, enu.Convert <int>());
            Assert.AreEqual("FileUpload", enu.Convert <string>());
        }