Exemplo n.º 1
0
        public async Task CourseGetAsyncReturnsResponseObjectWhenApiCallIsSuccessful()
        {
            // Arrange
            var courseGetRequest = new CourseGetRequest {
                CourseId = courseId, RunId = courseRunId
            };
            var expectedResponse = new CourseRunDetailResponse
            {
                CourseRunId = courseRunId,
                CourseName  = "CourseName",
                Course      = new CourseDetailResponseCourse {
                    CourseId = courseId
                },
            };

            var httpResponse = new HttpResponseMessage {
                StatusCode = HttpStatusCode.OK, Content = new StringContent(JsonConvert.SerializeObject(expectedResponse))
            };

            var fakeHttpRequestSender = A.Fake <IFakeHttpRequestSender>();

            A.CallTo(() => fakeHttpRequestSender.Send(A <HttpRequestMessage> .Ignored)).Returns(httpResponse);

            var auditService = A.Fake <IAuditService>();

            var fakeHttpMessageHandler = new FakeHttpMessageHandler(fakeHttpRequestSender);
            var httpClient             = new HttpClient(fakeHttpMessageHandler)
            {
                BaseAddress = new Uri("http://SomeDummyUrl")
            };

            var findACourseClient = new FindACourseClient(httpClient, defaultSettings, auditService, defaultLogger);

            // Act
            var result = await findACourseClient.CourseGetAsync(courseGetRequest).ConfigureAwait(false);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(expectedResponse.CourseName, result.CourseName);
            Assert.Equal(expectedResponse.CourseRunId, result.CourseRunId);
            Assert.Equal(expectedResponse.Course.CourseId, result.Course.CourseId);

            httpResponse.Dispose();
            httpClient.Dispose();
            fakeHttpMessageHandler.Dispose();
        }
        public async Task <ActionResult> CourseRunDetail([FromQuery] CourseRunDetailRequest request)
        {
            var result = await _service.CourseDetail(request.CourseId, request.CourseRunId);

            if (result != null)
            {
                var courseRun       = result.Course.CourseRuns.Single(r => r.id == request.CourseRunId);
                var venue           = courseRun.VenueId.HasValue ? result.CourseRunVenues.Single(v => v.id == courseRun.VenueId) : null;
                var providerContact = ((JArray)result.Provider.ProviderContact)
                                      .Select(t => t.ToObject <Providercontact>())
                                      .SingleOrDefault(c => c.ContactType == "P");

                var alternativeCourseRuns = result.Course.CourseRuns.Where(r => r.id != request.CourseRunId)
                                            .Where(r => r.RecordStatus == RecordStatus.Live)
                                            .Select(r => new { CourseRun = r, Venue = result.CourseRunVenues.SingleOrDefault(v => v.id == r.VenueId) });

                var response = new CourseRunDetailResponse()
                {
                    CourseRunId       = courseRun.id,
                    AttendancePattern = courseRun.DeliveryMode == DeliveryMode.ClassroomBased ? (AttendancePattern?)courseRun.AttendancePattern : null,
                    Cost              = courseRun.Cost,
                    CostDescription   = courseRun.CostDescription,
                    CourseName        = courseRun.CourseName,
                    CourseURL         = courseRun.CourseURL,
                    CreatedDate       = courseRun.CreatedDate,
                    DeliveryMode      = courseRun.DeliveryMode,
                    DurationUnit      = courseRun.DurationUnit,
                    DurationValue     = courseRun.DurationValue,
                    FlexibleStartDate = courseRun.FlexibleStartDate,
                    StartDate         = !courseRun.FlexibleStartDate ? courseRun.StartDate : null,
                    StudyMode         = courseRun.StudyMode,
                    National          = courseRun.National,
                    Course            = new CourseDetailResponseCourse()
                    {
                        AdvancedLearnerLoan = result.Course.AdvancedLearnerLoan,
                        AwardOrgCode        = result.Course.AwardOrgCode,
                        CourseDescription   = result.Course.CourseDescription,
                        CourseId            = result.Course.id,
                        EntryRequirements   = result.Course.EntryRequirements,
                        HowYoullBeAssessed  = result.Course.HowYoullBeAssessed,
                        HowYoullLearn       = result.Course.HowYoullLearn,
                        LearnAimRef         = result.Course.LearnAimRef,
                        QualificationLevel  = result.Course.NotionalNVQLevelv2,
                        WhatYoullLearn      = result.Course.WhatYoullLearn,
                        WhatYoullNeed       = result.Course.WhatYoullNeed,
                        WhereNext           = result.Course.WhereNext
                    },
                    Venue = venue != null ?
                            new CourseDetailResponseVenue()
                    {
                        AddressLine1 = venue.ADDRESS_1,
                        AddressLine2 = venue.ADDRESS_2,
                        County       = venue.COUNTY,
                        Email        = venue.Email,
                        Postcode     = venue.POSTCODE,
                        Telephone    = venue.Telephone,
                        Town         = venue.TOWN,
                        VenueName    = venue.VENUE_NAME,
                        Website      = UrlUtil.EnsureHttpPrefixed(venue.WEBSITE),
                        Latitude     = venue.Latitude,
                        Longitude    = venue.Longitude
                    } :
                    null,
                    Provider = new CourseDetailResponseProvider()
                    {
                        ProviderName        = result.Provider.ProviderName,
                        TradingName         = result.Provider.TradingName,
                        CourseDirectoryName = result.Provider.CourseDirectoryName,
                        Alias                = result.Provider.Alias,
                        UKPRN                = result.Provider.UnitedKingdomProviderReferenceNumber,
                        AddressLine1         = providerContact?.ContactAddress?.SAON?.Description,
                        AddressLine2         = providerContact?.ContactAddress?.PAON?.Description,
                        Town                 = providerContact?.ContactAddress?.Items?.FirstOrDefault()?.ToString(),
                        Postcode             = providerContact?.ContactAddress?.PostCode,
                        County               = providerContact?.ContactAddress?.Locality,
                        Telephone            = providerContact?.ContactTelephone1,
                        Fax                  = providerContact?.ContactFax,
                        Website              = UrlUtil.EnsureHttpPrefixed(providerContact?.ContactWebsiteAddress),
                        Email                = providerContact?.ContactEmail,
                        EmployerSatisfaction = result.FeChoice?.EmployerSatisfaction,
                        LearnerSatisfaction  = result.FeChoice?.LearnerSatisfaction,
                    },
                    Qualification = new CourseDetailResponseQualification()
                    {
                        AwardOrgCode               = result.Qualification.AwardOrgCode,
                        AwardOrgName               = result.Qualification.AwardOrgName,
                        LearnAimRef                = result.Qualification.LearnAimRef,
                        LearnAimRefTitle           = result.Qualification.LearnAimRefTitle,
                        LearnAimRefTypeDesc        = result.Qualification.LearnAimRefTypeDesc,
                        QualificationLevel         = result.Qualification.NotionalNVQLevelv2,
                        SectorSubjectAreaTier1Desc = result.Qualification.SectorSubjectAreaTier1Desc,
                        SectorSubjectAreaTier2Desc = result.Qualification.SectorSubjectAreaTier2Desc
                    },
                    AlternativeCourseRuns = alternativeCourseRuns.Select(ar => new CourseDetailResponseAlternativeCourseRun()
                    {
                        CourseRunId       = ar.CourseRun.id,
                        AttendancePattern = ar.CourseRun.DeliveryMode == DeliveryMode.ClassroomBased ? (AttendancePattern?)ar.CourseRun.AttendancePattern : null,
                        Cost              = ar.CourseRun.Cost,
                        CostDescription   = ar.CourseRun.CostDescription,
                        CourseName        = ar.CourseRun.CourseName,
                        CourseURL         = ar.CourseRun.CourseURL,
                        CreatedDate       = ar.CourseRun.CreatedDate,
                        DeliveryMode      = ar.CourseRun.DeliveryMode,
                        DurationUnit      = ar.CourseRun.DurationUnit,
                        DurationValue     = ar.CourseRun.DurationValue,
                        FlexibleStartDate = ar.CourseRun.FlexibleStartDate,
                        StartDate         = !ar.CourseRun.FlexibleStartDate ? ar.CourseRun.StartDate : null,
                        StudyMode         = ar.CourseRun.StudyMode,
                        Venue             = ar.Venue != null ?
                                            new CourseDetailResponseVenue()
                        {
                            AddressLine1 = ar.Venue.ADDRESS_1,
                            AddressLine2 = ar.Venue.ADDRESS_2,
                            County       = ar.Venue.COUNTY,
                            Email        = ar.Venue.Email,
                            Postcode     = ar.Venue.POSTCODE,
                            Telephone    = ar.Venue.Telephone,
                            Town         = ar.Venue.TOWN,
                            VenueName    = ar.Venue.VENUE_NAME,
                            Website      = UrlUtil.EnsureHttpPrefixed(ar.Venue.WEBSITE),
                            Latitude     = ar.Venue.Latitude,
                            Longitude    = ar.Venue.Longitude
                        } :
                        null
                    }).ToList(),
                    SubRegions = (from region in RegionInfo.All
                                  from subRegion in region.SubRegions
                                  let sr = new { subRegion, region }
                                  join r in (courseRun.Regions ?? Enumerable.Empty <string>()) on sr.subRegion.Id equals r
                                  select new CourseDetailResponseSubRegion()
                    {
                        SubRegionId = r,
                        Name = sr.subRegion.Name,
                        ParentRegion = new CourseDetailResponseRegion()
                        {
                            Name = sr.region.Name,
                            RegionId = sr.region.Id
                        }
                    }).ToList()
                };

                return(new OkObjectResult(response));
            }
            else
            {
                return(new NotFoundResult());
            }
        }