Update Broadcast button: diff before push, offline=local only, live=API; Go Live empty-field prompt

This commit is contained in:
2026-08-25 17:25:25 -07:00
parent add024a68d
commit 89ab83be2e
4 changed files with 123 additions and 7 deletions
+76
View File
@@ -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
{