Beispiel #1
0
        /// <summary>
        ///     Sets up FromSqlRaw invocations containing a specified sql string and parameters to return a specified result.
        /// </summary>
        /// <typeparam name="T">The queryable source type.</typeparam>
        /// <param name="mockedQueryProvider">The mocked query provider.</param>
        /// <param name="sql">The FromSqlRaw sql string. Set up supports case insensitive partial matches.</param>
        /// <param name="parameters">The FromSqlRaw parameters. Set up supports case insensitive partial parameter sequence matching.</param>
        /// <param name="fromSqlResult">The sequence to return when FromSqlRaw is invoked.</param>
        /// <returns>The mocked query provider.</returns>
        public static IQueryProvider AddFromSqlRawResult <T>(this IQueryProvider mockedQueryProvider, string sql, IEnumerable <object> parameters, IEnumerable <T> fromSqlResult)
            where T : class
        {
            EnsureArgument.IsNotNull(mockedQueryProvider, nameof(mockedQueryProvider));
            EnsureArgument.IsNotNull(sql, nameof(sql));
            EnsureArgument.IsNotNull(parameters, nameof(parameters));
            EnsureArgument.IsNotNull(fromSqlResult, nameof(fromSqlResult));

            Logger.LogDebug("Setting up '{sql}'", sql);

            var createQueryResult = new AsyncEnumerable <T>(fromSqlResult);

            mockedQueryProvider.Configure()
            .CreateQuery <T>(Arg.Is <FromSqlQueryRootExpression>(fsqre => ProjectExpressionHelper.SqlAndParametersMatchFromSqlExpression(sql, parameters, fsqre)))
            .Returns(callInfo =>
            {
                ProjectExpressionHelper.ThrowIfExpressionIsNotSupported(callInfo.Arg <Expression>());

                var fsqre = (FromSqlQueryRootExpression)callInfo.Arg <Expression>();
                var parts = new List <string>();
                parts.Add("FromSql inputs:");
                parts.Add(ProjectExpressionHelper.StringifyFromSqlExpression(fsqre));
                Logger.LogDebug(string.Join(Environment.NewLine, parts));

                return(createQueryResult);
            });

            return(mockedQueryProvider);
        }