using Grand.Domain.Catalog;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Grand.Business.Catalog.Tests.Extensions
{
    [TestClass()]
    public class ProductAttributeExtensionsTests
    {

        [TestMethod()]
        public void ShouldHaveValues_ReturnExpentedResult()
        {
            var pam = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.TextBox };
            var pam2 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.MultilineTextbox };
            var pam3 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.Datepicker };
            var pam4 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.FileUpload };
            var pam5 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.DropdownList };
            ProductAttributeMapping pam6 = null;
            Assert.AreEqual(false, pam.ShouldHaveValues());
            Assert.AreEqual(false, pam2.ShouldHaveValues());
            Assert.AreEqual(false, pam3.ShouldHaveValues());
            Assert.AreEqual(false, pam4.ShouldHaveValues());
            Assert.AreEqual(false, pam6.ShouldHaveValues());
            Assert.AreEqual(true, pam5.ShouldHaveValues());
        }


        [TestMethod()]
        public void ValidationRulesAllowed_ReturnExpentedResult()
        {
            var pam = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.TextBox };
            var pam2 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.MultilineTextbox };
            var pam3 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.Datepicker };
            var pam4 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.FileUpload };
            var pam5 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.DropdownList };
            ProductAttributeMapping pam6 = null;
            Assert.AreEqual(true, pam.ValidationRulesAllowed());
            Assert.AreEqual(true, pam2.ValidationRulesAllowed());
            Assert.AreEqual(true, pam4.ValidationRulesAllowed());
            Assert.AreEqual(false, pam3.ValidationRulesAllowed());
            Assert.AreEqual(false, pam6.ValidationRulesAllowed());
            Assert.AreEqual(false, pam5.ValidationRulesAllowed());
        }

        [TestMethod()]
        public void CanBeUsedAsCondition_ReturnExpentedResult()
        {
            var pam = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.TextBox };
            var pam2 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.MultilineTextbox };
            var pam3 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.Datepicker };
            var pam4 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.FileUpload };
            var pam5 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.DropdownList };
            ProductAttributeMapping pam6 = null;
            Assert.AreEqual(false, pam.CanBeUsedAsCondition());
            Assert.AreEqual(false, pam2.CanBeUsedAsCondition());
            Assert.AreEqual(false, pam4.CanBeUsedAsCondition());
            Assert.AreEqual(false, pam3.CanBeUsedAsCondition());
            Assert.AreEqual(false, pam6.CanBeUsedAsCondition());
            Assert.AreEqual(true, pam5.CanBeUsedAsCondition());
        }

        [TestMethod()]
        public void IsNonCombinable_ReturnExpentedResult()
        {
            var pam = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.TextBox };
            var pam2 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.MultilineTextbox };
            var pam3 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.Datepicker };
            var pam4 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.FileUpload };
            var pam5 = new ProductAttributeMapping() { AttributeControlTypeId = AttributeControlType.DropdownList };
            ProductAttributeMapping pam6 = null;
            var pam7 = new ProductAttributeMapping() { Combination = true };
            Assert.AreEqual(true, pam.IsNonCombinable());
            Assert.AreEqual(true, pam2.IsNonCombinable());
            Assert.AreEqual(true, pam4.IsNonCombinable());
            Assert.AreEqual(true, pam3.IsNonCombinable());
            Assert.AreEqual(false, pam6.IsNonCombinable());
            Assert.AreEqual(true, pam5.IsNonCombinable());
            Assert.AreEqual(false, pam7.IsNonCombinable());
        }
    }
}
