Exemplo n.º 1
0
        public void ASTIPutServiceAndChannelByChannel_DeleteConnections()
        {
            // Arrange
            var channelId = Guid.NewGuid();
            var serviceId = Guid.NewGuid();
            var request   = new V7VmOpenApiChannelServicesIn()
            {
                DeleteAllServiceRelations = true
            };

            channelServiceMockSetup.Setup(s => s.ChannelExists(channelId)).Returns(true);
            channelServiceMockSetup.Setup(s => s.GetServiceChannelByIdSimple(channelId, true))
            .Returns(new VmOpenApiServiceChannel {
                Id = channelId, IsVisibleForAll = true, ServiceChannelType = ServiceChannelTypeEnum.ServiceLocation.ToString()
            });
            serviceServiceMockSetup.Setup(s => s.GetServiceByIdSimple(serviceId, true))
            .Returns(new VmOpenApiServiceVersionBase()
            {
                Id = serviceId
            });
            serviceAndChannelServiceMockSetup.Setup(s => s.SaveServiceChannelConnections(It.IsAny <V7VmOpenApiChannelServicesIn>(), defaultVersion))
            .Returns(new VmOpenApiServiceChannel());
            var controller = new V7ConnectionController(serviceAndChannelServiceMockSetup.Object, serviceServiceMockSetup.Object, channelServiceMockSetup.Object,
                                                        userService, settings, logger);

            // Act
            var result = controller.ASTIPutServiceAndChannelByChannel(channelId.ToString(), request);

            // Assert
            var okResult = Assert.IsType <OkObjectResult>(result);

            Assert.IsAssignableFrom <VmOpenApiServiceChannel>(okResult.Value);
        }
Exemplo n.º 2
0
        public void ASTIPutServiceAndChannelByChannel_ServiceNotExists()
        {
            // Arrange
            var channelId = Guid.NewGuid();
            var serviceId = Guid.NewGuid();
            var vm        = new V7VmOpenApiChannelServicesIn()
            {
                ServiceRelations = new List <V7VmOpenApiServiceChannelServiceInBase>
                {
                    new V7VmOpenApiServiceChannelServiceInBase {
                        ServiceId = serviceId.ToString()
                    }
                }
            };

            channelServiceMockSetup.Setup(s => s.ChannelExists(channelId)).Returns(true);
            channelServiceMockSetup.Setup(s => s.GetServiceChannelByIdSimple(channelId, true))
            .Returns(new VmOpenApiServiceChannel()
            {
                Id = channelId
            });
            serviceServiceMockSetup.Setup(s => s.GetServiceByIdSimple(serviceId, true))
            .Returns((VmOpenApiServiceVersionBase)null);
            var controller = new V7ConnectionController(serviceAndChannelServiceMockSetup.Object, serviceServiceMockSetup.Object, channelServiceMockSetup.Object,
                                                        userService, settings, logger);

            // Act
            var result = controller.ASTIPutServiceAndChannelByChannel(channelId.ToString(), vm);

            // Assert
            result.Should().BeOfType <BadRequestObjectResult>();
        }
