Always inherit from owner item and add tests

This commit is contained in:
Shadowghost
2026-07-25 17:17:30 +02:00
parent 6382563440
commit 3c9727d36c
4 changed files with 189 additions and 19 deletions
@@ -5,6 +5,7 @@ using System.Reflection;
using System.Threading;
using Jellyfin.Database.Implementations.Entities;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Controller.MediaSegments;
@@ -335,4 +336,80 @@ public class BaseItemTests
Assert.Contains(alt2.Id, ids);
}
}
[Fact]
public void InheritDatesFromOwner_OwnerHasDates_OverwritesOwnedItemDates()
{
var owner = new Movie
{
ProductionYear = 1982,
PremiereDate = new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc)
};
// 2016 is what the container creation date of a re-encoded trailer would have yielded.
var trailer = new Trailer
{
ExtraType = ExtraType.Trailer,
ProductionYear = 2016,
PremiereDate = new DateTime(2016, 5, 4, 0, 0, 0, DateTimeKind.Utc)
};
Assert.True(BaseItem.InheritDatesFromOwner(owner, trailer));
Assert.Equal(owner.ProductionYear, trailer.ProductionYear);
Assert.Equal(owner.PremiereDate, trailer.PremiereDate);
}
[Fact]
public void InheritDatesFromOwner_OwnerHasNoDates_KeepsOwnedItemDates()
{
var owner = new Movie();
var trailer = new Trailer
{
ExtraType = ExtraType.Trailer,
ProductionYear = 1982,
PremiereDate = new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc)
};
Assert.False(BaseItem.InheritDatesFromOwner(owner, trailer));
Assert.Equal(1982, trailer.ProductionYear);
Assert.Equal(new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc), trailer.PremiereDate);
}
[Fact]
public void InheritDatesFromOwner_DatesAlreadyMatch_ReportsNoChange()
{
var owner = new Movie
{
ProductionYear = 1982,
PremiereDate = new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc)
};
var trailer = new Trailer
{
ExtraType = ExtraType.Trailer,
ProductionYear = owner.ProductionYear,
PremiereDate = owner.PremiereDate
};
Assert.False(BaseItem.InheritDatesFromOwner(owner, trailer));
}
[Fact]
public void InheritDatesFromOwner_OwnedItemHasNoDates_TakesOwnerDates()
{
var owner = new Movie
{
ProductionYear = 1982,
PremiereDate = new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc)
};
var trailer = new Trailer
{
ExtraType = ExtraType.Trailer
};
Assert.True(BaseItem.InheritDatesFromOwner(owner, trailer));
Assert.Equal(1982, trailer.ProductionYear);
Assert.Equal(new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc), trailer.PremiereDate);
}
}
@@ -3,7 +3,9 @@ using AutoFixture;
using AutoFixture.AutoMoq;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Entities;
using MediaBrowser.Providers.MediaInfo;
using Moq;
using Xunit;
@@ -75,4 +77,62 @@ public class FFProbeVideoInfoTests
Assert.All(chapters, chapter => Assert.True(chapter.StartPositionTicks < runtime));
}
[Theory]
[InlineData(false)]
[InlineData(true)]
public void FetchEmbeddedInfo_NoExtra_AppliesContainerDates(bool replaceAllMetadata)
{
var video = new Video();
_fFProbeVideoInfo.FetchEmbeddedInfo(video, CreateMediaInfoWithDates(), CreateRefreshOptions(replaceAllMetadata), new LibraryOptions());
Assert.Equal(2016, video.ProductionYear);
Assert.Equal(new DateTime(2016, 5, 4, 0, 0, 0, DateTimeKind.Utc), video.PremiereDate);
}
[Theory]
[InlineData(false)]
[InlineData(true)]
public void FetchEmbeddedInfo_Extra_IgnoresContainerDates(bool replaceAllMetadata)
{
var video = new Video
{
ExtraType = ExtraType.Trailer,
ProductionYear = 1982,
PremiereDate = new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc)
};
_fFProbeVideoInfo.FetchEmbeddedInfo(video, CreateMediaInfoWithDates(), CreateRefreshOptions(replaceAllMetadata), new LibraryOptions());
Assert.Equal(1982, video.ProductionYear);
Assert.Equal(new DateTime(1982, 6, 25, 0, 0, 0, DateTimeKind.Utc), video.PremiereDate);
}
[Fact]
public void FetchEmbeddedInfo_ExtraWithoutDates_StaysWithoutDates()
{
var video = new Video
{
ExtraType = ExtraType.Trailer
};
_fFProbeVideoInfo.FetchEmbeddedInfo(video, CreateMediaInfoWithDates(), CreateRefreshOptions(false), new LibraryOptions());
Assert.Null(video.ProductionYear);
Assert.Null(video.PremiereDate);
}
private static MediaBrowser.Model.MediaInfo.MediaInfo CreateMediaInfoWithDates()
=> new()
{
ProductionYear = 2016,
PremiereDate = new DateTime(2016, 5, 4, 0, 0, 0, DateTimeKind.Utc)
};
private static MetadataRefreshOptions CreateRefreshOptions(bool replaceAllMetadata)
=> new(Mock.Of<IDirectoryService>())
{
ReplaceAllMetadata = replaceAllMetadata
};
}