Example #1
0
        public FhirSearchTests()
        {
            var opts         = AppSettings.NrlsApiSettings;
            var settingsMock = new Mock <IOptionsSnapshot <NrlsApiSetting> >();

            settingsMock.Setup(op => op.Get(It.IsAny <string>())).Returns(opts);

            var list = new List <DocumentReference> {
                NrlsPointers.Valid, NrlsPointers.Valid_With_Alt_Custodian
            };

            var bundle = FhirBundle.GetBundle(list);

            var fhirsearchHelperMock = new Mock <IFhirSearchHelper>();

            fhirsearchHelperMock.Setup(op => op.BuildQuery(FhirRequests.Valid_Search)).Returns(FilterDefinition <BsonDocument> .Empty);
            fhirsearchHelperMock.Setup(op => op.BuildQuery(It.IsAny <string>())).Returns(FilterDefinition <BsonDocument> .Empty);
            fhirsearchHelperMock.Setup(op => op.ToBundle <DocumentReference>(It.IsAny <FhirRequest>(), It.IsAny <List <DocumentReference> >(), It.IsAny <Guid?>())).Returns(bundle);

            _nrlsApiSettings  = settingsMock.Object;
            _fhirSearchHelper = fhirsearchHelperMock.Object;

            IEnumerable <BsonDocument> testBsons = new List <BsonDocument> {
                MongoModels.BsonDocumentReferenceA, MongoModels.BsonDocumentReferenceB
            };

            var nrlsMongoDBCaller = new Mock <INRLSMongoDBCaller>();

            nrlsMongoDBCaller.Setup(m => m.FindResource(It.IsAny <string>(), It.IsAny <FilterDefinition <BsonDocument> >())).Returns(SystemTasks.Task.Run(() => MongoStubs.AsyncCursor(testBsons)));

            _nrlsMongoDBCaller = nrlsMongoDBCaller.Object;
        }
Example #2
0
        public void FhirResponse_ValidDocumentReferenceResources()
        {
            var documentReferenceModels = MongoDocumentReferences.DocumentReferences.ToList();
            var documentReferenceBundle = FhirBundle.GetBundle <DocumentReference>(documentReferenceModels);

            var actual = new FhirResponse();

            actual.Resource = documentReferenceBundle;

            Assert.Equal(documentReferenceModels, actual.GetResources <DocumentReference>(), Comparers.ModelComparer <DocumentReference>());
        }
Example #3
0
        public void FhirResponse_ValidOrganizationResources()
        {
            var organizationModels = MongoOrganizations.Organizations.ToList();
            var organizationBundle = FhirBundle.GetBundle <Organization>(organizationModels);

            var actual = new FhirResponse();

            actual.Resource = organizationBundle;

            Assert.Equal(organizationModels, actual.GetResources <Organization>(), Comparers.ModelComparer <Organization>());
        }
Example #4
0
        public void FhirResponse_ValidPatientResources()
        {
            var patientModels = MongoPatients.Patients.ToList();
            var patientBundle = FhirBundle.GetBundle <Patient>(patientModels);

            var actual = new FhirResponse();

            actual.Resource = patientBundle;

            Assert.Equal(patientModels, actual.GetResources <Patient>(), Comparers.ModelComparer <Patient>());
        }
Example #5
0
        public void ParseRead_ExpectOperationOutcomeWhenEmpty()
        {
            var organisations = new List <Organization>();

            var bundle      = FhirBundle.GetBundle(organisations);
            var baseService = new FhirBaseStub(_nrlsApiSettings);

            var actual = baseService.ParseReadStub(bundle, "testid");

            Assert.Equal(ResourceType.OperationOutcome, actual.ResourceType);
        }
        public void ParseRead_ExpectOperationOutcomeWhenEmpty()
        {
            var organisations = new List <Organization>();

            var bundle      = FhirBundle.GetBundle(organisations);
            var baseService = new FhirBaseStub(_nrlsApiSettings);

            Assert.Throws <HttpFhirException>(() => {
                var actual = baseService.ParseReadStub(bundle, "testid");
            });
        }
