65 lines
No EOL
2.5 KiB
C#
65 lines
No EOL
2.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Paca.Mobile.Core;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.Core;
|
|
|
|
public class PlaybackHistorySyncManagerGateTests
|
|
{
|
|
[Fact]
|
|
public void Gate449_PlaybackHistorySyncManager_RecordsProgress_AndCompletion()
|
|
{
|
|
// 96% completion -> marks finished, reset resume position
|
|
var itemDone = PlaybackHistorySyncManager.CreateRecord("v1", "movie.mp4", 960.0, 1000.0, DateTime.UtcNow);
|
|
Assert.True(itemDone.IsFinished);
|
|
Assert.Equal(0.0, itemDone.ResumePositionSec);
|
|
Assert.Equal(96.0, itemDone.CompletionPercent, 1);
|
|
|
|
// 50% completion -> keeps resume position
|
|
var itemMid = PlaybackHistorySyncManager.CreateRecord("v2", "show.mp4", 500.0, 1000.0, DateTime.UtcNow);
|
|
Assert.False(itemMid.IsFinished);
|
|
Assert.Equal(500.0, itemMid.ResumePositionSec);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate440_PlaybackHistorySyncManager_IgnoresNearZero_Resumes()
|
|
{
|
|
var item = PlaybackHistorySyncManager.CreateRecord("v3", "clip.mp4", 3.0, 100.0, DateTime.UtcNow);
|
|
Assert.Equal(0.0, item.ResumePositionSec);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate451_PlaybackHistorySyncManager_MergesCrossDeviceRecords_ConflictResolution()
|
|
{
|
|
var dtDesktop = new DateTime(2026, 9, 4, 10, 0, 0, DateTimeKind.Utc);
|
|
var dtMobile = new DateTime(2026, 9, 4, 11, 0, 0, DateTimeKind.Utc);
|
|
|
|
var rDesktop = PlaybackHistorySyncManager.CreateRecord("v1", "doc.mp4", 300.0, 1000.0, dtDesktop);
|
|
var rMobile = PlaybackHistorySyncManager.CreateRecord("v1", "doc.mp4", 600.0, 1000.0, dtMobile);
|
|
|
|
var merged = PlaybackHistorySyncManager.Merge(rDesktop, rMobile);
|
|
|
|
Assert.Equal(600.0, merged.ResumePositionSec);
|
|
Assert.Equal(dtMobile, merged.LastPlayedAtUtc);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate452_PlaybackHistorySyncManager_SerializesAndRestores_HistoryDatabase()
|
|
{
|
|
var list = new List<PlaybackHistoryRecord>
|
|
{
|
|
PlaybackHistorySyncManager.CreateRecord("v1", "a.mp4", 100.0, 500.0, DateTime.UtcNow),
|
|
PlaybackHistorySyncManager.CreateRecord("v2", "b.mp4", 980.0, 1000.0, DateTime.UtcNow)
|
|
};
|
|
|
|
var json = PlaybackHistorySyncManager.ToJson(list);
|
|
var restored = PlaybackHistorySyncManager.FromJson(json);
|
|
|
|
Assert.NotNull(restored);
|
|
Assert.Equal(2, restored.Count);
|
|
Assert.Equal("v1", restored[0].MediaId);
|
|
Assert.Equal("v2", restored[1].MediaId);
|
|
Assert.True(restored[1].IsFinished);
|
|
}
|
|
} |