public async Task GivenDicomTagWithDifferentVR_WhenValidated_ThenShouldSkip() { var featureConfiguration = Options.Create(new FeatureConfiguration() { EnableFullDicomItemValidation = false }); DicomTag tag = DicomTag.Date; DicomElement element = new DicomDateTime(tag, DateTime.Now); _dicomDataset.AddOrUpdate(element); _queryTags.Clear(); _queryTags.Add(new QueryTag(tag.BuildExtendedQueryTagStoreEntry())); IDicomElementMinimumValidator validator = Substitute.For <IDicomElementMinimumValidator>(); _dicomDatasetValidator = new DicomDatasetValidator(featureConfiguration, validator, _queryTagService); await _dicomDatasetValidator.ValidateAsync(_dicomDataset, requiredStudyInstanceUid : null); validator.DidNotReceive().Validate(Arg.Any <DicomElement>()); }
public async Task GivenDicomTagWithDifferentVR_WhenValidated_ThenShouldThrowException() { var featureConfiguration = Options.Create(new FeatureConfiguration() { EnableFullDicomItemValidation = false }); DicomTag tag = DicomTag.Date; DicomElement element = new DicomDateTime(tag, DateTime.Now); _dicomDataset.AddOrUpdate(element); _queryTags.Clear(); _queryTags.Add(new QueryTag(tag.BuildExtendedQueryTagStoreEntry())); IDicomElementMinimumValidator validator = Substitute.For <IDicomElementMinimumValidator>(); _dicomDatasetValidator = new DicomDatasetValidator(featureConfiguration, validator, _queryTagService); await AssertThrowsAsyncWithMessage <DatasetValidationException>( () => _dicomDatasetValidator.ValidateAsync(_dicomDataset, requiredStudyInstanceUid: null), expectedMessage : $"The extended query tag '{tag}' is expected to have VR 'DA' but has 'DT' in file."); validator.DidNotReceive().Validate(Arg.Any <DicomElement>()); }
public async Task GivenAValidDicomDataset_WhenValidated_ThenItShouldSucceed() { await _dicomDatasetValidator.ValidateAsync(_dicomDataset, requiredStudyInstanceUid : null); }
private async Task ProcessDicomInstanceEntryAsync(int index, CancellationToken cancellationToken) { IDicomInstanceEntry dicomInstanceEntry = _dicomInstanceEntries[index]; DicomDataset dicomDataset = null; try { // Open and validate the DICOM instance. dicomDataset = await dicomInstanceEntry.GetDicomDatasetAsync(cancellationToken); await _dicomDatasetValidator.ValidateAsync(dicomDataset, _requiredStudyInstanceUid, cancellationToken); } catch (Exception ex) { ushort failureCode = FailureReasonCodes.ProcessingFailure; switch (ex) { case DicomValidationException _: failureCode = FailureReasonCodes.ValidationFailure; break; case DatasetValidationException dicomDatasetValidationException: failureCode = dicomDatasetValidationException.FailureCode; break; case ValidationException _: failureCode = FailureReasonCodes.ValidationFailure; break; } LogValidationFailedDelegate(_logger, index, failureCode, ex); _storeResponseBuilder.AddFailure(dicomDataset, failureCode); return; } try { // Store the instance. await _storeOrchestrator.StoreDicomInstanceEntryAsync( dicomInstanceEntry, cancellationToken); LogSuccessfullyStoredDelegate(_logger, index, null); _storeResponseBuilder.AddSuccess(dicomDataset); } catch (Exception ex) { ushort failureCode = FailureReasonCodes.ProcessingFailure; switch (ex) { case PendingInstanceException _: failureCode = FailureReasonCodes.PendingSopInstance; break; case InstanceAlreadyExistsException _: failureCode = FailureReasonCodes.SopInstanceAlreadyExists; break; } LogFailedToStoreDelegate(_logger, index, failureCode, ex); _storeResponseBuilder.AddFailure(dicomDataset, failureCode); } }