- Testing expression tree method via Moq not using expression logic
- public abstract class EFRepository<T> : IRepository<T> where T : BaseEFModel {
- public IUnitOfWork UnitOfWork { get; set; }
- private IDbSet<T> _objectset;
- private IDbSet<T> ObjectSet
- {
- get { return _objectset ?? (_objectset = UnitOfWork.Context.Set<T>()); }
- }
- public virtual IQueryable<T> WhereInternal(Expression<Func<T, bool>> expression)
- {
- return ObjectSet.Where(expression);
- } }
- public class DoNotSolicitRepo : EFRepository<DoNotSolicit>, IDoNotSolicitRepo {
- private readonly RestUnitOfWork worker;
- public DoNotSolicitRepo(RestUnitOfWork _worker)
- {
- worker = _worker;
- }
- public IList<DNSContract> SelectWithCriteria(DNS_Search search)
- {
- // create the where clause
- Expression<Func<DoNotSolicit, bool>> whereClause = c => (
- (String.IsNullOrEmpty(search.FirstName) || c.FirstName.StartsWith(search.FirstName)) &&
- (String.IsNullOrEmpty(search.LastName) || c.LastName.StartsWith(search.LastName)) &&
- (String.IsNullOrEmpty(search.Address1) || c.Address1.Contains(search.Address1)) &&
- (String.IsNullOrEmpty(search.Address2) || c.Address2.Contains(search.Address2)) &&
- (String.IsNullOrEmpty(search.City) || c.City.Contains(search.City)) &&
- (String.IsNullOrEmpty(search.State) || c.State.Equals(search.State)) &&
- (String.IsNullOrEmpty(search.Zip5) || c.Zip.Equals(search.Zip5)) &&
- (String.IsNullOrEmpty(search.Phone) || c.Phone.Equals(search.Phone)) &&
- (String.IsNullOrEmpty(search.Email) || c.Email.Equals(search.Email))
- );
- using (var scope = worker)
- {
- scope.Register(this);
- var resultList = WhereInternal(whereClause).ToList();
- Mapper.CreateMap<DoNotSolicit, DNSContract>()
- .ForMember(dest => dest.PartnerCode, opt => opt.Ignore())
- .ForMember(dest => dest.PartnerDescription, opt => opt.Ignore())
- .ForMember(dest => dest.DoNotSolicitReason, opt => opt.Ignore())
- .ForMember(dest => dest.SaveDate, opt => opt.Ignore())
- .ForMember(dest => dest.InsertDT, opt => opt.Ignore());
- var returnObj = Mapper.Map<IList<DoNotSolicit>, IList<DNSContract>>(resultList);
- return returnObj.FriendlySaveDates();
- }
- } }
- public abstract class BaseEFUnitFixture<T> where T : BaseEFModel {
- protected Mock<EFRepository<T>> mockedEFRepo = new Mock<EFRepository<T>>();
- public Mock<EFRepository<T>> MockedEFRepositiory()
- {
- var t = new List<T>();
- mockedEFRepo.Setup(x => x.AddInternal(It.IsAny<T>())).Callback((T e) => t.Add(e));
- mockedEFRepo.Setup(x => x.AddInternal(It.IsAny<List<T>>())).Callback((IList<T> le) => t.AddRange(le));
- mockedEFRepo.Setup(x => x.AllInternal()).Returns(t.AsQueryable());
- mockedEFRepo.Setup(x => x.WhereInternal(It.Is<Expression<Func<T, bool>>>(y => y != null))).Returns(t.AsQueryable());
- return mockedEFRepo;
- }
- [TestFixture] public class DNSRepoTest : BaseEFUnitFixture<DoNotSolicit> {
- private readonly List<DoNotSolicit> list = new List<DoNotSolicit>();
- private class Search
- {
- public string FirstName { get; set; }
- public string LastName { get; set; }
- public string Address1 { get; set; }
- public string Address2 { get; set; }
- public string City { get; set; }
- public string State { get; set; }
- public string Zip5 { get; set; }
- public string Phone { get; set; }
- public string Email { get; set; }
- }
- private Expression<Func<DoNotSolicit, bool>> SearchBuilder(Search search)
- {
- // same as repo logic
- Expression<Func<DoNotSolicit, bool>> whereClause = c => (
- (String.IsNullOrEmpty(search.FirstName) || c.FirstName.StartsWith(search.FirstName)) &&
- (String.IsNullOrEmpty(search.LastName) || c.LastName.StartsWith(search.LastName)) &&
- (String.IsNullOrEmpty(search.Address1) || c.Address1.Contains(search.Address1)) &&
- (String.IsNullOrEmpty(search.Address2) || c.Address2.Contains(search.Address2)) &&
- (String.IsNullOrEmpty(search.City) || c.City.Contains(search.City)) &&
- (String.IsNullOrEmpty(search.State) || c.State.Equals(search.State)) &&
- (String.IsNullOrEmpty(search.Zip5) || c.Zip.Equals(search.Zip5)) &&
- (String.IsNullOrEmpty(search.Phone) || c.Phone.Equals(search.Phone)) &&
- (String.IsNullOrEmpty(search.Email) || c.Email.Equals(search.Email))
- );
- return whereClause;
- }
- [TestFixtureSetUp]
- public void Init()
- {
- list.Add(new DoNotSolicit
- {
- DoNotSolicitID = 4,
- FirstName = "nunit",
- Origination = "testing"
- });
- mockedEFRepo = MockedEFRepositiory();
- mockedEFRepo.Object.AddInternal(list);
- }
- [Test]
- public void SelectWithCriteria_FirstNameMatch()
- {
- var clause = SearchBuilder(new Search{FirstName = "test"});
- var results = mockedEFRepo.Object.WhereInternal(clause).ToList();
- Assert.IsNotNull(results);
- Assert.IsTrue(results.Count < mockedEFRepo.Object.AllInternal().Count());
- Assert.IsTrue(results.Count > 0);
- } }