feat(ui): show YouTube-confirmed live state in top bar
Normal ON-AIR stays red until YouTube reports lifeCycleStatus=live, then turns green; TEST stays gold and stop restores the idle color. Status-color reference: https://www.carbondesignsystem.com/building-blocks/core/patterns/status-indicators
This commit is contained in:
@@ -1,22 +1,21 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using Xunit;
|
||||
using ytLive.Helpers;
|
||||
using ytLive.Models;
|
||||
using ytLive.ViewModels;
|
||||
|
||||
namespace ytLive.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// The ON-AIR sign (right of REC in the top bar): gray offline, red when
|
||||
/// streaming public, green when streaming private. Driven through the real
|
||||
/// MainViewModel so StreamStatus/StreamVisibility notification wiring is
|
||||
/// exercised, not just the computed property.
|
||||
/// The ON-AIR sign and menu-bar color follow the real MainViewModel state,
|
||||
/// including the YouTube lifecycle confirmation before the bar turns green.
|
||||
/// </summary>
|
||||
[Collection("RealApp")]
|
||||
public sealed class OnAirSignTests
|
||||
{
|
||||
[Fact]
|
||||
public void OnAirBrush_Follows_Offline_Public_And_Private()
|
||||
public void OnAirBrush_And_TopBarBackground_Follow_YouTube_Live_State()
|
||||
{
|
||||
_app.Run(Run);
|
||||
}
|
||||
@@ -38,6 +37,7 @@ public sealed class OnAirSignTests
|
||||
|
||||
Assert.Equal(StreamStatus.Offline, vm.StreamStatus);
|
||||
Assert.Equal("#5b6478", vm.OnAirBrush);
|
||||
var idleBackground = vm.TopBarBackground;
|
||||
|
||||
var raised = 0;
|
||||
vm.PropertyChanged += (_, e) => { if (e.PropertyName == nameof(MainViewModel.OnAirBrush)) raised++; };
|
||||
@@ -47,11 +47,28 @@ public sealed class OnAirSignTests
|
||||
|
||||
vm.StreamStatus = StreamStatus.Streaming;
|
||||
Assert.Equal("#ff5451", vm.OnAirBrush);
|
||||
Assert.Equal(ThemeBrush.Hex("Brush.Primary"), vm.TopBarBackground);
|
||||
|
||||
vm.ApplyBroadcastLifecycleStatus("liveStarting");
|
||||
Assert.Equal(ThemeBrush.Hex("Brush.Primary"), vm.TopBarBackground);
|
||||
|
||||
vm.StreamVisibility = "Private";
|
||||
Assert.Equal("#22c55e", vm.OnAirBrush);
|
||||
|
||||
Assert.Equal(3, raised);
|
||||
vm.ApplyBroadcastLifecycleStatus("live");
|
||||
Assert.Equal(ThemeBrush.Hex("Brush.Positive"), vm.TopBarBackground);
|
||||
|
||||
vm.StreamStatus = StreamStatus.Offline;
|
||||
Assert.Equal(idleBackground, vm.TopBarBackground);
|
||||
|
||||
vm.IsTestStream = true;
|
||||
vm.StreamStatus = StreamStatus.Streaming;
|
||||
Assert.Equal(ThemeBrush.Hex("Brush.TestContainer"), vm.TopBarBackground);
|
||||
vm.ApplyBroadcastLifecycleStatus("live");
|
||||
Assert.Equal(ThemeBrush.Hex("Brush.TestContainer"), vm.TopBarBackground);
|
||||
vm.StreamStatus = StreamStatus.Offline;
|
||||
Assert.Equal(idleBackground, vm.TopBarBackground);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user