Example #7
0
        public void FhirResponse_InvalidResources()
        {
            var practitionersModels = MongoPractitioner.Practitioners.ToList();
            var practitionersBundle = FhirBundle.GetBundle <Practitioner>(practitionersModels);

            Assert.Throws <InvalidResourceException>(() =>
            {
                var actual      = new FhirResponse();
                actual.Resource = practitionersBundle;

                actual.GetResources <Practitioner>();
            });
        }
Example #8
0
        public void ParseRead_ExpectBundle()
        {
            var organisations = new List <Organization>
            {
                new Organization
                {
                    Id   = "testid",
                    Name = "TestName"
                }
            };

            var bundle      = FhirBundle.GetBundle(organisations);
            var baseService = new FhirBaseStub(_nrlsApiSettings);

            var actual = baseService.ParseReadStub(bundle, "testid");

            Assert.Equal(ResourceType.Bundle, actual.ResourceType);
        }
        public async void PointerService_Returns_ValidPointerList()
        {
            var patientModels           = MongoPatients.Patients.ToList();
            var organizationModels      = MongoOrganizations.Organizations.ToList();
            var documentReferenceModels = MongoDocumentReferences.DocumentReferences_3656987882;

            var testNhsNumber = "3656987882";
            var testAsid      = "200000000116";
            var testOrgCode   = "AMS01";

            var _docRefService = new Mock <IDocumentReferenceServices>();

            _docRefService.Setup(m => m.GetPointersBundle(It.IsAny <NrlsPointerRequest>())).Returns(SystemTasks.Task.Run(() => FhirBundle.GetBundle <DocumentReference>(documentReferenceModels) as Resource)).Verifiable();

            var _patientService = new Mock <IPatientServices>();

            _patientService.Setup(m => m.GetPatients()).Returns(SystemTasks.Task.Run(() => patientModels)).Verifiable();

            var _organisationServices = new Mock <IOrganisationServices>();

            _organisationServices.Setup(m => m.GetOrganisations()).Returns(SystemTasks.Task.Run(() => organizationModels)).Verifiable();

            var pointerService = new PointerService(_docRefService.Object, _patientService.Object, _organisationServices.Object);

            var request = RequestViewModel.Create(testNhsNumber);

            request.Asid    = testAsid;
            request.OrgCode = testOrgCode;

            var actual = await pointerService.GetPointers(request);

            var pointers = MongoPointerViewModels.PointerViewModels_3656987882;
            var patient  = MongoPatientViewModels.PatientViewModel_3656987882;
            var org      = MongoOrganizationViewModels.OrganizationViewModel_00003X;

            var expected = new List <PointerViewModel>();

            foreach (var exp in pointers)
            {
                exp.SubjectViewModel   = patient;
                exp.AuthorViewModel    = org;
                exp.CustodianViewModel = org;
                expected.Add(exp);
            }

            _docRefService.Verify();
            _patientService.Verify();
            _organisationServices.Verify();

            Assert.Equal(expected, actual, Comparers.ModelComparer <PointerViewModel>());
        }
