public void CheckIfEmployeePersonalDetailsIsSaved() { // ARRANGE var uow = Mock.Create<IQTecUnitOfWork>(Behavior.Loose); var employeeToBeUpdated = new Employee { DateOfBirth = new DateTime(2012, 1, 1), DesignationId = 2, Email = "*****@*****.**", FirstName = "Abc", LastName = "XYZ" }; var employeePersonalDtoinParamater = new EmployeePersonalInfo { DateOfBirth = new DateTime(2012, 1, 1), DesignationId = 2, Email = "*****@*****.**", FirstName = "AbcDef", //firstname is changed LastName = "XYZ" }; Mock.Arrange(() => uow.EmployeeRepository.GetById(Arg.AnyInt)).Returns(employeeToBeUpdated); Mock.Arrange(() => uow.EmployeeRepository.Update(Arg.IsAny<Employee>())) .DoInstead(() => { employeeToBeUpdated.FirstName = employeePersonalDtoinParamater.FirstName; }) .OccursOnce(); Mock.Arrange(() => uow.EmployeeLanguagesRepository.GetAll()).DoNothing(); // ACT var classunderTest = new EmployeeManager(uow); classunderTest.SaveEmployee(1, employeePersonalDtoinParamater, null); // ASSERT Assert.AreEqual("AbcDef", employeeToBeUpdated.FirstName); Mock.Assert(uow); }
public void CheckWhetherLanguagesAreGettingUpdatedInEmployeeSave() { // ARRANGE var uow = Mock.Create<IQTecUnitOfWork>(Behavior.Loose); var employeeToBeUpdated = new Employee { DateOfBirth = new DateTime(2012, 1, 1), DesignationId = 2, Email = "*****@*****.**", FirstName = "Abc", LastName = "XYZ" }; var employeePersonalDtoinParamater = new EmployeePersonalInfo { DateOfBirth = new DateTime(2012, 1, 1), DesignationId = 2, Email = "*****@*****.**", FirstName = "AbcDef", // firstname is changed LastName = "XYZ" }; Mock.Arrange(() => uow.EmployeeRepository.GetById(Arg.AnyInt)).Returns(employeeToBeUpdated); var currentEmployeeLanguagesKnown = new List<EmployeeLanguages> { new EmployeeLanguages { EmployeeId = 1, Fluency = 1, LanguageId = 1 }, new EmployeeLanguages { EmployeeId = 1, Fluency = 1, LanguageId = 2 } }; Mock.Arrange(() => uow.EmployeeLanguagesRepository.GetAll()).Returns(currentEmployeeLanguagesKnown.AsQueryable); //// updating fluency from 1 to 2 var employeeLanguagesInfoParamater = new List<EmployeeLanguageInfo> { new EmployeeLanguageInfo { EmployeeId = 1, Fluency = (Fluency)2, LanguageId = 1 }, new EmployeeLanguageInfo { EmployeeId = 1, Fluency = (Fluency)2, LanguageId = 2 } }; Mock.Arrange(() => uow.EmployeeLanguagesRepository.Update(Arg.IsAny<EmployeeLanguages>())).DoInstead( () => { foreach (var employeeLanguageInfo in employeeLanguagesInfoParamater) { var languageToBeUpdated = currentEmployeeLanguagesKnown.FirstOrDefault( lang => lang.EmployeeId == 1 && lang.LanguageId == employeeLanguageInfo.LanguageId); if (languageToBeUpdated != null) { languageToBeUpdated.Fluency = (int)employeeLanguageInfo.Fluency; } } }); // ACT var classunderTest = new EmployeeManager(uow); classunderTest.SaveEmployee(1, employeePersonalDtoinParamater, employeeLanguagesInfoParamater); // ASSERT var firstOrDefault = currentEmployeeLanguagesKnown.FirstOrDefault(); if (firstOrDefault != null) { Assert.AreEqual(2, firstOrDefault.Fluency); } Mock.Assert(uow); }
public bool SaveEmployee(int employeeId, EmployeePersonalInfo personalInfo, List<EmployeeLanguageInfo> employeeLanguageListInfo) { if (!personalInfo.IsValid()) { throw new BusinessRulesException(personalInfo.Errors.ToErrorMessage()); } if (employeeId > 0) // update employee { var employeetobeUpdated = this.qTecUnitOfWork.EmployeeRepository.GetById(employeeId); var languagesToBeDeleted = new List<EmployeeLanguages>(); if (employeetobeUpdated != null && personalInfo != null) { //// TODO Use Auto Mapper so that this conversion doesn't take place employeetobeUpdated.FirstName = personalInfo.FirstName; employeetobeUpdated.LastName = personalInfo.LastName; employeetobeUpdated.EmployeeId = employeeId; employeetobeUpdated.Email = personalInfo.Email; employeetobeUpdated.DesignationId = personalInfo.DesignationId; } //// get list of current employee languages which are not available in the employeeLanguageListInfo param if (employeetobeUpdated != null && employeeLanguageListInfo != null) { var employeeLanguages = this.qTecUnitOfWork.EmployeeLanguagesRepository.GetAll().Where(employeeLanguage => employeeLanguage.EmployeeId.Equals(employeetobeUpdated.EmployeeId)); foreach (var employeeLanguage in employeeLanguages) { var langId = employeeLanguage.LanguageId; var found = false; if (employeeLanguageListInfo != null) { foreach (var languageInfo in employeeLanguageListInfo) { if (languageInfo.LanguageId.Equals(langId)) { found = true; //// language is present in the employeeLanguages } } } if (!found) { //// language is not found so add it in the list of deleted languagesToBeDeleted.Add(employeeLanguage); } } foreach (var employeeLanguage in languagesToBeDeleted) { this.qTecUnitOfWork.EmployeeLanguagesRepository.Delete(employeeLanguage); } if (employeeLanguageListInfo != null) { foreach (var employeeLanguageInfo in employeeLanguageListInfo) { var languageTobeUpdated = employeeLanguages.FirstOrDefault( e => e.EmployeeId.Equals(employeeId) && e.LanguageId.Equals(employeeLanguageInfo.LanguageId)); //var languageTobeUpdated =this.qTecUnitOfWork.EmployeeLanguagesRepository.GetById(employeeLanguageInfo.LanguageId); if (languageTobeUpdated != null) { this.qTecUnitOfWork.EmployeeLanguagesRepository.Update(languageTobeUpdated); } else { //// the language is not found in the current languages collection that is associated with the employee so add a new this.qTecUnitOfWork.EmployeeLanguagesRepository.Add(new EmployeeLanguages { EmployeeId = employeeLanguageInfo.EmployeeId, Fluency = (int)employeeLanguageInfo.Fluency, LanguageId = employeeLanguageInfo.LanguageId }); } } } } this.qTecUnitOfWork.EmployeeRepository.Update(employeetobeUpdated); this.qTecUnitOfWork.Commit(); return true; } return false; }