public async Task StartDateEmptyWithFlexibleFalse_ReturnsValidationError()
        {
            // Arrange
            var allRegions = await new RegionCache(SqlQueryDispatcherFactory).GetAllRegions();

            var row = new CsvCourseRow()
            {
                StartDate         = string.Empty,
                FlexibleStartDate = "no"
            };

            var validator = new CourseUploadRowValidator(Clock, matchedVenueId: null);

            // Act
            var validationResult = validator.Validate(ParsedCsvCourseRow.FromCsvCourseRow(row, allRegions));

            // Assert
            Assert.Contains(
                validationResult.Errors,
                error => error.ErrorCode == "COURSERUN_START_DATE_REQUIRED");
        }
        public async Task AttendancePatternEmptyWithClassroomBasedDeliveryMode_ReturnsValidationError()
        {
            // Arrange
            var allRegions = await new RegionCache(SqlQueryDispatcherFactory).GetAllRegions();

            var row = new CsvCourseRow()
            {
                AttendancePattern = string.Empty,
                DeliveryMode      = "classroom based"
            };

            var validator = new CourseUploadRowValidator(Clock, matchedVenueId: null);

            // Act
            var validationResult = validator.Validate(ParsedCsvCourseRow.FromCsvCourseRow(row, allRegions));

            // Assert
            Assert.Contains(
                validationResult.Errors,
                error => error.ErrorCode == "COURSERUN_ATTENDANCE_PATTERN_REQUIRED");
        }
        public async Task ProviderVenueRefNotEmptyWithNonClassroomBasedDeliveryMode_ReturnsValidationError(string deliveryMode)
        {
            // Arrange
            var allRegions = await new RegionCache(SqlQueryDispatcherFactory).GetAllRegions();

            var row = new CsvCourseRow()
            {
                DeliveryMode     = deliveryMode,
                ProviderVenueRef = "venue"
            };

            var validator = new CourseUploadRowValidator(Clock, matchedVenueId: null);

            // Act
            var validationResult = validator.Validate(ParsedCsvCourseRow.FromCsvCourseRow(row, allRegions));

            // Assert
            Assert.Contains(
                validationResult.Errors,
                error => error.ErrorCode == "COURSERUN_PROVIDER_VENUE_REF_NOT_ALLOWED");
        }
        public async Task NationalDeliveryNotEmptyWithNonWorkBasedDeliveryMode_ReturnsValidationError(string nationalDelivery)
        {
            // Arrange
            var allRegions = await new RegionCache(SqlQueryDispatcherFactory).GetAllRegions();

            var row = new CsvCourseRow()
            {
                DeliveryMode     = "classroom based",
                NationalDelivery = nationalDelivery
            };

            var validator = new CourseUploadRowValidator(Clock, matchedVenueId: null);

            // Act
            var validationResult = validator.Validate(ParsedCsvCourseRow.FromCsvCourseRow(row, allRegions));

            // Assert
            Assert.Contains(
                validationResult.Errors,
                error => error.ErrorCode == "COURSERUN_NATIONAL_DELIVERY_NOT_ALLOWED");
        }
        public async Task SubRegionsEmptyWithNational_DoesNotReturnValidationError()
        {
            // Arrange
            var allRegions = await new RegionCache(SqlQueryDispatcherFactory).GetAllRegions();

            var row = new CsvCourseRow()
            {
                DeliveryMode     = "work based",
                NationalDelivery = "yes",
                SubRegions       = ""
            };

            var validator = new CourseUploadRowValidator(Clock, matchedVenueId: null);

            // Act
            var validationResult = validator.Validate(ParsedCsvCourseRow.FromCsvCourseRow(row, allRegions));

            // Assert
            Assert.DoesNotContain(
                validationResult.Errors,
                error => error.ErrorCode == "COURSERUN_SUBREGIONS_INVALID");
        }
        public async Task SubRegionsEmptyWithNationalFalseForNonWorkBasedDeliveryMode_DoesNotReturnRequiredValidationError(string deliveryMode)
        {
            // Arrange
            var allRegions = await new RegionCache(SqlQueryDispatcherFactory).GetAllRegions();

            var row = new CsvCourseRow()
            {
                DeliveryMode     = deliveryMode,
                NationalDelivery = "no",
                SubRegions       = string.Empty
            };

            var validator = new CourseUploadRowValidator(Clock, matchedVenueId: null);

            // Act
            var validationResult = validator.Validate(ParsedCsvCourseRow.FromCsvCourseRow(row, allRegions));

            // Assert
            Assert.DoesNotContain(
                validationResult.Errors,
                error => error.ErrorCode == "COURSERUN_SUBREGIONS_REQUIRED");
        }
        public async Task ProviderVenueRefEmptyButVenueNameNotEmpty_DoesNotReturnValidationError()
        {
            // Arrange
            var allRegions = await new RegionCache(SqlQueryDispatcherFactory).GetAllRegions();

            var row = new CsvCourseRow()
            {
                DeliveryMode     = "classroom based",
                ProviderVenueRef = string.Empty,
                VenueName        = "venue"
            };

            var validator = new CourseUploadRowValidator(Clock, matchedVenueId: null);

            // Act
            var validationResult = validator.Validate(ParsedCsvCourseRow.FromCsvCourseRow(row, allRegions));

            // Assert
            Assert.DoesNotContain(
                validationResult.Errors,
                error => error.PropertyName == nameof(CsvCourseRow.ProviderVenueRef));
        }
        public async Task ProviderVenueRefAndVenueNameEmptyWithClassroomBasedDeliveryMode_ReturnsValidationError()
        {
            // Arrange
            var allRegions = await new RegionCache(SqlQueryDispatcherFactory).GetAllRegions();

            var row = new CsvCourseRow()
            {
                DeliveryMode     = "classroom based",
                ProviderVenueRef = string.Empty,
                VenueName        = string.Empty
            };

            var validator = new CourseUploadRowValidator(Clock, matchedVenueId: null);

            // Act
            var validationResult = validator.Validate(ParsedCsvCourseRow.FromCsvCourseRow(row, allRegions));

            // Assert
            Assert.Contains(
                validationResult.Errors,
                error => error.ErrorCode == "COURSERUN_VENUE_REQUIRED");
        }
