using System.Linq.Expressions; using Microsoft.EntityFrameworkCore.Query; namespace HopFrame.Core.Tests.Models; // A mock implementation for async query provider internal class TestAsyncQueryProvider : IAsyncQueryProvider { private readonly IQueryProvider _inner; internal TestAsyncQueryProvider(IQueryProvider inner) { _inner = inner; } public IQueryable CreateQuery(Expression expression) { return new TestAsyncEnumerable(expression); } public IQueryable CreateQuery(Expression expression) { return new TestAsyncEnumerable(expression); } public object Execute(Expression expression) { return _inner.Execute(expression); } public TResult Execute(Expression expression) { return _inner.Execute(expression); } public TResult ExecuteAsync(Expression expression, CancellationToken cancellationToken = new CancellationToken()) { return _inner.Execute(expression); } public IAsyncEnumerable ExecuteAsync(Expression expression) { return new TestAsyncEnumerable(expression); } } internal class TestAsyncEnumerable : EnumerableQuery, IAsyncEnumerable, IQueryable { public TestAsyncEnumerable(IEnumerable enumerable) : base(enumerable) { } public TestAsyncEnumerable(Expression expression) : base(expression) { } public IAsyncEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default) { return new TestAsyncEnumerator(this.AsEnumerable().GetEnumerator()); } IQueryProvider IQueryable.Provider => new TestAsyncQueryProvider(this); } internal class TestAsyncEnumerator : IAsyncEnumerator { private readonly IEnumerator _inner; public TestAsyncEnumerator(IEnumerator inner) { _inner = inner ?? throw new ArgumentNullException(nameof(inner)); } public T Current => _inner.Current; public ValueTask DisposeAsync() { _inner.Dispose(); return new ValueTask(); } public ValueTask MoveNextAsync() { return new ValueTask(_inner.MoveNext()); } } /*// A mock implementation for async query provider internal class TestAsyncQueryProvider : IAsyncQueryProvider { private readonly IQueryProvider _inner; internal TestAsyncQueryProvider(IQueryProvider inner) { _inner = inner; } public IQueryable CreateQuery(Expression expression) { return new TestAsyncEnumerable(expression); } public IQueryable CreateQuery(Expression expression) { return new TestAsyncEnumerable(expression); } public object? Execute(Expression expression) { return _inner.Execute(expression); } public TResult Execute(Expression expression) { return _inner.Execute(expression); } public TResult ExecuteAsync(Expression expression, CancellationToken cancellationToken) { return _inner.Execute(expression); } public IAsyncEnumerable ExecuteAsync(Expression expression) { return new TestAsyncEnumerable(expression); } } internal class TestAsyncEnumerable : EnumerableQuery, IAsyncEnumerable, IQueryable { public TestAsyncEnumerable(IEnumerable enumerable) : base(enumerable) { } public TestAsyncEnumerable(Expression expression) : base(expression) { } public IAsyncEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default) { return new TestAsyncEnumerator(this.AsEnumerable().GetEnumerator()); } IQueryProvider IQueryable.Provider => new TestAsyncQueryProvider(this); } internal class TestAsyncEnumerator(IEnumerator inner) : IAsyncEnumerator { private readonly IEnumerator _inner = inner ?? throw new ArgumentNullException(nameof(inner)); public T Current => _inner.Current; public ValueTask DisposeAsync() { _inner.Dispose(); return new ValueTask(); } public ValueTask MoveNextAsync() { return new ValueTask(_inner.MoveNext()); } }*/