Skip to content

Commit

Permalink
Merge pull request #24 from OlegKleyman/allow_mutation_of_base_queryable
Browse files Browse the repository at this point in the history
return enumerable lazily to allow for mutation of base enumerable
  • Loading branch information
romantitov authored Dec 20, 2019
2 parents e78b19b + e4c0b55 commit 2b5b460
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ private static void ConfigureQueryableCalls<TEntity>(
A.CallTo(() => mock.Provider).Returns(queryProvider);
A.CallTo(() => mock.Expression).Returns(data?.Expression);
A.CallTo(() => mock.ElementType).Returns(data?.ElementType);
A.CallTo(() => mock.GetEnumerator()).Returns(data?.GetEnumerator());
A.CallTo(() => mock.GetEnumerator()).ReturnsLazily(() => data?.GetEnumerator());
}

private static void ConfigureAsyncEnumerableCalls<TEntity>(
Expand Down
2 changes: 1 addition & 1 deletion src/MockQueryable/MockQueryable.Moq/MoqExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ private static void ConfigureQueryableCalls<TEntity>(
mock.Setup(m => m.Provider).Returns(queryProvider);
mock.Setup(m => m.Expression).Returns(data?.Expression);
mock.Setup(m => m.ElementType).Returns(data?.ElementType);
mock.Setup(m => m.GetEnumerator()).Returns(data?.GetEnumerator());
mock.Setup(m => m.GetEnumerator()).Returns(() => data?.GetEnumerator());
}

private static void ConfigureAsyncEnumerableCalls<TEntity>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ private static void ConfigureQueryableCalls<TEntity>(
mock.Provider.Returns(queryProvider);
mock.Expression.Returns(data?.Expression);
mock.ElementType.Returns(data?.ElementType);
mock.GetEnumerator().Returns(data?.GetEnumerator());
mock.GetEnumerator().Returns(info => data?.GetEnumerator());
}

private static void ConfigureAsyncEnumerableCalls<TEntity>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using AutoMapper;
using FakeItEasy;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using MockQueryable.FakeItEasy;
using Moq;
using NUnit.Framework;
Expand Down Expand Up @@ -152,11 +154,23 @@ public void DbSetCreateUserIfNotExist(string firstName, string lastName, DateTim
public async Task DbSetCreateUser(string firstName, string lastName, DateTime dateOfBirth)
{
//arrange
var mock = new List<UserEntity>().AsQueryable().BuildMockDbSet();
var userEntities = new List<UserEntity>();
var mock = userEntities.AsQueryable().BuildMockDbSet();
A.CallTo(() => mock.AddAsync(A<UserEntity>._, A<CancellationToken>._))
.ReturnsLazily(call =>
{
userEntities.Add((UserEntity) call.Arguments[0]);
return default;
});
var userRepository = new TestDbSetRepository(mock);
var service = new MyService(userRepository);
//act
await service.CreateUserIfNotExist(firstName, lastName, dateOfBirth);
// assert
var entity = mock.Single();
Assert.AreEqual(firstName, entity.FirstName);
Assert.AreEqual(lastName, entity.LastName);
Assert.AreEqual(dateOfBirth, entity.DateOfBirth);
}

[TestCase("01/20/2012", "06/20/2018", 5)]
Expand Down
29 changes: 19 additions & 10 deletions src/MockQueryable/MockQueryable.Sample/MyServiceMoqTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MockQueryable.Moq;
using Moq;
Expand Down Expand Up @@ -147,16 +148,24 @@ public void DbSetCreateUserIfNotExist(string firstName, string lastName, DateTim

}

[TestCase("AnyFirstName", "ExistLastName", "01/20/2012")]
public async Task DbSetCreateUser(string firstName, string lastName, DateTime dateOfBirth)
{
//arrange
var mock = new List<UserEntity>().AsQueryable().BuildMockDbSet();
var userRepository = new TestDbSetRepository(mock.Object);
var service = new MyService(userRepository);
//act
await service.CreateUserIfNotExist(firstName, lastName, dateOfBirth);
}
[TestCase("AnyFirstName", "ExistLastName", "01/20/2012")]
public async Task DbSetCreateUser(string firstName, string lastName, DateTime dateOfBirth)
{
//arrange
var userEntities = new List<UserEntity>();
var mock = userEntities.AsQueryable().BuildMockDbSet();
mock.Setup(set => set.AddAsync(It.IsAny<UserEntity>(), It.IsAny<CancellationToken>()))
.Callback((UserEntity entity, CancellationToken _) => userEntities.Add(entity));
var userRepository = new TestDbSetRepository(mock.Object);
var service = new MyService(userRepository);
//act
await service.CreateUserIfNotExist(firstName, lastName, dateOfBirth);
// assert
var entity = mock.Object.Single();
Assert.AreEqual(firstName, entity.FirstName);
Assert.AreEqual(lastName, entity.LastName);
Assert.AreEqual(dateOfBirth, entity.DateOfBirth);
}

[TestCase("01/20/2012", "06/20/2018", 5)]
[TestCase("01/20/2012", "06/20/2012", 4)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,11 +147,20 @@ public void DbSetCreateUserIfNotExist(string firstName, string lastName, DateTim
public async Task DbSetCreateUser(string firstName, string lastName, DateTime dateOfBirth)
{
//arrange
var mock = new List<UserEntity>().AsQueryable().BuildMockDbSet();
var userEntities = new List<UserEntity>();
var mock = userEntities.AsQueryable().BuildMockDbSet();
mock.AddAsync(Arg.Any<UserEntity>())
.Returns(info => null)
.AndDoes(info => userEntities.Add(info.Arg<UserEntity>()));
var userRepository = new TestDbSetRepository(mock);
var service = new MyService(userRepository);
//act
await service.CreateUserIfNotExist(firstName, lastName, dateOfBirth);
// assert
var entity = mock.Single();
Assert.AreEqual(firstName, entity.FirstName);
Assert.AreEqual(lastName, entity.LastName);
Assert.AreEqual(dateOfBirth, entity.DateOfBirth);
}

[TestCase("01/20/2012", "06/20/2018", 5)]
Expand Down

0 comments on commit 2b5b460

Please sign in to comment.