예제 #1
0
        public void Execute_ShouldThrowArgumentException_WhenPassedCourseFormIsInvalid()
        {
            // Arrange
            var engineMock    = new Mock <IEngine>();
            var factoryMock   = new Mock <IAcademyFactory>();
            var courseCommand = new AddStudentToCourseCommand(factoryMock.Object, engineMock.Object);

            var studentMock = new Mock <IStudent>();

            studentMock.SetupGet(st => st.Username).Returns("Name");

            var courseMock = new Mock <ICourse>();

            var seasonMock = new Mock <ISeason>();

            seasonMock.SetupGet(s => s.Courses).Returns(new List <ICourse>()
            {
                courseMock.Object
            });

            engineMock.SetupGet(e => e.Students).Returns(new List <IStudent>()
            {
                studentMock.Object
            });
            engineMock.SetupGet(e => e.Seasons).Returns(new List <ISeason>()
            {
                seasonMock.Object
            });

            // Act & Assert
            Assert.Throws <ArgumentException>(() => courseCommand.Execute(new List <string>()
            {
                "Name", "0", "0", "onspace"
            }));
        }
예제 #2
0
        public void ShouldThrowArgumentExceptionWhenPassedCourseIsInvalid()
        {
            //Arrange
            var engineMock  = Mock.Create <IEngine>();
            var factoryMock = Mock.Create <IAcademyFactory>();
            var studentMock = Mock.Create <IStudent>();
            var seasonMock  = Mock.Create <ISeason>();
            var courseMock  = Mock.Create <ICourse>();

            Mock.Arrange(() => studentMock.Username).Returns("Pesho");
            Mock.Arrange(() => seasonMock.Students).Returns(new List <IStudent>()
            {
                new Student("Pesho", Track.Dev)
            });
            Mock.Arrange(() => seasonMock.Courses).Returns(new List <ICourse>()
            {
                courseMock
            });
            Mock.Arrange(() => engineMock.Students).Returns(new List <IStudent>()
            {
                studentMock
            });
            Mock.Arrange(() => engineMock.Seasons).Returns(new List <ISeason>()
            {
                seasonMock
            });

            var command = new AddStudentToCourseCommand(factoryMock, engineMock);

            Assert.ThrowsException <ArgumentException>(() => command.Execute(new List <string>()
            {
                "Pesho", "0", "0", "invalid"
            }));
        }
예제 #3
0
        public void ThrowArgumentException_WhenThePassedCourseFormIsInvalid()
        {
            var factoryMock = new Mock <IAcademyFactory>();
            var engineMock  = new Mock <IEngine>();
            var studentMock = new Mock <IStudent>();
            var courseMock  = new Mock <ICourse>();
            var seasonMock  = new Mock <ISeason>();

            studentMock.Setup(x => x.Username).Returns("Name");
            engineMock.Setup(x => x.Students).Returns(new List <IStudent>()
            {
                studentMock.Object
            });
            courseMock.Setup(x => x.OnlineStudents).Returns(new List <IStudent>()
            {
                studentMock.Object
            });
            engineMock.Setup(x => x.Seasons).Returns(new List <ISeason>()
            {
                seasonMock.Object
            });
            seasonMock.Setup(x => x.Courses).Returns(new List <ICourse>()
            {
                courseMock.Object
            });
            var command = new AddStudentToCourseCommand(factoryMock.Object, engineMock.Object);

            Assert.Throws <ArgumentException>(() => command.Execute(new List <string>()
            {
                "Name", "0", "0", "Invalid form"
            }));
        }
