You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Radarr/src/NzbDrone.Core.Test/MovieTests/MovieIsAvailableFixture.cs

118 lines
6.1 KiB

using System;
using FizzWare.NBuilder;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Movies;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.MovieTests
{
[TestFixture]
public class MovieIsAvailableFixture : CoreTest
{
private Movie _movie;
[SetUp]
public void Setup()
{
_movie = Builder<Movie>.CreateNew()
.Build();
}
private void SetMovieProperties(DateTime? cinema, DateTime? physical, DateTime? digital, MovieStatusType minimumAvailability)
{
_movie.MovieMetadata.Value.InCinemas = cinema;
_movie.MovieMetadata.Value.PhysicalRelease = physical;
_movie.MovieMetadata.Value.DigitalRelease = digital;
_movie.MinimumAvailability = minimumAvailability;
}
// minAvail = TBA
[TestCase(null, null, null, MovieStatusType.TBA, true)]
[TestCase("2000/01/01 21:10:42", null, null, MovieStatusType.TBA, true)]
[TestCase("2100/01/01 21:10:42", null, null, MovieStatusType.TBA, true)]
[TestCase(null, "2000/01/01 21:10:42", null, MovieStatusType.TBA, true)]
[TestCase(null, "2100/01/01 21:10:42", null, MovieStatusType.TBA, true)]
[TestCase(null, null, "2000/01/01 21:10:42", MovieStatusType.TBA, true)]
[TestCase(null, null, "2100/01/01 21:10:42", MovieStatusType.TBA, true)]
// minAvail = Announced
[TestCase(null, null, null, MovieStatusType.Announced, true)]
[TestCase("2000/01/01 21:10:42", null, null, MovieStatusType.Announced, true)]
[TestCase("2100/01/01 21:10:42", null, null, MovieStatusType.Announced, true)]
[TestCase(null, "2000/01/01 21:10:42", null, MovieStatusType.Announced, true)]
[TestCase(null, "2100/01/01 21:10:42", null, MovieStatusType.Announced, true)]
[TestCase(null, null, "2000/01/01 21:10:42", MovieStatusType.Announced, true)]
[TestCase(null, null, "2100/01/01 21:10:42", MovieStatusType.Announced, true)]
// minAvail = InCinemas
// InCinemas is known and in the past others are not known or in future
[TestCase("2000/01/01 21:10:42", null, null, MovieStatusType.InCinemas, true)]
[TestCase("2000/01/01 21:10:42", "2100/01/01 21:10:42", null, MovieStatusType.InCinemas, true)]
[TestCase("2000/01/01 21:10:42", "2100/01/01 21:10:42", "2100/01/01 21:10:42", MovieStatusType.InCinemas, true)]
[TestCase("2000/01/01 21:10:42", null, "2100/01/01 21:10:42", MovieStatusType.InCinemas, true)]
// InCinemas is known and in the future others are not known or in future
[TestCase("2100/01/01 21:10:42", null, null, MovieStatusType.InCinemas, false)]
[TestCase("2100/01/01 21:10:42", "2100/01/01 21:10:42", null, MovieStatusType.InCinemas, false)]
[TestCase("2100/01/01 21:10:42", "2100/01/01 21:10:42", "2100/01/01 21:10:42", MovieStatusType.InCinemas, false)]
[TestCase("2100/01/01 21:10:42", null, "2100/01/01 21:10:42", MovieStatusType.InCinemas, false)]
// handle the cases where InCinemas date is not known but Digital/Physical are and passed -- this refers to the issue being fixed along with these tests
[TestCase(null, "2000/01/01 21:10:42", null, MovieStatusType.InCinemas, true)]
[TestCase(null, "2000/01/01 21:10:42", "2000/01/01 21:10:42", MovieStatusType.InCinemas, true)]
[TestCase(null, null, "2000/01/01 21:10:42", MovieStatusType.InCinemas, true)]
// same as previous but digital/physical are in future
[TestCase(null, "2100/01/01 21:10:42", null, MovieStatusType.InCinemas, false)]
[TestCase(null, "2100/01/01 21:10:42", "2100/01/01 21:10:42", MovieStatusType.InCinemas, false)]
[TestCase(null, null, "2100/01/01 21:10:42", MovieStatusType.InCinemas, false)]
// no date values
[TestCase(null, null, null, MovieStatusType.InCinemas, false)]
// minAvail = Released
[TestCase(null, null, null, MovieStatusType.Released, false)]
[TestCase("2000/01/01 21:10:42", null, null, MovieStatusType.Released, true)]
[TestCase("2100/01/01 21:10:42", null, null, MovieStatusType.Released, false)]
[TestCase(null, "2000/01/01 21:10:42", null, MovieStatusType.Released, true)]
[TestCase(null, "2100/01/01 21:10:42", null, MovieStatusType.Released, false)]
[TestCase(null, null, "2000/01/01 21:10:42", MovieStatusType.Released, true)]
[TestCase(null, null, "2100/01/01 21:10:42", MovieStatusType.Released, false)]
public void should_have_correct_availability(DateTime? cinema, DateTime? physical, DateTime? digital, MovieStatusType minimumAvailability, bool result)
{
SetMovieProperties(cinema, physical, digital, minimumAvailability);
_movie.IsAvailable().Should().Be(result);
}
[Test]
public void positive_delay_should_effect_availability()
{
SetMovieProperties(null, DateTime.Now.AddDays(-5), null, MovieStatusType.Released);
_movie.IsAvailable().Should().BeTrue();
_movie.IsAvailable(6).Should().BeFalse();
}
[Test]
public void negative_delay_should_effect_availability()
{
SetMovieProperties(null, DateTime.Now.AddDays(5), null, MovieStatusType.Released);
_movie.IsAvailable().Should().BeFalse();
_movie.IsAvailable(-6).Should().BeTrue();
}
[Test]
public void minimum_availability_released_no_date_but_ninety_days_after_cinemas()
{
SetMovieProperties(DateTime.Now.AddDays(-91), null, null, MovieStatusType.Released);
_movie.IsAvailable().Should().BeTrue();
SetMovieProperties(DateTime.Now.AddDays(-89), null, null, MovieStatusType.Released);
_movie.IsAvailable().Should().BeFalse();
SetMovieProperties(DateTime.Now.AddDays(-89), DateTime.Now.AddDays(-40), null, MovieStatusType.Released);
_movie.IsAvailable().Should().BeTrue();
SetMovieProperties(DateTime.Now.AddDays(-91), DateTime.Now.AddDays(40), null, MovieStatusType.Released);
_movie.IsAvailable().Should().BeFalse();
}
}
}