Example #10
0
        public NrlsMaintainTests()
        {
            var opts         = AppSettings.NrlsApiSettings;
            var settingsMock = new Mock <IOptionsSnapshot <NrlsApiSetting> >();

            settingsMock.Setup(op => op.Get(It.IsAny <string>())).Returns(opts);

            var searchOrgList = new List <Organization> {
                FhirOrganizations.Valid_Organization
            };
            var searchOrgBundle   = FhirBundle.GetBundle <Organization>(searchOrgList);
            var emptySearchBundle = FhirBundle.GetBundle <Organization>(new List <Organization>());

            var searchDocBundle = FhirBundle.GetBundle <DocumentReference>(new List <DocumentReference> {
                NrlsPointers.Valid_With_Alt_Custodian
            });
            var searchDocAltBundle = FhirBundle.GetBundle <DocumentReference>(new List <DocumentReference> {
                NrlsPointers.Valid_With_Alt2_Custodian
            });
            var searchDocAltInvalidBundle = FhirBundle.GetBundle <DocumentReference>(new List <DocumentReference> {
                NrlsPointers.Valid_AltCust_With_MasterId_and_RelatesTo_BadStatus
            });
            var searchDocEmptyBundle = FhirBundle.GetBundle <DocumentReference>(new List <DocumentReference>());

            var searchMock = new Mock <IFhirSearch>();

            searchMock.Setup(op => op.Find <Organization>(It.Is <FhirRequest>(request => request.RequestingAsid == "000"))).Returns(SystemTasks.Task.Run(() => searchOrgBundle as Resource));
            searchMock.Setup(op => op.Find <Organization>(It.Is <FhirRequest>(request => request.RequestingAsid == "001"))).Returns(SystemTasks.Task.Run(() => searchOrgBundle as Resource));
            searchMock.Setup(op => op.Find <Organization>(It.Is <FhirRequest>(request => request.RequestingAsid == "002"))).Returns(SystemTasks.Task.Run(() => emptySearchBundle as Resource));

            searchMock.Setup(op => op.Find <DocumentReference>(It.Is <FhirRequest>(request => request.RequestingAsid == "000"))).Returns(SystemTasks.Task.Run(() => searchDocBundle as Resource));
            searchMock.Setup(op => op.Find <DocumentReference>(It.Is <FhirRequest>(request => request.RequestingAsid == "001"))).Returns(SystemTasks.Task.Run(() => searchDocAltBundle as Resource));
            searchMock.Setup(op => op.Find <DocumentReference>(It.Is <FhirRequest>(request => request.RequestingAsid == "002"))).Returns(SystemTasks.Task.Run(() => searchDocEmptyBundle as Resource));
            searchMock.Setup(op => op.Find <DocumentReference>(It.Is <FhirRequest>(request => request.RequestingAsid == "003"))).Returns(SystemTasks.Task.Run(() => searchDocAltInvalidBundle as Resource));

            searchMock.Setup(op => op.Get <DocumentReference>(It.IsAny <FhirRequest>())).Returns(SystemTasks.Task.Run(() => searchDocBundle as Resource));
            //searchMock.Setup(op => op.GetByMasterId<DocumentReference>(It.Is<FhirRequest>(request => (request.Resource as DocumentReference).MasterIdentifier.Value == "testValueForMaintTest"))).Returns(SystemTasks.Task.Run(() => searchDocBundle as Resource));
            searchMock.Setup(op => op.GetByMasterId <DocumentReference>(It.IsAny <FhirRequest>())).Returns(SystemTasks.Task.Run(() => searchDocBundle as Resource));

            var maintMock = new Mock <IFhirMaintain>();

            maintMock.Setup(op => op.Create <DocumentReference>(It.Is <FhirRequest>(request => request.RequestingAsid == "000"))).Returns(SystemTasks.Task.Run(() => NrlsPointers.Valid as Resource));
            maintMock.Setup(op => op.Create <DocumentReference>(It.Is <FhirRequest>(request => request.RequestingAsid == "002"))).Returns(SystemTasks.Task.Run(() => null as Resource));

            maintMock.Setup(op => op.CreateWithUpdate <DocumentReference>(It.IsAny <FhirRequest>(), It.Is <FhirRequest>(request => request.Id == "5ab13f41957d0ad5d93a1339"), It.IsAny <UpdateDefinition <BsonDocument> >())).Returns(SystemTasks.Task.Run(() => (created: NrlsPointers.Valid as Resource, updated: true)));
            maintMock.Setup(op => op.CreateWithUpdate <DocumentReference>(It.IsAny <FhirRequest>(), It.Is <FhirRequest>(request => request.Id == "5ab13f41957d0ad5d93a1338"), It.IsAny <UpdateDefinition <BsonDocument> >())).Returns(SystemTasks.Task.Run(() => (created: null as Resource, updated: true)));
            maintMock.Setup(op => op.CreateWithUpdate <DocumentReference>(It.IsAny <FhirRequest>(), It.Is <FhirRequest>(request => request.Id == "5ab13f41957d0ad5d93a1337"), It.IsAny <UpdateDefinition <BsonDocument> >())).Returns(SystemTasks.Task.Run(() => (created: NrlsPointers.Valid as Resource, updated: false)));

            maintMock.Setup(op => op.CreateWithUpdate <DocumentReference>(It.IsAny <FhirRequest>(), It.Is <FhirRequest>(request => request.Id == "5ab13f41957d0ad5d93a1336"), It.IsAny <UpdateDefinition <BsonDocument> >())).ThrowsAsync(new HttpFhirException());


            maintMock.Setup(op => op.Delete <DocumentReference>(It.Is <FhirRequest>(request => request.RequestingAsid == "003"))).Returns(SystemTasks.Task.Run(() => true));
            maintMock.Setup(op => op.Delete <DocumentReference>(It.Is <FhirRequest>(request => request.RequestingAsid == "001"))).Returns(SystemTasks.Task.Run(() => false));
            maintMock.Setup(op => op.DeleteConditional <DocumentReference>(It.Is <FhirRequest>(request => request.RequestingAsid == "003"))).Returns(SystemTasks.Task.Run(() => true));
            maintMock.Setup(op => op.DeleteConditional <DocumentReference>(It.Is <FhirRequest>(request => request.RequestingAsid == "001"))).Returns(SystemTasks.Task.Run(() => false));

            var validationMock = new Mock <IFhirValidation>();

            validationMock.Setup(op => op.ValidPointer(It.Is <DocumentReference>(pointer => pointer.Id == "5ab13f41957d0ad5d93a1339"))).Returns(OperationOutcomes.Ok);
            validationMock.Setup(op => op.ValidPointer(It.Is <DocumentReference>(pointer => pointer.Id == "5affc72bcae33eb8690e5881"))).Returns(OperationOutcomes.Error);

            validationMock.Setup(op => op.GetOrganizationReferenceId(It.IsAny <ResourceReference>())).Returns("TestOrgCode");
            validationMock.Setup(op => op.GetOrganizationReferenceId(It.Is <ResourceReference>(reference => reference.Reference == "https://directory.spineservices.nhs.uk/STU3/Organization/1XR"))).Returns("TestOrgCode");
            validationMock.Setup(op => op.GetOrganizationReferenceId(It.Is <ResourceReference>(reference => reference.Reference == "https://directory.spineservices.nhs.uk/STU3/Organization/error"))).Returns("TestOrgCode2");
            validationMock.Setup(op => op.GetOrganizationReferenceId(It.Is <ResourceReference>(reference => reference.Reference == "https://directory.spineservices.nhs.uk/STU3/Organization/RV99"))).Returns("RV99");
            validationMock.Setup(op => op.GetOrganizationReferenceId(It.Is <ResourceReference>(reference => reference.Reference == "https://directory.spineservices.nhs.uk/STU3/Organization/RV88"))).Returns("RV88");

            validationMock.Setup(op => op.ValidateIdentifierParameter(It.IsAny <string>(), It.IsAny <string>())).Returns(OperationOutcomes.Error);
            validationMock.Setup(op => op.ValidateIdentifierParameter(It.IsAny <string>(), It.Is <string>(p => p == "testsystem|testvalue"))).Returns(delegate { return(null); });

            validationMock.Setup(op => op.ValidatePatientParameter(It.IsAny <string>())).Returns(OperationOutcomes.Error);
            validationMock.Setup(op => op.ValidatePatientParameter(It.Is <string>(p => p == "https://demographics.spineservices.nhs.uk/STU3/Patient/2686033207"))).Returns(delegate { return(null); });

            validationMock.Setup(op => op.GetValidRelatesTo(It.Is <IList <DocumentReference.RelatesToComponent> >(r => r.FirstOrDefault(w => w.Target != null && w.Target.Identifier != null && w.Target.Identifier.Value == "urn:tag:humber.nhs.uk,2004:cdc:600009612669​") != null))).Returns((FhirResources.Valid_Single_RelatesTo, "relatesTo"));

            validationMock.Setup(op => op.GetValidStatus(It.IsAny <DocumentReferenceStatus>())).Returns(delegate { return(null); });
            validationMock.Setup(op => op.GetValidStatus(It.Is <DocumentReferenceStatus>(x => x == DocumentReferenceStatus.Current))).Returns(DocumentReferenceStatus.Current);

            validationMock.Setup(op => op.GetSubjectReferenceId(It.IsAny <ResourceReference>())).Returns("2686033207");

            var clientMapCache = new ClientAsidMap
            {
                ClientAsids = new Dictionary <string, ClientAsid>()
                {
                    { "000", new ClientAsid {
                          Interactions = new List <string>(), OrgCode = "TestOrgCode", Thumbprint = "TestThumbprint"
                      } },
                    { "002", new ClientAsid {
                          Interactions = new List <string>(), OrgCode = "TestOrgCode2", Thumbprint = "TestThumbprint"
                      } },
                    { "003", new ClientAsid {
                          Interactions = new List <string>(), OrgCode = "RV99", Thumbprint = "TestThumbprint"
                      } }
                }
            };

            var cacheMock = MemoryCacheStub.MockMemoryCacheService.GetMemoryCache(clientMapCache);

            _nrlsApiSettings = settingsMock.Object;
            _fhirMaintain    = maintMock.Object;
            _fhirSearch      = searchMock.Object;
            _fhirValidation  = validationMock.Object;
            _cache           = cacheMock;
        }
