Пример #1
0
        public void GivenPrivateIdentificationCodeWithoutVR_WhenValidating_ThenShouldSucceed()
        {
            DicomTag dicomTag = new DicomTag(0x2201, 0x0010);
            AddExtendedQueryTagEntry entry = CreateExtendedQueryTagEntry(dicomTag.GetPath(), null);

            _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(new AddExtendedQueryTagEntry[] { entry });
        }
        private async Task <int> AddTagAsync(DicomTag tag)
        {
            AddExtendedQueryTagEntry extendedQueryTagEntry = tag.BuildAddExtendedQueryTagEntry();
            var list = await _extendedQueryTagStore.AddExtendedQueryTagsAsync(new AddExtendedQueryTagEntry[] { extendedQueryTagEntry }, 128);

            return(list[0].Key);
        }
Пример #3
0
        public void GivenPrivateTagWithTooLongPrivateCreator_WhenValidating_ThenShouldThrowException()
        {
            // max length of PrivateCreator is 64
            AddExtendedQueryTagEntry entry = CreateExtendedQueryTagEntry("12051003", DicomVRCode.CS, new string('c', 65));

            Assert.Throws <ExtendedQueryTagEntryValidationException>(() => _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(new AddExtendedQueryTagEntry[] { entry }));
        }
Пример #4
0
        public void GivenPrivateIdentificationCodeWithWrongVR_WhenValidating_ThenShouldSucceed()
        {
            DicomTag dicomTag = new DicomTag(0x2201, 0x0010);
            AddExtendedQueryTagEntry entry = CreateExtendedQueryTagEntry(dicomTag.GetPath(), DicomVR.AE.Code);

            Assert.Throws <ExtendedQueryTagEntryValidationException>(() => _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(new AddExtendedQueryTagEntry[] { entry }));
        }
