public void TryRetrieveState_ReturnsStateWhenItExists()
    {
        // Arrange
        var applicationState = new PersistentComponentState(new Dictionary <string, byte[]>(), new List <Func <Task> >());
        var existingState    = new Dictionary <string, byte[]>
        {
            ["MyState"] = JsonSerializer.SerializeToUtf8Bytes(new byte[] { 1, 2, 3, 4 })
        };

        // Act
        applicationState.InitializeExistingState(existingState);

        // Assert
        Assert.True(applicationState.TryTakeFromJson <byte[]>("MyState", out var existing));
        Assert.Equal(new byte[] { 1, 2, 3, 4 }, existing);
        Assert.False(applicationState.TryTakeFromJson <byte[]>("MyState", out var gone));
    }
    public void TryRetrieveFromJson_NullValue()
    {
        // Arrange
        var serialized    = JsonSerializer.SerializeToUtf8Bytes <byte[]>(null);
        var existingState = new Dictionary <string, byte[]>()
        {
            ["MyState"] = serialized
        };
        var applicationState = new PersistentComponentState(new Dictionary <string, byte[]>(), new List <Func <Task> >());

        applicationState.InitializeExistingState(existingState);

        // Act
        Assert.True(applicationState.TryTakeFromJson <byte[]>("MyState", out var stored));

        // Assert
        Assert.Null(stored);
        Assert.False(applicationState.TryTakeFromJson <byte[]>("MyState", out _));
    }
    public void TryRetrieveFromJson_DeserializesTheDataFromJson()
    {
        // Arrange
        var myState       = new byte[] { 1, 2, 3, 4 };
        var serialized    = JsonSerializer.SerializeToUtf8Bytes(myState);
        var existingState = new Dictionary <string, byte[]>()
        {
            ["MyState"] = serialized
        };
        var applicationState = new PersistentComponentState(new Dictionary <string, byte[]>(), new List <Func <Task> >());

        applicationState.InitializeExistingState(existingState);

        // Act
        Assert.True(applicationState.TryTakeFromJson <byte[]>("MyState", out var stored));

        // Assert
        Assert.Equal(myState, stored);
        Assert.False(applicationState.TryTakeFromJson <byte[]>("MyState", out _));
    }
Пример #4
0
    public async Task <T?> GetValue <T>(string key, Func <Task <T?> > factory)
    {
        if (_applicationState.TryTakeFromJson(key, out T? value))
        {
            return(value);
        }
        var result = await factory();

        Persist(key, result);
        return(result);
    }