using System;
using ArtOfTest.WebAii.Controls.HtmlControls;
using ArtOfTest.WebAii.Core;
using ArtOfTest.WebAii.TestTemplates;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.Win32;
using Telerik.TestingFramework.Controls.KendoUI;

namespace UnitTestProject1
{
    [TestClass]
    public class UnitTest1 : BaseTest
    {
        #region Additional test attributes

        private TestContext testContextInstance = null;
        /// <summary>
        ///Gets or sets the VS test context which provides
        ///information about and functionality for the
        ///current test run.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        //Use ClassInitialize to run code before running the first test in the class
        [ClassInitialize()]
        public static void MyClassInitialize(TestContext testContext)
        {
        }

        //Use ClassCleanup to run code after all tests in a class have run
        [ClassCleanup()]
        public static void MyClassCleanup()
        {
        }

        // Use TestInitialize to run code before running each test
        [TestInitialize()]
        public void MyTestInitialize()
        {
            #region WebAii Initialization

            // Initializes WebAii manager to be used by the test case.
            // If a WebAii configuration section exists, settings will be
            // loaded from it. Otherwise, will create a default settings
            // object with system defaults.
            //
            // Note: We are passing in a delegate to the VisualStudio
            // testContext.WriteLine() method in addition to the Visual Studio
            // TestLogs directory as our log location. This way any logging
            // done from WebAii (i.e. Manager.Log.WriteLine()) is
            // automatically logged to the VisualStudio test log and
            // the WebAii log file is placed in the same location as VS logs.
            //
            // If you do not care about unifying the log, then you can simply
            // initialize the test by calling Initialize() with no parameters;
            // that will cause the log location to be picked up from the config
            // file if it exists or will use the default system settings (C:\WebAiiLog\)
            // You can also use Initialize(LogLocation) to set a specific log
            // location for this test.

            // TODO Fix this so we set up the log directory correctly.
            Initialize(this.TestContext.TestLogsDir, new TestContextWriteLine(this.TestContext.WriteLine));

            // If you need to override any other settings coming from the
            // config section you can comment the 'Initialize' line above and instead
            // use the following:

            // This will get a new Settings object. If a configuration
            // section exists, then settings from that section will be
            // loaded

            //Settings settings = GetSettings();

            // Override the settings you want. For example:
            //settings.BaseUrl = System.IO.Path.Combine(this.TestContext.TestDeploymentDir, "WebAii2Pages");

            // Now call Initialize again with your updated settings object
            //Initialize(settings, new TestContextWriteLine(this.TestContext.WriteLine));

            // Set the current test method. This is needed for WebAii to discover
            // its custom TestAttributes set on methods and classes.
            // This method should always exist in [TestInitialize()] method.
            SetTestMethod(this, (string)TestContext.Properties["TestName"]);

            #endregion

            //
            // Place any additional initialization here
            //
        }

        // Use TestCleanup to run code after each test has run
        [TestCleanup()]
        public void MyTestCleanup()
        {

            //
            // Place any additional cleanup here
            //

            #region WebAii CleanUp

            // Shuts down WebAii manager and closes all browsers currently running
            this.CleanUp();

            #endregion
        }
        #endregion

        [TestMethod]
        public void TestMethodSuccess()
        {
            Manager.LaunchNewBrowser(BrowserType.Chrome);

            ActiveBrowser.NavigateTo("http://demos.kendoui.com/web/dropdownlist/cascadingdropdownlist.html");

            //Select Produce
            KendoInput dropdownlist = Find.ByExpression<KendoInput>("aria-owns=categories_listbox");
            dropdownlist.ToggleCombo();

            HtmlListItem item = Find.ByContent<HtmlListItem>("Beverages");
            item.MouseClick();

            System.Threading.Thread.Sleep(2000);

            //Select Product
            KendoInput dropdownlistProducts = Find.ByExpression<KendoInput>("aria-owns=products_listbox");
            dropdownlistProducts.ToggleCombo();

            HtmlListItem itemProduct = Find.ByContent<HtmlListItem>("Chai");
            itemProduct.MouseClick();
        }

        [TestMethod]
        public void TestMethodFailure()
        {
            Manager.LaunchNewBrowser(BrowserType.Chrome);

            ActiveBrowser.NavigateTo("http://demos.kendoui.com/web/dropdownlist/cascadingdropdownlist.html");

            //Select Produce
            KendoInput dropdownlist = Find.ByExpression<KendoInput>("aria-owns=categories_listbox");
            dropdownlist.ToggleCombo();

            HtmlListItem item = Find.ByContent<HtmlListItem>("Produce");
            item.MouseClick();

            System.Threading.Thread.Sleep(2000);

            //Select Product
            KendoInput dropdownlistProducts = Find.ByExpression<KendoInput>("aria-owns=products_listbox");
            dropdownlistProducts.ToggleCombo();

            HtmlListItem itemProduct = Find.ByContent<HtmlListItem>("Tofu");
            itemProduct.MouseClick();
        }
    }
}
