diff --git a/tests/Jellyfin.XmlTv.Test/Jellyfin.XmlTv.Test.csproj b/tests/Jellyfin.XmlTv.Test/Jellyfin.XmlTv.Test.csproj index b63855e11b..6740a65c92 100644 --- a/tests/Jellyfin.XmlTv.Test/Jellyfin.XmlTv.Test.csproj +++ b/tests/Jellyfin.XmlTv.Test/Jellyfin.XmlTv.Test.csproj @@ -20,4 +20,10 @@ + + + Always + + + diff --git a/tests/Jellyfin.XmlTv.Test/XmlTvReaderDateTimeTests.cs b/tests/Jellyfin.XmlTv.Test/XmlTvReaderDateTimeTests.cs index 4f139b1714..12ddec7134 100644 --- a/tests/Jellyfin.XmlTv.Test/XmlTvReaderDateTimeTests.cs +++ b/tests/Jellyfin.XmlTv.Test/XmlTvReaderDateTimeTests.cs @@ -8,11 +8,18 @@ namespace Jellyfin.XmlTv.Test [TestFixture] public class XmlTvReaderDateTimeTests { + private string _testFilePath; + + [SetUp] + public void BeforeEachTest() + { + _testFilePath = Path.GetFullPath(Path.Combine("XmlFiles", "MultilanguageData.xml")); + } + [Test] public void ShouldHandlePartDates() { - var testFile = Path.GetFullPath(@"MultilanguageData.xml"); - var reader = new XmlTvReader(testFile, "es"); + var reader = new XmlTvReader(_testFilePath, "es"); Assert.AreEqual(Parse("01 Jan 2016 00:00:00"), reader.ParseDate("2016")); Assert.AreEqual(Parse("01 Jan 2016 00:00:00"), reader.ParseDate("201601")); @@ -25,8 +32,7 @@ namespace Jellyfin.XmlTv.Test [Test] public void ShouldHandleDateWithOffset() { - var testFile = Path.GetFullPath(@"MultilanguageData.xml"); - var reader = new XmlTvReader(testFile, "es"); + var reader = new XmlTvReader(_testFilePath, "es"); // parse variations on 1:00AM Assert.AreEqual(Parse("01 Jan 2016 12:00:00"), reader.ParseDate("20160101120000 +0000")); @@ -44,8 +50,7 @@ namespace Jellyfin.XmlTv.Test [Test] public void ShouldHandlePartDatesWithOffset() { - var testFile = Path.GetFullPath(@"MultilanguageData.xml"); - var reader = new XmlTvReader(testFile, "es"); + var reader = new XmlTvReader(_testFilePath, "es"); Assert.AreEqual(Parse("01 Jan 2016 01:00:00"), reader.ParseDate("2016 -0100")); Assert.AreEqual(Parse("01 Jan 2016 01:00:00"), reader.ParseDate("201601 -0100")); @@ -58,8 +63,7 @@ namespace Jellyfin.XmlTv.Test [Test] public void ShouldHandleSpaces() { - var testFile = Path.GetFullPath(@"MultilanguageData.xml"); - var reader = new XmlTvReader(testFile, "es"); + var reader = new XmlTvReader(_testFilePath, "es"); // parse variations on 1:00AM Assert.AreEqual(Parse("01 Jan 2016 12:00:00"), reader.ParseDate("20160101120000 +000")); @@ -70,8 +74,7 @@ namespace Jellyfin.XmlTv.Test [Test] public void ShouldHandleSpaces2() { - var testFile = Path.GetFullPath(@"MultilanguageData.xml"); - var reader = new XmlTvReader(testFile, "es"); + var reader = new XmlTvReader(_testFilePath, "es"); // parse variations on 1:00AM Assert.AreEqual(Parse("01 Jan 2016 12:00:00"), reader.ParseDate("20160101120000 0")); diff --git a/tests/Jellyfin.XmlTv.Test/XmlTvReaderLanguageTests.cs b/tests/Jellyfin.XmlTv.Test/XmlTvReaderLanguageTests.cs new file mode 100644 index 0000000000..145ab2598a --- /dev/null +++ b/tests/Jellyfin.XmlTv.Test/XmlTvReaderLanguageTests.cs @@ -0,0 +1,173 @@ +using System; +using System.IO; +using System.Linq; +using System.Threading; +using Emby.XmlTv.Classes; +using NUnit.Framework; + +namespace Jellyfin.XmlTv.Test +{ + [TestFixture] + public class XmlTvReaderLanguageTests + { + private string _testFilePath; + + [SetUp] + public void BeforeEachTest() + { + _testFilePath = Path.GetFullPath(Path.Combine("XmlFiles", "MultilanguageData.xml")); + } + + /* + Homes Under the Hammer - Spanish + Homes Under the Hammer - Spanish 2 + Homes Under the Hammer - English + Homes Under the Hammer - English 2 + Homes Under the Hammer - Empty Language + Homes Under the Hammer - Empty Language 2 + Homes Under the Hammer - No Language + Homes Under the Hammer - No Language 2 + */ + + /* Expected Behaviour: + - Language = Null Homes Under the Hammer - No Language + - Language = "" Homes Under the Hammer - No Language + - Language = es Homes Under the Hammer - Spanish + - Language = en Homes Under the Hammer - English + */ + + [Test] + public void Should_Return_The_First_Matching_Language_ES() + { + var reader = new XmlTvReader(_testFilePath, "es"); + var channel = reader.GetChannels().FirstOrDefault(); + Assert.IsNotNull(channel); + + var startDate = new DateTime(2015, 11, 26); + var cancellationToken = new CancellationToken(); + var programme = reader.GetProgrammes(channel.Id, startDate, startDate.AddDays(1), cancellationToken).FirstOrDefault(); + + Assert.IsNotNull(programme); + Assert.AreEqual("Homes Under the Hammer - Spanish", programme.Title); + Assert.AreEqual(1, programme.Categories.Count); + Assert.AreEqual("Property - Spanish", programme.Categories[0]); + } + + [Test] + public void Should_Return_The_First_Matching_Language_EN() + { + var reader = new XmlTvReader(_testFilePath, "en"); + + var channel = reader.GetChannels().FirstOrDefault(); + Assert.IsNotNull(channel); + + var startDate = new DateTime(2015, 11, 26); + var cancellationToken = new CancellationToken(); + var programme = reader.GetProgrammes(channel.Id, startDate, startDate.AddDays(1), cancellationToken).FirstOrDefault(); + + Assert.IsNotNull(programme); + Assert.AreEqual("Homes Under the Hammer - English", programme.Title); + Assert.AreEqual(1, programme.Categories.Count); + Assert.AreEqual("Property - English", programme.Categories[0]); + } + + [Test] + public void Should_Return_The_First_Matching_With_No_Language() + { + var reader = new XmlTvReader(_testFilePath, null); + + var channel = reader.GetChannels().FirstOrDefault(); + Assert.IsNotNull(channel); + + var startDate = new DateTime(2015, 11, 26); + var cancellationToken = new CancellationToken(); + var programme = reader.GetProgrammes(channel.Id, startDate, startDate.AddDays(1), cancellationToken).FirstOrDefault(); + + Assert.IsNotNull(programme); + Assert.AreEqual("Homes Under the Hammer - No Language", programme.Title); + Assert.AreEqual(1, programme.Categories.Count); + Assert.AreEqual("Property - No Language", programme.Categories[0]); + } + + [Test] + public void Should_Return_The_First_Matching_With_Empty_Language() + { + var reader = new XmlTvReader(_testFilePath, String.Empty); + + var channel = reader.GetChannels().FirstOrDefault(); + Assert.IsNotNull(channel); + + var startDate = new DateTime(2015, 11, 26); + var cancellationToken = new CancellationToken(); + var programme = reader.GetProgrammes(channel.Id, startDate, startDate.AddDays(1), cancellationToken).FirstOrDefault(); + + Assert.IsNotNull(programme); + Assert.AreEqual("Homes Under the Hammer - Empty Language", programme.Title); + Assert.AreEqual(1, programme.Categories.Count); + Assert.AreEqual("Property - Empty Language", programme.Categories[0]); + } + + [Test] + public void Should_Return_The_First_When_NoMatchFound() + { + var reader = new XmlTvReader(_testFilePath, "es"); // There are no titles or categories for spanish + + var channel = reader.GetChannels().FirstOrDefault(); + Assert.IsNotNull(channel); + + var startDate = new DateTime(2015, 11, 26); + var cancellationToken = new CancellationToken(); + var programme = reader.GetProgrammes(channel.Id, startDate, startDate.AddDays(1), cancellationToken).Skip(1).FirstOrDefault(); + + Assert.IsNotNull(programme); + Assert.AreEqual("Homes Under the Hammer - English", programme.Title); + + // Should return all categories + Assert.AreEqual(2, programme.Categories.Count); + Assert.IsTrue(programme.Categories.Contains("Property - English")); + Assert.IsTrue(programme.Categories.Contains("Property - Empty Language")); + } + + [Test] + public void Should_Return_The_First_When_NoLanguage() + { + var reader = new XmlTvReader(_testFilePath, null); + + var channel = reader.GetChannels().FirstOrDefault(); + Assert.IsNotNull(channel); + + var startDate = new DateTime(2015, 11, 26); + var cancellationToken = new CancellationToken(); + var programme = reader.GetProgrammes(channel.Id, startDate, startDate.AddDays(1), cancellationToken).Skip(1).FirstOrDefault(); + + Assert.IsNotNull(programme); + Assert.AreEqual("Homes Under the Hammer - English", programme.Title); // Should return the first in the list + + // Should return all categories + Assert.AreEqual(2, programme.Categories.Count); + Assert.IsTrue(programme.Categories.Contains("Property - English")); + Assert.IsTrue(programme.Categories.Contains("Property - Empty Language")); + } + + [Test] + public void Should_Return_All_Languages() + { + var reader = new XmlTvReader(_testFilePath); + var cancellationToken = new CancellationToken(); + + var results = reader.GetLanguages(cancellationToken); + Assert.IsNotNull(results); + + foreach (var result in results) + { + Console.WriteLine("{0} - {1}", result.Name, result.Relevance); + } + + Assert.AreEqual(2, results.Count); + Assert.AreEqual("en", results[0].Name); + Assert.AreEqual(11, results[0].Relevance); + Assert.AreEqual("es", results[1].Name); + Assert.AreEqual(3, results[1].Relevance); + } + } +} \ No newline at end of file