Esempio n. 9
0
            private UpsertCourseUploadRowsRecord CreateRecord(
                Guid courseId,
                Guid courseRunId,
                string learnAimRef,
                string whoThisCourseIsFor,
                string entryRequirements,
                string whatYouWillLearn,
                string howYouWillLearn,
                string whatYouWillNeedToBring,
                string howYouWillBeAssessed,
                string whereNext,
                string courseName,
                string providerCourseRef,
                string deliveryMode,
                string startDate,
                string flexibleStartDate,
                string venueName,
                string providerVenueRef,
                string nationalDelivery,
                string subRegions,
                string courseWebpage,
                string cost,
                string costDescription,
                string duration,
                string durationUnit,
                string studyMode,
                string attendancePattern,
                Guid?venueId,
                IEnumerable <string> errors = null)
            {
                var errorsArray = errors?.ToArray() ?? Array.Empty <string>();
                var isValid     = !errorsArray.Any();

                return(new UpsertCourseUploadRowsRecord()
                {
                    RowNumber = _records.Count + 2,
                    IsValid = isValid,
                    Errors = errorsArray,
                    CourseId = courseId,
                    CourseRunId = courseRunId,
                    LearnAimRef = learnAimRef,
                    WhoThisCourseIsFor = whoThisCourseIsFor,
                    EntryRequirements = entryRequirements,
                    WhatYouWillLearn = whatYouWillLearn,
                    HowYouWillLearn = howYouWillLearn,
                    WhatYouWillNeedToBring = whatYouWillNeedToBring,
                    HowYouWillBeAssessed = howYouWillBeAssessed,
                    WhereNext = whereNext,
                    CourseName = courseName,
                    ProviderCourseRef = providerCourseRef,
                    DeliveryMode = deliveryMode,
                    StartDate = startDate,
                    FlexibleStartDate = flexibleStartDate,
                    VenueName = venueName,
                    ProviderVenueRef = providerVenueRef,
                    NationalDelivery = nationalDelivery,
                    SubRegions = subRegions,
                    CourseWebpage = courseWebpage,
                    Cost = cost,
                    CostDescription = costDescription,
                    Duration = duration,
                    DurationUnit = durationUnit,
                    StudyMode = studyMode,
                    AttendancePattern = attendancePattern,
                    VenueId = venueId,
                    ResolvedDeliveryMode = ParsedCsvCourseRow.ResolveDeliveryMode(deliveryMode),
                    ResolvedStartDate = ParsedCsvCourseRow.ResolveStartDate(startDate),
                    ResolvedFlexibleStartDate = ParsedCsvCourseRow.ResolveFlexibleStartDate(flexibleStartDate),
                    ResolvedNationalDelivery = ParsedCsvCourseRow.ResolveNationalDelivery(nationalDelivery, subRegions),
                    ResolvedCost = ParsedCsvCourseRow.ResolveCost(cost),
                    ResolvedDuration = ParsedCsvCourseRow.ResolveDuration(duration),
                    ResolvedDurationUnit = ParsedCsvCourseRow.ResolveDurationUnit(durationUnit),
                    ResolvedStudyMode = ParsedCsvCourseRow.ResolveStudyMode(studyMode),
                    ResolvedAttendancePattern = ParsedCsvCourseRow.ResolveAttendancePattern(attendancePattern),
                    ResolvedSubRegions = ParsedCsvCourseRow.ResolveSubRegions(subRegions, _allRegions)?.Select(r => r.Id)
                });
            }