Exemplo n.º 3
0
        /// <summary>
        /// Updates service connections related to defined service channel. This is a method only for ASTI so ASTI rules are added.
        /// See ASTI rules from page https://confluence.csc.fi/display/PAL/ASTI-project and https://jira.csc.fi/browse/PTV-2065.
        /// </summary>
        /// <param name="request">The connection model</param>
        /// <param name="openApiVersion">The open api version to be returned.</param>
        /// <returns>Updated service channel with connection information</returns>
        public IVmOpenApiServiceChannel SaveServiceChannelConnections(V7VmOpenApiChannelServicesIn relations, int openApiVersion)
        {
            if (relations == null)
            {
                return(null);
            }

            var rootID = relations.ChannelId.Value;

            try
            {
                contextManager.ExecuteWriter(unitOfWork =>
                {
                    var serviceChannel = TranslationManagerToEntity.Translate <V7VmOpenApiChannelServicesIn, ServiceChannel>(relations, unitOfWork);
                    // We need to manually remove ASTI connections from collection. All other connections should stay as they are.
                    var updatedConnections  = relations.ServiceRelations?.Count > 0 ? relations.ServiceRelations.Select(r => r.ServiceGuid).ToList() : new List <Guid>();
                    var astiConnections     = serviceChannel.ServiceServiceChannels.Where(c => c.IsASTIConnection == true).ToList();
                    var connectionsToRemove = astiConnections.Where(a => !updatedConnections.Contains(a.ServiceId)).ToList();
                    RemoveConnections(unitOfWork, connectionsToRemove);

                    unitOfWork.Save();
                });
            }
            catch (Exception ex)
            {
                var errorMsg = $"Error occured while updating relations for a service channel with id {rootID}. {ex.Message}";
                logger.LogError(errorMsg + " " + ex.StackTrace);
                throw new Exception(errorMsg);
            }

            return(channelService.GetServiceChannelById(rootID, openApiVersion, VersionStatusEnum.Latest));
        }
        public void RegularConnectionsNotDeleted()
        {
            // Arrange
            var serviceId = Guid.NewGuid();
            var channelId = Guid.NewGuid();
            var request   = new V7VmOpenApiChannelServicesIn
            {
                ChannelId        = channelId,
                ServiceRelations = new List <V7VmOpenApiServiceChannelServiceInBase>
                {
                    new V7VmOpenApiServiceChannelServiceInBase
                    {
                        ServiceGuid = serviceId,
                        ChannelGuid = channelId,
                    }
                }
            };

            var unitOfWork = unitOfWorkMockSetup.Object;

            var contextManager = new TestContextManager(unitOfWork, unitOfWork);

            var serviceUtilities = new ServiceUtilities(UserIdentificationMock.Object, LockingManager, contextManager, UserOrganizationService,
                                                        VersioningManager, UserInfoService, UserOrganizationChecker);

            translationManagerVModelMockSetup.Setup(s => s.Translate <V7VmOpenApiChannelServicesIn, ServiceChannel>(request, unitOfWork))
            .Returns(new ServiceChannel()
            {
                Id = serviceId,
                ServiceServiceChannels = new List <ServiceServiceChannel>
                {
                    new ServiceServiceChannel {
                        IsASTIConnection = true, ServiceChannelId = channelId, ServiceId = serviceId
                    },
                    new ServiceServiceChannel {
                        IsASTIConnection = false, ServiceChannelId = channelId, ServiceId = Guid.NewGuid()
                    }
                }
            });

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

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

            // Assert
            // We are not testing method GetServiceChannelById so we expect result to be null.
            result.Should().BeNull();
            ConnectionRepoMock.Verify(x => x.Remove(It.IsAny <ServiceServiceChannel>()), Times.Never());
            DescriptionRepoMock.Verify(x => x.Remove(It.IsAny <ServiceServiceChannelDescription>()), Times.Never());
        }
