public MockDbSet()
 {
     _data            = new ObservableCollection <TEntity>();
     _query           = _data.AsQueryable();
     _queryProvier    = new MockDbSetAsyncQueryProvider <TEntity>(_query.Provider);
     _asyncEnumerator = new MockDbSetAsyncEnumerator <TEntity>(_data.GetEnumerator());
 }
        public void Ctor_WhenEnumeratorPassedIn_MockAsyncEnumeratorCreated()
        {
            // Arrange
            var mockEnumerator = Substitute.For <IEnumerator <HeroEntity> >();
            // Act
            var asyncEnumerator = new MockDbSetAsyncEnumerator <HeroEntity>(mockEnumerator);

            // Assert
            Assert.IsNotNull(asyncEnumerator);
        }
        internal MockDbSetAsyncEnumerable(Expression expression)
            : base(expression)
        {
            if (expression == null)
            {
                throw new System.ArgumentNullException(nameof(expression));
            }

            _asyncQueryProvider = new MockDbSetAsyncQueryProvider <TEntity>(this);
            _asynEnumerator     = new MockDbSetAsyncEnumerator <TEntity>(this.AsEnumerable().GetEnumerator());
        }
        public async Task MoveNext_WhenEndOfEnumerator_ReturnsFalseIfMoved()
        {
            // Arrange
            var heroes     = new List <HeroEntity> {
            };
            var enumerator = new MockDbSetAsyncEnumerator <HeroEntity>(heroes.GetEnumerator()) as IAsyncEnumerator <HeroEntity>;

            // Act
            var result = await enumerator.MoveNext(CancellationToken.None);

            // Assert
            Assert.IsFalse(result);
        }
        public void Dispose_WhenDisposablePatternUsed_InnerEnumeratorDisposeCalled()
        {
            // Arrange

            var mockIAsyncEnumerator = Substitute.For <IEnumerator <HeroEntity> >();

            // Act
            using (var enumerator = new MockDbSetAsyncEnumerator <HeroEntity>(mockIAsyncEnumerator) as IAsyncEnumerator <HeroEntity>)
            { }

            // Assert
            mockIAsyncEnumerator.Received(1).Dispose();
        }
        public async Task Current_WhenCalled_ReturnsItem()
        {
            // Arrange
            var heroes     = HeroBuilder.CreateAListOfHeros();
            var enumerator = new MockDbSetAsyncEnumerator <HeroEntity>(heroes.GetEnumerator()) as IAsyncEnumerator <HeroEntity>;

            // Act
            while (await enumerator.MoveNext(CancellationToken.None))
            {
                var current = enumerator.Current;
                // Assert
                Assert.IsTrue(heroes.Any(h => h == current));
            }
        }
        public async Task MoveNext_WhenItemInEnumerator_ReturnsTrueIfMoved()
        {
            // Arrange
            var heroes = new List <HeroEntity> {
                new HeroEntity {
                    Id = 21, Name = "Nick Fury"
                }
            };
            var enumerator = new MockDbSetAsyncEnumerator <HeroEntity>(heroes.GetEnumerator()) as IAsyncEnumerator <HeroEntity>;

            // Act
            var result = await enumerator.MoveNext(CancellationToken.None);

            // Assert
            Assert.IsTrue(result);
        }
        public async Task MoveNext_WhenCalled_ReturnsFalseIfAtEnd()
        {
            // Arrange
            var heroes     = HeroBuilder.CreateAListOfHeros();
            var enumerator = new MockDbSetAsyncEnumerator <HeroEntity>(heroes.GetEnumerator()) as IAsyncEnumerator <HeroEntity>;

            var count = 0;

            // Act
            while (await enumerator.MoveNext(CancellationToken.None))
            {
                count++;
            }

            // Assert
            Assert.AreEqual(heroes.Count(), count);
        }