using System; using System.IO; using Xunit; using ytLive.ViewModels; namespace ytLive.Tests; /// /// The top bar's one decision: [ Build Scenes ][ Record / Go Live ]. Build Scenes ships /// highlighted, and it is edit mode — the old EDIT toggle is gone, so "can I edit?" and "which /// world am I in?" cannot disagree. /// [Collection("MainViewModelLayoutPath")] public class TopBarWorldTests { [Fact] public void The_output_stage_belongs_to_the_output_world_and_holds_one_output_at_a_time() { var db = Path.Combine(Path.GetTempPath(), $"llamacasty-outputstage-{Guid.NewGuid():N}.db"); MainViewModel.LayoutPathOverride = db; try { var vm = new MainViewModel(); // Nothing to arm while building scenes. Assert.False(vm.ShowOutputStage); vm.EnterOutputWorldCommand.Execute(null); Assert.True(vm.IsOutputWorld); Assert.True(vm.IsOffline); Assert.False(vm.IsRecording); Assert.True(vm.ShowOutputStage); // Local MP4 is the default output; the pair is one axis, so arming either drops the other. Assert.True(vm.RecordPillOn); Assert.False(vm.OnAirPillOn); vm.OnAirPillOn = true; Assert.True(vm.OnAirPillOn); Assert.False(vm.RecordPillOn); vm.RecordPillOn = true; Assert.False(vm.OnAirPillOn); // The action follows the output: one button for MP4, two for YouTube (test + real). Assert.True(vm.ShowStartRecordingAction); Assert.False(vm.ShowYouTubeStartActions); vm.OnAirPillOn = true; Assert.False(vm.ShowStartRecordingAction); Assert.True(vm.ShowYouTubeStartActions); // Neither action exists while building scenes. vm.EnterBuildWorldCommand.Execute(null); Assert.False(vm.ShowStartRecordingAction); Assert.False(vm.ShowYouTubeStartActions); } finally { MainViewModel.LayoutPathOverride = null; try { File.Delete(db); } catch (IOException) { } } } [Fact] public void Build_scenes_is_the_default_world_and_is_the_only_place_editing_lives() { var db = Path.Combine(Path.GetTempPath(), $"llamacasty-world-{Guid.NewGuid():N}.db"); MainViewModel.LayoutPathOverride = db; try { var vm = new MainViewModel(); // Launch state: Build Scenes highlighted, editing on. Assert.Equal(BarWorld.Build, vm.BarWorld); Assert.True(vm.IsBuildWorld); Assert.False(vm.IsOutputWorld); Assert.True(vm.IsEditMode); // Record / Go Live leaves edit mode — the output surface has nothing to drag. vm.EnterOutputWorldCommand.Execute(null); Assert.Equal(BarWorld.Output, vm.BarWorld); Assert.True(vm.IsOutputWorld); Assert.False(vm.IsBuildWorld); Assert.False(vm.IsEditMode); // Clicking the highlighted half is not a no-op: it re-enters that world, which is how a // creator takes editing back during a session. vm.EnterBuildWorldCommand.Execute(null); Assert.True(vm.IsBuildWorld); Assert.True(vm.IsEditMode); // …and re-entering the world already in force still re-asserts its edit state. vm.EditingActive = false; vm.EnterBuildWorldCommand.Execute(null); Assert.True(vm.IsEditMode); } finally { MainViewModel.LayoutPathOverride = null; try { File.Delete(db); } catch (IOException) { } } } }