Exemple #1
0
        public async Task GivenOperationId_WhenAddingTags_ReturnIdWithHeader()
        {
            Guid id       = Guid.NewGuid();
            var  expected = new AddExtendedQueryTagResponse(
                new OperationReference(id, new Uri("https://dicom.contoso.io/unit/test/Operations/" + id, UriKind.Absolute)));
            IMediator mediator   = Substitute.For <IMediator>();
            var       controller = new ExtendedQueryTagController(
                mediator,
                Options.Create(new FeatureConfiguration {
                EnableExtendedQueryTags = true
            }),
                NullLogger <ExtendedQueryTagController> .Instance);

            controller.ControllerContext.HttpContext = new DefaultHttpContext();

            var input = new List <AddExtendedQueryTagEntry>
            {
                new AddExtendedQueryTagEntry
                {
                    Level = QueryTagLevel.Instance,
                    Path  = "00101001",
                    VR    = DicomVRCode.PN,
                },
                new AddExtendedQueryTagEntry
                {
                    Level          = QueryTagLevel.Instance,
                    Path           = "11330001",
                    PrivateCreator = "Microsoft",
                    VR             = DicomVRCode.SS,
                }
            };

            mediator
            .Send(
                Arg.Is <AddExtendedQueryTagRequest>(x => ReferenceEquals(x.ExtendedQueryTags, input)),
                Arg.Is(controller.HttpContext.RequestAborted))
            .Returns(expected);

            var actual = await controller.PostAsync(input) as ObjectResult;

            Assert.NotNull(actual);
            Assert.IsType <OperationReference>(actual.Value);
            Assert.True(controller.Response.Headers.TryGetValue(HeaderNames.Location, out StringValues header));
            Assert.Single(header);

            Assert.Equal((int)HttpStatusCode.Accepted, actual.StatusCode);
            Assert.Same(expected.Operation, actual.Value);
            Assert.Equal("https://dicom.contoso.io/unit/test/Operations/" + id, header[0]);

            await mediator.Received(1).Send(
                Arg.Is <AddExtendedQueryTagRequest>(x => ReferenceEquals(x.ExtendedQueryTags, input)),
                Arg.Is(controller.HttpContext.RequestAborted));
        }
        public async Task GivenFeatureIsDisabled_WhenCallingApi_ThenShouldThrowException()
        {
            IMediator _mediator     = Substitute.For <IMediator>();
            var       featureConfig = Options.Create(new Core.Configs.FeatureConfiguration()
            {
                EnableExtendedQueryTags = false
            });
            ExtendedQueryTagController controller = new ExtendedQueryTagController(_mediator, NullLogger <ExtendedQueryTagController> .Instance, featureConfig);
            await Assert.ThrowsAsync <ExtendedQueryTagFeatureDisabledException>(() => controller.GetTagAsync(DicomTag.PageNumberVector.GetPath()));

            await Assert.ThrowsAsync <ExtendedQueryTagFeatureDisabledException>(() => controller.GetAllTagsAsync());

            await Assert.ThrowsAsync <ExtendedQueryTagFeatureDisabledException>(() => controller.PostAsync(Array.Empty <AddExtendedQueryTagEntry>()));

            await Assert.ThrowsAsync <ExtendedQueryTagFeatureDisabledException>(() => controller.DeleteAsync(DicomTag.PageNumberVector.GetPath()));
        }
Exemple #3
0
        public async Task GivenTagPath_WhenCallingApi_ThenShouldReturnOk()
        {
            IMediator    mediator = Substitute.For <IMediator>();
            const string path     = "11330001";

            var controller = new ExtendedQueryTagController(
                mediator,
                Options.Create(new FeatureConfiguration {
                EnableExtendedQueryTags = true
            }),
                NullLogger <ExtendedQueryTagController> .Instance);

            controller.ControllerContext.HttpContext = new DefaultHttpContext();

            var expected = new GetExtendedQueryTagErrorsResponse(
                new List <ExtendedQueryTagError>
            {
                new ExtendedQueryTagError(DateTime.UtcNow, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "Error 1"),
                new ExtendedQueryTagError(DateTime.UtcNow, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "Error 2"),
                new ExtendedQueryTagError(DateTime.UtcNow, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "Error 3"),
            });

            mediator
            .Send(
                Arg.Is <GetExtendedQueryTagErrorsRequest>(x => x.Path == path),
                Arg.Is(controller.HttpContext.RequestAborted))
            .Returns(expected);

            IActionResult response = await controller.GetTagErrorsAsync(path, new PaginationOptions());

            Assert.IsType <ObjectResult>(response);

            var actual = response as ObjectResult;

            Assert.Equal((int)HttpStatusCode.OK, actual.StatusCode);
            Assert.Same(expected.ExtendedQueryTagErrors, actual.Value);

            await mediator.Received(1).Send(
                Arg.Is <GetExtendedQueryTagErrorsRequest>(x => x.Path == path),
                Arg.Is(controller.HttpContext.RequestAborted));
        }