public async Task ThenItShouldRaiseEventForGroupIfAlreadyExistsAndUpdated(PointInTimeGroup stagingGroup)
        {
            // Arrange
            var managementGroup = new ManagementGroup {
                Identifier = stagingGroup.Uid.ToString()
            };

            _mapperMock.Setup(m => m.MapAsync <ManagementGroup>(It.IsAny <PointInTimeGroup>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(managementGroup);
            _groupRepositoryMock.Setup(r => r.GetGroupFromStagingAsync(stagingGroup.Uid, stagingGroup.PointInTime, _cancellationToken))
            .ReturnsAsync(stagingGroup);
            _groupRepositoryMock.Setup(r => r.GetGroupAsync(stagingGroup.Uid, stagingGroup.PointInTime, _cancellationToken))
            .ReturnsAsync(CloneWithChanges(stagingGroup, stagingGroup.GroupName + "-updated", false));
            _establishmentRepositoryMock.Setup(r => r.GetEstablishmentFromStagingAsync(It.IsAny <long>(), It.IsAny <DateTime>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new PointInTimeEstablishment());

            // Act
            await _manager.ProcessGroupAsync(stagingGroup.Uid, new[] { 1000001L }, stagingGroup.PointInTime, _cancellationToken);

            // Assert
            _eventPublisherMock.Verify(p => p.PublishManagementGroupUpdatedAsync(
                                           managementGroup,
                                           stagingGroup.PointInTime,
                                           _cancellationToken),
                                       Times.Once);
        }
        private PointInTimeGroup CloneWithChanges(PointInTimeGroup group, string groupName = null, bool?isCurrent = null)
        {
            var clone = Clone(group);

            if (groupName != null)
            {
                clone.GroupName = groupName;
            }

            if (isCurrent.HasValue)
            {
                clone.IsCurrent = isCurrent.Value;
            }

            return(clone);
        }
        public async Task ThenItShouldStoreTheGroupIfDoesNotAlreadyExist(PointInTimeGroup stagingGroup)
        {
            // Arrange
            _groupRepositoryMock.Setup(r => r.GetGroupFromStagingAsync(stagingGroup.Uid, stagingGroup.PointInTime, _cancellationToken))
            .ReturnsAsync(stagingGroup);
            _establishmentRepositoryMock.Setup(r => r.GetEstablishmentFromStagingAsync(It.IsAny <long>(), It.IsAny <DateTime>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new PointInTimeEstablishment());

            // Act
            await _manager.ProcessGroupAsync(stagingGroup.Uid, new[] { 1000001L }, stagingGroup.PointInTime, _cancellationToken);

            // Assert
            _groupRepositoryMock.Verify(r => r.StoreAsync(
                                            It.Is <PointInTimeGroup[]>(toStore =>
                                                                       toStore.Length == 1 &&
                                                                       toStore[0] == stagingGroup),
                                            _cancellationToken),
                                        Times.Once);
        }
        public async Task ThenItShouldStoreEstablishmentIfAlreadyExistsAndUpdated(PointInTimeGroup stagingGroup, PointInTimeEstablishment stagingEstablishment)
        {
            // Arrange
            _groupRepositoryMock.Setup(r => r.GetGroupFromStagingAsync(stagingGroup.Uid, stagingGroup.PointInTime, _cancellationToken))
            .ReturnsAsync(stagingGroup);
            _establishmentRepositoryMock.Setup(r =>
                                               r.GetEstablishmentFromStagingAsync(stagingEstablishment.Urn, It.IsAny <DateTime>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(stagingEstablishment);
            _establishmentRepositoryMock.Setup(r => r.GetEstablishmentAsync(stagingEstablishment.Urn, It.IsAny <DateTime>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(CloneWithChanges(stagingEstablishment, stagingEstablishment.EstablishmentName + "-updated", false));

            // Act
            await _manager.ProcessGroupAsync(stagingGroup.Uid, new[] { stagingEstablishment.Urn }, stagingGroup.PointInTime, _cancellationToken);

            // Assert
            _establishmentRepositoryMock.Verify(r => r.StoreAsync(
                                                    It.Is <PointInTimeEstablishment[]>(toStore =>
                                                                                       toStore.Length == 1 &&
                                                                                       toStore[0] == stagingEstablishment),
                                                    _cancellationToken),
                                                Times.Once);
        }
Пример #5
0
        public async Task ThenItShouldMapManagementGroupToFederationIfAvailable(Establishment source, long uid)
        {
            EnsureManagmentGroupCodes(source, federationUid: uid);
            var federation      = new PointInTimeGroup();
            var managementGroup = new ManagementGroup();

            _groupRepositoryMock.Setup(r =>
                                       r.GetGroupAsync(It.IsAny <long>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(federation);
            _mapperMock.Setup(m =>
                              m.MapAsync <ManagementGroup>(It.IsAny <Group>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(managementGroup);

            var actual = await _mapper.MapAsync <LearningProvider>(source, _cancellationToken);

            Assert.IsNotNull(actual.ManagementGroup);
            Assert.AreSame(managementGroup, actual.ManagementGroup);
            _groupRepositoryMock.Verify(r => r.GetGroupAsync(uid, _cancellationToken),
                                        Times.Once);
            _mapperMock.Verify(m => m.MapAsync <ManagementGroup>(federation, _cancellationToken),
                               Times.Once);
        }
Пример #6
0
        private async Task StoreGroupAndRaiseEventAsync(
            PointInTimeGroup staging,
            bool isUpdate,
            CancellationToken cancellationToken)
        {
            var current = await _groupRepository.GetGroupAsync(staging.Uid, cancellationToken);

            staging.IsCurrent = current == null || staging.PointInTime > current.PointInTime;
            if (current != null && staging.IsCurrent)
            {
                current.IsCurrent = false;
            }

            var toStore = current == null || current.IsCurrent
                ? new[] { staging }
                : new[] { current, staging };

            await _groupRepository.StoreAsync(toStore, cancellationToken);

            _logger.Debug($"Stored group {staging.Uid} in repository");

            var managementGroup = await _mapper.MapAsync <ManagementGroup>(staging, cancellationToken);

            managementGroup._Lineage = null;

            if (isUpdate)
            {
                await _eventPublisher.PublishManagementGroupUpdatedAsync(managementGroup, staging.PointInTime, cancellationToken);
            }
            else
            {
                await _eventPublisher.PublishManagementGroupCreatedAsync(managementGroup, staging.PointInTime, cancellationToken);
            }

            _logger.Debug($"Sent event for group {staging.Uid}");
        }
        public async Task ThenItShouldRaiseEventForEstablishmentIfAlreadyExistsNotUpdatedButGroupIsUpdated(PointInTimeGroup stagingGroup, PointInTimeEstablishment stagingEstablishment)
        {
            // Arrange
            var learningProvider = new LearningProvider {
                Urn = stagingEstablishment.Urn
            };

            _mapperMock.Setup(m => m.MapAsync <LearningProvider>(It.IsAny <PointInTimeEstablishment>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(learningProvider);
            _groupRepositoryMock.Setup(r => r.GetGroupFromStagingAsync(stagingGroup.Uid, stagingGroup.PointInTime, _cancellationToken))
            .ReturnsAsync(stagingGroup);
            _groupRepositoryMock.Setup(r => r.GetGroupAsync(stagingGroup.Uid, stagingGroup.PointInTime, _cancellationToken))
            .ReturnsAsync(CloneWithChanges(stagingGroup, stagingGroup.GroupName + "-updated", false));
            _establishmentRepositoryMock.Setup(r =>
                                               r.GetEstablishmentFromStagingAsync(stagingEstablishment.Urn, It.IsAny <DateTime>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(stagingEstablishment);
            _establishmentRepositoryMock.Setup(r => r.GetEstablishmentAsync(stagingEstablishment.Urn, It.IsAny <DateTime>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(Clone(stagingEstablishment));

            // Act
            await _manager.ProcessGroupAsync(stagingGroup.Uid, new[] { stagingEstablishment.Urn }, stagingGroup.PointInTime, _cancellationToken);

            // Assert
            _eventPublisherMock.Verify(p => p.PublishLearningProviderUpdatedAsync(
                                           learningProvider,
                                           stagingEstablishment.PointInTime,
                                           _cancellationToken),
                                       Times.Once);
        }
Пример #8
0
 public Task StoreAsync(PointInTimeGroup @group, CancellationToken cancellationToken)
 {
     throw new NotImplementedException();
 }