File: Utils\MockUserSecretsManager.cs
Web Access
Project: src\tests\Aspire.Hosting.TestUtilities\Aspire.Hosting.TestUtilities.csproj (Aspire.Hosting.TestUtilities)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#pragma warning disable ASPIREUSERSECRETS001
 
using System.Text.Json.Nodes;
using Microsoft.Extensions.Configuration;
 
namespace Aspire.Hosting.Tests.Utils;
 
internal sealed class MockUserSecretsManager : IUserSecretsManager
{
    private readonly bool _canSetSecret;
    private readonly bool _isAvailable;
 
    public MockUserSecretsManager(bool canSetSecret = true, bool? isAvailable = null)
    {
        _canSetSecret = canSetSecret;
        _isAvailable = isAvailable ?? canSetSecret;
    }
 
    public Dictionary<string, string> Secrets { get; } = new(StringComparer.OrdinalIgnoreCase);
 
    public bool IsAvailable => _isAvailable;
 
    public string FilePath => "/mock/path/secrets.json";
 
    public bool TrySetSecret(string name, string value)
    {
        // Simulate an environment where persistence is unavailable (e.g. user secrets are not
        // enabled): report failure without recording the value so callers exercise their
        // persistence-failure handling.
        if (!_canSetSecret)
        {
            return false;
        }
 
        Secrets[name] = value;
        return true;
    }
 
    public bool TryDeleteSecret(string name)
    {
        return Secrets.Remove(name);
    }
 
    public void GetOrSetSecret(IConfigurationManager configuration, string name, Func<string> valueGenerator)
    {
    }
 
    public Task SaveStateAsync(JsonObject state, CancellationToken cancellationToken = default)
    {
        return Task.CompletedTask;
    }
}