Skip to content

Commit be863d0

Browse files
committed
Cleanups
1 parent f159a49 commit be863d0

File tree

2 files changed

+159
-0
lines changed

2 files changed

+159
-0
lines changed

src/Components/Components/test/PersistentState/ComponentStatePersistenceManagerTest.cs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,60 @@ public async Task RestoreStateAsync_ValidatesRegisteredUpdateCallbacksAreInvoked
398398
Assert.True(callbackInvoked);
399399
}
400400

401+
[Theory]
402+
[MemberData(nameof(RestoreContexts))]
403+
public async Task RestoreStateAsync_RestoresServicesForDifferentContexts(RestoreContext context)
404+
{
405+
// Arrange
406+
var componentRenderMode = new TestRenderMode();
407+
var (serviceProvider, persistenceManager) = CreatePersistenceManagerWithService(componentRenderMode);
408+
409+
var service = serviceProvider.GetRequiredService<TestPersistentService>();
410+
service.TestProperty = "Test Value";
411+
412+
var store = new TestStore([]);
413+
await persistenceManager.RestoreStateAsync(store, RestoreContext.InitialValue);
414+
await persistenceManager.PersistStateAsync(store, new TestRenderer());
415+
416+
// Act - Create new service provider and persistence manager
417+
var (newServiceProvider, newPersistenceManager) = CreatePersistenceManagerWithService(componentRenderMode);
418+
419+
// Restore with the specified context
420+
await newPersistenceManager.RestoreStateAsync(store, context);
421+
422+
// Assert
423+
var restoredService = newServiceProvider.GetRequiredService<TestPersistentService>();
424+
Assert.Equal("Test Value", restoredService.TestProperty);
425+
426+
static (IServiceProvider serviceProvider, ComponentStatePersistenceManager persistenceManager) CreatePersistenceManagerWithService(IComponentRenderMode renderMode)
427+
{
428+
var serviceProvider = new ServiceCollection()
429+
.AddScoped<TestPersistentService>()
430+
.AddPersistentService<TestPersistentService>(renderMode)
431+
.BuildServiceProvider();
432+
433+
var persistenceManager = new ComponentStatePersistenceManager(
434+
NullLogger<ComponentStatePersistenceManager>.Instance,
435+
serviceProvider);
436+
persistenceManager.SetPlatformRenderMode(renderMode);
437+
438+
return (serviceProvider, persistenceManager);
439+
}
440+
}
441+
442+
public static IEnumerable<object[]> RestoreContexts()
443+
{
444+
yield return new object[] { RestoreContext.InitialValue };
445+
yield return new object[] { RestoreContext.ValueUpdate };
446+
yield return new object[] { RestoreContext.LastSnapshot };
447+
}
448+
449+
private class TestPersistentService
450+
{
451+
[PersistentState(AllowUpdates = true)]
452+
public string TestProperty { get; set; } = string.Empty;
453+
}
454+
401455
private class TestRenderer : Renderer
402456
{
403457
public TestRenderer() : base(new ServiceCollection().BuildServiceProvider(), NullLoggerFactory.Instance)
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
namespace Microsoft.AspNetCore.Components;
5+
6+
public class RestoreContextTest
7+
{
8+
[Theory]
9+
[InlineData(RestoreBehavior.Default)]
10+
[InlineData(RestoreBehavior.SkipLastSnapshot)]
11+
public void ShouldRestore_InitialValueContext_WithDefaultOrSkipLastSnapshot(RestoreBehavior behavior)
12+
{
13+
var options = new RestoreOptions { RestoreBehavior = behavior };
14+
15+
var result = RestoreContext.InitialValue.ShouldRestore(options);
16+
17+
Assert.True(result);
18+
}
19+
20+
[Fact]
21+
public void ShouldRestore_InitialValueContext_WithSkipInitialValue()
22+
{
23+
var options = new RestoreOptions { RestoreBehavior = RestoreBehavior.SkipInitialValue };
24+
25+
var result = RestoreContext.InitialValue.ShouldRestore(options);
26+
27+
Assert.False(result);
28+
}
29+
30+
[Theory]
31+
[InlineData(RestoreBehavior.Default, true, true)]
32+
[InlineData(RestoreBehavior.Default, false, true)]
33+
[InlineData(RestoreBehavior.SkipInitialValue, true, false)]
34+
[InlineData(RestoreBehavior.SkipInitialValue, false, false)]
35+
public void ShouldRestore_InitialValueContext_ShouldRestore_IsIndependentOfAllowUpdates(RestoreBehavior behavior, bool allowUpdates, bool expectedResult)
36+
{
37+
var options = new RestoreOptions { RestoreBehavior = behavior, AllowUpdates = allowUpdates };
38+
39+
var result = RestoreContext.InitialValue.ShouldRestore(options);
40+
41+
Assert.Equal(expectedResult, result);
42+
}
43+
44+
[Theory]
45+
[InlineData(RestoreBehavior.Default)]
46+
[InlineData(RestoreBehavior.SkipInitialValue)]
47+
public void ShouldRestore_LastSnapshotContext_WithDefaultOrSkipInitialValue(RestoreBehavior behavior)
48+
{
49+
var options = new RestoreOptions { RestoreBehavior = behavior };
50+
51+
var result = RestoreContext.LastSnapshot.ShouldRestore(options);
52+
53+
Assert.True(result);
54+
}
55+
56+
[Fact]
57+
public void ShouldRestore_LastSnapshotContext_WithSkipLastSnapshot()
58+
{
59+
var options = new RestoreOptions { RestoreBehavior = RestoreBehavior.SkipLastSnapshot };
60+
61+
var result = RestoreContext.LastSnapshot.ShouldRestore(options);
62+
63+
Assert.False(result);
64+
}
65+
66+
[Theory]
67+
[InlineData(RestoreBehavior.Default, true, true)]
68+
[InlineData(RestoreBehavior.Default, false, true)]
69+
[InlineData(RestoreBehavior.SkipLastSnapshot, true, false)]
70+
[InlineData(RestoreBehavior.SkipLastSnapshot, false, false)]
71+
public void ShouldRestore_LastSnapshotContext_ShouldRestore_IsIndependentOfAllowUpdates(RestoreBehavior behavior, bool allowUpdates, bool expectedResult)
72+
{
73+
var options = new RestoreOptions { RestoreBehavior = behavior, AllowUpdates = allowUpdates };
74+
75+
var result = RestoreContext.LastSnapshot.ShouldRestore(options);
76+
77+
Assert.Equal(expectedResult, result);
78+
}
79+
80+
[Theory]
81+
[InlineData(RestoreBehavior.Default)]
82+
[InlineData(RestoreBehavior.SkipInitialValue)]
83+
[InlineData(RestoreBehavior.SkipLastSnapshot)]
84+
public void ShouldRestore_ValueUpdateContext_WithoutAllowUpdates(RestoreBehavior behavior)
85+
{
86+
var options = new RestoreOptions { RestoreBehavior = behavior };
87+
88+
var result = RestoreContext.ValueUpdate.ShouldRestore(options);
89+
90+
Assert.False(result);
91+
}
92+
93+
[Theory]
94+
[InlineData(RestoreBehavior.Default)]
95+
[InlineData(RestoreBehavior.SkipInitialValue)]
96+
[InlineData(RestoreBehavior.SkipLastSnapshot)]
97+
public void ShouldRestore_ValueUpdateContext_WithAllowUpdates(RestoreBehavior behavior)
98+
{
99+
var options = new RestoreOptions { AllowUpdates = true, RestoreBehavior = behavior };
100+
101+
var result = RestoreContext.ValueUpdate.ShouldRestore(options);
102+
103+
Assert.True(result);
104+
}
105+
}

0 commit comments

Comments
 (0)