Пример #5
0
        public async Task GivenValidInput_WhenAddExtendedQueryTagIsInvoked_ThenShouldSucceed()
        {
            DicomTag tag = DicomTag.DeviceSerialNumber;
            AddExtendedQueryTagEntry entry = tag.BuildAddExtendedQueryTagEntry();
            await _extendedQueryTagService.AddExtendedQueryTagAsync(new AddExtendedQueryTagEntry[] { entry }, default);

            _extendedQueryTagEntryValidator.ReceivedWithAnyArgs().ValidateExtendedQueryTags(default);
Пример #6
0
        public void GivenInvalidTag_WhenValidating_ThenShouldThrowException(string path)
        {
            AddExtendedQueryTagEntry entry = CreateExtendedQueryTagEntry(path, DicomVRCode.AE);
            var ex = Assert.Throws <ExtendedQueryTagEntryValidationException>(() => { _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(new AddExtendedQueryTagEntry[] { entry }); });

            Assert.Equal(string.Format("The extended query tag '{0}' is invalid as it cannot be parsed into a valid Dicom Tag.", path), ex.Message);
        }
Пример #7
0
        [InlineData("0018A001", "", DicomVRCode.SQ)] // when VR is missing for standard tag
        public void GivenUnsupportedVR_WhenValidating_ThenShouldThrowException(string path, string vr, string expectedVR)
        {
            AddExtendedQueryTagEntry entry = CreateExtendedQueryTagEntry(path, vr);
            var ex = Assert.Throws <ExtendedQueryTagEntryValidationException>(() => { _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(new AddExtendedQueryTagEntry[] { entry }); });

            Assert.Equal(string.Format("The VR code '{0}' specified for tag '{1}' is not supported.", expectedVR, path), ex.Message);
        }
Пример #8
0
        public void GivenValidAndInvalidTags_WhenValidating_ThenShouldThrowException()
        {
            AddExtendedQueryTagEntry invalidEntry = DicomTag.PatientName.BuildAddExtendedQueryTagEntry();
            AddExtendedQueryTagEntry validEntry   = DicomTag.DeviceSerialNumber.BuildAddExtendedQueryTagEntry();

            Assert.Throws <ExtendedQueryTagEntryValidationException>(() => _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(new AddExtendedQueryTagEntry[] { validEntry, invalidEntry }));
        }
Пример #9
0
        public void GivenInvalidTagWithoutVR_WhenNormalizing_ThenShouldNotThrowException()
        {
            // Add this unit test for regression: we had a bug when tag is valid and VR is null, NullPointerException is thrown. More details can be found https://microsofthealth.visualstudio.com/Health/_workitems/edit/81015
            AddExtendedQueryTagEntry entry = CreateExtendedQueryTagEntry(path: "00111011", null, null, QueryTagLevel.Series);

            entry.Normalize();
        }
Пример #10
0
        public void GivenPrivateIdentificationCodeTagWithoutVR_WhenNormalizing_ThenVRShouldBeFilled()
        {
            AddExtendedQueryTagEntry entry      = CreateExtendedQueryTagEntry("22010010", null, null, QueryTagLevel.Instance);
            AddExtendedQueryTagEntry normalized = entry.Normalize();

            Assert.Equal(DicomVRCode.LO, normalized.VR);
        }
Пример #11
0
        public void GivenSupportedTag_WhenValidating_ThenShouldThrowException()
        {
            AddExtendedQueryTagEntry entry = DicomTag.PatientName.BuildAddExtendedQueryTagEntry();
            var ex = Assert.Throws <ExtendedQueryTagEntryValidationException>(() => _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(new AddExtendedQueryTagEntry[] { entry }));

            Assert.Equal(string.Format("The query tag '{0}' is already supported.", entry.Path), ex.Message);
        }
Пример #12
0
        public void GivenMissingLevel_WhenValidating_ThenShouldThrowException()
        {
            AddExtendedQueryTagEntry entry = new AddExtendedQueryTagEntry {
                Path = "00101060", VR = "PN"
            };

            Assert.Throws <ExtendedQueryTagEntryValidationException>(() => _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(new AddExtendedQueryTagEntry[] { entry }));
        }
Пример #13
0
        public void GivenValidExtendedQueryTagEntry_WhenNormalizing_ThenShouldReturnSameEntry(AddExtendedQueryTagEntry entry)
        {
            AddExtendedQueryTagEntry normalized = entry.Normalize();

            Assert.Equal(entry.Path, normalized.Path);
            Assert.Equal(entry.VR, normalized.VR);
            Assert.Equal(entry.Level, normalized.Level);
        }
Пример #14
0
        public void GivenVROfLowerCase_WhenNormalizing_ThenVRShouldBeUpperCase()
        {
            DicomTag tag = DicomTag.DeviceLabel;
            AddExtendedQueryTagEntry entry      = CreateExtendedQueryTagEntry(tag.GetPath(), tag.GetDefaultVR().Code.ToLowerInvariant(), null, QueryTagLevel.Instance);
            AddExtendedQueryTagEntry normalized = entry.Normalize();

            Assert.Equal(entry.VR.ToUpperInvariant(), normalized.VR);
        }
Пример #15
0
        public void GivenStandardTagWithoutVR_WhenNormalizing_ThenVRShouldBeFilled(string vr)
        {
            DicomTag tag = DicomTag.DeviceSerialNumber;
            AddExtendedQueryTagEntry entry      = CreateExtendedQueryTagEntry(tag.GetPath(), vr, null, QueryTagLevel.Instance);
            AddExtendedQueryTagEntry normalized = entry.Normalize();

            Assert.Equal(tag.GetDefaultVR().Code, normalized.VR);
        }
Пример #16
0
        public void GivenStandardTagWithPrivateCreator_WhenValidating_ThenShouldThrowExceptoin()
        {
            AddExtendedQueryTagEntry entry = CreateExtendedQueryTagEntry(DicomTag.DeviceSerialNumber.GetPath(), null, privateCreator: "PrivateCreator");

            Assert.Throws <ExtendedQueryTagEntryValidationException>(() =>
            {
                _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(new AddExtendedQueryTagEntry[] { entry });
            });
        }
Пример #17
0
        public void GivenPrivateTagWithoutPrivateCreator_WhenValidating_ThenShouldThrowException()
        {
            string path = "12051003";
            string vr   = DicomVRCode.OB;
            AddExtendedQueryTagEntry entry = CreateExtendedQueryTagEntry(path, vr);
            var ex = Assert.Throws <ExtendedQueryTagEntryValidationException>(() => { _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(new AddExtendedQueryTagEntry[] { entry }); });

            Assert.Equal(string.Format("The private creator for private tag '{0}' is missing.", path), ex.Message);
        }
Пример #18
0
        public void GivenPrivateTagWithoutVR_WhenValidating_ThenShouldThrowException()
        {
            string path = "12051003";
            string vr   = string.Empty;
            AddExtendedQueryTagEntry entry = CreateExtendedQueryTagEntry(path, vr, "PrivateCreator1");
            var ex = Assert.Throws <ExtendedQueryTagEntryValidationException>(() => _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(new AddExtendedQueryTagEntry[] { entry }));

            Assert.Equal(string.Format("The vr for tag '12051003' is missing.", path), ex.Message);
        }
Пример #19
0
        public async Task GivenCompletedExtendedQueryTag_WhenAddExtendedQueryTag_ThenShouldThrowException()
        {
            DicomTag tag = DicomTag.DeviceSerialNumber;
            AddExtendedQueryTagEntry extendedQueryTagEntry = tag.BuildAddExtendedQueryTagEntry();

            await AddExtendedQueryTagsAsync(new AddExtendedQueryTagEntry[] { extendedQueryTagEntry });

            await Assert.ThrowsAsync <ExtendedQueryTagsAlreadyExistsException>(() => AddExtendedQueryTagsAsync(new AddExtendedQueryTagEntry[] { extendedQueryTagEntry }));
        }
Пример #20
0
        public void GivenInvalidVRForTag_WhenValidating_ThenShouldThrowException()
        {
            string tagPath = DicomTag.DeviceSerialNumber.GetPath();
            string vr      = "CS"; // expected vr should be LO. CS is not acceptable
            AddExtendedQueryTagEntry entry = CreateExtendedQueryTagEntry(tagPath, vr);
            var ex = Assert.Throws <ExtendedQueryTagEntryValidationException>(() => { _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(new AddExtendedQueryTagEntry[] { entry }); });

            Assert.Equal(string.Format("The VR code '{0}' is incorrectly specified for '{1}'. The expected VR code for it is '{2}'. Retry this request either with the correct VR code or without specifying it.", vr, tagPath, "LO"), ex.Message);
        }
Пример #21
0
        public void GivenInvalidVR_WhenValidating_ThenShouldThrowException()
        {
            string tagPath = DicomTag.DeviceSerialNumber.GetPath();
            string vr      = "LOX";
            AddExtendedQueryTagEntry entry = CreateExtendedQueryTagEntry(tagPath, vr);
            var ex = Assert.Throws <ExtendedQueryTagEntryValidationException>(() => { _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(new AddExtendedQueryTagEntry[] { entry }); });

            Assert.Equal(string.Format("The VR code '{0}' for tag '{1}' is invalid.", vr, tagPath), ex.Message);
        }
Пример #22
0
        public async Task GivenReindexingExtendedQueryTag_WhenAddExtendedQueryTag_ThenShouldThrowException()
        {
            DicomTag tag = DicomTag.DeviceSerialNumber;
            AddExtendedQueryTagEntry extendedQueryTagEntry = tag.BuildAddExtendedQueryTagEntry();
            int key = (await AddExtendedQueryTagsAsync(new AddExtendedQueryTagEntry[] { extendedQueryTagEntry }, ready: false)).Single();

            Assert.NotEmpty(await _extendedQueryTagStore.AssignReindexingOperationAsync(new int[] { key }, Guid.NewGuid()));
            await Assert.ThrowsAsync <ExtendedQueryTagsAlreadyExistsException>(() => AddExtendedQueryTagsAsync(new AddExtendedQueryTagEntry[] { extendedQueryTagEntry }));
        }
Пример #23
0
        public void GivenStandardTagAsKeyword_WhenNormalizing_ThenVRShouldBeFilled()
        {
            DicomTag tag = DicomTag.DeviceSerialNumber;
            AddExtendedQueryTagEntry entry      = CreateExtendedQueryTagEntry(path: tag.DictionaryEntry.Keyword, tag.GetDefaultVR().Code, null, QueryTagLevel.Instance);
            string expectedPath                 = tag.GetPath();
            AddExtendedQueryTagEntry normalized = entry.Normalize();

            Assert.Equal(normalized.Path, expectedPath);
        }
Пример #24
0
        public void GivenStandardTagWithVR_WhenNormalizing_ThenVRShouldNotBeUpdated()
        {
            DicomTag tag = DicomTag.DeviceSerialNumber;
            string   vr  = DicomVR.CS.Code;
            AddExtendedQueryTagEntry entry      = CreateExtendedQueryTagEntry(tag.GetPath(), vr, null, QueryTagLevel.Instance);
            AddExtendedQueryTagEntry normalized = entry.Normalize();

            Assert.Equal(vr, normalized.VR);
        }
Пример #25
0
        public async Task GivenExistingExtendedQueryTag_WhenDeleteExtendedQueryTag_ThenTagShouldBeRemoved()
        {
            DicomTag tag = DicomTag.DeviceSerialNumber;
            AddExtendedQueryTagEntry extendedQueryTagEntry = tag.BuildAddExtendedQueryTagEntry();
            await _extendedQueryTagStore.AddExtendedQueryTagsAsync(new AddExtendedQueryTagEntry[] { extendedQueryTagEntry });

            await _extendedQueryTagStore.DeleteExtendedQueryTagAsync(extendedQueryTagEntry.Path, extendedQueryTagEntry.VR);

            await VerifyTagNotExist(extendedQueryTagEntry.Path);
        }
Пример #26
0
        public void GivenPrivateTagWithNonEmptyPrivateCreator_WhenNormalizing_ThenPrivateCreatorShouldBeNull(string privateCreator)
        {
            DicomTag tag1 = new DicomTag(0x0405, 0x1001);
            AddExtendedQueryTagEntry normalized = new AddExtendedQueryTagEntry()
            {
                Level = QueryTagLevel.Instance.ToString(), Path = tag1.GetPath(), PrivateCreator = privateCreator, VR = DicomVRCode.CS
            }.Normalize();

            Assert.Null(normalized.PrivateCreator);
        }
Пример #27
0
        public async Task GivenMoreThanAllowedExtendedQueryTags_WhenAddExtendedQueryTag_ThenShouldThrowException()
        {
            DicomTag tag1 = DicomTag.DeviceSerialNumber;
            AddExtendedQueryTagEntry extendedQueryTagEntry1 = tag1.BuildAddExtendedQueryTagEntry();

            await AddExtendedQueryTagsAsync(new AddExtendedQueryTagEntry[] { extendedQueryTagEntry1 });

            DicomTag tag2 = DicomTag.DeviceDescription;
            AddExtendedQueryTagEntry extendedQueryTagEntry2 = tag2.BuildAddExtendedQueryTagEntry();
            await Assert.ThrowsAsync <ExtendedQueryTagsExceedsMaxAllowedCountException>(() => AddExtendedQueryTagsAsync(new AddExtendedQueryTagEntry[] { extendedQueryTagEntry2 }, maxAllowedCount : 1));
        }
Пример #28
0
        public async Task GivenValidExtendedQueryTag_WhenAddExtendedQueryTag_ThenTagQueryStatusShouldBeEnabled()
        {
            DicomTag tag = DicomTag.DeviceSerialNumber;
            AddExtendedQueryTagEntry extendedQueryTagEntry = tag.BuildAddExtendedQueryTagEntry();

            await AddExtendedQueryTagsAsync(new AddExtendedQueryTagEntry[] { extendedQueryTagEntry });

            var tagEntry = await _extendedQueryTagStore.GetExtendedQueryTagAsync(tag.GetPath());

            Assert.Equal(QueryStatus.Enabled, tagEntry.QueryStatus);
        }
Пример #29
0
        public async Task GivenValidExtendedQueryTags_WhenAddExtendedQueryTag_ThenTagShouldBeAdded()
        {
            DicomTag tag1 = DicomTag.DeviceSerialNumber;
            DicomTag tag2 = new DicomTag(0x0405, 0x1001, "PrivateCreator1");
            AddExtendedQueryTagEntry extendedQueryTagEntry1 = tag1.BuildAddExtendedQueryTagEntry();
            AddExtendedQueryTagEntry extendedQueryTagEntry2 = tag2.BuildAddExtendedQueryTagEntry(vr: DicomVRCode.CS);
            IReadOnlyList <int>      keys = await AddExtendedQueryTagsAsync(new AddExtendedQueryTagEntry[] { extendedQueryTagEntry1, extendedQueryTagEntry2 });

            await AssertAddedAsync(keys[0], extendedQueryTagEntry1);
            await AssertAddedAsync(keys[1], extendedQueryTagEntry2);
        }
Пример #30
0
        public void GivenValidAddExtendedQueryTagEntry_WhenValidating_ShouldSucced()
        {
            AddExtendedQueryTagEntry addExtendedQueryTagEntry = new AddExtendedQueryTagEntry()
            {
                Path = "00101001", Level = "Study"
            };
            var validationContext = new ValidationContext(addExtendedQueryTagEntry);
            IEnumerable <ValidationResult> results = addExtendedQueryTagEntry.Validate(validationContext);

            Assert.Empty(results);
        }