コード例 #1
0
        public async Task <ActionResult <GetExaminationsResponse> > GetExaminations([FromQuery] GetExaminationsRequest filter)
        {
            if (filter == null)
            {
                return(BadRequest(new GetExaminationsResponse()));
            }

            var permissedLocations = (await LocationsWithPermission(Permission.GetExaminations)).ToList();

            var examinationsQuery = new ExaminationsRetrievalQuery(
                permissedLocations,
                filter.CaseStatus,
                filter.LocationId,
                filter.OrderBy,
                filter.PageNumber,
                filter.PageSize,
                filter.UserId,
                filter.OpenCases);

            var examinations = await _examinationsRetrievalService.Handle(examinationsQuery);

            var dashboardOverview = await _examinationsDashboardService.Handle(examinationsQuery);

            var response = new GetExaminationsResponse
            {
                CountOfTotalCases  = dashboardOverview.TotalCases,
                CountOfUrgentCases = dashboardOverview.CountOfUrgentCases,
                CountOfCasesHaveUnknownBasicDetails = dashboardOverview.CountOfHaveUnknownBasicDetails,
                CountOfCasesUnassigned                          = dashboardOverview.CountOfUnassigned,
                CountOfCasesReadyForMEScrutiny                  = dashboardOverview.CountOfReadyForMEScrutiny,
                CountOfCasesHaveBeenScrutinisedByME             = dashboardOverview.CountOfHaveBeenScrutinisedByME,
                CountOfCasesPendingAdditionalDetails            = dashboardOverview.CountOfPendingAdditionalDetails,
                CountOfCasesPendingDiscussionWithQAP            = dashboardOverview.CountOfPendingDiscussionWithQAP,
                CountOfCasesPendingDiscussionWithRepresentative = dashboardOverview.CountOfPendingDiscussionWithRepresentative,
                CountOfCasesHaveFinalCaseOutstandingOutcomes    = dashboardOverview.CountOfHaveFinalCaseOutstandingOutcomes,
                Examinations         = examinations.Select(e => Mapper.Map <PatientCardItem>(e)).ToList(),
                CountOfFilteredCases = dashboardOverview.CountOfFilteredCases,
            };

            var locations = (await _locationRetrievalByQueryHandler.Handle(
                                 new LocationsRetrievalByQuery(null, null, false, false, permissedLocations))).ToList();

            var onlyMeOffices = locations.Where(l => l.IsMeOffice).ToList();
            var allLocations  = (await _locationsRetrievalByQueryHandler.Handle(new LocationsParentsQuery(onlyMeOffices.Select(x => x.LocationId)))).ToList();

            var flatternedLocations      = allLocations.SelectMany(x => x.Value);
            var distinctLocationIds      = flatternedLocations.Select(x => x.LocationId).Distinct();
            var distinctLocations        = distinctLocationIds.Select(id => flatternedLocations.First(x => x.LocationId == id));
            var orderedDistinctLocations = distinctLocations.OrderBy(x => x.NationalLocationId)
                                           .ThenBy(x => x.RegionLocationId)
                                           .ThenBy(x => x.TrustLocationId)
                                           .ThenBy(x => x.SiteLocationId).ToList();

            response.AddLookup(LocationFilterLookupKey, Mapper.Map <IEnumerable <Location>, IEnumerable <LocationLookup> >(orderedDistinctLocations));

            response.AddLookup(UserFilterLookupKey, await GetUserLookupForLocations(locations));

            return(Ok(response));
        }