예제 #4
0
        public void ReturnSuccessMessageContainingStudentsIdAndSeasonId_WhenPassedCourseFormIsOnlineAndParamsAreValid()
        {
            // arrange
            var factoryStub = new Mock <IAcademyFactory>();
            var engineStub  = new Mock <IEngine>();

            string studentToAddUsername = "******";
            string seasonId             = "0";
            string courseId             = "0";
            string form = "online";

            var inputParameters = new List <string>()
            {
                studentToAddUsername,
                seasonId,
                courseId,
                form
            };

            var studentToAddStub = new Mock <IStudent>();

            studentToAddStub.Setup(x => x.Username).Returns(studentToAddUsername);
            var engineStudents = new List <IStudent>()
            {
                studentToAddStub.Object
            };

            engineStub.Setup(x => x.Students).Returns(engineStudents);

            var courseStub     = new Mock <ICourse>();
            var onlineStudents = new List <IStudent>();

            courseStub.Setup(x => x.OnlineStudents).Returns(onlineStudents);
            var seasonCourses = new List <ICourse>()
            {
                courseStub.Object
            };

            var seasonStub = new Mock <ISeason>();

            seasonStub.Setup(x => x.Courses).Returns(seasonCourses);

            var engineSeasons = new List <ISeason>()
            {
                seasonStub.Object
            };

            engineStub.Setup(x => x.Seasons).Returns(engineSeasons);

            var command = new AddStudentToCourseCommand(factoryStub.Object, engineStub.Object);

            // act
            var result = command.Execute(inputParameters);

            // assert
            StringAssert.Contains(studentToAddUsername, result);
            StringAssert.Contains("0", result);
        }
