Search

just show me the code

Wednesday, November 26, 2008

My Dependency Injection


ITalentRepository.cs

    9     public interface ITalentRepository
   10     { 
   11         IQueryable<Talent> GetTalents(); 
   12         void SaveTalent(Talent talent);  
   13     }


TestTalentRepository.cs

   11     public class TestTalentRepository : ITalentRepository
   12     {
   13         IList<Talent> talentList;
   14         IList<TalentEvent> talentEventList;
   15
   16         public TestTalentRepository(IResponseRepository _responseRepository, IEventRepository _eventRepository)
   17         { 
   18             //load up the repo list
   19             talentList = new List<Talent>();
   20             talentEventList = new List<TalentEvent>();
   21
   22             for (int i = 0; i < 55; i++)
   23             {
   24                 var t = new Talent();
   25                 t.Id = i;
   26                 t.FirstName = (i % 4 == 1) ? "Quin" : (i % 4 == 2) ? "George" : (i % 4 == 3) ? "Ryan" : "Joe";
   27                 t.LastName = (i%3 == 1) ? "Simpson" + i.ToString() : "Zimmerman";
   28                 if (i == 24) t.LastName = "Anderson";
   29                 if (i == 23) t.LastName = "Beckman";
   30                 if (i == 22) t.LastName = "Chambers";
   31                 if (i == 21) t.LastName = "Ewalt";
   32                 if (i == 20) t.LastName = "Davis" + i.ToString();
   33                 if (i == 19) t.LastName = "Ferg" + i.ToString();
   34                 if (i == 18) t.LastName = "Gainer" + i.ToString();
   35                 if (i == 1) t.LastName = "Anderson";
   36                 if (i == 2) t.LastName = "Beckman";
   37                 if (i == 3) t.LastName = "Chambers";
   38                 if (i == 4) t.LastName = "Ewalt";
   39                 if (i == 5) t.LastName = "Davis" + i.ToString();
   40                 if (i == 6) t.LastName = "Ferg" + i.ToString();
   41                 if (i == 7) t.LastName = "Gainer" + i.ToString();
   42                 if (i % 13 == 4) {t.FirstName = string.Empty; t.LastName = string.Empty;}
   43                 t.EyeColor = (i%5 == 0) ? EyeColor.Brown : (i%6 == 0) ? EyeColor.Unknown : EyeColor.Black;
   44
   45                 int x =
   46                     (int)
   47                     Enum.Parse(typeof (TalentStatusEnum),
   48                                Enum.GetName(typeof (TalentStatusEnum), TalentStatusEnum.Approved));
   49
   50                 t.TalentStatusID = x;
   51                 t.TalentStatus = TalentStatusEnum.Approved;
   52                 t.TalentStatus = (i%5 == 0) ? TalentStatusEnum.DoNotUse : 
   53                     (i%6 == 0) ? TalentStatusEnum.New : TalentStatusEnum.Approved;
   54
   55
   56                 t.City = (i%5 == 0) ? "Miami" : (i%6 == 0) ? "Tampa" : "Chicago";
   57                 t.State = (i % 5 == 0) ? "FL" : (i % 6 == 0) ? "FL" : "IL";
   58                 t.Company = (i % 7 == 1) ? "Argo Talent Agency" :
   59                     (i % 7 == 2) ? "Simpson & Argo & Talent Event Repository Talent Solutions" : 
   60                     (i % 7 == 3) ? string.Empty : "Smith Sound & DJ Solutions";
   61
   62                 //t.DateOfBirth = (i % 5 == new DateTime("1/1/")) ? 23 : (i % 5 == 2) ? 32 : (i % 5 == 3) ? 26 : 36;
   63                 t.Age = (i % 5 == 1) ? 23 : (i % 5 == 2) ? 32 : (i % 5 == 3) ? 26 : 36;
   64                 t.Gender = (i % 7 == 0) ? "" : (i % 3 == 1) ? "Female" : "Male";
   65                 t.Race = (i % 5 == 1) ? "Asian" :
   66                     (i % 5 == 2) ? "African-American" :
   67                     (i % 5 == 3) ? "Hispanic" : "Caucasian";
   68
   69                 t.Email = (i % 5 == 1) ?  t.FirstName + "_" + t.LastName + i.ToString() + "@aol.com" :
   70                     (i % 5 == 2) ? t.FirstName + "_" + t.LastName + i.ToString() + "@hotmail.com" :
   71                     (i % 5 == 3) ? "j" + i.ToString() + "@gmail.com" : t.LastName + i.ToString() + "@yahoo.com";
   72
   73                 t.FileNumber = (1000 + i).ToString();
   74
   75                 //t.TalentTypes = new LazyList<TalentTypeTalent>();
   76                 //int qid = Convert.ToInt32(QuestionEnum.t
   77                 //_responseRepository.GetResponses().Where(x => x.Questions.Any(q => q.QuestionID == qid));
   78
   79                 IList<Event> events = _eventRepository.GetEvents().ToList<Event>();
   80                 Random random = new Random();   
   81                 int numEvents = random.Next(events.Count);
   82                 t.TalentEvents = new LazyList<TalentEvent>();
   83                 for (int j= 0; j < numEvents; j++)
   84                 {
   85                     var te = new TalentEvent();
   86                     te.TalentEventID = j;
   87                     te.TalentID = i;
   88                     //var e = events.GetEvents().FirstOrDefault();
   89                     Random random2 = new Random();
   90                     int rand = random2.Next(events.Count);
   91                     var e = events.ElementAtOrDefault(rand);
   92                     events.RemoveAt(rand);
   93                     te.Event = e;
   94                     te.EventID = e.EventID;
   95                     t.TalentEvents.Add(te);
   96                     t.Events += e.EventName + ", ";
   97                 }
   98                 talentList.Add(t);
   99             }
  100         }
  101
  102
  103
  104         public IQueryable<Talent> GetTalents()
  105         {
  106             return talentList.AsQueryable<Talent>();
  107         }
  108
  109         public void SaveTalent(Talent talent)
  110         {
  111             if (talent.Id > 0)
  112             {
  113                 Talent t = talentList.Where(x => x.Id == talent.Id).SingleOrDefault();
  114                 if (t != null)
  115                 {
  116                     talentList.Remove(t);
  117                     talentList.Add(talent);
  118                 }
  119                 else
  120                 {
  121                     talentList.Add(talent);
  122                 }
  123             }
  124             else
  125             {
  126                 int maxId = this.talentList.Max(t => t.Id);
  127                 talent.Id = maxId + 1;
  128
  129                 this.talentList.Add(talent);
  130             }
  131         }  
  132     }



