/// <summary>
        /// Converts model into latest version.
        /// </summary>
        /// <returns></returns>
        public V7VmOpenApiServiceAndChannelRelationBySourceAsti ConvertToLatestVersion()
        {
            var vm = new V7VmOpenApiServiceAndChannelRelationBySourceAsti()
            {
                DeleteAllChannelRelations = this.DeleteAllChannelRelations,
                IsASTI = false
            };

            this.ChannelRelations.ForEach(relation => vm.ChannelRelations.Add(relation.ConvertToLatestVersion(6)));

            return(vm);
        }
Example #2
0
        public void ExternalSourceForChannelNotExists()
        {
            // Arrange
            var serviceSourceId = "sourceId";
            var channelSourceId = "sourceId2";
            var userName        = "******";
            var request         = new V7VmOpenApiServiceAndChannelRelationBySourceAsti()
            {
                ChannelRelations = new List <V7VmOpenApiServiceServiceChannelBySourceAsti>
                {
                    new V7VmOpenApiServiceServiceChannelBySourceAsti
                    {
                        ServiceChannelSourceId = channelSourceId,
                    }
                }
            };

            ExternalSourceRepoMock.Setup(s => s.All())
            .Returns(new List <ExternalSource>()
            {
                new ExternalSource {
                    SourceId = serviceSourceId, RelationId = userName, ObjectType = typeof(Model.Models.Service).Name
                },
                new ExternalSource {
                    SourceId = "otherSourceId", RelationId = userName, ObjectType = typeof(ServiceChannel).Name
                }
            }.AsQueryable());

            var unitOfWork = unitOfWorkMockSetup.Object;

            var contextManager = new TestContextManager(unitOfWork, unitOfWork);

            UserIdentificationMock.Setup(s => s.UserName).Returns(userName);
            var serviceUtilities = new ServiceUtilities(UserIdentificationMock.Object, LockingManager, contextManager, UserOrganizationService,
                                                        VersioningManager, UserInfoService, UserOrganizationChecker);
            var service = new ServiceAndChannelService(contextManager, translationManagerMockSetup.Object, translationManagerVModelMockSetup.Object,
                                                       Logger, serviceUtilities, DataUtils, ServiceService, ChannelService, PublishingStatusCache, VersioningManager, UserOrganizationChecker,
                                                       CacheManager, UserOrganizationService);

            // Act
            Action act = () => service.SaveServiceConnectionsBySource(serviceSourceId, request, DefaultVersion);

            // Assert
            act.ShouldThrowExactly <Exception>(CoreMessages.OpenApi.RelationIdNotFound);
        }
 public IActionResult ASTIPutServiceAndChannelBySource(string serviceSourceId, [FromBody] V7VmOpenApiServiceAndChannelRelationBySourceAsti request)
 {
     return(PutServiceConnectionsBySourceBase(serviceSourceId, request));
 }
        private IActionResult PutServiceConnectionsBySourceBaseCommon(string serviceSourceId, V7VmOpenApiServiceAndChannelRelationBySourceAsti request)
        {
            // Validate the items
            if (!ModelState.IsValid)
            {
                return(new BadRequestObjectResult(ModelState));
            }

            var srv = serviceAndChannelService.SaveServiceConnectionsBySource(serviceSourceId, request, versionNumber);

            if (srv == null)
            {
                return(NotFound(new VmError()
                {
                    ErrorMessage = $"Service with source id '{serviceSourceId}' not found."
                }));
            }

            return(Ok(srv));
        }
 /// <summary>
 /// Post service and channel relationship. This is for ASTI connections.
 /// </summary>
 /// <param name="serviceSourceId">External source identifier for service</param>
 /// <param name="request"></param>
 /// <returns></returns>
 protected virtual IActionResult PutServiceConnectionsBySourceBase(string serviceSourceId, V7VmOpenApiServiceAndChannelRelationBySourceAsti request)
 {
     if (request == null)
     {
         ModelState.AddModelError("RequestIsNull", CoreMessages.OpenApi.RequestIsNull);
         return(new BadRequestObjectResult(ModelState));
     }
     request.IsASTI = true;
     request.ChannelRelations.ForEach(r => r.IsASTIConnection = true);
     return(PutServiceConnectionsBySourceBaseCommon(serviceSourceId, request));
 }
