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)); }
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; }
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); }