public async Task Validate_BundleId_ValidatesProperty(string value, bool isValid) { // Arrange const string propertyName = nameof(PeekCommand.BundleId); var target = new PeekAggregationsCommandRuleSet(); var command = new PeekAggregationsCommand( ValidRecipient, value); // Act var result = await target.ValidateAsync(command).ConfigureAwait(false); // Assert if (isValid) { Assert.True(result.IsValid); Assert.DoesNotContain(propertyName, result.Errors.Select(x => x.PropertyName)); } else { Assert.False(result.IsValid); Assert.Contains(propertyName, result.Errors.Select(x => x.PropertyName)); } }
public async Task PeekAggregationsCommandHandle_WithoutData_ReturnsNullStream() { // Arrange var request = new PeekAggregationsCommand("fake_value", Guid.NewGuid().ToString()); var warehouseDomainServiceMock = new Mock <IMarketOperatorDataDomainService>(); warehouseDomainServiceMock .Setup(x => x.GetNextUnacknowledgedAggregationsAsync( It.Is <LegacyActorId>(r => string.Equals(r.Value, request.MarketOperator, StringComparison.OrdinalIgnoreCase)), It.Is <Uuid>(r => string.Equals(r.ToString(), request.BundleId, StringComparison.OrdinalIgnoreCase)))) .ReturnsAsync((Bundle?)null); var target = new PeekHandler( warehouseDomainServiceMock.Object, new Mock <ILogger>().Object, new Mock <ICorrelationContext>().Object); // Act var(hasContent, _, stream, _) = await target.Handle(request, CancellationToken.None).ConfigureAwait(false); // Assert Assert.False(hasContent); Assert.Equal(0, stream.Length); await stream.DisposeAsync().ConfigureAwait(false); }
public Task <HttpResponseData> RunAsync( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "peek/aggregations")] HttpRequestData request) { return(request.ProcessAsync(async() => { var command = new PeekAggregationsCommand(_operatorIdentity.ActorId, _bundleIdProvider.TryGetBundleId(request)); var(hasContent, bundleId, stream, documentTypes) = await _mediator .Send(command) .ConfigureAwait(false); var response = hasContent ? request.CreateResponse(stream, MediaTypeNames.Application.Xml) : request.CreateResponse(HttpStatusCode.NoContent); response.Headers.Add(Constants.BundleIdHeaderName, bundleId); if (_featureFlags.IsFeatureActive(Feature.SendMessageTypeHeader)) { response.Headers.Add(Constants.MessageTypeName, string.Join(",", documentTypes)); } return response; })); }
public async Task PeekAggregationsCommand_SingleNotificationMultiplePeek_ReturnsData() { // Arrange var recipientGln = new MockedGln(); var bundleId = Guid.NewGuid().ToString(); await AddAggregationsNotificationAsync(recipientGln).ConfigureAwait(false); await using var host = await MarketOperatorIntegrationTestHost .InitializeAsync() .ConfigureAwait(false); await using var scope = host.BeginScope(); var mediator = scope.GetInstance <IMediator>(); var peekCommand = new PeekAggregationsCommand(recipientGln, bundleId); // Act var responseA = await mediator.Send(peekCommand).ConfigureAwait(false); var responseB = await mediator.Send(peekCommand).ConfigureAwait(false); // Assert Assert.NotNull(responseA); Assert.True(responseA.HasContent); Assert.NotNull(responseB); Assert.True(responseB.HasContent); }
public async Task PeekAggregationsCommand_InvalidCommand_ThrowsException() { // Arrange await using var host = await MarketOperatorIntegrationTestHost .InitializeAsync() .ConfigureAwait(false); await using var scope = host.BeginScope(); var mediator = scope.GetInstance <IMediator>(); var peekCommand = new PeekAggregationsCommand(" ", " "); // Act + Assert await Assert.ThrowsAsync <ValidationException>(() => mediator.Send(peekCommand)).ConfigureAwait(false); }
public async Task PeekAggregationsCommandHandle_WithData_ReturnsDataStream() { // Arrange var bundleId = Guid.NewGuid().ToString(); var request = new PeekAggregationsCommand("fake_value", bundleId); var bundleContentMock = new Mock <IBundleContent>(); bundleContentMock .Setup(x => x.OpenAsync()) .ReturnsAsync(() => new MemoryStream(new byte[] { 1, 2, 3 })); var bundle = new Bundle( new Uuid(bundleId), new LegacyActorId(new GlobalLocationNumber("fake_value")), DomainOrigin.TimeSeries, new ContentType("fake_value"), Array.Empty <Uuid>(), bundleContentMock.Object, Enumerable.Empty <string>()); var warehouseDomainServiceMock = new Mock <IMarketOperatorDataDomainService>(); warehouseDomainServiceMock .Setup(x => x.GetNextUnacknowledgedAggregationsAsync( It.Is <LegacyActorId>(r => string.Equals(r.Value, request.MarketOperator, StringComparison.OrdinalIgnoreCase)), It.Is <Uuid>(r => r.ToString().Equals(request.BundleId, StringComparison.OrdinalIgnoreCase)))) .ReturnsAsync(bundle); var target = new PeekHandler( warehouseDomainServiceMock.Object, new Mock <ILogger>().Object, new Mock <ICorrelationContext>().Object); // Act var(hasContent, bid, stream, _) = await target.Handle(request, CancellationToken.None).ConfigureAwait(false); // Assert Assert.True(hasContent); Assert.Equal(bundleId, bid); Assert.Equal(1, stream.ReadByte()); Assert.Equal(2, stream.ReadByte()); Assert.Equal(3, stream.ReadByte()); await stream.DisposeAsync().ConfigureAwait(false); }
public async Task PeekAggregationsCommand_AllNotificationsCanBundle_ReturnsBundle() { // Arrange var recipientGln = new MockedGln(); var expectedGuidA = await AddBundlingNotificationAsync(recipientGln, "Aggregations", true).ConfigureAwait(false); var expectedGuidB = await AddBundlingNotificationAsync(recipientGln, "Aggregations", true).ConfigureAwait(false); var expectedGuidC = await AddBundlingNotificationAsync(recipientGln, "Aggregations", true).ConfigureAwait(false); var bundleId = Guid.NewGuid().ToString(); await using var host = await MarketOperatorIntegrationTestHost .InitializeAsync() .ConfigureAwait(false); await using var scope = host.BeginScope(); var mediator = scope.GetInstance <IMediator>(); var peekCommand = new PeekAggregationsCommand(recipientGln, bundleId); // Act var response = await mediator.Send(peekCommand).ConfigureAwait(false); // Assert Assert.NotNull(response); Assert.True(response.HasContent); var bundleContents = await response.Data.ReadAsDataBundleRequestAsync().ConfigureAwait(false); var dataAvailableNotificationIds = await bundleContents.GetDataAvailableIdsAsync(scope).ConfigureAwait(false); Assert.Equal(3, dataAvailableNotificationIds.Count); Assert.Contains(expectedGuidA, dataAvailableNotificationIds); Assert.Contains(expectedGuidB, dataAvailableNotificationIds); Assert.Contains(expectedGuidC, dataAvailableNotificationIds); }
public Task <PeekResponse> Handle(PeekAggregationsCommand request, CancellationToken cancellationToken) { return(HandleAsync(request, _marketOperatorDataDomainService.GetNextUnacknowledgedAggregationsAsync)); }