public void ParseIsSkippedIfModelIsMissing(PipelineComponentParser parser, ILogger logger, MigrationContext context, AzureIntegrationServicesModel model, Exception e) { "Given a model" .x(() => { model = new AzureIntegrationServicesModel(); }); "And a logger" .x(() => logger = new Mock <ILogger>().Object); "And a context" .x(() => context = new MigrationContext()); "And a parser" .x(() => parser = new PipelineComponentParser(model, context, logger)); "When parsing" .x(() => e = Record.Exception(() => parser.Parse())); "Then the code should not throw an exception" .x(() => e.Should().BeNull()); }
public void ConstructWithSuccess(IBizTalkParser parser, ILogger logger, IApplicationModel model, MigrationContext context, Exception e) { "Given a parser" .x(() => parser.Should().BeNull()); "And a logger" .x(() => logger = new Mock <ILogger>().Object); "And a model" .x(() => model = new AzureIntegrationServicesModel()); "And a context" .x(() => context = new MigrationContext()); "When constructing" .x(() => e = Record.Exception(() => parser = new PipelineComponentParser(model, context, logger))); "Then the parser constructor should succeed" .x(() => { e.Should().BeNull(); parser.Should().NotBeNull(); }); }
public void ParseFailsWhenPipelineResourceIsMissing(PipelineComponentParser parser, ILogger logger, AzureIntegrationServicesModel model, MigrationContext context, Exception e) { var receivePiplineDefinitionName = "receivePiplineDefinitionName "; var receivePipelineDefinitionKey = "receivePipelineDefinitionKey"; var receivePipelineDefinitionDescription = "receivePipelineDescription"; var receivePipelineResourceKey = "receivePipelineResourceKey"; var receivePipelineComponentName = "receivePipelineComponentName"; var receivePipelineComponentDescription = "receivePipelineComponentDescription"; "Given a source model with a receive pipeline and component" .x(() => { var pipelineComponentDocument = new Document { Stages = new DocumentStage[] { new DocumentStage { Components = new DocumentStageComponent[] { new DocumentStageComponent { ComponentName = receivePipelineComponentName, Description = receivePipelineComponentDescription } } } } }; var receivePipeline = new Pipeline { Name = receivePiplineDefinitionName, ResourceDefinitionKey = receivePipelineDefinitionKey, Direction = PipelineDirection.Receive, Description = receivePipelineDefinitionDescription, Document = pipelineComponentDocument, ResourceKey = receivePipelineResourceKey }; var parsedApplication = new ParsedBizTalkApplication { Application = new BizTalkApplication() }; parsedApplication.Application.Pipelines.Add(receivePipeline); var aisModel = new AzureIntegrationServicesModel(); var group = new ParsedBizTalkApplicationGroup(); aisModel.MigrationSource.MigrationSourceModel = group; group.Applications.Add(parsedApplication); model = aisModel; }); "And no receive pipeline resource in the source model" .x(() => { var msiReportContainer = new ResourceContainer { Type = ModelConstants.ResourceContainerMsi, Key = "msiContainerKey", Name = "msiContainerName" }; var cabReportContainer = new ResourceContainer { Type = ModelConstants.ResourceContainerCab, Key = "cabContainerKey", Name = "cabContainerName" }; var assemblyReportContainer = new ResourceContainer { Type = ModelConstants.ResourceContainerAssembly, Key = "assemblyContainerKey", Name = "assemblyContainerName" }; var receivePipelineReportDefinition = new ResourceDefinition { Type = ModelConstants.ResourceDefinitionOrchestration, Key = receivePipelineDefinitionKey, Name = receivePiplineDefinitionName }; assemblyReportContainer.ResourceDefinitions.Add(receivePipelineReportDefinition); cabReportContainer.ResourceContainers.Add(assemblyReportContainer); msiReportContainer.ResourceContainers.Add(cabReportContainer); model.MigrationSource.ResourceContainers.Add(msiReportContainer); }); "And a logger" .x(() => logger = new Mock <ILogger>().Object); "And a context" .x(() => context = new MigrationContext()); "And a parser" .x(() => parser = new PipelineComponentParser(model, context, logger)); "When parsing" .x(() => e = Record.Exception(() => parser.Parse())); "Then the code should not throw an exception" .x(() => e.Should().BeNull()); "And there should be one context error" .x(() => { context.Errors.Should().NotBeNullOrEmpty(); context.Errors.Should().HaveCount(1); context.Errors[0].Message.Should().Contain(receivePipelineResourceKey); context.Errors[0].Message.Should().Contain(ModelConstants.ResourceReceivePipeline); }); }
public void ParseSuccessfulSingleSendPipelineComponent(PipelineComponentParser parser, ILogger logger, MigrationContext context, AzureIntegrationServicesModel model, Exception e) { var sendPiplineDefinitionName = "sendPiplineDefinitionName "; var sendPipelineDefinitionKey = "sendPipelineDefinitionKey"; var sendPipelineDefinitionDescription = "sendPipelineDescription"; var sendPipelineResourceKey = "sendPipelineResourceKey"; var sendPipelineResourceName = "sendPipelineResourceName"; var sendPipelineComponentName = "sendPipelineComponentName"; var sendPipelineComponentDescription = "sendPipelineComponentDescription"; "Given a source model with a send pipeline and component" .x(() => { var pipelineComponentDocument = new Document { Stages = new DocumentStage[] { new DocumentStage { Components = new DocumentStageComponent[1] { new DocumentStageComponent { ComponentName = sendPipelineComponentName, Description = sendPipelineComponentDescription } } } } }; var sendPipeline = new Pipeline { Name = sendPiplineDefinitionName, ResourceDefinitionKey = sendPipelineDefinitionKey, Direction = PipelineDirection.Send, Description = sendPipelineDefinitionDescription, Document = pipelineComponentDocument, ResourceKey = sendPipelineResourceKey }; var parsedApplication = new ParsedBizTalkApplication { Application = new BizTalkApplication() }; parsedApplication.Application.Pipelines.Add(sendPipeline); var aisModel = new AzureIntegrationServicesModel(); var group = new ParsedBizTalkApplicationGroup(); aisModel.MigrationSource.MigrationSourceModel = group; group.Applications.Add(parsedApplication); model = aisModel; }); "And one send pipeline resource in the source model" .x(() => { var msiReportContainer = new ResourceContainer { Type = ModelConstants.ResourceContainerMsi, Key = "msiContainerKey", Name = "msiContainerName" }; var cabReportContainer = new ResourceContainer { Type = ModelConstants.ResourceContainerCab, Key = "cabContainerKey", Name = "cabContainerName" }; var assemblyReportContainer = new ResourceContainer { Type = ModelConstants.ResourceContainerAssembly, Key = "assemblyContainerKey", Name = "assemblyContainerName" }; var sendPipelineReportDefinition = new ResourceDefinition { Type = ModelConstants.ResourceDefinitionOrchestration, Key = sendPipelineDefinitionKey, Name = sendPiplineDefinitionName }; var sendPipelineResource = new ResourceItem { Type = ModelConstants.ResourceSendPipeline, Name = sendPipelineResourceName, Key = sendPipelineResourceKey }; sendPipelineReportDefinition.Resources.Add(sendPipelineResource); assemblyReportContainer.ResourceDefinitions.Add(sendPipelineReportDefinition); cabReportContainer.ResourceContainers.Add(assemblyReportContainer); msiReportContainer.ResourceContainers.Add(cabReportContainer); model.MigrationSource.ResourceContainers.Add(msiReportContainer); }); "And a logger" .x(() => logger = new Mock <ILogger>().Object); "And a context" .x(() => context = new MigrationContext()); "And a parser" .x(() => parser = new PipelineComponentParser(model, context, logger)); "When parsing" .x(() => e = Record.Exception(() => parser.Parse())); "Then the code should not throw an exception" .x(() => e.Should().BeNull()); "And the source model should have a pipeline component under the send pipeline resource in the source report" .x(() => { model.Should().NotBeNull(); model.MigrationSource.Should().NotBeNull(); model.MigrationSource.ResourceContainers[0].Should().NotBeNull(); model.MigrationSource.ResourceContainers[0].ResourceContainers[0].Should().NotBeNull(); model.MigrationSource.ResourceContainers[0].ResourceContainers[0].ResourceContainers[0].Should().NotBeNull(); model.MigrationSource.ResourceContainers[0].ResourceContainers[0].ResourceContainers[0].ResourceDefinitions.Should().NotBeNull(); model.MigrationSource.ResourceContainers[0].ResourceContainers[0].ResourceContainers[0].ResourceDefinitions.Should().HaveCount(1); var sendPipeline = ((ParsedBizTalkApplicationGroup)model.MigrationSource.MigrationSourceModel).Applications[0].Application.Pipelines[0]; var sendPipelineDefinition = model.MigrationSource.ResourceContainers[0].ResourceContainers[0].ResourceContainers[0].ResourceDefinitions[0]; sendPipelineDefinition.Resources.Should().NotBeNull(); sendPipelineDefinition.Resources.Should().HaveCount(1); // Validate the send pipeline. var sendPipelineResource = sendPipelineDefinition.Resources[0]; sendPipelineResource.Resources.Should().NotBeNull(); sendPipelineResource.Resources.Should().HaveCount(1); // Validate the pipeline components. var pipelineComponentResource = sendPipelineResource.Resources[0]; pipelineComponentResource.Type.Should().Be(ModelConstants.ResourcePipelineComponent); pipelineComponentResource.Name.Should().Be(sendPipelineComponentName); pipelineComponentResource.Description.Should().Be(sendPipelineComponentDescription); pipelineComponentResource.Key.Should().Be(string.Concat(sendPipelineResource.Key, ":", pipelineComponentResource.Name)); sendPipeline.Document.Stages[0].Components[0].Resource.Should().Be(pipelineComponentResource); // The pointer to the resource should be set. pipelineComponentResource.ParentRefId.Should().Be(sendPipelineResource.RefId); // The parent ref ID should be set. var stageComponents = Document.FindStageComponents(sendPipeline.Document); pipelineComponentResource.SourceObject.Should().Be(stageComponents.First()); // The resource should have a pointer to the source object. }); }