2022-06-30 01:46:41 +02:00
|
|
|
|
using Xunit;
|
2021-12-22 19:27:52 +01:00
|
|
|
|
|
2022-08-29 22:06:55 +02:00
|
|
|
|
namespace Bit.Test.Common.AutoFixture.Attributes;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Used for requiring certain environment variables exist at the time. Mostly used for more edge unit tests that shouldn't
|
|
|
|
|
/// be run during CI builds or should only be ran in CI builds when pieces of information are available.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class RequiredEnvironmentTheoryAttribute : TheoryAttribute
|
2021-12-22 19:27:52 +01:00
|
|
|
|
{
|
2022-08-29 22:06:55 +02:00
|
|
|
|
private readonly string[] _environmentVariableNames;
|
|
|
|
|
|
|
|
|
|
public RequiredEnvironmentTheoryAttribute(params string[] environmentVariableNames)
|
2021-12-22 19:27:52 +01:00
|
|
|
|
{
|
2022-08-29 22:06:55 +02:00
|
|
|
|
_environmentVariableNames = environmentVariableNames;
|
2021-12-22 19:27:52 +01:00
|
|
|
|
|
2022-08-29 22:06:55 +02:00
|
|
|
|
if (!HasRequiredEnvironmentVariables())
|
2021-12-22 19:27:52 +01:00
|
|
|
|
{
|
2022-08-29 22:06:55 +02:00
|
|
|
|
Skip = $"Missing one or more required environment variables. ({string.Join(", ", _environmentVariableNames)})";
|
2021-12-22 19:27:52 +01:00
|
|
|
|
}
|
2022-08-29 22:06:55 +02:00
|
|
|
|
}
|
2021-12-22 19:27:52 +01:00
|
|
|
|
|
2022-08-29 22:06:55 +02:00
|
|
|
|
private bool HasRequiredEnvironmentVariables()
|
|
|
|
|
{
|
|
|
|
|
foreach (var env in _environmentVariableNames)
|
2021-12-22 19:27:52 +01:00
|
|
|
|
{
|
2022-08-29 22:06:55 +02:00
|
|
|
|
var value = Environment.GetEnvironmentVariable(env);
|
2022-08-29 21:53:48 +02:00
|
|
|
|
|
2022-08-29 22:06:55 +02:00
|
|
|
|
if (value == null)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
2021-12-22 19:27:52 +01:00
|
|
|
|
}
|
2022-08-29 21:53:48 +02:00
|
|
|
|
}
|
2022-08-29 22:06:55 +02:00
|
|
|
|
|
|
|
|
|
return true;
|
2021-12-22 19:27:52 +01:00
|
|
|
|
}
|
|
|
|
|
}
|