using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Model.Xbmc;

namespace NzbDrone.Core.Test
{
    public class XbmcVersionTests
    {
        [TestCase(6, 0, 0)]
        [TestCase(5, 1, 0)]
        [TestCase(5, 0, 1)]
        public void Icomparer_greater_test(int major, int minor, int patch)
        {
            var first = new XbmcVersion(5, 0, 0);
            var second = new XbmcVersion(major, minor, patch);

            second.Should().BeGreaterThan(first);
        }

        [TestCase(4, 5, 5)]
        [TestCase(5, 4, 5)]
        [TestCase(5, 5, 4)]
        public void Icomparer_lesser_test(int major, int minor, int patch)
        {
            var first = new XbmcVersion(5, 5, 5);
            var second = new XbmcVersion(major, minor, patch);

            second.Should().BeLessThan(first);
        }

        [Test]
        public void equal_operand()
        {
            var first = new XbmcVersion(5, 0, 0);
            var second = new XbmcVersion(5, 0, 0);

            (first == second).Should().BeTrue();
            (first >= second).Should().BeTrue();
            (first <= second).Should().BeTrue();
        }

        [Test]
        public void equal_operand_false()
        {
            var first = new XbmcVersion(5, 0, 0);
            var second = new XbmcVersion(6, 0, 0);

            (first == second).Should().BeFalse();
        }

        [Test]
        public void not_equal_operand_false()
        {
            var first = new XbmcVersion(5, 0, 0);
            var second = new XbmcVersion(5, 0, 0);

            (first != second).Should().BeFalse();
        }

        [Test]
        public void not_equal_operand_true()
        {
            var first = new XbmcVersion(5, 0, 0);
            var second = new XbmcVersion(6, 0, 0);

            (first != second).Should().BeTrue();
        }

        [Test]
        public void greater_operand()
        {
            var first = new XbmcVersion(5, 0, 0);
            var second = new XbmcVersion(6, 0, 0);

            (first < second).Should().BeTrue();
            (first <= second).Should().BeTrue();
        }

        [Test]
        public void lesser_operand()
        {
            var first = new XbmcVersion(5, 0, 0);
            var second = new XbmcVersion(6, 0, 0);

            (second > first).Should().BeTrue();
            (second >= first).Should().BeTrue();
        }
    }
}
