Files
continuousimprovement/tests/Strata.DecisionSupport.Biz.Test.Integration/IntegrationTests/TestSnowflakeQueries.cs
T

56 lines
2.4 KiB
C#

using Snowflake.Data.Client;
using Strata.DecisionSupport.Biz.Parameters;
using Strata.DecisionSupport.Biz.Test.Unit;
using System.Diagnostics.CodeAnalysis;
namespace Strata.DecisionSupport.Biz.Test.Integration.IntegrationTests
{
[ExcludeFromCodeCoverage]
[TestFixture, Category("Integration"), Category("DSS")]
public class TestSnowflakeQueries : IntegrationTestBase
{
[TestCaseSource(typeof(SnowflakeTestCases), nameof(SnowflakeTestCases.TestCases))]
public async Task VerifyQuery<TI, T>(TI obj, T queryInfo, Func<IEnumerable<TI>, IEnumerable<TI>> orderby) where TI : class where T : class
{
var query = Query(queryInfo);
var lineReader = query.LineReader();
await Verifier.Verify(lineReader, verifySettings)
.UseDirectory("snapshotQueries")
.UseFileName(TestContext.CurrentContext.TestName());
var parameters = queryInfo is IWithParameters hasParameters ? hasParameters.Parameters() : null;
if (string.IsNullOrEmpty(query)) { return; }
try
{
IEnumerable<TI> result;
result = parameters != null
? await _databaseContext.QueryAsync<TI>(query, typeof(T).Name, parameters)
: await _databaseContext.QueryAsync<TI>(query, typeof(T).Name);
if (orderby != null)
{
result = orderby(result);
}
await Verify(result, verifySettings)
.UseDirectory("snapshotResults")
.UseFileName(TestContext.CurrentContext.TestName());
}
catch (SnowflakeDbException dbex)
{
var result = dbex.Message + Environment.NewLine + "".PadLeft(40, '-') + Environment.NewLine + lineReader;
await Verifier.Verify(query, verifySettings)
.UseDirectory("errorQueries")
.UseFileName(TestContext.CurrentContext.TestName());
await Verifier.Verify(result, verifyErrorSettings)
.UseFileName(TestContext.CurrentContext.TestName());
}
catch (Exception ex)
{
throw;
}
}
protected override string Query<T>(T queryInfo) where T : class
=> SnowflakeTestCases.Query(queryInfo);
}
}