public async Task GivenSearchRequest_AllInstancesLevel_MatchResult() { DicomDataset matchInstance = await PostDicomFileAsync(new DicomDataset() { { DicomTag.Modality, "XRAY" }, }); var studyId = matchInstance.GetSingleValue <string>(DicomTag.StudyInstanceUID); using DicomWebAsyncEnumerableResponse <DicomDataset> response = await _client.QueryInstancesAsync("Modality=XRAY"); Assert.Equal(KnownContentTypes.ApplicationDicomJson, response.ContentHeaders.ContentType.MediaType); DicomDataset[] datasets = await response.ToArrayAsync(); Assert.NotNull(datasets); DicomDataset testDataResponse = datasets.FirstOrDefault(ds => ds.GetSingleValue <string>(DicomTag.StudyInstanceUID) == studyId); Assert.NotNull(testDataResponse); ValidationHelpers.ValidateResponseDataset(QueryResource.AllInstances, matchInstance, testDataResponse); }
public async Task GivenExtendedQueryTag_WhenReindexing_ThenShouldSucceed() { DicomTag weightTag = DicomTag.PatientWeight; DicomTag sizeTag = DicomTag.PatientSize; // Try to delete these extended query tags. await CleanupExtendedQueryTag(weightTag); await CleanupExtendedQueryTag(sizeTag); // Define DICOM files DicomDataset instance1 = Samples.CreateRandomInstanceDataset(); instance1.Add(weightTag, 68.0M); instance1.Add(sizeTag, 1.78M); DicomDataset instance2 = Samples.CreateRandomInstanceDataset(); instance2.Add(weightTag, 50.0M); instance2.Add(sizeTag, 1.5M); // Upload files Assert.True((await _instanceManager.StoreAsync(new DicomFile(instance1))).IsSuccessStatusCode); Assert.True((await _instanceManager.StoreAsync(new DicomFile(instance2))).IsSuccessStatusCode); // Add extended query tag OperationStatus operation = await _tagManager.AddTagsAsync( new AddExtendedQueryTagEntry[] { new AddExtendedQueryTagEntry { Path = weightTag.GetPath(), VR = weightTag.GetDefaultVR().Code, Level = QueryTagLevel.Study }, new AddExtendedQueryTagEntry { Path = sizeTag.GetPath(), VR = sizeTag.GetDefaultVR().Code, Level = QueryTagLevel.Study }, }); Assert.Equal(OperationRuntimeStatus.Completed, operation.Status); // Check specific tag DicomWebResponse <GetExtendedQueryTagEntry> getResponse; GetExtendedQueryTagEntry entry; getResponse = await _client.GetExtendedQueryTagAsync(weightTag.GetPath()); entry = await getResponse.GetValueAsync(); Assert.Null(entry.Errors); Assert.Equal(QueryStatus.Enabled, entry.QueryStatus); getResponse = await _client.GetExtendedQueryTagAsync(sizeTag.GetPath()); entry = await getResponse.GetValueAsync(); Assert.Null(entry.Errors); Assert.Equal(QueryStatus.Enabled, entry.QueryStatus); // Query multiple tags // Note: We don't necessarily need to check the tags are the above ones, as another test may have added ones beforehand var multipleTags = await _tagManager.GetTagsAsync(2, 0); Assert.Equal(2, multipleTags.Count); Assert.Equal(multipleTags[0].Path, (await _tagManager.GetTagsAsync(1, 0)).Single().Path); Assert.Equal(multipleTags[1].Path, (await _tagManager.GetTagsAsync(1, 1)).Single().Path); // QIDO DicomWebAsyncEnumerableResponse <DicomDataset> queryResponse = await _client.QueryInstancesAsync($"{weightTag.GetPath()}=50.0"); DicomDataset[] instances = await queryResponse.ToArrayAsync(); Assert.Contains(instances, instance => instance.ToInstanceIdentifier().Equals(instance2.ToInstanceIdentifier())); }