예제 #5
0
        public void AddStudentToOnsiteStudents_WhenPassedCourseFormIsOnsiteAndParamsAreValid()
        {
            // arrange
            var factoryStub = new Mock <IAcademyFactory>();
            var engineStub  = new Mock <IEngine>();

            string studentToAddUsername = "******";
            string seasonId             = "0";
            string courseId             = "0";
            string form = "onsite";

            var inputParameters = new List <string>()
            {
                studentToAddUsername,
                seasonId,
                courseId,
                form
            };

            var studentToAddStub = new Mock <IStudent>();

            studentToAddStub.Setup(x => x.Username).Returns(studentToAddUsername);
            var engineStudents = new List <IStudent>()
            {
                studentToAddStub.Object
            };

            engineStub.Setup(x => x.Students).Returns(engineStudents);

            var courseStub     = new Mock <ICourse>();
            var onsiteStudents = new List <IStudent>();

            courseStub.Setup(x => x.OnsiteStudents).Returns(onsiteStudents);
            var seasonCourses = new List <ICourse>()
            {
                courseStub.Object
            };

            var seasonStub = new Mock <ISeason>();

            seasonStub.Setup(x => x.Courses).Returns(seasonCourses);

            var engineSeasons = new List <ISeason>()
            {
                seasonStub.Object
            };

            engineStub.Setup(x => x.Seasons).Returns(engineSeasons);

            var command = new AddStudentToCourseCommand(factoryStub.Object, engineStub.Object);

            // act
            command.Execute(inputParameters);

            // assert
            Assert.AreSame(studentToAddStub.Object, onsiteStudents.First());
        }
        public void Execute_WhenAllPassedParametersAreValid_ShouldReturnSuccessMessageThatContainsStudetnsIdAndUsername()
        {
            string username = "******";
            string seasonId = "0";
            string courseId = "0";
            string form     = "onsite";

            var parameters = new List <string>()
            {
                username,
                seasonId,
                courseId,
                form
            };

            var factoryStub = new Mock <IAcademyFactory>();
            var engineStub  = new Mock <IEngine>();

            var studentStub = new Mock <IStudent>();

            studentStub.Setup(x => x.Username).Returns("username");
            var engineStudents = new List <IStudent>()
            {
                studentStub.Object
            };

            var seasonStub = new Mock <ISeason>();
            var courseStub = new Mock <ICourse>();

            var courseStudents = new List <IStudent>();

            courseStub.Setup(x => x.OnlineStudents).Returns(courseStudents);
            courseStub.Setup(x => x.OnsiteStudents).Returns(courseStudents);

            var seasonCourses = new List <ICourse>()
            {
                courseStub.Object
            };

            seasonStub.Setup(x => x.Courses).Returns(seasonCourses);
            var engineSeasons = new List <ISeason>()
            {
                seasonStub.Object
            };

            engineStub.Setup(x => x.Students).Returns(engineStudents);
            engineStub.Setup(x => x.Seasons).Returns(engineSeasons);

            var command = new AddStudentToCourseCommand(factoryStub.Object, engineStub.Object);

            string returnedResult = command.Execute(parameters);

            StringAssert.Contains(username, returnedResult);
            StringAssert.Contains(seasonId, returnedResult);
        }
        public void Constructor_WhenPassedValidParameters_ShouldAssignThemCorrectly()
        {
            // arrange
            var factoryStub = new Mock <IAcademyFactory>();
            var engineStub  = new Mock <IEngine>();
            var command     = new AddStudentToCourseCommand(factoryStub.Object, engineStub.Object);

            // act and assert
            Assert.AreSame(command.Engine, engineStub.Object);
            Assert.AreSame(command.Factory, factoryStub.Object);
        }
        public void Execute_WhenAllParametersAreValidAndFormIsOnline_ShouldAddStudentToCoursesOnlineStudens()
        {
            string username = "******";
            string seasonId = "0";
            string courseId = "0";
            string form     = "online";

            var parameters = new List <string>()
            {
                username,
                seasonId,
                courseId,
                form
            };

            var factoryStub = new Mock <IAcademyFactory>();
            var engineStub  = new Mock <IEngine>();

            var studentStub = new Mock <IStudent>();

            studentStub.Setup(x => x.Username).Returns("username");
            var engineStudents = new List <IStudent>()
            {
                studentStub.Object
            };

            var seasonStub = new Mock <ISeason>();
            var courseStub = new Mock <ICourse>();

            var courseStudents = new List <IStudent>();

            courseStub.Setup(x => x.OnlineStudents).Returns(courseStudents);
            courseStub.Setup(x => x.OnsiteStudents).Returns(courseStudents);

            var seasonCourses = new List <ICourse>()
            {
                courseStub.Object
            };

            seasonStub.Setup(x => x.Courses).Returns(seasonCourses);
            var engineSeasons = new List <ISeason>()
            {
                seasonStub.Object
            };

            engineStub.Setup(x => x.Students).Returns(engineStudents);
            engineStub.Setup(x => x.Seasons).Returns(engineSeasons);

            var command = new AddStudentToCourseCommand(factoryStub.Object, engineStub.Object);

            command.Execute(parameters);

            Assert.AreSame(courseStub.Object.OnlineStudents[0], studentStub.Object);
        }
        private Command AddStudent(string textCommandLine)
        {
            var split        = textCommandLine.Split(' ');
            var studentEmail = split[split.Length - 1];

            return(new Command(() =>
            {
                var addStudentToCourseCommand = new AddStudentToCourseCommand(_courseService, _course.Id, studentEmail);
                addStudentToCourseCommand.Execute();
                return addStudentToCourseCommand.Result;
            }, CommandType.AddStudent));
        }
        public void Execute_WhenPassedFormIsInvalid_ShouldThrowArgumentException()
        {
            string username = "******";
            string seasonId = "0";
            string courseId = "0";
            string form     = "invalidform";

            var parameters = new List <string>()
            {
                username,
                seasonId,
                courseId,
                form
            };

            var factoryStub = new Mock <IAcademyFactory>();
            var engineStub  = new Mock <IEngine>();

            var studentStub = new Mock <IStudent>();

            studentStub.Setup(x => x.Username).Returns("username");
            var engineStudents = new List <IStudent>()
            {
                studentStub.Object
            };

            var seasonStub = new Mock <ISeason>();
            var courseStub = new Mock <ICourse>();

            var courseStudents = new List <IStudent>();

            courseStub.Setup(x => x.OnlineStudents).Returns(courseStudents);
            courseStub.Setup(x => x.OnsiteStudents).Returns(courseStudents);

            var seasonCourses = new List <ICourse>()
            {
                courseStub.Object
            };

            seasonStub.Setup(x => x.Courses).Returns(seasonCourses);
            var engineSeasons = new List <ISeason>()
            {
                seasonStub.Object
            };

            engineStub.Setup(x => x.Students).Returns(engineStudents);
            engineStub.Setup(x => x.Seasons).Returns(engineSeasons);

            var command = new AddStudentToCourseCommand(factoryStub.Object, engineStub.Object);

            Assert.Throws <ArgumentException>(() => command.Execute(parameters));
        }
