v1 task queue: add TASK 19-23 (transitions, hotkeys, media source, audio sync, studio mode)
- TASKS.md: added 5 new tasks for v1 feature completeness, execution order, updated backlog - MONETIZATION.md: added v1 feature completeness section (competitive gap analysis) - ai.md: added v1 task queue note in Current limitations/TODOs - HANDOFF.md: updated session state and next steps - ViewModels/SocialsDialogViewModel.cs: removed isPremium parameter (social slot locks) - ViewModels/MainViewModel.cs: removed isPremium argument from SocialsDialogViewModel constructor - ytLive.Tests/SocialsDialogViewModelTests.cs: updated 5 tests for unlocked slots
This commit is contained in:
@@ -77,7 +77,6 @@ public class SocialsDialogViewModelTests
|
||||
ISocialValidator? validator = null,
|
||||
SignInFake? signIn = null,
|
||||
YouTubeChannel? account = null,
|
||||
bool isPremium = false,
|
||||
SocialsConfig? current = null)
|
||||
{
|
||||
return new SocialsDialogViewModel(
|
||||
@@ -85,7 +84,6 @@ public class SocialsDialogViewModelTests
|
||||
signIn != null ? signIn.Next : () => Task.FromResult<YouTubeChannel?>(null),
|
||||
SignOut,
|
||||
account,
|
||||
isPremium,
|
||||
current);
|
||||
}
|
||||
|
||||
@@ -98,14 +96,14 @@ public class SocialsDialogViewModelTests
|
||||
var signIn = new SignInFake();
|
||||
var vm = Create(validator, signIn);
|
||||
|
||||
// Gate: signed out, freemium → row 0 is the sign-in prompt, rows 2-5 locked.
|
||||
// Gate: signed out → row 0 is the sign-in prompt, all slots available.
|
||||
Assert.True(vm.ShowSignInBanner);
|
||||
Assert.Equal(6, vm.Slots.Count);
|
||||
Assert.True(vm.Slots[0].IsSignIn);
|
||||
Assert.False(vm.Slots[0].IsLocked);
|
||||
Assert.False(vm.Slots[1].IsLocked);
|
||||
Assert.True(vm.Slots[2].IsLocked);
|
||||
Assert.True(vm.Slots[5].IsLocked);
|
||||
Assert.False(vm.Slots[2].IsLocked);
|
||||
Assert.False(vm.Slots[5].IsLocked);
|
||||
Assert.True(vm.CanSave);
|
||||
|
||||
// Row 1: add a validated X handle. Save is blocked while input is unvalidated.
|
||||
@@ -121,16 +119,15 @@ public class SocialsDialogViewModelTests
|
||||
Assert.False(vm.Slots[1].IsEditing);
|
||||
Assert.True(vm.CanSave);
|
||||
|
||||
// Rows 2-5 are locked on the free tier — starting an edit there is blocked.
|
||||
// Rows 2-5 are available — starting an edit there works.
|
||||
vm.StartEdit(2);
|
||||
Assert.False(vm.Slots[2].IsEditing);
|
||||
Assert.True(vm.Slots[2].IsLocked);
|
||||
Assert.True(vm.Slots[2].IsEditing);
|
||||
Assert.False(vm.Slots[2].IsLocked);
|
||||
|
||||
// Delete the X entry: the slot empties and unlocks nothing else.
|
||||
// Delete the X entry: the slot empties.
|
||||
await vm.DeleteSlotAsync(1);
|
||||
Assert.False(vm.Slots[1].IsFilled);
|
||||
Assert.False(vm.Slots[1].IsLocked);
|
||||
Assert.True(vm.Slots[2].IsLocked);
|
||||
|
||||
// Delete row 0 while signed out is a no-op.
|
||||
await vm.DeleteSlotAsync(0);
|
||||
@@ -195,16 +192,12 @@ public class SocialsDialogViewModelTests
|
||||
// ── Unit tests ──
|
||||
|
||||
[Fact]
|
||||
public void Freemium_LocksSlotsBeyondTwo_PremiumUnlocksAll()
|
||||
public void AllSlots_AlwaysUnlocked()
|
||||
{
|
||||
var free = Create();
|
||||
Assert.True(free.Slots[2].IsLocked);
|
||||
Assert.True(free.Slots[5].IsLocked);
|
||||
Assert.False(free.Slots[1].IsLocked);
|
||||
|
||||
var premium = Create(isPremium: true);
|
||||
Assert.All(premium.Slots, s => Assert.False(s.IsLocked));
|
||||
Assert.False(premium.Slots[5].IsLocked);
|
||||
var vm = Create();
|
||||
Assert.All(vm.Slots, s => Assert.False(s.IsLocked));
|
||||
Assert.False(vm.Slots[2].IsLocked);
|
||||
Assert.False(vm.Slots[5].IsLocked);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -268,7 +261,7 @@ public class SocialsDialogViewModelTests
|
||||
Assert.Equal("Fresh Channel", vm.Slots[0].Handle);
|
||||
Assert.Equal(SocialService.Twitch, vm.Slots[1].Service);
|
||||
Assert.Equal("oldstreamer", vm.Slots[1].Handle);
|
||||
Assert.True(vm.Slots[2].IsLocked);
|
||||
Assert.False(vm.Slots[2].IsLocked);
|
||||
|
||||
vm.SaveCommand.Execute(null);
|
||||
Assert.Equal(2, vm.CommittedEntries!.Count);
|
||||
|
||||
Reference in New Issue
Block a user