ITalentService.cs

   11     public interface ITalentService
   12     {
   13         IQueryable<Talent> GetTalents(string searchExpression);
   14         IQueryable<Talent> GetTalents();
   15
   16         PagedList<Talent> GetPagedTalents(string searchExpression, string sortExpression, int pageIndex, int pageSize);
   17
   18         void SaveTalent(Talent t);
   19
   20     }


TalentService.cs

   13     public class TalentService : ITalentService
   14     { 
   15         ITalentRepository _repository = null;
   16
   17
   18         public TalentService(ITalentRepository repository) 
   19         {
   20             _repository = repository; 
   21             if (_repository == null)
   22                 throw new InvalidOperationException("Repository cannot be null");
   23         }
   24
   25
   26         public PagedList<Talent> GetPagedTalents(string searchExpression, string sortExpression, int pageIndex, int pageSize)
   27         {
   28             var qt = this.GetTalents(searchExpression);
   29             return GetPagedTalents(qt, sortExpression, pageIndex, pageSize);
   30         }
   31
   32
   33         public PagedList<Talent> GetPagedTalents(IQueryable<Talent> qt , string sortExpression, int pageIndex, int pageSize)
   34         {
   35             PagedList<Talent> tList; 
   36             switch (sortExpression.Split(' ')[0])
   37             {
   38                 case "Id":
   39                     tList = new PagedList<Talent>(qt.OrderBy(tal => tal.Id), pageIndex, pageSize);
   40                     break;
   41                 case "LastName":
   42                     tList = new PagedList<Talent>(qt.OrderBy(tal => tal.LastName)
   43                         .ThenBy(tal => tal.FirstName)
   44                         .ThenBy(tal => tal.Id), pageIndex, pageSize);
   45                     break;
   46                 case "FirstName":
   47                     tList = new PagedList<Talent>(qt.OrderBy(tal => tal.FirstName)
   48                         .ThenBy(tal => tal.LastName)
   49                         .ThenBy(tal => tal.Id), pageIndex, pageSize);
   50                     break;
   51                 case "Eye":
   52                     tList = new PagedList<Talent>(qt.OrderBy(tal => tal.EyeColor.ToString())
   53                         .ThenBy(tal => tal.LastName)
   54                         .ThenBy(tal => tal.FirstName)
   55                         .ThenBy(tal => tal.Id), pageIndex, pageSize);
   56                     break;
   57                 case "TalentStatus":
   58                     tList = new PagedList<Talent>(qt.OrderBy(tal => tal.TalentStatus.ToString())
   59                         .ThenBy(tal => tal.LastName)
   60                         .ThenBy(tal => tal.FirstName)
   61                         .ThenBy(tal => tal.Id), pageIndex, pageSize);
   62                     break;
   63                 case "City":
   64                     tList = new PagedList<Talent>(qt.OrderBy(tal => tal.City.ToString())
   65                         .ThenBy(tal => tal.LastName)
   66                         .ThenBy(tal => tal.FirstName)
   67                         .ThenBy(tal => tal.Id), pageIndex, pageSize);
   68                     break;
   69                 case "State":
   70                     tList = new PagedList<Talent>(qt.OrderBy(tal => tal.State.ToString())
   71                         .ThenBy(tal => tal.LastName)
   72                         .ThenBy(tal => tal.FirstName)
   73                         .ThenBy(tal => tal.Id), pageIndex, pageSize);
   74                     break;
   75                 case "Gender":
   76                     tList = new PagedList<Talent>(qt.OrderBy(tal => tal.Gender.ToString())
   77                         .ThenBy(tal => tal.LastName)
   78                         .ThenBy(tal => tal.FirstName)
   79                         .ThenBy(tal => tal.Id), pageIndex, pageSize);
   80                     break;
   81                 case "Company":
   82                     tList = new PagedList<Talent>(qt.OrderBy(tal => tal.Company.ToString())
   83                         .ThenBy(tal => tal.LastName)
   84                         .ThenBy(tal => tal.FirstName)
   85                         .ThenBy(tal => tal.Id), pageIndex, pageSize);
   86                     break;
   87                 case "Race":
   88                     tList = new PagedList<Talent>(qt.OrderBy(tal => tal.Race.ToString())
   89                         .ThenBy(tal => tal.LastName)
   90                         .ThenBy(tal => tal.FirstName)
   91                         .ThenBy(tal => tal.Id), pageIndex, pageSize);
   92                     break;
   93                 case "Age":
   94                     tList = new PagedList<Talent>(qt.OrderBy(tal => tal.Age.ToString())
   95                         .ThenBy(tal => tal.LastName)
   96                         .ThenBy(tal => tal.FirstName)
   97                         .ThenBy(tal => tal.Id), pageIndex, pageSize);
   98                     break;
   99                 default:
  100                     tList = new PagedList<Talent>(qt.OrderBy(tal => tal.Id), pageIndex, pageSize); 
  101                     break;
  102             }
  103             return tList; 
  104         }
  105
  106
  107         public IQueryable<Talent> GetTalents()
  108         {
  109             return this.GetTalents(null);
  110         }
  111
  112         public IQueryable<Talent> GetTalents(string searchExpression)
  113         {
  114             IQueryable<Talent> t;
  115             if (string.IsNullOrEmpty(searchExpression))
  116             {
  117                 t = _repository.GetTalents();
  118             }
  119             else if (SearchStringUtil.IsAdvSearch(searchExpression))
  120             {
  121                 t = AdvSearch(searchExpression);
  122             }
  123             else  
  124             {
  125                 t = BasicSearch(searchExpression);
  126             }
  127             return t;
  128         }
  129
  130         private IQueryable<Talent> AdvSearch(string searchExpression)
  131         {
  132             IQueryable<Talent> t;
  133             string[] sa = searchExpression.Trim().Replace("  ", " ").Replace("  ", " ").Split(' ');
  134             t = _repository.GetTalents();
  135             foreach (string s in sa)
  136             {
  137                 t = t.Intersect(AddAdvSearch(s));
  138             }
  139             return t;
  140         }
  141
  142         private IQueryable<Talent> AddAdvSearch(string s)
  143         {
  144             string[] sa = s.Split(':');
  145             var t2 =  _repository.GetTalents();
  146             if (sa.Length == 2)
  147             {
  148                 sa[1] = sa[1].ToLower();
  149                 switch (sa[0])
  150                 {
  151                     case "FirstName":
  152                         {
  153                             t2 = _repository.GetTalents()
  154                                 .Where(tal => tal.FirstName.ToString().ToLower().Contains(sa[1]));
  155                             break;
  156                         }
  157                     case "LastName":
  158                         {
  159                             t2 = _repository.GetTalents()
  160                                 .Where(tal => tal.LastName.ToString().ToLower().Contains(sa[1]));
  161                             break;
  162                         }
  163                     case "Email":
  164                         {
  165                             t2 = _repository.GetTalents()
  166                                 .Where(tal => tal.Email.ToString().ToLower().Contains(sa[1]));
  167                             break;
  168                         }
  169                     case "TalentType":
  170                         {
  171                             break;
  172                         }
  173                     case "Event":
  174                         { 
  175                             t2 = _repository.GetTalents()
  176                                 .Where(tal => tal.TalentEvents
  177                                     .Any<TalentEvent>(x=>x.Event.EventName.ToLower().Contains(sa[1])));
  178                             break;
  179                         }
  180                     case "Race":
  181                         {
  182                             t2 = _repository.GetTalents()
  183                                 .Where(tal => tal.Race.ToString().ToLower().Contains(sa[1]));
  184                             break;
  185                         }
  186                     case "Gender":
  187                         {
  188                             break;
  189                         }
  190                     case "City":
  191                         {
  192                             t2 = _repository.GetTalents()
  193                                 .Where(tal => tal.City.ToString().ToLower().Contains(sa[1]));
  194                             break;
  195                         }
  196                     case "State":
  197                         {
  198                             break;
  199                         }
  200                     case "FileNumber":
  201                         {
  202                             t2 = _repository.GetTalents()
  203                                 .Where(tal => tal.FileNumber.ToString().ToLower().Contains(sa[1]));
  204                             break;
  205                             break;
  206                         }
  207                     default:
  208                         break;
  209                 }
  210             }
  211             return t2;
  212         }
  213
  214         private IQueryable<Talent> BasicSearch(string searchExpression)
  215         {
  216             IQueryable<Talent> t;
  217             string[] sa = searchExpression.Trim().ToLower().Replace("  ", " ").Replace("  ", " ").Split(' ');
  218             t = _repository.GetTalents();
  219             foreach (string s in sa)
  220             { 
  221                 t = t.Intersect(AddBasicSearch(s));
  222             }
  223             return t;
  224         }
  225
  226         private IQueryable<Talent> AddBasicSearch(string s)
  227         {
  228             IQueryable<Talent> t2 = _repository.GetTalents()
  229                 .Where(tal => tal.EyeColor.ToString().ToLower().Contains(s)
  230                               || tal.FirstName.ToLower().Contains(s)
  231                               || tal.LastName.ToLower().Contains(s)
  232                               || tal.City.ToLower().Contains(s)
  233                               || tal.State.ToLower().Contains(s) 
  234                               || tal.Company.ToLower().Contains(s)
  235                               || tal.Gender.ToLower().Contains(s)
  236                               || tal.Race.ToLower().Contains(s)
  237                               || tal.Email.ToLower().Contains(s)
  238                               || tal.FileNumber.ToLower().Contains(s)
  239                               //|| tal.TalentTypeTalents.Any<Tal
  240                               || tal.TalentEvents.Any<TalentEvent>(x=>x.Event.EventName.ToLower().Contains(s))
  241                               || tal.TalentStatus.ToString().ToLower().Contains(s)
  242                               || tal.Id.ToString().Contains(s));
  243             return t2;
  244         }
  245
  246         public void SaveTalent(Talent t)
  247         {
  248             _repository.SaveTalent(t);
  249         } 
  250     }



