using System; using System.IO; using Xunit; using ytLive.ViewModels; namespace ytLive.Tests; /// /// Editing during a session is the creator's call (ruling 2026-11-12: moving a layer or resizing a /// webcam mid-show is theirs to do). The setting decides whether go-live still flips EDIT off. /// [Collection("MainViewModelLayoutPath")] public class EditWhileLiveTests { private static MainViewModel NewVm(string db, out Action cleanup) { MainViewModel.LayoutPathOverride = db; cleanup = () => { MainViewModel.LayoutPathOverride = null; try { File.Delete(db); } catch (IOException) { } }; return new MainViewModel(); } [Fact] public void Editing_stays_available_during_a_session_unless_the_creator_locked_it() { var db = Path.Combine(Path.GetTempPath(), $"llamacasty-editlock-{Guid.NewGuid():N}.db"); var vm = NewVm(db, out var cleanup); try { Assert.False(vm.LockEditWhileLive); // unlocked ships as the default Assert.True(vm.IsEditMode); // Unlocked: a session neither takes EDIT away nor gives it back. vm.EditingActive = false; vm.ApplyEditLockForSession(starting: true); Assert.False(vm.EditingActive); vm.EditingActive = true; vm.ApplyEditLockForSession(starting: true); Assert.True(vm.EditingActive); // Locked: go-live turns EDIT off… vm.LockEditWhileLive = true; vm.ApplyEditLockForSession(starting: true); Assert.False(vm.EditingActive); Assert.False(vm.IsEditMode); // …and stopping restores it, but only because the lock took it away. vm.ApplyEditLockForSession(starting: false); Assert.True(vm.EditingActive); Assert.True(vm.IsEditMode); // The choice survives a restart: a second view model on the same profile reads it back. var reloaded = new MainViewModel(); Assert.True(reloaded.LockEditWhileLive); } finally { cleanup(); } } }