public async Task When_EvaluatingTutoringSessionAsTutor_Expect_Exception()
        {
            var evaluation = new TutoringSessionEvaluationDto
            {
                Evaluation = TutoringSessionEvaluationEnum.Good,
                Comment    = "Lacked charisma"
            };

            await Assert.ThrowsAsync <InvalidOperationException>(async() =>
                                                                 await _tutoringSessionsService.EvaluateTutoringSession(3, evaluation)
                                                                 );
        }
        public async Task When_EvaluatingEvaluatedTutoringSession_Expect_Exception()
        {
            _currentUserServiceMock
            .Setup(s => s.GetUserId())
            .Returns(_userManager.Users.First(u => u.Email == "*****@*****.**").Id);

            var evaluation = new TutoringSessionEvaluationDto
            {
                Evaluation = TutoringSessionEvaluationEnum.Good,
                Comment    = "Lacked charisma"
            };

            await Assert.ThrowsAsync <InvalidOperationException>(async() =>
                                                                 await _tutoringSessionsService.EvaluateTutoringSession(2, evaluation)
                                                                 );
        }
        public async Task <IActionResult> EvaluateTutoringSession(int id, [FromBody] TutoringSessionEvaluationDto tutoringEvaluation)
        {
            try
            {
                var aggregate = await _tutoringSessionsService.EvaluateTutoringSession(id, tutoringEvaluation);

                Response.OnCompleted(async() =>
                                     await _emailService.SendTutoringSessionEvaluatedEmail(aggregate)
                                     );

                return(Ok());
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
        public async Task When_EvaluatingTutoringSession_Expect_SessionEvaluated()
        {
            _currentUserServiceMock
            .Setup(s => s.GetUserId())
            .Returns(_userManager.Users.First(u => u.Email == "*****@*****.**").Id);

            var evaluation = new TutoringSessionEvaluationDto
            {
                Evaluation = TutoringSessionEvaluationEnum.Good,
                Comment    = "Lacked charisma"
            };

            await _tutoringSessionsService.EvaluateTutoringSession(3, evaluation);

            var session = await _context.TutoringSessions.FirstAsync(ts => ts.Id == 3);

            Assert.Equal(TutoringSessionEvaluationEnum.Good, session.Evaluation);
            Assert.Equal("Lacked charisma", session.EvaluationComment);
        }
        public async Task <SessionEvaluationEmailAggregate> EvaluateTutoringSession(int id, TutoringSessionEvaluationDto evaluationDto)
        {
            var session = await _tutoringSessionsRepository.GetById(id);

            ValidateSessionEvaluation(session);

            session.Evaluation        = evaluationDto.Evaluation;
            session.EvaluationComment = evaluationDto.Comment;

            await _tutoringSessionsRepository.Update(session);

            return(new SessionEvaluationEmailAggregate
            {
                TutorEmail = session.Tutor.Email,
                StudentName = session.Student.FirstName + " " + session.Student.LastName,
                SessionDate = session.SessionDate,
                EvaluationDto = evaluationDto
            });
        }