コード例 #2
0
        public void GetExaminations_ReturnsOk()
        {
            // Arrange
            SetupAuthorize(AuthorizationResult.Success());
            var examination1 = new Examination();
            var examination2 = new Examination();
            IEnumerable <Examination> examinationsResult = new List <Examination> {
                examination1, examination2
            };
            var locations = new List <Location>();
            var users     = new List <MeUser>();

            var examinationOverview = new ExaminationsOverview();

            _examinationsRetrievalQueryServiceMock
            .Setup(service => service.Handle(It.IsAny <ExaminationsRetrievalQuery>()))
            .Returns(Task.FromResult(examinationsResult));

            _examinationsDashboardServiceMock
            .Setup(service => service.Handle(It.IsAny <ExaminationsRetrievalQuery>()))
            .Returns(Task.FromResult(examinationOverview));

            _locationRetrievalByQueryHandlerMock
            .Setup(service => service.Handle(It.IsAny <LocationsRetrievalByQuery>()))
            .Returns(Task.FromResult(locations.AsEnumerable()));

            _usersRetrievalServiceMock
            .Setup(service => service.Handle(It.IsAny <UsersRetrievalQuery>()))
            .Returns(Task.FromResult(users.AsEnumerable()));

            _locationsRetrievalByQueryMock.Setup(service => service.Handle(It.IsAny <LocationsParentsQuery>()))
            .Returns(Task.FromResult((IDictionary <string, IEnumerable <Location> >) new Dictionary <string, IEnumerable <Location> >()));

            var request = new GetExaminationsRequest();

            // Act
            var response = Controller.GetExaminations(request).Result;

            // Assert
            var taskResult = response.Should().BeOfType <ActionResult <GetExaminationsResponse> >().Subject;
            var okResult   = taskResult.Result.Should().BeAssignableTo <OkObjectResult>().Subject;
        }
コード例 #3
0
        public void GetExaminations_PopulatesLookups()
        {
            // Arrange
            SetupAuthorize(AuthorizationResult.Success());
            var expectedLocation = new LocationLookup {
                LocationId = "location1", Name = "Name1"
            };
            var expectedUser = new UserLookup {
                UserId = "user1", FullName = "User 1", GmcNumber = "GmcNumber1"
            };

            var examination1 = new Examination();
            var examination2 = new Examination();
            IEnumerable <Examination> examinationsResult = new List <Examination> {
                examination1, examination2
            };
            var meOfficeLocation = new Location
            {
                LocationId = "location1",
                Name       = "Name1",
                IsMeOffice = true
            };

            var locations = new List <Location>
            {
                meOfficeLocation,
                new Location
                {
                    LocationId = "location2",
                    Name       = "Name2"
                }
            };
            var users = new List <MeUser>
            {
                new MeUser
                {
                    UserId      = "user1",
                    GmcNumber   = "GmcNumber1",
                    FirstName   = "User",
                    LastName    = "1",
                    Permissions = new List <MEUserPermission>
                    {
                        new MEUserPermission
                        {
                            LocationId = "location1",
                            UserRole   = UserRoles.MedicalExaminer
                        }
                    }
                }
            };

            var examinationOverview = new ExaminationsOverview();

            _examinationsRetrievalQueryServiceMock
            .Setup(service => service.Handle(It.IsAny <ExaminationsRetrievalQuery>()))
            .Returns(Task.FromResult(examinationsResult));

            _examinationsDashboardServiceMock
            .Setup(service => service.Handle(It.IsAny <ExaminationsRetrievalQuery>()))
            .Returns(Task.FromResult(examinationOverview));

            _locationRetrievalByQueryHandlerMock
            .Setup(service => service.Handle(It.IsAny <LocationsRetrievalByQuery>()))
            .Returns(Task.FromResult(locations.AsEnumerable()));

            _usersRetrievalServiceMock
            .Setup(service => service.Handle(It.IsAny <UsersRetrievalQuery>()))
            .Returns(Task.FromResult(users.AsEnumerable()));

            _locationsRetrievalByQueryMock.Setup(service => service.Handle(It.IsAny <LocationsParentsQuery>()))
            .Returns(Task.FromResult((IDictionary <string, IEnumerable <Location> >) new Dictionary <string, IEnumerable <Location> >
            {
                { meOfficeLocation.LocationId, new[] { meOfficeLocation } }
            }));

            var request = new GetExaminationsRequest();

            // Act
            var response = Controller.GetExaminations(request).Result;

            // Assert
            var taskResult    = response.Should().BeOfType <ActionResult <GetExaminationsResponse> >().Subject;
            var okResult      = taskResult.Result.Should().BeAssignableTo <OkObjectResult>().Subject;
            var typedResponse = (GetExaminationsResponse)okResult.Value;

            // Assert
            typedResponse.Lookups.ContainsKey(ExaminationsController.LocationFilterLookupKey).Should().BeTrue();
            typedResponse.Lookups[ExaminationsController.LocationFilterLookupKey].Should()
            .ContainEquivalentOf(expectedLocation);

            typedResponse.Lookups.ContainsKey(ExaminationsController.UserFilterLookupKey).Should().BeTrue();
            typedResponse.Lookups[ExaminationsController.UserFilterLookupKey].Should()
            .ContainEquivalentOf(expectedUser);
        }