示例#1
0
        public async Task Validate_BundleId_ValidatesProperty(string value, bool isValid)
        {
            // Arrange
            const string propertyName = nameof(PeekMasterDataCommand.BundleId);

            var target  = new PeekMasterDataCommandRuleSet();
            var command = new PeekMasterDataCommand(
                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));
            }
        }
示例#2
0
        public async Task PeekMasterDataCommandHandle_WithoutData_ReturnsNullStream()
        {
            // Arrange
            var request = new PeekMasterDataCommand("fake_value", Guid.NewGuid().ToString());

            var warehouseDomainServiceMock = new Mock <IMarketOperatorDataDomainService>();

            warehouseDomainServiceMock
            .Setup(x =>
                   x.GetNextUnacknowledgedMasterDataAsync(
                       It.Is <LegacyActorId>(r =>
                                             string.Equals(r.Value, request.MarketOperator, StringComparison.OrdinalIgnoreCase)),
                       It.Is <Uuid>(r => BundleIdCheck(r, request))))
            .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 async Task PeekMasterDataCommand_SingleNotificationMultiplePeek_ReturnsData()
        {
            // Arrange
            var recipientGln = new MockedGln();
            var bundleId     = Guid.NewGuid().ToString();

            await AddMeteringPointsNotificationAsync(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 PeekMasterDataCommand(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 PeekMasterDataCommand_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 PeekMasterDataCommand("   ", "    ");

            // Act + Assert
            await Assert.ThrowsAsync <ValidationException>(() => mediator.Send(peekCommand)).ConfigureAwait(false);
        }
示例#5
0
        public async Task PeekMasterDataCommandHandle_WithData_ReturnsDataStream()
        {
            // Arrange
            var bundleId = Guid.NewGuid().ToString();
            var request  = new PeekMasterDataCommand("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.MarketRoles,
                new ContentType("fake_value"),
                Array.Empty <Uuid>(),
                bundleContentMock.Object,
                Enumerable.Empty <string>());

            var warehouseDomainServiceMock = new Mock <IMarketOperatorDataDomainService>();

            warehouseDomainServiceMock
            .Setup(x =>
                   x.GetNextUnacknowledgedMasterDataAsync(
                       It.Is <LegacyActorId>(r =>
                                             string.Equals(r.Value, request.MarketOperator, StringComparison.OrdinalIgnoreCase)),
                       It.Is <Uuid>(r => BundleIdCheck(r, request))))
            .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 Task <HttpResponseData> RunAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "peek/masterdata")]
            HttpRequestData request)
        {
            return(request.ProcessAsync(async() =>
            {
                var command = new PeekMasterDataCommand(_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 PeekMasterDataCommand_AllNotificationsCanBundle_ReturnsBundle()
        {
            // Arrange
            var recipientGln  = new MockedGln();
            var expectedGuidA = await AddBundlingNotificationAsync(recipientGln, "MeteringPoints", true).ConfigureAwait(false);

            var expectedGuidB = await AddBundlingNotificationAsync(recipientGln, "MeteringPoints", true).ConfigureAwait(false);

            var expectedGuidC = await AddBundlingNotificationAsync(recipientGln, "MeteringPoints", 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 PeekMasterDataCommand(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);
        }
示例#8
0
 public Task <PeekResponse> Handle(PeekMasterDataCommand request, CancellationToken cancellationToken)
 {
     return(HandleAsync(request, _marketOperatorDataDomainService.GetNextUnacknowledgedMasterDataAsync));
 }