public async Task ApplyForTutoring(int moduleId, TutoringApplicationNewDto tutoringApplicationNew) { var currentUserId = _currentUserService.GetUserId(); var currentUser = await _userManager.Users .Include(u => u.TutorModules) .Include(u => u.TutoringApplications) .FirstOrDefaultAsync(u => u.Id == currentUserId); if (currentUser.TutorModules.Any(tm => tm.ModuleId == moduleId)) { throw new InvalidOperationException($"Could not apply for tutoring: user (id='{currentUser.Id}') is already a tutor in this module."); } var tutoringApplication = new TutoringApplication { ModuleId = moduleId, StudentId = currentUserId, RequestDate = _timeService.GetCurrentTime(), MotivationalLetter = tutoringApplicationNew.MotivationalLetter }; currentUser.TutoringApplications.Add(tutoringApplication); await _userManager.UpdateAsync(currentUser); }
public async Task When_ApplyingForTutoring_Expect_ApplicationCreated(int moduleId, string motivationalLetter) { var application = new TutoringApplicationNewDto { MotivationalLetter = motivationalLetter }; await _tutoringApplicationsService.ApplyForTutoring(moduleId, application); var applicationCreated = await _context.TutoringApplications.FirstAsync(ta => ta.MotivationalLetter == motivationalLetter); Assert.Equal(moduleId, applicationCreated.ModuleId); Assert.Equal(DateTimeOffset.Now.Date, applicationCreated.RequestDate.Date); }
public async Task <IActionResult> ApplyForTutoring(int moduleId, [FromBody] TutoringApplicationNewDto tutoringApplicationNew) { try { await _tutoringApplicationsService.ApplyForTutoring(moduleId, tutoringApplicationNew); return(Ok()); } catch (Exception ex) { return(BadRequest(ex.Message)); } }
public async Task When_ApplyingForTutoringAsTutor_Expect_Exception(int moduleId, string motivationalLetter) { _currentUserServiceMock .Setup(s => s.GetUserId()) .Returns(_userManager.Users.First(u => u.Email == "*****@*****.**").Id); var application = new TutoringApplicationNewDto { MotivationalLetter = motivationalLetter }; await Assert.ThrowsAsync <InvalidOperationException>(async() => await _tutoringApplicationsService.ApplyForTutoring(moduleId, application) ); }