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())); }
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)); }