예제 #11
0
        public void AddCorrectlyOnsiteStudents_WhenTheParametersAreOk()
        {
            // Arrange
            var factoryMock = new Mock <IAcademyFactory>();
            var engineMock  = new Mock <IEngine>();
            var fixture     = new Fixture();

            fixture.Register <string>(() => "Pesho");
            fixture.Register <int>(() => 5);
            fixture.Register <float>(() => 5f);
            fixture.Customizations.Add(new TypeRelay(typeof(ICourseResult), typeof(CourseResult)));
            fixture.Customizations.Add(new TypeRelay(typeof(ICourse), typeof(Course)));

            var studentStub = fixture.Create <Student>();



            engineMock.Setup(x => x.Students)
            .Returns(new List <IStudent>()
            {
                studentStub
            });

            var mockedSeason = new Mock <ISeason>();

            var mockedCourse = new Mock <ICourse>();

            mockedCourse.Setup(x => x.OnlineStudents).Returns(new List <IStudent>());
            mockedCourse.Setup(x => x.OnsiteStudents).Returns(new List <IStudent>());

            mockedSeason.Setup(x => x.Courses)
            .Returns(new List <ICourse>()
            {
                mockedCourse.Object
            });

            engineMock.Setup(x => x.Seasons)
            .Returns(new List <ISeason>()
            {
                mockedSeason.Object
            });

            var command = new AddStudentToCourseCommand(factoryMock.Object, engineMock.Object);

            // Act & Assert
            var result = command.Execute(new List <string>()
            {
                "Pesho", "0", "0", "onsite"
            });

            Assert.AreEqual(1, mockedCourse.Object.OnsiteStudents.Count);
        }
예제 #12
0
        public void ThrowArgumentException_WhenPassedCourseFormIsInvalid()
        {
            // arrange
            var factoryStub = new Mock <IAcademyFactory>();
            var engineStub  = new Mock <IEngine>();

            string studentToAddUsername = "******";
            string seasonId             = "0";
            string courseId             = "0";
            string form = "invalid form";

            var inputParameters = new List <string>()
            {
                studentToAddUsername,
                seasonId,
                courseId,
                form
            };

            var studentToAddStub = new Mock <IStudent>();

            studentToAddStub.Setup(x => x.Username).Returns(studentToAddUsername);
            var engineStudents = new List <IStudent>()
            {
                studentToAddStub.Object
            };

            engineStub.Setup(x => x.Students).Returns(engineStudents);

            var courseStub    = new Mock <ICourse>();
            var seasonCourses = new List <ICourse>()
            {
                courseStub.Object
            };

            var seasonStub = new Mock <ISeason>();

            seasonStub.Setup(x => x.Courses).Returns(seasonCourses);

            var engineSeasons = new List <ISeason>()
            {
                seasonStub.Object
            };

            engineStub.Setup(x => x.Seasons).Returns(engineSeasons);

            var command = new AddStudentToCourseCommand(factoryStub.Object, engineStub.Object);

            // act and assert
            Assert.Throws <ArgumentException>(() => command.Execute(inputParameters));
        }
예제 #13
0
        public void Execute_ShouldReturnCorrectSuccessMessage_WhenThePassedCourseFormIsInvalid()
        {
            //Arrange
            var factoryStub = new Mock <IAcademyFactory>();
            var engineMock  = new Mock <IEngine>();
            var parameters  = new List <string>()
            {
                "username", "0", "0", "onsite"
            };

            var studentMock = new Mock <IStudent>();

            studentMock.SetupGet(x => x.Username).Returns("username");
            var engineStudents = new List <IStudent>()
            {
                studentMock.Object
            };

            engineMock.SetupGet(x => x.Students).Returns(engineStudents);

            var courseMock     = new Mock <ICourse>();
            var onsiteStudents = new List <IStudent>();

            courseMock.SetupGet(x => x.OnsiteStudents).Returns(onsiteStudents);
            var courses = new List <ICourse>()
            {
                courseMock.Object
            };

            var seasonMock = new Mock <ISeason>();

            seasonMock.SetupGet(x => x.Courses).Returns(courses);
            var seasons = new List <ISeason>()
            {
                seasonMock.Object
            };

            engineMock.SetupGet(x => x.Seasons).Returns(seasons);

            var command = new AddStudentToCourseCommand(factoryStub.Object, engineMock.Object);

            // Act
            var message = command.Execute(parameters);

            // Assert
            StringAssert.Contains("username", message);
            StringAssert.Contains("0", message);
        }
