Пример #1
0
        public async Task ThenItShouldPostSearchRequestToManagementGroupsEndpoint(LoadManagementGroupsRequest request)
        {
            request.AggregatesRequest = null;

            await _repository.LoadManagementGroupsAsync(request, _cancellationToken);

            var expectedTranslatedRequest = new GetSquashedEntitiesRequest
            {
                EntityName       = request.EntityName,
                EntityReferences = request.EntityReferences.Select(er =>
                                                                   new SquasherEntityReference
                {
                    AdapterRecordReferences = er.AdapterRecordReferences.Select(arr =>
                                                                                new SquasherAdapterReference
                    {
                        SourceSystemName = arr.SourceSystemName,
                        SourceSystemId   = arr.SourceSystemId,
                    }).ToArray(),
                }).ToArray(),
                Fields      = request.Fields,
                Live        = request.Live,
                PointInTime = request.PointInTime,
            };
            Func <Parameter, bool> isExpectedBody = (body) =>
                                                    body != null &&
                                                    (string)body.Value == JsonConvert.SerializeObject(expectedTranslatedRequest);
            Expression <Func <IRestRequest, bool> > isExpectedRequest = (req) =>
                                                                        req.Method == Method.POST &&
                                                                        req.Resource == "get-squashed-entity" &&
                                                                        isExpectedBody(req.Parameters.SingleOrDefault(p => p.Type == ParameterType.RequestBody));

            _restClientMock.Verify(c => c.ExecuteTaskAsync(It.Is(isExpectedRequest), _cancellationToken),
                                   Times.Once);
        }
Пример #2
0
        public async Task ThenItShouldReturnDeserializedResponseFromApi(LoadManagementGroupsRequest request,
                                                                        EntityCollection <ManagementGroup> results)
        {
            _restClientMock.Setup(c => c.ExecuteTaskAsync(It.IsAny <RestRequest>(), _cancellationToken))
            .ReturnsAsync(new RestResponse
            {
                Content        = JsonConvert.SerializeObject(results),
                StatusCode     = HttpStatusCode.OK,
                ResponseStatus = ResponseStatus.Completed,
            });

            var actual = await _repository.LoadManagementGroupsAsync(request, _cancellationToken);

            Assert.IsNotNull(actual);
            Assert.AreEqual(results.SquashedEntityResults.Length, actual.SquashedEntityResults.Length);
            for (var i = 0; i < results.SquashedEntityResults.Length; i++)
            {
                var expectedEntity = results.SquashedEntityResults[i].SquashedEntity;
                var actualEntity   = actual.SquashedEntityResults[i].SquashedEntity;

                Assert.AreEqual(expectedEntity.Name, actualEntity.Name,
                                $"Expected entity {i} to have Name {expectedEntity.Name} but was {actualEntity.Name}");
                Assert.AreEqual(expectedEntity.Type, actualEntity.Type,
                                $"Expected entity {i} to have Type {expectedEntity.Type} but was {actualEntity.Type}");
                Assert.AreEqual(expectedEntity.Identifier, actualEntity.Identifier,
                                $"Expected entity {i} to have Identifier {expectedEntity.Identifier} but was {actualEntity.Identifier}");
                Assert.AreEqual(expectedEntity.Code, actualEntity.Code,
                                $"Expected entity {i} to have Code {expectedEntity.Code} but was {actualEntity.Code}");
                Assert.AreEqual(expectedEntity.CompaniesHouseNumber, actualEntity.CompaniesHouseNumber,
                                $"Expected entity {i} to have CompaniesHouseNumber {expectedEntity.CompaniesHouseNumber} but was {actualEntity.CompaniesHouseNumber}");
            }
        }
Пример #3
0
        private async Task <SquashedEntityResult <ManagementGroup>[]> LoadManagementGroupsAsync(
            EntityLinkBatchResult[] links,
            string[] fields,
            DateTime?pointInTime,
            CancellationToken cancellationToken)
        {
            _logger.Debug($"Loading {links.Length} management groups");

            // Get distinct list of pointers to squash (multiple providers might be linked to same management group)
            var managementGroupPointers = links
                                          .Where(result => result.Links != null)
                                          .SelectMany(result => result.Links.Select(link =>
                                                                                    new EntityReference
            {
                SourceSystemName = link.SourceSystemName,
                SourceSystemId   = link.SourceSystemId,
            }))
                                          .GroupBy(x => $"{x.SourceSystemName.ToLower()}:{x.SourceSystemId.ToLower()}")
                                          .Select(x => new AggregateEntityReference
            {
                AdapterRecordReferences = new[]
                {
                    x.First(),
                },
            })
                                          .ToArray();

            // If there are not references then don't try loading
            if (managementGroupPointers.Length == 0)
            {
                return(new SquashedEntityResult <ManagementGroup> [0]);
            }

            // Got to Squash'em all
            var request = new LoadManagementGroupsRequest()
            {
                EntityReferences = managementGroupPointers.ToArray(),
                Fields           = fields,
                Live             = _executionContextManager.GraphExecutionContext.QueryLive,
                PointInTime      = pointInTime,
            };

            var entityCollection = await _entityRepository.LoadManagementGroupsAsync(request, cancellationToken);

            return(entityCollection.SquashedEntityResults);
        }
        private async Task <ManagementGroup[]> LoadAsync(
            AggregateEntityReference[] references,
            Dictionary <string, object> arguments,
            string[] fields,
            CancellationToken cancellationToken)
        {
            if (references.Length == 0)
            {
                return(new ManagementGroup[0]);
            }

            var request = new LoadManagementGroupsRequest
            {
                EntityReferences = references,
                Fields           = fields,
                Live             = _executionContextManager.GraphExecutionContext.QueryLive,
                PointInTime      = arguments.GetPointInTimeArgument(),
            };
            var loadResult = await _entityRepository.LoadManagementGroupsAsync(request, cancellationToken);

            return(loadResult.SquashedEntityResults.Select(x => x.SquashedEntity).ToArray());
        }
Пример #5
0
 public async Task <EntityCollection <ManagementGroup> > LoadManagementGroupsAsync(LoadManagementGroupsRequest request, CancellationToken cancellationToken)
 {
     return(await LoadAsync <ManagementGroup>(request, cancellationToken));
 }