public void Its_Grade_is_being_mapped_and_set(string inputGrade, decimal expectedGrade) { var rawCourse = new RawCourse { Grade = inputGrade }; var result = Course.FromRawCourse(rawCourse, DateTime.UtcNow); result.Grade.ShouldBe(expectedGrade); }
public void Its_Module_is_set() { var rawCourse = new RawCourse { Module = Guid.NewGuid().ToString() }; var result = Course.FromRawCourse(rawCourse, DateTime.UtcNow); result.Module.ShouldBe(rawCourse.Module); }
public void IsPassed_is_false_when_the_Course_has_not_been_passed(string inputGrade) { var rawCourse = new RawCourse { Grade = inputGrade }; var result = Course.FromRawCourse(rawCourse, DateTime.UtcNow); result.IsPassed.ShouldBeFalse(); }
public void Its_Id_is_set() { var rawCourse = new RawCourse { Id = Guid.NewGuid().ToString() }; var result = Course.FromRawCourse(rawCourse, DateTime.UtcNow); result.Id.ShouldBe(rawCourse.Id); }
public void IsPassed_is_true_when_a_grade_is_provided(string inputGrade) { var rawCourse = new RawCourse { Grade = inputGrade }; var result = Course.FromRawCourse(rawCourse, DateTime.UtcNow); result.IsPassed.ShouldBeTrue(); }
public async Task Removed_Courses_are_being_filtered_and_removed_from_the_Database() { var modifiedCourse = new RawCourse { Id = "Course02" }; var parser = Substitute.For <ICoursePageHtmlParser>(); parser.TryParseCoursePage(Arg.Any <string>()).Returns( Result.WithSuccess( new[] { modifiedCourse } ) ); var repository = Substitute.For <ICourseRepository>(); repository.All().Returns( new[] { new Course { Id = "Course01" } } ); var unitOfWork = Substitute.For <IUnitOfWork>(); var session = Substitute.For <IUnitOfWorkSession>(); unitOfWork.OpenSession().Returns(session); session.Commit().Returns(Result.Success); var sut = CreateCourseUpdater( parser: parser, repository: repository, unitOfWork: unitOfWork ); var result = await sut.TryUpdateAsync().ConfigureAwait(false); result.ShouldBeSuccessful(); session.Received().Remove(Arg.Is <Course>(c => c.Id == "Course01")); session.Received().Add(Arg.Is <Course>(c => c.Id == "Course02")); session.DidNotReceive().Update(Arg.Any <Course>()); }
public void Its_LastUpdate_Date_is_set() { var lastUpdate = DateTime.UtcNow; var rawCourse = new RawCourse { Id = Guid.NewGuid().ToString() }; var result = Course.FromRawCourse(rawCourse, lastUpdate); result.DateOfLastUpdate.ShouldBe(lastUpdate); }
public void Its_Status_is_being_mapped_and_set( string statusCode, CourseStatus expectedStatus ) { var rawCourse = new RawCourse { Status = statusCode }; var result = Course.FromRawCourse(rawCourse, DateTime.UtcNow); result.Status.ShouldBe(expectedStatus); }
public void Its_Attempts_are_being_mapped_and_set( string inputAttempts, int expectedResult ) { var rawCourse = new RawCourse { Attempts = inputAttempts }; var result = Course.FromRawCourse(rawCourse, DateTime.UtcNow); result.Attempts.ShouldBe(expectedResult); }
public void Its_Rating_is_being_mapped_and_set( string ratingInput, decimal expectedResult ) { var rawCourse = new RawCourse { Rating = ratingInput }; var result = Course.FromRawCourse(rawCourse, DateTime.UtcNow); result.Rating.ShouldBe(expectedResult); }
public void Its_Date_of_Examination_is_being_mapped_and_set( string inputDate, int expectedYear, int expectedMonth, int expectedDay ) { var rawCourse = new RawCourse { DateOfExamination = inputDate }; var result = Course.FromRawCourse(rawCourse, DateTime.UtcNow); result.DateOfExamination.Year.ShouldBe(expectedYear); result.DateOfExamination.Month.ShouldBe(expectedMonth); result.DateOfExamination.Day.ShouldBe(expectedDay); }
public async Task When_Database_Updates_cannot_be_commited() { var addedRawCourse = new RawCourse { Id = "Course01" }; var parser = Substitute.For <ICoursePageHtmlParser>(); parser.TryParseCoursePage(Arg.Any <string>()).Returns( Result.WithSuccess( new[] { addedRawCourse } ) ); var repository = Substitute.For <ICourseRepository>(); repository.All().Returns(new Course[0]); var unitOfWork = Substitute.For <IUnitOfWork>(); var session = Substitute.For <IUnitOfWorkSession>(); unitOfWork.OpenSession().Returns(session); string errorMessage = Guid.NewGuid().ToString(); session.Commit().Returns(Result.WithError(errorMessage)); var sut = CreateCourseUpdater( parser: parser, repository: repository, unitOfWork: unitOfWork ); var result = await sut.TryUpdateAsync().ConfigureAwait(false); result.ShouldNotBeSuccessful(); result.ErrorMessage.ShouldBe(errorMessage); }
public async Task The_currrent_UTC_DateTime_now_is_being_used_if_they_dont_exist_yet() { DateTime utcNow = DateTime.UtcNow; var addedCourse = new RawCourse { Id = "Course01" }; var parser = Substitute.For <ICoursePageHtmlParser>(); parser.TryParseCoursePage(Arg.Any <string>()).Returns( Result.WithSuccess( new[] { addedCourse } ) ); var comparer = Substitute.For <ICourseSetComparer>(); comparer.WhenForAnyArgs( x => x.Compare( Arg.Any <Course[]>(), Arg.Any <Course[]>(), out Arg.Any <Course[]>(), out Arg.Any <Course[]>(), out Arg.Any <Course[]>() ) ).Do( x => { x[2] = new Course[0]; x[3] = new Course[0]; x[4] = new Course[0]; } ); var dateTime = Substitute.For <IDateTimeUtility>(); dateTime.UtcNow.Returns(utcNow); var sut = CreateCourseUpdater( parser: parser, comparer: comparer, dateTime: dateTime ); var result = await sut.TryUpdateAsync().ConfigureAwait(false); result.ShouldBeSuccessful(); comparer.Received().Compare( Arg.Any <Course[]>(), Arg.Is <Course[]>(x => x.Length == 1 && x[0].DateOfLastUpdate == utcNow), out _, out _, out _ ); }
public async Task Their_existing_update_date_is_being_used_if_any() { DateTime lastUpdate = DateTime.UtcNow; var modifiedCourse = new RawCourse { Id = "Course01" }; var parser = Substitute.For <ICoursePageHtmlParser>(); parser.TryParseCoursePage(Arg.Any <string>()).Returns( Result.WithSuccess( new[] { modifiedCourse } ) ); var repository = Substitute.For <ICourseRepository>(); repository.All().Returns( new[] { new Course { Id = "Course01", DateOfLastUpdate = lastUpdate } } ); var comparer = Substitute.For <ICourseSetComparer>(); comparer.WhenForAnyArgs( x => x.Compare( Arg.Any <Course[]>(), Arg.Any <Course[]>(), out Arg.Any <Course[]>(), out Arg.Any <Course[]>(), out Arg.Any <Course[]>() ) ).Do( x => { x[2] = new Course[0]; x[3] = new Course[0]; x[4] = new Course[0]; } ); var sut = CreateCourseUpdater( parser: parser, comparer: comparer, repository: repository ); var result = await sut.TryUpdateAsync().ConfigureAwait(false); result.ShouldBeSuccessful(); comparer.Received().Compare( Arg.Any <Course[]>(), Arg.Is <Course[]>(x => x.Length == 1 && x[0].DateOfLastUpdate == lastUpdate), out _, out _, out _ ); }
public async Task Modified_Courses_are_being_filtered_and_updated_in_the_Database() { var modifiedCourse = new RawCourse { Id = "Course01", Title = "New Title" }; var parser = Substitute.For <ICoursePageHtmlParser>(); parser.TryParseCoursePage(Arg.Any <string>()).Returns( Result.WithSuccess( new[] { modifiedCourse } ) ); var repository = Substitute.For <ICourseRepository>(); repository.All().Returns( new[] { new Course { Id = "Course01", Title = "Old Title" } } ); var unitOfWork = Substitute.For <IUnitOfWork>(); var session = Substitute.For <IUnitOfWorkSession>(); unitOfWork.OpenSession().Returns(session); session.Commit().Returns(Result.Success); var utcNow = DateTime.UtcNow; var dateTime = Substitute.For <IDateTimeUtility>(); dateTime.UtcNow.Returns(utcNow); var sut = CreateCourseUpdater( parser: parser, repository: repository, unitOfWork: unitOfWork, dateTime: dateTime ); var result = await sut.TryUpdateAsync().ConfigureAwait(false); result.ShouldBeSuccessful(); // Last Update must be "updated session.Received().Update( Arg.Is <Course>(c => c.Id == modifiedCourse.Id && c.DateOfLastUpdate == utcNow) ); session.DidNotReceive().Add(Arg.Any <Course>()); session.DidNotReceive().Remove(Arg.Any <Course>()); }