Update Broadcast button: diff before push, offline=local only, live=API; Go Live empty-field prompt
This commit is contained in:
@@ -142,6 +142,82 @@ public sealed class BroadcastPullOutTests
|
||||
Assert.True(root.GetProperty("status").GetProperty("selfDeclaredMadeForKids").GetBoolean());
|
||||
Assert.Equal(new DateTime(2026, 8, 24, 12, 0, 0, DateTimeKind.Utc).ToString("o"),
|
||||
root.GetProperty("snippet").GetProperty("scheduledStartTime").GetString());
|
||||
|
||||
// --- Diff + close drawer tests ---
|
||||
|
||||
var auth2 = new YouTubeAuthService("test-client", "test-secret");
|
||||
auth2.SetSession(new YouTubeChannel
|
||||
{
|
||||
AccessToken = "token2",
|
||||
TokenExpiry = DateTime.UtcNow.AddHours(1),
|
||||
});
|
||||
var stub2 = new StubHandler();
|
||||
var service2 = new YouTubeStreamService(auth2, new HttpClient(stub2));
|
||||
|
||||
string? broadcastId = "bc456";
|
||||
|
||||
// --- Offline path (isLive = false): saves locally, never pushes API ---
|
||||
var formOffline = new LiveBroadcastFormViewModel(
|
||||
() => new LayoutStore(tempDb),
|
||||
() => service2,
|
||||
() => broadcastId,
|
||||
() => false);
|
||||
|
||||
formOffline.Load();
|
||||
Assert.False(formOffline.IsDrawerOpen);
|
||||
|
||||
// No edits → stays open, no API call
|
||||
formOffline.IsDrawerOpen = true;
|
||||
formOffline.UpdateBroadcastCommand.Execute(null);
|
||||
Assert.Null(stub2.Request);
|
||||
Assert.False(formOffline.IsDrawerOpen);
|
||||
|
||||
// Edit Title → closes drawer, still no API call (offline = local save only)
|
||||
stub2.Request = null;
|
||||
formOffline.Title = "Changed offline";
|
||||
formOffline.IsDrawerOpen = true;
|
||||
formOffline.UpdateBroadcastCommand.Execute(null);
|
||||
Assert.Null(stub2.Request);
|
||||
Assert.False(formOffline.IsDrawerOpen);
|
||||
|
||||
// Re-load → the offline edit persisted to the store
|
||||
formOffline.Load();
|
||||
Assert.Equal("Changed offline", formOffline.Title);
|
||||
|
||||
// --- Live path (isLive = true): pushes to API ---
|
||||
var formLive = new LiveBroadcastFormViewModel(
|
||||
() => new LayoutStore(tempDb),
|
||||
() => service2,
|
||||
() => broadcastId,
|
||||
() => true);
|
||||
|
||||
formLive.Load();
|
||||
formLive.IsDrawerOpen = true;
|
||||
|
||||
// No edits → "No changes to update", stays open
|
||||
stub2.Request = null;
|
||||
formLive.UpdateBroadcastCommand.Execute(null);
|
||||
Assert.Null(stub2.Request);
|
||||
Assert.Equal("No changes to update", formLive.UpdateError);
|
||||
Assert.True(formLive.IsDrawerOpen);
|
||||
|
||||
// Edit Title → HTTP PUT fires, drawer closes
|
||||
stub2.Request = null;
|
||||
formLive.Title = "Live update";
|
||||
formLive.UpdateBroadcastCommand.Execute(null);
|
||||
Assert.NotNull(stub2.Request);
|
||||
Assert.Equal(HttpMethod.Put, stub2.Request!.Method);
|
||||
Assert.Null(formLive.UpdateError);
|
||||
Assert.False(formLive.IsDrawerOpen);
|
||||
|
||||
// Re-seed snapshot via Load, then edit again → second upload fires
|
||||
stub2.Request = null;
|
||||
formLive.Load();
|
||||
formLive.Description = "Live desc";
|
||||
formLive.UpdateBroadcastCommand.Execute(null);
|
||||
Assert.NotNull(stub2.Request);
|
||||
Assert.Null(formLive.UpdateError);
|
||||
Assert.False(formLive.IsDrawerOpen);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user