예제 #14
0
        public void Execute_AddTheStudentInTheOnlinedAttendanceForm_ShouldRetrunCorrectMessage()
        {
            // Arrange
            var engineMock    = new Mock <IEngine>();
            var factoryMock   = new Mock <IAcademyFactory>();
            var courseCommand = new AddStudentToCourseCommand(factoryMock.Object, engineMock.Object);

            var studentMock = new Mock <IStudent>();

            studentMock.SetupGet(st => st.Username).Returns("Name");

            var courseMock = new Mock <ICourse>();

            courseMock.SetupGet(c => c.Name).Returns("Course");
            courseMock.SetupGet(c => c.OnlineStudents).Returns(new List <IStudent>()
            {
            });
            courseMock.SetupGet(c => c.OnsiteStudents).Returns(new List <IStudent>()
            {
            });

            var seasonMock = new Mock <ISeason>();

            seasonMock.SetupGet(s => s.Courses).Returns(new List <ICourse>()
            {
                courseMock.Object
            });

            engineMock.SetupGet(e => e.Students).Returns(new List <IStudent>()
            {
                studentMock.Object
            });
            engineMock.SetupGet(e => e.Seasons).Returns(new List <ISeason>()
            {
                seasonMock.Object
            });

            // Act
            var command = courseCommand.Execute(new List <string>()
            {
                "Name", "0", "0", "online"
            });

            // Assert
            StringAssert.Contains("Name", command);
            StringAssert.Contains("0", command);
            StringAssert.Contains("Course", command);
        }
예제 #15
0
        public void Execute_ShouldCorrectlyAddIntoTheOnlineCourse_WhenThePassedCourseFormIsInvalid()
        {
            //Arrange
            var factoryStub = new Mock <IAcademyFactory>();
            var engineMock  = new Mock <IEngine>();
            var parameters  = new List <string>()
            {
                "username", "0", "0", "online"
            };

            var studentMock = new Mock <IStudent>();

            studentMock.SetupGet(x => x.Username).Returns("username");
            var engineStudents = new List <IStudent>()
            {
                studentMock.Object
            };

            engineMock.SetupGet(x => x.Students).Returns(engineStudents);

            var courseMock     = new Mock <ICourse>();
            var onlineStudents = new List <IStudent>();

            courseMock.SetupGet(x => x.OnlineStudents).Returns(onlineStudents);
            var courses = new List <ICourse>()
            {
                courseMock.Object
            };

            var seasonMock = new Mock <ISeason>();

            seasonMock.SetupGet(x => x.Courses).Returns(courses);
            var seasons = new List <ISeason>()
            {
                seasonMock.Object
            };

            engineMock.SetupGet(x => x.Seasons).Returns(seasons);

            var command = new AddStudentToCourseCommand(factoryStub.Object, engineMock.Object);

            // Act
            command.Execute(parameters);

            // Assert
            Assert.AreEqual(1, onlineStudents.Count);
        }
예제 #16
0
        public void AddCorrectlyOnlineStudents_WhenTheParametersAreOk()
        {
            // Arrange
            var factoryMock = new Mock <IAcademyFactory>();
            var engineMock  = new Mock <IEngine>();

            var mockedStudent = new Mock <IStudent>();

            mockedStudent.SetupGet(x => x.Username).Returns("Pesho");

            engineMock.Setup(x => x.Students)
            .Returns(new List <IStudent>()
            {
                mockedStudent.Object
            });

            var mockedSeason = new Mock <ISeason>();

            var mockedCourse = new Mock <ICourse>();

            mockedCourse.Setup(x => x.OnlineStudents).Returns(new List <IStudent>());
            mockedCourse.Setup(x => x.OnsiteStudents).Returns(new List <IStudent>());

            mockedSeason.Setup(x => x.Courses)
            .Returns(new List <ICourse>()
            {
                mockedCourse.Object
            });

            engineMock.Setup(x => x.Seasons)
            .Returns(new List <ISeason>()
            {
                mockedSeason.Object
            });

            var command = new AddStudentToCourseCommand(factoryMock.Object, engineMock.Object);

            // Act & Assert
            var result = command.Execute(new List <string>()
            {
                "Pesho", "0", "0", "online"
            });

            Assert.AreEqual(1, mockedCourse.Object.OnlineStudents.Count);
        }
