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); }
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>(); }
/// <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()); }
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)); }