fix: replace retained report sessions when re-adding queue items
This commit is contained in:
@@ -273,7 +273,7 @@ struct ResolvedPlaybackCheck {
|
||||
require(model.commandError != nil && model.queue.items.count == 4,
|
||||
"registered report-path conflicts reject complete enqueue before files exist")
|
||||
try deliver([(URL(string: "https://www.youtube.com/watch?v=DDDDDDDDDDD")!, directory.appendingPathComponent("valid.jsonl")),
|
||||
(URL(string: "https://example.com/unsupported")!, directory.appendingPathComponent("invalid.jsonl"))])
|
||||
(URL(string: "file:///not-a-stream")!, directory.appendingPathComponent("invalid.jsonl"))])
|
||||
require(model.commandError != nil && model.queue.items.count == 4,
|
||||
"invalid later manifest entry never partially appends or registers reports")
|
||||
try deliver([(URL(string: "https://www.youtube.com/watch?v=DDDDDDDDDDD")!, directory.appendingPathComponent("valid.jsonl"))])
|
||||
@@ -302,7 +302,38 @@ struct ResolvedPlaybackCheck {
|
||||
try await until("original single video remains navigable", model: model) {
|
||||
!model.isBusy && model.state.status == PLAYER_PLAYING && model.fileName == first.absoluteString
|
||||
}
|
||||
var retiredReports: [(URL, Data, URL, URL)] = []
|
||||
for (url, oldReport) in [(first, originalReport), (third, thirdReport)] {
|
||||
let oldID = model.queue.items.first(where: { $0.url == url })!.id
|
||||
model.removeQueueItem(oldID)
|
||||
let currentID = model.queue.currentID
|
||||
let freshReport = directory.appendingPathComponent(oldReport.lastPathComponent + ".fresh")
|
||||
try deliver([(url, freshReport)])
|
||||
require(model.commandError == nil && model.queue.items.count == 5 &&
|
||||
model.queue.currentID == currentID, "removed video re-enqueues without interrupting current playback")
|
||||
let retiredBytes = try Data(contentsOf: oldReport)
|
||||
retiredReports.append((oldReport, retiredBytes, freshReport, url))
|
||||
require(!FileManager.default.fileExists(atPath: freshReport.path), "re-added report remains lazy")
|
||||
model.selectQueueItem(model.queue.items.last!.id)
|
||||
try await until("re-added video decodes with a fresh session", model: model) {
|
||||
!model.isBusy && model.state.status == PLAYER_PLAYING &&
|
||||
model.queue.currentURL == url && model.state.position > 0.2
|
||||
}
|
||||
require(model.setPlayback(playing: false), "pause re-added video")
|
||||
try await until("re-added pause acknowledged", model: model) { model.state.status == PLAYER_PAUSED }
|
||||
}
|
||||
model.shutdown()
|
||||
for (oldReport, retiredBytes, freshReport, url) in retiredReports {
|
||||
let finalBytes = try Data(contentsOf: oldReport)
|
||||
require(finalBytes == retiredBytes, "re-added playback leaves the retired report unchanged")
|
||||
let freshRows = try String(contentsOf: freshReport, encoding: .utf8).split(separator: "\n").map {
|
||||
try JSONSerialization.jsonObject(with: Data($0.utf8)) as! [String: Any]
|
||||
}
|
||||
require(freshRows.contains { $0["event"] as? String == "closed" } &&
|
||||
freshRows.contains { $0["event"] as? String == "progress" } &&
|
||||
freshRows.allSatisfy { $0["media_url"] as? String == url.absoluteString },
|
||||
"re-added video writes its acknowledged progress and close to the fresh report only")
|
||||
}
|
||||
for (file, expected) in [(originalReport, first.absoluteString), (thirdReport, third.absoluteString)] {
|
||||
let rows = try String(contentsOf: file, encoding: .utf8).split(separator: "\n").map {
|
||||
try JSONSerialization.jsonObject(with: Data($0.utf8)) as! [String: Any]
|
||||
|
||||
Reference in New Issue
Block a user