예제 #17
0
        public void ThrowArgumentException_WhenTheFormOfEducationIsNotAvailable()
        {
            // Arrange
            var factoryMock = new Mock <IAcademyFactory>();
            var engineMock  = new Mock <IEngine>();

            var mockedStudent = new Mock <IStudent>();

            mockedStudent.SetupGet(x => x.Username).Returns("Pesho");

            engineMock.Setup(x => x.Students)
            .Returns(new List <IStudent>()
            {
                mockedStudent.Object
            });

            var mockedSeason = new Mock <ISeason>();

            var mockedCourse = new Mock <ICourse>();

            mockedCourse.Setup(x => x.OnlineStudents).Returns(new List <IStudent>());
            mockedCourse.Setup(x => x.OnsiteStudents).Returns(new List <IStudent>());

            mockedSeason.Setup(x => x.Courses)
            .Returns(new List <ICourse>()
            {
                mockedCourse.Object
            });

            engineMock.Setup(x => x.Seasons)
            .Returns(new List <ISeason>()
            {
                mockedSeason.Object
            });

            var command = new AddStudentToCourseCommand(factoryMock.Object, engineMock.Object);

            // Act & Assert

            Assert.Throws <ArgumentException>(() => command.Execute(new List <string>()
            {
                "Pesho", "0", "0", "on and on"
            }));
        }
예제 #18
0
        public void Execute_ShouldReturnSuccessMessageContainingStudentUsernameAndSeasonId_WhenStudentIsAdded()
        {
            // Arrange
            var factoryStub = new Mock <IAcademyFactory>();
            var engineMock  = new Mock <IEngine>();
            var command     = new AddStudentToCourseCommand(factoryStub.Object, engineMock.Object);

            var studentStub = new Mock <IStudent>();
            var seasonStub  = new Mock <ISeason>();
            var courseStub  = new Mock <ICourse>();

            studentStub.SetupGet(s => s.Username).Returns("Pesho");

            seasonStub.SetupGet(s => s.Students).Returns(new List <IStudent> {
                studentStub.Object
            });
            seasonStub.SetupGet(s => s.Courses).Returns(new List <ICourse> {
                courseStub.Object
            });

            courseStub.SetupGet(c => c.OnsiteStudents).Returns(new List <IStudent>());

            engineMock.SetupGet(e => e.Students).Returns(new List <IStudent> {
                studentStub.Object
            });
            engineMock.SetupGet(e => e.Seasons).Returns(new List <ISeason> {
                seasonStub.Object
            });

            string validStudentUsername = "******";
            string validSeasonId        = "0";
            string validCourseId        = "0";
            string validForm            = "onsite";
            var    parameters           = new List <string> {
                validStudentUsername, validSeasonId, validCourseId, validForm
            };
            // Act
            string resultMessage = command.Execute(parameters);

            // Assert
            StringAssert.Contains(validStudentUsername, resultMessage);
            StringAssert.Contains(validSeasonId, resultMessage);
        }
