public void IsDeveloperCurrentlyHired_any_account() { var hired = new Hired() { DeveloperId = 1 }; var mockHiringRepository = new Mock<IHiringRepository>(); mockHiringRepository.Setup(obj => obj.GetCurrentHiringByDeveloper(1)).Returns(hired); var mockRepositoryFactory = new Mock<IDataRepositoryFactory>(); mockRepositoryFactory.Setup(obj => obj.GetDataRepository<IHiringRepository>()) .Returns(mockHiringRepository.Object); var developerHiringEngine = new DeveloperHiringEngine(mockRepositoryFactory.Object); var try1 = developerHiringEngine.IsDeveloperCurrentlyHired(2); var try2 = developerHiringEngine.IsDeveloperCurrentlyHired(1); Assert.IsFalse(try1); Assert.IsTrue(try2); }
public Hired HireDeveloperToClient(string loginEmail, int developerId, DateTime startDate, DateTime endDate) { if (startDate > DateTime.Now) throw new UnableToHireForDateException($"Cannot hire for date {startDate.ToShortDateString()} yet"); var accountRepository = _dataRepositoryFactory.GetDataRepository<IAccountRepository>(); var hiringRepository = _dataRepositoryFactory.GetDataRepository<IHiringRepository>(); var developerIsHired = IsDeveloperCurrentlyHired(developerId); if(developerIsHired) throw new DeveloperCurrentlyHiredException($"Developer {developerId} is already hired."); var account = accountRepository.GetByLogin(loginEmail); if(account == null) throw new NotFoundException($"No account found for such login email {loginEmail}"); var hired = new Hired() { AccountId = account.AccountId, DeveloperId = developerId, StartDate = startDate, DateDue = endDate }; var savedEntity = hiringRepository.Add(hired); return savedEntity; }