Exemplo n.º 5
0
 public IActionResult ASTIPutServiceAndChannelByChannel(string serviceChannelId, [FromBody] V7VmOpenApiChannelServicesIn request)
 {
     return(PutChannelServices(serviceChannelId, request));
 }
        public void DeleteAllASTIConnections()
        {
            // Arrange
            var channelId  = Guid.NewGuid();
            var serviceId  = Guid.NewGuid();
            var serviceId2 = Guid.NewGuid();
            var request    = new V7VmOpenApiChannelServicesIn
            {
                ChannelId = channelId,
                DeleteAllServiceRelations = true
            };

            // repositories
            var connectionList = new List <ServiceServiceChannel>()
            {
                new ServiceServiceChannel {
                    ServiceId = serviceId, ServiceChannelId = channelId
                },
                new ServiceServiceChannel {
                    ServiceId = serviceId2, ServiceChannelId = channelId
                }
            };

            ConnectionRepoMock.Setup(c => c.All()).Returns(connectionList.AsQueryable());
            DescriptionRepoMock.Setup(c => c.All()).Returns(new List <ServiceServiceChannelDescription>
            {
                new ServiceServiceChannelDescription {
                    ServiceId = serviceId, ServiceChannelId = channelId
                },
                new ServiceServiceChannelDescription {
                    ServiceId = serviceId2, ServiceChannelId = channelId
                },
            }.AsQueryable());

            var unitOfWork = unitOfWorkMockSetup.Object;

            var contextManager = new TestContextManager(unitOfWork, unitOfWork);

            var serviceUtilities = new ServiceUtilities(UserIdentificationMock.Object, LockingManager, contextManager, UserOrganizationService,
                                                        VersioningManager, UserInfoService, UserOrganizationChecker);

            translationManagerVModelMockSetup.Setup(s => s.Translate <V7VmOpenApiChannelServicesIn, ServiceChannel>(request, unitOfWork))
            .Returns(new ServiceChannel()
            {
                Id = serviceId,
                ServiceServiceChannels = new List <ServiceServiceChannel>
                {
                    new ServiceServiceChannel {
                        IsASTIConnection = true, ServiceChannelId = channelId, ServiceId = serviceId
                    },
                    new ServiceServiceChannel {
                        IsASTIConnection = true, ServiceChannelId = channelId, ServiceId = serviceId2
                    },
                    new ServiceServiceChannel {
                        IsASTIConnection = false, ServiceChannelId = channelId, ServiceId = Guid.NewGuid()
                    }                                                                                                                     // regular connection that should not be removed
                }
            });

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

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

            // Assert
            // We are not testing method GetServiceChannelById so we expect result to be null.
            result.Should().BeNull();
            translationManagerVModelMockSetup.Verify(t => t.Translate <V7VmOpenApiChannelServicesIn, ServiceChannel>(It.IsAny <V7VmOpenApiChannelServicesIn>(), unitOfWork), Times.Once());
            ConnectionRepoMock.Verify(x => x.Remove(It.IsAny <ServiceServiceChannel>()), Times.Exactly(2));
            DescriptionRepoMock.Verify(x => x.Remove(It.IsAny <ServiceServiceChannelDescription>()), Times.Exactly(2));
        }
        /// <summary>
        /// Update channel and service relationships. This is for ASTI connections.
        /// </summary>
        /// <param name="serviceChannelId"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        protected virtual IActionResult PutChannelServices(string serviceChannelId, V7VmOpenApiChannelServicesIn request)
        {
            if (request == null)
            {
                ModelState.AddModelError("RequestIsNull", CoreMessages.OpenApi.RequestIsNull);
                return(new BadRequestObjectResult(ModelState));
            }

            // Validate the items
            if (!ModelState.IsValid)
            {
                return(new BadRequestObjectResult(ModelState));
            }

            if (!string.IsNullOrEmpty(serviceChannelId))
            {
                request.ChannelId = serviceChannelId.ParseToGuid();

                // check that channel exists
                if (!request.ChannelId.HasValue || !channelService.ChannelExists(request.ChannelId.Value))
                {
                    return(NotFound(new VmError()
                    {
                        ErrorMessage = $"Service channel with id '{serviceChannelId}' not found."
                    }));
                }
            }
            else
            {
                return(NotFound(new VmError()
                {
                    ErrorMessage = $"Service channel id has to be set."
                }));
            }

            request.ServiceRelations.ForEach(r =>
            {
                r.ChannelGuid = request.ChannelId.Value;
                r.ServiceGuid = r.ServiceId.ParseToGuidWithExeption();
                r.ExtraTypes.ForEach(e => { e.ServiceGuid = r.ServiceGuid; e.ChannelGuid = r.ChannelGuid; });
                r.IsASTIConnection = true;
            });

            // Validate channel and services connections.
            // Validate channel for channel type (only service location channel can include additional connection information - PTV-2475)
            // Validate service ids.
            var channelValidator = new ServiceChannelConnectionListValidator(request.ServiceRelations, channelService, serviceService);

            channelValidator.Validate(this.ModelState);

            // Validate the items
            if (!ModelState.IsValid)
            {
                return(new BadRequestObjectResult(ModelState));
            }

            var srv = serviceAndChannelService.SaveServiceChannelConnections(request, versionNumber);

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

            return(Ok(srv));
        }