Example #6
0
        public void CanModifyConnections()
        {
            // Arrange
            var serviceSourceId = "sourceId";
            var channelSourceId = "sourceId2";
            var serviceId       = Guid.NewGuid();
            var channelId       = Guid.NewGuid();
            var userName        = "******";
            var request         = new V7VmOpenApiServiceAndChannelRelationBySourceAsti()
            {
                ChannelRelations = new List <V7VmOpenApiServiceServiceChannelBySourceAsti>
                {
                    new V7VmOpenApiServiceServiceChannelBySourceAsti
                    {
                        ServiceChannelSourceId = channelSourceId,
                    }
                }
            };

            ExternalSourceRepoMock.Setup(s => s.All())
            .Returns(new List <ExternalSource>()
            {
                new ExternalSource {
                    PTVId = serviceId, SourceId = serviceSourceId, RelationId = userName, ObjectType = typeof(Model.Models.Service).Name
                },
                new ExternalSource {
                    PTVId = channelId, SourceId = channelSourceId, RelationId = userName, ObjectType = typeof(ServiceChannel).Name
                }
            }.AsQueryable());

            var unitOfWork = unitOfWorkMockSetup.Object;

            translationManagerVModelMockSetup.Setup(s => s.Translate <V7VmOpenApiServiceAndChannelRelationAstiInBase, Model.Models.Service>(It.IsAny <V7VmOpenApiServiceAndChannelRelationAstiInBase>(), unitOfWork))
            .Returns(new Model.Models.Service()
            {
                Id = serviceId,
            });

            var contextManager = new TestContextManager(unitOfWork, unitOfWork);

            UserIdentificationMock.Setup(s => s.UserName).Returns(userName);
            var serviceUtilities = new ServiceUtilities(UserIdentificationMock.Object, LockingManager, contextManager, UserOrganizationService,
                                                        VersioningManager, UserInfoService, UserOrganizationChecker);

            ChannelServiceMock.Setup(s => s.GetServiceChannelByIdSimple(channelId, true))
            .Returns(new VmOpenApiServiceChannel
            {
                ServiceChannelType = ServiceChannelTypeEnum.ServiceLocation.ToString(),
                Security           = new VmSecurityOwnOrganization {
                    IsOwnOrganization = true
                }
            });

            var service = new ServiceAndChannelService(contextManager, translationManagerMockSetup.Object, translationManagerVModelMockSetup.Object,
                                                       Logger, serviceUtilities, DataUtils, ServiceService, ChannelServiceMock.Object, PublishingStatusCache, VersioningManager, UserOrganizationChecker,
                                                       CacheManager, UserOrganizationService);

            // Act
            var result = service.SaveServiceConnectionsBySource(serviceSourceId, request, DefaultVersion);

            // Assert
            // We are not testing method GetServiceById so we expect result to be null.
            result.Should().BeNull();
            translationManagerVModelMockSetup.Verify(t => t.Translate <V7VmOpenApiServiceAndChannelRelationAstiInBase, Model.Models.Service>(It.IsAny <V7VmOpenApiServiceAndChannelRelationAstiInBase>(), unitOfWork), Times.Once());
        }
        /// <summary>
        /// Updates the channel connections for a defined service. External source identifiers are used.
        /// </summary>
        /// <param name="serviceSourceId">The external source identifier of the service.</param>
        /// <param name="relationsBySource">The connection model</param>
        /// <param name="openApiVersion">The open api version to be returned.</param>
        /// <returns>Updated service with connection information</returns>
        public IVmOpenApiServiceVersionBase SaveServiceConnectionsBySource(string serviceSourceId, V7VmOpenApiServiceAndChannelRelationBySourceAsti relationsBySource, int openApiVersion)
        {
            if (relationsBySource == null)
            {
                return(null);
            }

            var errors    = new List <string>();
            var userId    = utilities.GetRelationIdForExternalSource();
            var relations = new V7VmOpenApiServiceAndChannelRelationAstiInBase()
            {
                DeleteAllChannelRelations = relationsBySource.DeleteAllChannelRelations,
                IsASTI = relationsBySource.IsASTI
            };

            contextManager.ExecuteReader(unitOfWork =>
            {
                try
                {
                    relations.ServiceId = GetPTVId <Service>(serviceSourceId, userId, unitOfWork);
                    foreach (var channelRelation in relationsBySource.ChannelRelations)
                    {
                        var channelId = GetPTVId <ServiceChannel>(channelRelation.ServiceChannelSourceId, userId, unitOfWork);
                        if (channelId.IsAssigned())
                        {
                            CheckChannelData(unitOfWork, channelId, channelRelation.IsASTIConnection, channelRelation.ServiceHours, channelRelation.ContactDetails);

                            channelRelation.ExtraTypes.ForEach(e => { e.ChannelGuid = channelId; e.ServiceGuid = relations.ServiceId.Value; });
                            relations.ChannelRelations.Add(new V7VmOpenApiServiceServiceChannelAstiInBase
                            {
                                ChannelGuid             = channelId,
                                ServiceGuid             = relations.ServiceId.Value,
                                Description             = channelRelation.Description,
                                ServiceChargeType       = channelRelation.ServiceChargeType,
                                ExtraTypes              = channelRelation.ExtraTypes,
                                ServiceHours            = channelRelation.ServiceHours,
                                ContactDetails          = channelRelation.ContactDetails,
                                IsASTIConnection        = channelRelation.IsASTIConnection,
                                DeleteServiceChargeType = channelRelation.DeleteServiceChargeType,
                                DeleteAllDescriptions   = channelRelation.DeleteAllDescriptions,
                                DeleteAllServiceHours   = channelRelation.DeleteAllServiceHours,
                                DeleteAllExtraTypes     = channelRelation.DeleteAllExtraTypes,
                            });
                        }
                    }
                }
                catch (Exception ex)
                {
                    errors.Add(ex.Message);
                }
            });
            if (errors.Count > 0)
            {
                throw new Exception(String.Join(", ", errors));
            }

            return(SaveServiceConnections(relations, openApiVersion));
        }