Example #11
0
        public OdsControllerTests()
        {
            var organizationList = new List <Organization> {
                new Organization {
                    Id = "ValidOrg1"
                }, new Organization {
                    Id = "ValidOrg2"
                }
            };

            var odsSearch = new Mock <IOdsSearch>();

            odsSearch.Setup(x => x.Find(It.Is <FhirRequest>(y => y.RequestingAsid == null))).Returns(System.Threading.Tasks.Task.FromResult(FhirBundle.GetBundle(organizationList)));
            odsSearch.Setup(x => x.GetByQuery(It.IsAny <FhirRequest>())).Returns(System.Threading.Tasks.Task.FromResult(FhirOrganizations.Valid_Organization));
            odsSearch.Setup(x => x.GetByQuery(It.Is <FhirRequest>(y => y.IdentifierParameter == $"{FhirConstants.SystemOrgCode}|NOTFOUND"))).Returns(System.Threading.Tasks.Task.FromResult(null as Organization));

            _odsSearch = odsSearch.Object;
        }
Example #12
0
        public PdsControllerTests()
        {
            var patientList = new List <Patient> {
                new Patient {
                    Id = "ValidPatient1"
                }, new Patient {
                    Id = "ValidPatient2"
                }
            };

            var pdsSearch = new Mock <IPdsSearch>();

            pdsSearch.Setup(x => x.Find(It.Is <FhirRequest>(y => y.RequestingAsid == null))).Returns(System.Threading.Tasks.Task.FromResult(FhirBundle.GetBundle(patientList)));

            _pdsSearch = pdsSearch.Object;
        }
        public async void PointerService_Returns_ValidPointerList()
        {
            var patientModels           = MongoPatients.Patients.ToList();
            var organizationModels      = MongoOrganizations.Organizations.ToList();
            var documentReferenceModels = MongoDocumentReferences.DocumentReferences_3656987882;

            var testNhsNumber = "3656987882";
            var testAsid      = "200000000116";
            var testOrgCode   = "AMS01";

            var _docRefService = new Mock <IDocumentReferenceServices>();

            _docRefService.Setup(m => m.GetPointersBundle(It.IsAny <NrlsPointerRequest>())).Returns(SystemTasks.Task.Run(() => FhirBundle.GetBundle <DocumentReference>(documentReferenceModels) as Resource)).Verifiable();

            var _patientService = new Mock <IPatientServices>();

            _patientService.Setup(m => m.GetPatients()).Returns(SystemTasks.Task.Run(() => patientModels)).Verifiable();

            var _organisationServices = new Mock <IOrganisationServices>();

            _organisationServices.Setup(m => m.GetOrganisations()).Returns(SystemTasks.Task.Run(() => organizationModels)).Verifiable();

            var pointerCache = new PatientPointers
            {
                Pointers = MongoPointerViewModels.PointerViewModels_3656987882
            };

            var cacheMock = MemoryCacheStub.MockMemoryCacheService.GetMemoryCache(pointerCache);

            var pdfBinaryId       = "TestBinaryPdf1";
            var _documentServices = new Mock <IDocumentsServices>();

            _documentServices.Setup(m => m.GetPointerDocument(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())).Returns(SystemTasks.Task.Run(() => MongoBinaries.Binaries.FirstOrDefault(x => x.Id == pdfBinaryId) as Resource)).Verifiable();


            var opts = new ApiSetting
            {
                BaseUrl               = "://localhost",
                DefaultPort           = "55448",
                Secure                = false,
                SecureOnly            = false,
                SecurePort            = "55443",
                SupportedContentTypes = new List <string> {
                    "application/fhir+json"
                }
            };

            var _apiSettings = new Mock <IOptions <ApiSetting> >();

            _apiSettings.Setup(op => op.Value).Returns(opts);

            var pointerService = new PointerService(_apiSettings.Object, _docRefService.Object, _patientService.Object, _organisationServices.Object, cacheMock, _documentServices.Object);

            var request = RequestViewModel.Create(testNhsNumber);

            request.Asid    = testAsid;
            request.OrgCode = testOrgCode;

            var actual = await pointerService.GetPointers(request);

            var pointers = MongoPointerViewModels.PointerViewModels_3656987882;
            var patient  = MongoPatientViewModels.PatientViewModel_3656987882;
            var org      = MongoOrganizationViewModels.OrganizationViewModel_00003X;

            var expected = new List <PointerViewModel>();

            foreach (var exp in pointers)
            {
                exp.SubjectViewModel   = patient;
                exp.AuthorViewModel    = org;
                exp.CustodianViewModel = org;
                expected.Add(exp);
            }

            _docRefService.Verify();
            _patientService.Verify();
            _organisationServices.Verify();

            Assert.Equal(expected, actual, Comparers.ModelComparer <PointerViewModel>());
        }
        public NrlsSearchTests()
        {
            var validationMock = new Mock <IFhirValidation>();

            validationMock.Setup(op => op.ValidatePatientParameter(It.IsAny <string>())).Returns(delegate { return(null); });

            validationMock.Setup(op => op.ValidateCustodianParameter(It.IsAny <string>())).Returns(delegate { return(null); });
            validationMock.Setup(op => op.ValidateCustodianIdentifierParameter(It.IsAny <string>())).Returns(delegate { return(null); });

            validationMock.Setup(op => op.ValidSummaryParameter(It.Is <string>(p => p == "notcount"))).Returns(delegate { return(new OperationOutcome()); });
            validationMock.Setup(op => op.ValidSummaryParameter(It.Is <string>(p => p == "count"))).Returns(delegate { return(null); });

            validationMock.Setup(op => op.GetOrganizationParameterId(It.Is <string>(p => p == "https://directory.spineservices.nhs.uk/STU3/Organization/TestOrgCode"))).Returns("TestOrgCode");
            validationMock.Setup(op => op.GetOrganizationParameterIdentifierId(It.Is <string>(p => p == "https://fhir.nhs.uk/Id/ods-organization-code|TestOrgCode"))).Returns("TestOrgCode");

            _fhirValidation = validationMock.Object;

            var searchPointer     = NrlsPointers.Valid;
            var searchPointerList = new List <DocumentReference> {
                searchPointer
            };
            var searchBundle = FhirBundle.GetBundle <DocumentReference>(searchPointerList);
            var searchMock   = new Mock <IFhirSearch>();

            searchMock.Setup(op => op.Get <DocumentReference>(It.IsAny <FhirRequest>())).Returns(SystemTasks.Task.Run(() => searchBundle as Resource));
            searchMock.Setup(op => op.Find <DocumentReference>(It.IsAny <FhirRequest>())).Returns(SystemTasks.Task.Run(() => searchBundle as Resource));


            var orgSearchBundle = FhirBundle.GetBundle <Organization>(new List <Organization> {
                FhirOrganizations.Valid_Organization
            });

            searchMock.Setup(op => op.Find <Organization>(It.IsAny <FhirRequest>())).Returns(SystemTasks.Task.Run(() => orgSearchBundle as Resource));

            _fhirSearch = searchMock.Object;


            var opts = new NrlsApiSetting
            {
                BaseUrl               = "https://baseurl.com/",
                DefaultPort           = "80",
                ProfileUrl            = "https://profileurl.com",
                Secure                = false,
                SecurePort            = "443",
                SupportedContentTypes = new List <string> {
                    "application/fhir+json"
                },
                SupportedResources = new List <string> {
                    "DocumentReference"
                }
            };

            var mock = new Mock <IOptionsSnapshot <NrlsApiSetting> >();

            mock.Setup(op => op.Get(It.IsAny <string>())).Returns(opts);

            _nrlsApiSettings = mock.Object;

            _expectedBundle = new Bundle
            {
                Id   = "b54e3ad5-04b5-4f8f-8dbd-0e41d2465b5c",
                Meta = new Meta
                {
                    LastUpdated = new DateTimeOffset(new DateTime(2018, 3, 1, 0, 0, 0, DateTimeKind.Utc)),
                    VersionId   = "b54e3ad5-04b5-4f8f-8dbd-0e41d2465b5c"
                },
                Type  = Bundle.BundleType.Searchset,
                Total = 1,
                Link  = new List <Bundle.LinkComponent>
                {
                    new Bundle.LinkComponent
                    {
                        Relation = "_self",
                        Url      = "TestLink"
                    }
                },
                Entry = new List <Bundle.EntryComponent>
                {
                    new Bundle.EntryComponent
                    {
                        Search = new Bundle.SearchComponent
                        {
                            Mode = Bundle.SearchEntryMode.Match
                        },
                        FullUrl  = $"ResourceLink",
                        Resource = new DocumentReference
                        {
                            Id     = "5ab13f41957d0ad5d93a1339",
                            Status = DocumentReferenceStatus.Current,
                            Type   = new CodeableConcept
                            {
                                Coding = new List <Coding>
                                {
                                    new Coding
                                    {
                                        System  = "http://snomed.info/sct",
                                        Code    = "736253002",
                                        Display = "Mental health crisis plan (record artifact)"
                                    }
                                }
                            },
                            Subject = new ResourceReference
                            {
                                Reference = "https://demographics.spineservices.nhs.uk/STU3/Patient/2686033207"
                            },
                            Indexed = new DateTime(2005, 12, 24, 9, 43, 41),
                            Author  = new List <ResourceReference>
                            {
                                new ResourceReference
                                {
                                    Reference = "https://directory.spineservices.nhs.uk/STU3/Organization/1XR"
                                }
                            },
                            Custodian = new ResourceReference
                            {
                                Reference = "https://directory.spineservices.nhs.uk/STU3/Organization/1XR"
                            },
                            Content = new List <DocumentReference.ContentComponent>
                            {
                                new DocumentReference.ContentComponent
                                {
                                    Attachment = new Attachment
                                    {
                                        ContentType = "application/pdf",
                                        Url         = "http://example.org/xds/mhd/Binary/07a6483f-732b-461e-86b6-edb665c45510.pdf",
                                        Title       = "Mental health Care Plan Report",
                                        Creation    = "2016-03-08T15:26:00+00:00"
                                    }
                                }
                            }
                        }
                    }
                }
            };

            var clientMapCache = new ClientAsidMap
            {
                ClientAsids = new Dictionary <string, ClientAsid>()
                {
                    { "000", new ClientAsid {
                          Interactions = new List <string>()
                          {
                              FhirConstants.CreateInteractionId
                          }, OrgCode = "TestOrgCode", Thumbprint = "TestThumbprint"
                      } },
                    { "002", new ClientAsid {
                          Interactions = new List <string>(), OrgCode = "TestOrgCode2", Thumbprint = "TestThumbprint"
                      } },
                    { "003", new ClientAsid {
                          Interactions = new List <string>(), OrgCode = "RV99", Thumbprint = "TestThumbprint"
                      } }
                }
            };

            var cacheMock = MemoryCacheStub.MockMemoryCacheService.GetMemoryCache(clientMapCache);

            _cache = cacheMock;
        }
        public NrlsControllerTests()
        {
            var nrlsSettingsMock = new Mock <IOptionsSnapshot <NrlsApiSetting> >();

            nrlsSettingsMock.Setup(op => op.Get(It.IsAny <string>())).Returns(AppSettings.NrlsApiSettings);

            var pointerList = new List <DocumentReference> {
                NrlsPointers.Valid, NrlsPointers.Valid_With_Alt_Custodian
            };

            var searchMock = new Mock <INrlsSearch>();

            //searchMock.Setup(x => x.Find<DocumentReference>(It.IsAny<FhirRequest>())).Returns(System.Threading.Tasks.Task.FromResult(FhirBundle.GetBundle(pointerList) as Resource));
            searchMock.Setup(x => x.Find(It.Is <FhirRequest>(y => y.RequestingAsid == "000"))).Returns(System.Threading.Tasks.Task.FromResult(FhirBundle.GetBundle(pointerList)));
            searchMock.Setup(x => x.Get(It.Is <FhirRequest>(y => y.RequestingAsid == "000"))).Returns(System.Threading.Tasks.Task.FromResult(NrlsPointers.Valid as Resource));
            searchMock.Setup(x => x.Get(It.Is <FhirRequest>(y => y.RequestingAsid == "notfound"))).Returns(System.Threading.Tasks.Task.FromResult(null as Resource));
            searchMock.Setup(x => x.Get(It.Is <FhirRequest>(y => y.RequestingAsid == "inactive"))).Returns(System.Threading.Tasks.Task.FromResult(NrlsPointers.Valid_Superseded as Resource));

            var maintMock = new Mock <INrlsMaintain>();

            //maintMock.Setup(x => x.Find<DocumentReference>(It.IsAny<FhirRequest>())).Returns(System.Threading.Tasks.Task.FromResult(new Bundle() as Resource));
            maintMock.Setup(x => x.Delete(It.Is <FhirRequest>(y => y.RequestingAsid == "fromASID"))).Returns(System.Threading.Tasks.Task.FromResult(OperationOutcomes.Deleted));
            maintMock.Setup(x => x.Delete(It.Is <FhirRequest>(y => y.RequestingAsid == "badrequest"))).Returns(System.Threading.Tasks.Task.FromResult(OperationOutcomes.Invalid));
            maintMock.Setup(x => x.Delete(It.Is <FhirRequest>(y => y.RequestingAsid == "notfound"))).Returns(System.Threading.Tasks.Task.FromResult(OperationOutcomes.NotFound));

            maintMock.Setup(x => x.Patch(It.Is <FhirRequest>(y => y.RequestingAsid == "fromASID"))).Returns(System.Threading.Tasks.Task.FromResult(OperationOutcomes.Updated));
            maintMock.Setup(x => x.Patch(It.Is <FhirRequest>(y => y.RequestingAsid == "badrequest"))).Returns(System.Threading.Tasks.Task.FromResult(OperationOutcomes.Invalid));
            maintMock.Setup(x => x.Patch(It.Is <FhirRequest>(y => y.RequestingAsid == "badquery"))).Throws(new HttpFhirException("Invalid", OperationOutcomes.Invalid, HttpStatusCode.BadRequest));
            maintMock.Setup(x => x.Patch(It.Is <FhirRequest>(y => y.RequestingAsid == "notfound"))).Returns(System.Threading.Tasks.Task.FromResult(OperationOutcomes.NotFound));

            _nrlsSettings = nrlsSettingsMock.Object;
            _nrlsSearch   = searchMock.Object;
            _nrlsMaintain = maintMock.Object;
        }