public async Task AddStudentAsync_UpdateFails_ReturnsValidationMessage()
        {
            var input = _fixture.Create <AddStudentRequest>();
            var studentValidationMessages = _fixture.CreateMany <ValidationMessage>(0);

            _studentValidator
            .Setup(x => x.ValidateRules(input))
            .Returns(studentValidationMessages);

            var expectedClass = _fixture.Create <Class>();

            _classRepository
            .Setup(x => x.GetAsync(input.ClassId))
            .ReturnsAsync(expectedClass);

            var classValidationMessage = _fixture.Create <ValidationMessage>();

            _classRepository
            .Setup(x => x.UpdateAsync(expectedClass))
            .ReturnsAsync(classValidationMessage);

            AddStudentResult result = await _sut.AddStudentAsync(input);

            result.ValidationMessages.Should().ContainSingle();
            result.ValidationMessages.Should().Contain(classValidationMessage);
        }
 public AddStudentResult AddStudent(Student studentToAdd)
 {
     if (studentsList.Contains(studentToAdd))
     {
         addStudentResult = AddStudentResult.StudentIsExist;
     }
     else
     {
         addStudentResult = AddStudentResult.SuccessToAddStudent;
         studentsList.Add(studentToAdd);
     }
     return(addStudentResult);
 }
        public async Task AddStudentAsync_WithValidationMessages_ReturnsValidationMessages()
        {
            var input = _fixture.Create <AddStudentRequest>();
            var expectedValidationMessages = _fixture.CreateMany <ValidationMessage>();

            _studentValidator
            .Setup(x => x.ValidateRules(input))
            .Returns(expectedValidationMessages);

            AddStudentResult result = await _sut.AddStudentAsync(input);

            result.Should().NotBeNull();
            result.ValidationMessages.Should().BeEquivalentTo(expectedValidationMessages);
        }
 public AddStudentResult AddStudent(Student studentToAdd)
 {
     if (studentsList.Contains(studentToAdd))
     {
         addStudentResult = AddStudentResult.StudentIsExist;
     }
     else if (!Pesel.TryParse(studentToAdd.Pesel, out pesel))
     {
         addStudentResult = AddStudentResult.FailedToAddStudent;
     }
     else
     {
         addStudentResult = AddStudentResult.SuccessToAddStudent;
         studentsList.Add(studentToAdd);
     }
     return(addStudentResult);
 }
        private async Task AddStudentFlowAsync(Guid classId)
        {
            string firstName = SharedConsoleFlows.AskForString("What is the first name of the student?");
            string infix     = SharedConsoleFlows.AskForOptionalString("What is the infix of the student?");
            string lastName  = SharedConsoleFlows.AskForString("What is the last name of the student?");
            var    model     = new AddStudentRequest
            {
                ClassId   = classId,
                FirstName = firstName,
                Infix     = infix,
                LastName  = lastName
            };
            AddStudentResult addStudentResponse = await _classController.AddStudentAsync(model);

            if (addStudentResponse.ValidationMessages.Any())
            {
                SharedConsoleFlows.PrintValidationMessages(addStudentResponse.ValidationMessages);
                await AddStudentFlowAsync(classId);
            }
        }
        public async Task AddStudentAsync_ClassDoesNotExists_ReturnsValidationMessage()
        {
            var input = _fixture.Create <AddStudentRequest>();
            var expectedValidationMessages = _fixture.CreateMany <ValidationMessage>(0);

            _studentValidator
            .Setup(x => x.ValidateRules(input))
            .Returns(expectedValidationMessages);

            _classRepository
            .Setup(x => x.GetAsync(input.ClassId))
            .ReturnsAsync((Class)null);


            AddStudentResult result = await _sut.AddStudentAsync(input);

            result.ValidationMessages.Should().ContainSingle();
            ValidationMessage validationMessage = result.ValidationMessages.Single();

            validationMessage.Field.Should().Be("ClassId");
            validationMessage.Message.Should().Be("No class was found");
        }
        public async Task AddStudentAsync_UpdateSucceeds_ReturnsNoValidationMessages()
        {
            var input = _fixture.Create <AddStudentRequest>();
            var studentValidationMessages = _fixture.CreateMany <ValidationMessage>(0);

            _studentValidator
            .Setup(x => x.ValidateRules(input))
            .Returns(studentValidationMessages);

            var expectedClass = _fixture.Create <Class>();

            _classRepository
            .Setup(x => x.GetAsync(input.ClassId))
            .ReturnsAsync(expectedClass);

            _classRepository
            .Setup(x => x.UpdateAsync(expectedClass))
            .ReturnsAsync((ValidationMessage)null);

            AddStudentResult result = await _sut.AddStudentAsync(input);

            result.Should().NotBeNull();
            result.ValidationMessages.Should().BeEmpty();
        }