using MBN_STOCK_WEBVIEW.Playout.Safety;

namespace MBN_STOCK_WEBVIEW.Playout.Tests;

public sealed class LiveAuthorizationTests
{
    [Theory]
    [InlineData(null, false)]
    [InlineData("I_AUTHORIZE_LIVE_PROGRAM_OUTPUT_FOR_THIS_LAUNCH ", false)]
    [InlineData("i_authorize_live_program_output_for_this_launch", false)]
    [InlineData("wrong", false)]
    [InlineData(
        PlayoutOptionsLoader.RequiredLiveAuthorizationValue,
        true)]
    public void EnvironmentAuthorization_RequiresExactPerLaunchValue(
        string? value,
        bool expected)
    {
        using var environment = new EnvironmentScope()
            .Set(PlayoutOptionsLoader.LiveAuthorizationEnvironmentVariable, value);

        var authorization = new EnvironmentLiveAuthorization();

        Assert.Equal(expected, authorization.IsAuthorizedForThisLaunch);
    }

    [Fact]
    public void EnvironmentAuthorization_IsCapturedOnceAndCannotBeArmedAfterConstruction()
    {
        using var environment = new EnvironmentScope()
            .Set(PlayoutOptionsLoader.LiveAuthorizationEnvironmentVariable, null);
        var authorization = new EnvironmentLiveAuthorization();

        environment.Set(
            PlayoutOptionsLoader.LiveAuthorizationEnvironmentVariable,
            PlayoutOptionsLoader.RequiredLiveAuthorizationValue);

        Assert.False(authorization.IsAuthorizedForThisLaunch);
    }
}
