Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 8th, 2012  |  syntax: None  |  size: 4.96 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Testing expression tree method via Moq not using expression logic
  2. public abstract class EFRepository<T> : IRepository<T> where T : BaseEFModel {
  3.  
  4. public IUnitOfWork UnitOfWork { get; set; }
  5.  
  6. private IDbSet<T> _objectset;
  7. private IDbSet<T> ObjectSet
  8. {
  9.     get { return _objectset ?? (_objectset = UnitOfWork.Context.Set<T>()); }
  10. }
  11.  
  12. public virtual IQueryable<T> WhereInternal(Expression<Func<T, bool>> expression)
  13. {
  14.     return ObjectSet.Where(expression);
  15. } }
  16.        
  17. public class DoNotSolicitRepo : EFRepository<DoNotSolicit>, IDoNotSolicitRepo {
  18. private readonly RestUnitOfWork worker;
  19.  
  20. public DoNotSolicitRepo(RestUnitOfWork _worker)
  21. {
  22.     worker = _worker;
  23. }
  24.  
  25. public IList<DNSContract> SelectWithCriteria(DNS_Search search)
  26. {
  27.     // create the where clause
  28.     Expression<Func<DoNotSolicit, bool>> whereClause = c => (
  29.         (String.IsNullOrEmpty(search.FirstName) || c.FirstName.StartsWith(search.FirstName)) &&
  30.         (String.IsNullOrEmpty(search.LastName) || c.LastName.StartsWith(search.LastName)) &&
  31.         (String.IsNullOrEmpty(search.Address1) || c.Address1.Contains(search.Address1)) &&
  32.         (String.IsNullOrEmpty(search.Address2) || c.Address2.Contains(search.Address2)) &&
  33.         (String.IsNullOrEmpty(search.City) || c.City.Contains(search.City)) &&
  34.         (String.IsNullOrEmpty(search.State) || c.State.Equals(search.State)) &&
  35.         (String.IsNullOrEmpty(search.Zip5) || c.Zip.Equals(search.Zip5)) &&
  36.         (String.IsNullOrEmpty(search.Phone) || c.Phone.Equals(search.Phone)) &&
  37.         (String.IsNullOrEmpty(search.Email) || c.Email.Equals(search.Email))
  38.         );
  39.  
  40.     using (var scope = worker)
  41.     {
  42.         scope.Register(this);
  43.         var resultList = WhereInternal(whereClause).ToList();
  44.  
  45.         Mapper.CreateMap<DoNotSolicit, DNSContract>()
  46.            .ForMember(dest => dest.PartnerCode, opt => opt.Ignore())
  47.            .ForMember(dest => dest.PartnerDescription, opt => opt.Ignore())
  48.            .ForMember(dest => dest.DoNotSolicitReason, opt => opt.Ignore())
  49.            .ForMember(dest => dest.SaveDate, opt => opt.Ignore())
  50.            .ForMember(dest => dest.InsertDT, opt => opt.Ignore());
  51.  
  52.          var returnObj = Mapper.Map<IList<DoNotSolicit>, IList<DNSContract>>(resultList);
  53.  
  54.          return returnObj.FriendlySaveDates();
  55.     }
  56. } }
  57.        
  58. public abstract class BaseEFUnitFixture<T> where T : BaseEFModel {
  59. protected Mock<EFRepository<T>> mockedEFRepo = new Mock<EFRepository<T>>();
  60.  
  61. public Mock<EFRepository<T>> MockedEFRepositiory()
  62. {
  63.     var t = new List<T>();
  64.  
  65.     mockedEFRepo.Setup(x => x.AddInternal(It.IsAny<T>())).Callback((T e) => t.Add(e));
  66.     mockedEFRepo.Setup(x => x.AddInternal(It.IsAny<List<T>>())).Callback((IList<T> le) => t.AddRange(le));
  67.     mockedEFRepo.Setup(x => x.AllInternal()).Returns(t.AsQueryable());
  68.     mockedEFRepo.Setup(x => x.WhereInternal(It.Is<Expression<Func<T, bool>>>(y => y != null))).Returns(t.AsQueryable());
  69.  
  70.     return mockedEFRepo;
  71. }
  72.        
  73. [TestFixture] public class DNSRepoTest : BaseEFUnitFixture<DoNotSolicit> {
  74. private readonly List<DoNotSolicit> list = new List<DoNotSolicit>();
  75.  
  76. private class Search
  77. {
  78.     public string FirstName { get; set; }
  79.     public string LastName { get; set; }
  80.     public string Address1 { get; set; }
  81.     public string Address2 { get; set; }
  82.     public string City { get; set; }
  83.     public string State { get; set; }
  84.     public string Zip5 { get; set; }
  85.     public string Phone { get; set; }
  86.     public string Email { get; set; }
  87. }
  88.  
  89. private Expression<Func<DoNotSolicit, bool>> SearchBuilder(Search search)
  90. {
  91.     //  same as repo logic
  92.     Expression<Func<DoNotSolicit, bool>> whereClause = c => (
  93.        (String.IsNullOrEmpty(search.FirstName) || c.FirstName.StartsWith(search.FirstName)) &&
  94.        (String.IsNullOrEmpty(search.LastName) || c.LastName.StartsWith(search.LastName)) &&
  95.        (String.IsNullOrEmpty(search.Address1) || c.Address1.Contains(search.Address1)) &&
  96.        (String.IsNullOrEmpty(search.Address2) || c.Address2.Contains(search.Address2)) &&
  97.        (String.IsNullOrEmpty(search.City) || c.City.Contains(search.City)) &&
  98.        (String.IsNullOrEmpty(search.State) || c.State.Equals(search.State)) &&
  99.        (String.IsNullOrEmpty(search.Zip5) || c.Zip.Equals(search.Zip5)) &&
  100.        (String.IsNullOrEmpty(search.Phone) || c.Phone.Equals(search.Phone)) &&
  101.        (String.IsNullOrEmpty(search.Email) || c.Email.Equals(search.Email))
  102.        );
  103.  
  104.     return whereClause;
  105. }
  106.  
  107. [TestFixtureSetUp]
  108. public void Init()
  109. {
  110.     list.Add(new DoNotSolicit
  111.                  {
  112.                      DoNotSolicitID = 4,
  113.                      FirstName = "nunit",
  114.                      Origination = "testing"
  115.                  });
  116.  
  117.     mockedEFRepo = MockedEFRepositiory();
  118.     mockedEFRepo.Object.AddInternal(list);
  119. }
  120.  
  121. [Test]
  122. public void SelectWithCriteria_FirstNameMatch()
  123. {
  124.     var clause = SearchBuilder(new Search{FirstName = "test"});
  125.     var results = mockedEFRepo.Object.WhereInternal(clause).ToList();
  126.  
  127.     Assert.IsNotNull(results);
  128.     Assert.IsTrue(results.Count < mockedEFRepo.Object.AllInternal().Count());
  129.     Assert.IsTrue(results.Count > 0);
  130. } }