Exemplo n.º 1
0
            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);
            }
Exemplo n.º 2
0
            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);
            }
Exemplo n.º 3
0
            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();
            }
Exemplo n.º 4
0
            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);
            }
Exemplo n.º 5
0
            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();
            }
Exemplo n.º 6
0
            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>());
            }
Exemplo n.º 7
0
            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);
            }
Exemplo n.º 8
0
            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);
            }
Exemplo n.º 9
0
            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);
            }
Exemplo n.º 10
0
            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);
            }
Exemplo n.º 11
0
            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);
            }
Exemplo n.º 12
0
            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);
            }
Exemplo n.º 13
0
            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 _
                    );
            }
Exemplo n.º 14
0
            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 _
                    );
            }
Exemplo n.º 15
0
            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>());
            }