예제 #19
0
        public void Execute_ShouldCorrectlyAddStudentIntoCourseInTheOnlineForm_WhenPassedCourseFormIsOnline()
        {
            // Arrange
            var factoryStub = new Mock <IAcademyFactory>();
            var engineMock  = new Mock <IEngine>();
            var command     = new AddStudentToCourseCommand(factoryStub.Object, engineMock.Object);

            var studentStub = new Mock <IStudent>();
            var seasonStub  = new Mock <ISeason>();
            var courseStub  = new Mock <ICourse>();

            studentStub.SetupGet(s => s.Username).Returns("Pesho");

            seasonStub.SetupGet(s => s.Students).Returns(new List <IStudent> {
                studentStub.Object
            });
            seasonStub.SetupGet(s => s.Courses).Returns(new List <ICourse> {
                courseStub.Object
            });

            courseStub.SetupGet(c => c.OnlineStudents).Returns(new List <IStudent>());

            engineMock.SetupGet(e => e.Students).Returns(new List <IStudent> {
                studentStub.Object
            });
            engineMock.SetupGet(e => e.Seasons).Returns(new List <ISeason> {
                seasonStub.Object
            });

            string validStudentUsername = "******";
            string validSeasonId        = "0";
            string validCourseId        = "0";
            string validForm            = "online";
            var    parameters           = new List <string> {
                validStudentUsername, validSeasonId, validCourseId, validForm
            };

            // Act
            command.Execute(parameters);
            // Assert
            Assert.AreSame(studentStub.Object.Username, engineMock.Object.Seasons[0].Courses[0].OnlineStudents[0].Username);
        }
예제 #20
0
        public void Execute_ShouldThrow_WhenThePassedCourseFormIsInvalid()
        {
            //Arrange
            var factoryStub = new Mock <IAcademyFactory>();
            var engineMock  = new Mock <IEngine>();
            var parameters  = new List <string>()
            {
                "username", "0", "0", "invalid form"
            };

            var studentMock = new Mock <IStudent>();

            studentMock.SetupGet(x => x.Username).Returns("username");
            var engineStudents = new List <IStudent>()
            {
                studentMock.Object
            };

            engineMock.SetupGet(x => x.Students).Returns(engineStudents);

            var courseMock = new Mock <ICourse>();
            var courses    = new List <ICourse>()
            {
                courseMock.Object
            };

            var seasonMock = new Mock <ISeason>();

            seasonMock.SetupGet(x => x.Courses).Returns(courses);
            var seasons = new List <ISeason>()
            {
                seasonMock.Object
            };

            engineMock.SetupGet(x => x.Seasons).Returns(seasons);

            var command = new AddStudentToCourseCommand(factoryStub.Object, engineMock.Object);

            // Act & Assert
            Assert.Throws <ArgumentException>(() => command.Execute(parameters));
        }
예제 #21
0
        public void Execute_ShouldNotThrowArgumentException_WhenPassedCourseFormIsValid(string form)
        {
            // Arrange
            var factoryStub = new Mock <IAcademyFactory>();
            var engineStub  = new Mock <IEngine>();
            var command     = new AddStudentToCourseCommand(factoryStub.Object, engineStub.Object);

            var studentStub = new Mock <IStudent>();
            var seasonStub  = new Mock <ISeason>();
            var courseStub  = new Mock <ICourse>();

            studentStub.SetupGet(s => s.Username).Returns("Pesho");
            seasonStub.SetupGet(s => s.Students).Returns(new List <IStudent> {
                studentStub.Object
            });
            seasonStub.SetupGet(s => s.Courses).Returns(new List <ICourse> {
                courseStub.Object
            });
            courseStub.SetupGet(c => c.OnlineStudents).Returns(new List <IStudent>());
            courseStub.SetupGet(c => c.OnsiteStudents).Returns(new List <IStudent>());

            engineStub.SetupGet(e => e.Students).Returns(new List <IStudent> {
                studentStub.Object
            });
            engineStub.SetupGet(e => e.Seasons).Returns(new List <ISeason> {
                seasonStub.Object
            });

            string validStudentUsername = "******";
            string validSeasonId        = "0";
            string validCourseId        = "0";
            var    parameters           = new List <string> {
                validStudentUsername, validSeasonId, validCourseId, form
            };

            // Act and Assert
            Assert.DoesNotThrow(() => command.Execute(parameters));
        }
