// ReSharper disable InconsistentNaming

using System;
using System.IO;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Test.Common;

namespace NzbDrone.Common.Test
{
    [TestFixture]
    public class EnviromentProviderTest : TestBase
    {
        readonly EnviromentProvider enviromentProvider = new EnviromentProvider();

        [Test]
        public void StartupPath_should_not_be_empty()
        {
            enviromentProvider.StartUpPath.Should().NotBeBlank();
            Path.IsPathRooted(enviromentProvider.StartUpPath).Should().BeTrue("Path is not rooted");

        }

        [Test]
        public void ApplicationPath_should_not_be_empty()
        {
            enviromentProvider.ApplicationPath.Should().NotBeBlank();
            Path.IsPathRooted(enviromentProvider.ApplicationPath).Should().BeTrue("Path is not rooted");
        }


        [Test]
        public void ApplicationPath_should_find_root_in_current_folder()
        {
            Directory.CreateDirectory(EnviromentProvider.ROOT_MARKER);
            enviromentProvider.ApplicationPath.Should().BeEquivalentTo(Directory.GetCurrentDirectory());
        }

        [Test]
        public void crawl_should_return_null_if_cant_find_root()
        {
            enviromentProvider.CrawlToRoot("C:\\").Should().BeNullOrEmpty();
        }

        [Test]
        public void should_go_up_the_tree_to_find_iis()
        {
            enviromentProvider.ApplicationPath.Should().NotBe(Environment.CurrentDirectory);
            enviromentProvider.ApplicationPath.Should().NotBe(enviromentProvider.StartUpPath);
        }
        [Test]
        public void IsProduction_should_return_false_when_run_within_nunit()
        {
            EnviromentProvider.IsProduction.Should().BeFalse();
        }

        [TestCase("0.0.0.0")]
        [TestCase("1.0.0.0")]
        public void Application_version_should_not_be_default(string version)
        {
            enviromentProvider.Version.Should().NotBe(new Version(version));
        }

        [TearDown]
        public void TearDown()
        {
            if (Directory.Exists(EnviromentProvider.ROOT_MARKER))
                Directory.Delete(EnviromentProvider.ROOT_MARKER);
        }
    }
}