TestBase.cs

   21     [TestClass]
   22     public class TestBase
   23     {
   24         protected ITalentRepository _talentRepository;
   25         protected ITalentService _talentService;
   26         protected IEventRepository _eventRepository;
   27         protected IEventService _eventService;
   28         protected IResponseRepository _responseRepository;
   29         protected IResponseService _responseService;
   30         protected IAuthenticationService _authenticationService;
   31         protected IAuthorizationService _authorizationService;
   32
   33         [TestInitialize]
   34         public void Startup()
   35         {
   36             _eventRepository = new TestEventRepository();
   37             _eventService = new EventService(_eventRepository);
   38             _responseRepository = new TestResponseRepository();
   39             _responseService = new ResponseService(_responseRepository);
   40             _talentRepository = new TestTalentRepository(_responseRepository, _eventRepository);
   41             _talentService = new TalentService(_talentRepository);
   42             _authenticationService = new TestAuthenticationService();
   43             _authorizationService = new TestAuthorizationService(); 
   44         }
   45     }



TalentTest.cs

  176         [TestMethod]
  177         public void TalentServiceShouldInsertNewTalentOnSave()
  178         {
  179             Talent t = new Talent();
  180             t.Id = -2000;
  181             t.FirstName = "Walter";
  182             t.LastName = "Payton";
  183
  184             int talentCount = _talentService.GetTalents().Count();
  185             _talentService.SaveTalent(t);
  186             int talentCount2 = _talentService.GetTalents().Count();
  187             Assert.IsTrue(talentCount2 == talentCount + 1);
  188         }
  189
  190
  191         [TestMethod]
  192         public void TalentServiceShouldInsert_2_NewTalentsOnSave()
  193         {
  194             const int newId = -1;
  195             Talent t = new Talent();
  196             t.Id = newId;
  197             t.FirstName = "Walter";
  198             t.LastName = "Payton";
  199
  200             int talentCount = _talentService.GetTalents().Count();
  201             _talentService.SaveTalent(t);
  202             int talentCount2 = _talentService.GetTalents().Count();
  203             Assert.IsTrue(talentCount2 == talentCount + 1);
  204
  205             Talent t2 = new Talent();
  206             t2.Id = newId;
  207             t2.FirstName = "Walter";
  208             t2.LastName = "Payton";
  209
  210             int talentCount3 = _talentService.GetTalents().Count();
  211             _talentService.SaveTalent(t2);
  212             int talentCount4 = _talentService.GetTalents().Count();
  213             Assert.IsTrue(talentCount4 == talentCount3 + 1);
  214         }
  215
  216         [TestMethod]
  217         public void TalentServiceShouldUpdateTalentOnSave()
  218         {
  219             const string newLastName = "Payton";
  220             Talent t = _talentService.GetTalents().Where(x => x.Id == 5).SingleOrDefault();
  221             t.LastName = newLastName;
  222             _talentService.SaveTalent(t);
  223             Talent newt = _talentService.GetTalents().Where(x => x.Id == 5).SingleOrDefault();
  224             Assert.AreEqual(newLastName, newt.LastName); 
  225         }

No comments:

Post a Comment

Contributors