public void SetErrorMessageInViewModel_IfNoChanges()
        {
            // Arrange
            var errorMessage = "Something is wrong!";
            var mockedView   = new Mock <IAddNewClassView>();

            mockedView.Setup(v => v.Model).Returns(new AddNewClassViewModel());

            var mockedTeacherService = new Mock <ITeacherService>();

            mockedTeacherService.Setup(s => s.Save()).Returns(0);
            mockedTeacherService.Setup(s => s.FindById(It.IsAny <string>())).Verifiable();

            var mockedStudentClassService = new Mock <IStudentClassService>();

            mockedStudentClassService.Setup(s => s.Add(It.IsAny <StudentClass>())).Verifiable();

            var mockedStudentClassFactory = new Mock <IStudentClassFactory>();

            mockedStudentClassFactory.Setup(f => f.CreateClass(It.IsAny <string>(), It.IsAny <string>())).Verifiable();

            var presenter = new AddNewClassPresenter(mockedView.Object, mockedStudentClassService.Object, mockedTeacherService.Object, mockedStudentClassFactory.Object);
            var ev        = new AddNewClassEventArgs(null, null);

            // Act & Assert
            Assert.DoesNotThrow(() => mockedView.Raise(v => v.CreateClassClick += null, ev));
            Assert.AreEqual(errorMessage, mockedView.Object.Model.ErrorMessage);
            Assert.IsFalse(mockedView.Object.Model.IsSuccess);

            // Verify that the method is stopped and other dependencies are not called
            mockedTeacherService.Verify(s => s.Save(), Times.Never);
            mockedTeacherService.Verify(s => s.FindById(It.IsAny <string>()), Times.Never);

            mockedStudentClassService.Verify(s => s.Add(It.IsAny <StudentClass>()), Times.Once);
        }
        public void CallTeacherService_GetTeachersWithoutClass_AndSetResultInViewModel()
        {
            // Arrange
            var teachers = new List <MinTeacherInfoDTO>()
            {
                new MinTeacherInfoDTO()
                {
                    FirstName = "Test"
                }
            };
            var mockedView = new Mock <IAddNewClassView>();

            mockedView.Setup(v => v.Model).Returns(new AddNewClassViewModel());

            var mockedTeacherService = new Mock <ITeacherService>();

            mockedTeacherService.Setup(s => s.GetTeachersWithoutClass()).Returns(teachers).Verifiable();

            var mockedStudentClassService = new Mock <IStudentClassService>();
            var mockedStudentClassFactory = new Mock <IStudentClassFactory>();

            var presenter = new AddNewClassPresenter(mockedView.Object, mockedStudentClassService.Object, mockedTeacherService.Object, mockedStudentClassFactory.Object);

            // Act
            mockedView.Raise(v => v.PageLoad += null, EventArgs.Empty);

            // Assert
            CollectionAssert.AreEqual(teachers, mockedView.Object.Model.FreeTeachers);
            mockedTeacherService.Verify(s => s.GetTeachersWithoutClass(), Times.Once);
        }