예제 #22
0
        public void ReturnSuccessMessage_WhenDataIsAddedToCollection()
        {
            var factoryMock        = new Mock <IAcademyFactory>();
            var engineMock         = new Mock <IEngine>();
            var studentMock        = new Mock <IStudent>();
            var courseMock         = new Mock <ICourse>();
            var seasonMock         = new Mock <ISeason>();
            var anotherStudentMock = new Mock <IStudent>();

            studentMock.Setup(x => x.Username).Returns("Name");
            anotherStudentMock.Setup(x => x.Username).Returns("Another name");
            engineMock.Setup(x => x.Students).Returns(new List <IStudent>()
            {
                studentMock.Object
            });
            courseMock.Setup(x => x.OnlineStudents).Returns(new List <IStudent>()
            {
                anotherStudentMock.Object
            });
            engineMock.Setup(x => x.Seasons).Returns(new List <ISeason>()
            {
                seasonMock.Object
            });
            seasonMock.Setup(x => x.Courses).Returns(new List <ICourse>()
            {
                courseMock.Object
            });
            var command = new AddStudentToCourseCommand(factoryMock.Object, engineMock.Object);

            var result = command.Execute(new List <string>()
            {
                "Name", "0", "0", "online"
            });

            StringAssert.Contains("Name", result);
            StringAssert.Contains("0", result);
        }
예제 #23
0
        public void CorrectlyAddTheFoundStudentIntoTheCourse_WhenThePassedCourseFormIsalid()
        {
            var factoryMock        = new Mock <IAcademyFactory>();
            var engineMock         = new Mock <IEngine>();
            var studentMock        = new Mock <IStudent>();
            var courseMock         = new Mock <ICourse>();
            var seasonMock         = new Mock <ISeason>();
            var anotherStudentMock = new Mock <IStudent>();

            studentMock.Setup(x => x.Username).Returns("Name");
            anotherStudentMock.Setup(x => x.Username).Returns("Another name");
            engineMock.Setup(x => x.Students).Returns(new List <IStudent>()
            {
                studentMock.Object
            });
            courseMock.Setup(x => x.OnlineStudents).Returns(new List <IStudent>()
            {
                anotherStudentMock.Object
            });
            engineMock.Setup(x => x.Seasons).Returns(new List <ISeason>()
            {
                seasonMock.Object
            });
            seasonMock.Setup(x => x.Courses).Returns(new List <ICourse>()
            {
                courseMock.Object
            });
            var command = new AddStudentToCourseCommand(factoryMock.Object, engineMock.Object);

            command.Execute(new List <string>()
            {
                "Name", "0", "0", "online"
            });

            Assert.AreEqual(2, courseMock.Object.OnlineStudents.Count);
        }
예제 #24
0
        static void Main(string[] args)
        {
            var configuration = new ConfigurationBuilder()
                                .SetBasePath(Directory.GetCurrentDirectory())
                                .AddJsonFile("appsettings.json", optional: false)
                                .Build();

            var courseService = new CourseService(
                privateKeyPath: configuration.GetSection("PrivateKeyPath").Value,
                emailToImpersonate: configuration.GetSection("AdminEmail").Value,
                scopes: new string[] { Scope.ClassroomCourses, Scope.ClassroomProfileEmails, Scope.ClassroomRosters }
                );

            Parser.Default.ParseArguments <AddStudentOptions,
                                           ExecuteCommandListOptions>
                (args)
            .WithParsed <AddStudentOptions>(opts =>
            {
                var addStudentToCourseCommand = new AddStudentToCourseCommand(
                    courseService: courseService,
                    courseId: opts.CourseId,
                    studentEmail: opts.Email
                    );

                addStudentToCourseCommand.Execute();
            })
            .WithParsed <ExecuteCommandListOptions>(opts =>
            {
                var logger = new Logger();
                var queue  = new QueueProcessor(logger);

                var textToCommandParser = new TextToCommandParser(courseService, logger);

                using (var reader = new StreamReader(opts.Path))
                {
                    string line;

                    while ((line = reader.ReadLine()) != null)
                    {
                        var command = textToCommandParser.Parse(line);
                        var node    = new Node(command);

                        if (node.Command.CommandType == CommandType.AddStudent)
                        {
                            var queueLastNode = queue.Queue.Last();
                            queueLastNode.Children.Add(node);
                        }
                        else
                        {
                            queue.Enqueue(node);
                        }
                    }
                }

                queue.ProcessQueue();

                if (queue.HasAnyNodeFailed && opts.Reprocess)
                {
                    queue.ReprocessFailedQueue();
                }
            })
            .WithNotParsed(errors =>
            {
                foreach (var error in errors)
                {
                    Console.WriteLine(error.ToString());
                }
            });
        }