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 obj, T queryInfo, Func, IEnumerable> 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 result; result = parameters != null ? await _databaseContext.QueryAsync(query, typeof(T).Name, parameters) : await _databaseContext.QueryAsync(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 queryInfo) where T : class => SnowflakeTestCases.Query(queryInfo); } }