public void Should_create_artifact_dependency( IBuildConfigXmlClient buildConfigXmlClient, string dependencyBuildConfigId, bool cleanDestination, string revisionName, string revisionValue, string pathRules) { var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true).Create(); var dependencyToCreate = new CreateArtifactDependency(Arg.Any <string>(), dependencyBuildConfigId); dependencyToCreate.CleanDestinationDirectory = cleanDestination; dependencyToCreate.RevisionName = revisionName; dependencyToCreate.RevisionValue = revisionValue; dependencyToCreate.PathRules = pathRules; buildConfigXml.CreateArtifactDependency(dependencyToCreate); var dependencyElement = (XmlElement)buildConfigXml.Xml.SelectSingleNode("/build-type/settings/artifact-dependencies/dependency[@sourceBuildTypeId='" + dependencyBuildConfigId + "']"); Assert.Equal(dependencyBuildConfigId, dependencyElement?.Attributes["sourceBuildTypeId"].Value); Assert.Equal(cleanDestination.ToString().ToLower(), dependencyElement?.Attributes["cleanDestination"].Value); var revisionRuleElement = dependencyElement?.SelectSingleNode("revisionRule"); Assert.Equal(revisionName, revisionRuleElement?.Attributes?["name"].Value); Assert.Equal(revisionValue, revisionRuleElement?.Attributes?["revision"].Value); var artifactElement = dependencyElement?.SelectSingleNode("artifact"); Assert.Equal(pathRules, artifactElement?.Attributes?["sourcePath"].Value); }
public BuildConfigXmlGenerator(IBuildConfigXmlClient buildConfigXmlClient = null, bool buildNonStubVersion = false) { _buildConfigXmlClient = buildConfigXmlClient; if (buildNonStubVersion) { BuildConfigXml = new BuildConfigXml(_buildConfigXmlClient, Guid.NewGuid().ToString(), Guid.NewGuid().ToString()); } else { BuildConfigXml = Substitute.For <BuildConfigXml>(_buildConfigXmlClient, Guid.NewGuid().ToString(), Guid.NewGuid().ToString()); } Xml.AppendChild(Xml.CreateXmlDeclaration("1.0", "UTF-8", null)); BuildTypeElement = (XmlElement)Xml.AppendChild(Xml.CreateElement("build-type")); BuildTypeElement.SetAttribute("uuid", Guid.NewGuid().ToString()); NameElement = (XmlElement)BuildTypeElement.AppendChild(Xml.CreateElement("name")); SettingsElement = (XmlElement)BuildTypeElement.AppendChild(Xml.CreateElement("settings")); SettingsElement.SetAttribute("ref", "CPlusPlusTemplate_v1"); ParametersElement = (XmlElement)SettingsElement.AppendChild(Xml.CreateElement("parameters")); }
public void Should_add_parameter_value_when_does_not_exists(IBuildConfigXmlClient buildConfigXmlClient, string paramName, string paramVal) { var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true).Create(); buildConfigXml.SetParameterValue(paramName, paramVal); Assert.Equal(paramVal, buildConfigXml.Xml.SelectSingleNode("/build-type/settings/parameters/param[@name='" + paramName + "']").Attributes["value"].Value); }
public BuildConfigXml(IBuildConfigXmlClient buildConfigXmlClient, string projectId, string buildConfigId) { _buildConfigXmlClient = buildConfigXmlClient; Xml = new XmlDocument(); BuildConfigId = buildConfigId; ProjectId = projectId; }
public ChainWithRootClonedScenario(IFixture fixture, ITeamCityClient client, IBuildConfigXmlClient buildConfigXmlClient) { ComponentA = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 311, "ComponentA_Trunk", "ComponentA", new List <ScenarioDependency>()); ComponentB = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 310, "ComponentB_Trunk", "ComponentB", new List <ScenarioDependency> { ComponentA.AsArtifactSameChainDependency() }); ComponentC = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 309, "ComponentC_Trunk", "ComponentC", new List <ScenarioDependency>()); AppA = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 313, "AppA_Trunk", "AppA", new List <ScenarioDependency> { ComponentA.AsArtifactSameChainDependency() }); AppB = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 312, "AppB_Trunk", "AppB", new List <ScenarioDependency> { ComponentB.AsArtifactSameChainDependency(), ComponentC.AsArtifactSameChainDependency() }); InstallerA = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 315, "InstallerA_Trunk", "InstallerA", new List <ScenarioDependency> { AppA.AsArtifactSameChainDependency() }); InstallerB = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 314, "InstallerB_Trunk", "InstallerB", new List <ScenarioDependency> { AppB.AsArtifactSameChainDependency() }); Suite = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 316, "Suite_Trunk", "Suite", new List <ScenarioDependency> { InstallerA.AsArtifactSameChainDependency(), InstallerB.AsArtifactSameChainDependency(), }); SuiteCloned = new SingleBuildScenario(fixture, client, buildConfigXmlClient, 400, "Suite_TrunkCloned", "SuiteCloned", new List <ScenarioDependency> { InstallerA.AsArtifactFixedBuildDependency(), InstallerB.AsArtifactFixedBuildDependency(), }, new Properties() { Property = new PropertyList() { new Property(ParameterName.BuildConfigChainId, fixture.Create <string>()), new Property(ParameterName.CloneNameSuffix, "Clone") } } ); client.Builds .ByBuildLocator(locator => locator.WithSnapshotDependencyFrom(AppA.Build.Id)) .Returns(Task.FromResult(new List <BuildSummary>() { (BuildSummary)AppA.Build, (BuildSummary)InstallerA.Build, (BuildSummary)Suite.Build })); }
public void Should_copy_xml_config(IBuildConfigXmlClient buildConfigXmlClient, string newBuildTypeId, string newConfigurationName) { var original = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true).Create(); var clone = original.CopyBuildConfiguration(newBuildTypeId, newConfigurationName); var originalUuid = original.Xml.SelectSingleNode("/build-type").Attributes["uuid"].Value; var cloneUuid = clone.Xml.SelectSingleNode("/build-type").Attributes["uuid"].Value; Assert.NotEqual(originalUuid, cloneUuid); Assert.Equal(newBuildTypeId, clone.BuildConfigId); Assert.Equal(original.ProjectId, clone.ProjectId); Assert.Equal(newConfigurationName, clone.Xml.SelectSingleNode("/build-type/name").InnerText); }
public void Should_freeze_parameters( IBuildConfigXmlClient buildConfigXmlClient, List <Property> sourceParameters) { var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true) .WithParameter(sourceParameters[0].Name, Arg.Any <string>()) .Create(); buildConfigXml.FreezeParameters(sourceParameters); var paramElement = (XmlElement)buildConfigXml.Xml.SelectSingleNode("/build-type/settings/parameters/param[@name='" + sourceParameters[0].Name + "']"); Assert.Equal(sourceParameters[0].Value, paramElement.Attributes["value"].Value); }
public void Should_delete_snapshot_dependency( IBuildConfigXmlClient buildConfigXmlClient, string buildConfigId, string dependencyBuildConfigId) { var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true) .WithSnapshotDependency(new CreateSnapshotDependency(Arg.Any <string>(), dependencyBuildConfigId)) .Create(); buildConfigXml.DeleteSnapshotDependency(dependencyBuildConfigId); var dependOnElement = (XmlElement)buildConfigXml.Xml.SelectSingleNode("/build-type/settings/dependencies/depend-on[@sourceBuildTypeId='" + dependencyBuildConfigId + "']"); Assert.Null(dependOnElement); }
public void Should_delete_all_snapshot_dependencies( IBuildConfigXmlClient buildConfigXmlClient, string buildConfigId, string dependencyBuildConfigId) { var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true) .WithSnapshotDependency(new CreateSnapshotDependency(Arg.Any <string>(), Arg.Any <string>())) .WithSnapshotDependency(new CreateSnapshotDependency(Arg.Any <string>(), Arg.Any <string>())) .Create(); var dependenciesElement = (XmlElement)buildConfigXml.Xml.SelectSingleNode("/build-type/settings/dependencies"); buildConfigXml.DeleteAllSnapshotDependencies(); Assert.True(dependenciesElement.ChildNodes.Count == 0); }
public void Should_clone_root_build_config( int sourceBuildId, string newNameSuffix, ITeamCityClient client, IBuildConfigXmlClient buildConfigXmlClient, IFixture fixture, IVcsRootHelper vcsRootHelper) { var scenario = new SingleBuildScenario(fixture, client, buildConfigXmlClient, sourceBuildId); var sut = new CloneRootBuildConfigUseCase(client, buildConfigXmlClient, vcsRootHelper); sut.Execute(sourceBuildId, newNameSuffix, false).Wait(); scenario.BuildConfigXml.Received(1) .CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>()); }
public void Should_freeze_all_artifact_dependencies( IBuildConfigXmlClient buildConfigXmlClient, string dependencyBuildConfigId, CreateArtifactDependency artifactDependency, Build asOfBuild) { artifactDependency.DependencyBuildConfigId = dependencyBuildConfigId; asOfBuild.ArtifactDependencies[0].BuildTypeId = dependencyBuildConfigId; var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true) .WithArtifactDependency(artifactDependency) .Create(); buildConfigXml.FreezeAllArtifactDependencies(asOfBuild); var dependencyElement = (XmlElement)buildConfigXml.Xml.SelectSingleNode("/build-type/settings/artifact-dependencies/dependency[@sourceBuildTypeId='" + dependencyBuildConfigId + "']"); var revisionRuleElement = (XmlElement)dependencyElement?.SelectSingleNode("revisionRule"); Assert.Equal("buildNumber", revisionRuleElement?.Attributes["name"].Value); Assert.Equal(asOfBuild.ArtifactDependencies[0].Number, revisionRuleElement?.Attributes["revision"].Value); }
public void Should_update_artifact_dependency( IBuildConfigXmlClient buildConfigXmlClient, string dependencyBuildConfigId, CreateArtifactDependency before, string newSourceBuildConfigId, string newRevisionName, string newRevisionValue) { before.DependencyBuildConfigId = dependencyBuildConfigId; var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true) .WithArtifactDependency(before) .Create(); buildConfigXml.UpdateArtifactDependency(dependencyBuildConfigId, newSourceBuildConfigId, newRevisionName, newRevisionValue); var dependencyElement = (XmlElement)buildConfigXml.Xml.SelectSingleNode("/build-type/settings/artifact-dependencies/dependency[@sourceBuildTypeId='" + newSourceBuildConfigId + "']"); var revisionRuleElement = (XmlElement)dependencyElement?.SelectSingleNode("revisionRule"); Assert.Equal(newRevisionName, revisionRuleElement?.Attributes["name"].Value); Assert.Equal(newRevisionValue, revisionRuleElement?.Attributes["revision"].Value); }
public void Should_create_snapshot_dependency(IBuildConfigXmlClient buildConfigXmlClient, string dependencyBuildConfigId, bool takeStartedBuildWithSameRevisions, bool takeSuccessFulBuildsOnly) { var buildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true).Create(); var dependencyToCreate = new CreateSnapshotDependency(Arg.Any <string>(), dependencyBuildConfigId); dependencyToCreate.TakeStartedBuildWithSameRevisions = takeStartedBuildWithSameRevisions; dependencyToCreate.TakeSuccessFulBuildsOnly = takeSuccessFulBuildsOnly; buildConfigXml.CreateSnapshotDependency(dependencyToCreate); var dependOnElement = (XmlElement)buildConfigXml.Xml.SelectSingleNode("/build-type/settings/dependencies/depend-on[@sourceBuildTypeId='" + dependencyBuildConfigId + "']"); Assert.Equal(dependencyBuildConfigId, dependOnElement.Attributes["sourceBuildTypeId"].Value); var option1 = dependOnElement.SelectSingleNode("options/option[@name='take-started-build-with-same-revisions']").Attributes["value"].Value; Assert.Equal(takeStartedBuildWithSameRevisions.ToString().ToLower(), option1); var option2 = dependOnElement.SelectSingleNode("options/option[@name='take-successful-builds-only']").Attributes["value"].Value; Assert.Equal(takeSuccessFulBuildsOnly.ToString().ToLower(), option2); }
public void Should_clone_child_build_config( ITeamCityClient client, IVcsRootHelper vcsRootHelper, IBuildConfigXmlClient buildConfigXmlClient, IFixture fixture) { var scenario = new ChainWithRootClonedScenario(fixture, client, buildConfigXmlClient); var sut = new CloneChildBuildConfigUseCase(client, vcsRootHelper, buildConfigXmlClient); sut.Execute(scenario.ComponentA.BuildConfig.Id, scenario.SuiteCloned.BuildConfig.Id, simulate: false).Wait(); scenario.AppA.BuildConfigXml.Received(1).CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>()); scenario.InstallerA.BuildConfigXml.Received(1).CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>()); scenario.SuiteCloned.BuildConfigXml.DidNotReceive().CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>()); scenario.Suite.BuildConfigXml.DidNotReceive().CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>()); scenario.InstallerB.BuildConfigXml.Received(1).CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>()); scenario.AppB.BuildConfigXml.Received(1).CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>()); scenario.ComponentA.BuildConfigXml.Received(1).CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>()); scenario.ComponentB.BuildConfigXml.Received(1).CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>()); scenario.ComponentC.BuildConfigXml.DidNotReceive().CopyBuildConfiguration(Arg.Any <string>(), Arg.Any <string>()); //todo: received call(s) to update artifact dependency //todo: received call(s) to create snapshot dependency }
public void Should_update_template_and_git_repo_to_current_state( IBuildConfigXmlClient buildConfigXmlClient, IBuildConfigClient buildConfigClient, IFixture fixture, string buildConfigId, string currentRepoPath) { var oldVersion = new BuildConfigXmlGenerator(buildConfigXmlClient, buildNonStubVersion: true) .WithId(buildConfigId) .WithTemplateId("CPlusPlusTemplate_v1") .Create(); var currentVersion = fixture.Build <BuildConfig>() .WithId(buildConfigId) .WithParameters(new Properties { Property = new PropertyList() { new Property(ParameterName.GitRepoPath, currentRepoPath), } }) .WithTemplates(new Templates { BuildType = new List <Template>() { new Template() { Id = "BaseTemplateV5GitLab" } } }) .Create(); oldVersion.SwitchTemplateAndRepoToCurrentState(currentVersion); Assert.Equal("BaseTemplateV5GitLab", oldVersion.Xml.SelectSingleNode("/build-type/settings").Attributes["ref"].Value); Assert.Equal(currentRepoPath, oldVersion.Xml.SelectSingleNode("/build-type/settings/parameters/param[@name='" + ParameterName.GitRepoPath + "']").Attributes["value"].Value); }
public DeepCloneBuildConfigUseCase(ITeamCityClient client, IVcsRootHelper vcsRootHelper, IBuildConfigXmlClient buildConfigXmlClient) { _client = client; _vcsRootHelper = vcsRootHelper; _buildConfigXmlClient = buildConfigXmlClient; }
public SingleBuildScenario( IFixture fixture, ITeamCityClient client, IBuildConfigXmlClient buildConfigXmlClient, long buildId, string buildConfigId = null, string buildConfigName = null, List <ScenarioDependency> dependencies = null, Properties buildParameters = null) { var projectId = fixture.Create <string>(); buildConfigId = buildConfigId ?? fixture.Create <string>(); BuildConfig = fixture.Build <BuildConfig>() .WithId(buildConfigId) .WithProjectId(projectId) .WithName(buildConfigName ?? fixture.Create <string>()) .WithParameters(buildParameters ?? fixture.Create <Properties>()) .WithDependencies(dependencies?.Select(d => d.AsDependencyDefinition()).ToArray() ?? fixture.CreateMany <DependencyDefinition>().ToArray()) .Create(); BuildConfigXml = new BuildConfigXmlGenerator(buildConfigXmlClient) .WithProjectId(projectId) .WithId(buildConfigId) .WithName(buildConfigName ?? fixture.Create <string>()) .WithParameters(buildParameters ?? fixture.Create <Properties>()) .WithDependencies(dependencies?.Select(d => d.AsDependencyDefinition()).ToArray() ?? fixture.CreateMany <DependencyDefinition>().ToArray()) .Create(); Build = fixture.Build <Build>() .WithId(buildId) .WithDependencies(dependencies?.Select(d => d.AsDependency()).ToArray() ?? fixture.CreateMany <Dependency>().ToArray()) .WithBuildConfigSummary(BuildConfig) .Create(); Project = fixture.Build <Project>() .WithId(Build.BuildConfig.ProjectId) .WithBuildConfigSummary(BuildConfig) .Create(); client.Builds .ById(buildId) .Returns(Task.FromResult(Build)); client.Builds .ByNumber(Build.Number, BuildConfig.Id) .Returns(Task.FromResult(Build)); client.Projects .GetById(Project.Id) .Returns(Task.FromResult(Project)); client.BuildConfigs .GetByConfigurationId(BuildConfig.Id) .Returns(Task.FromResult(BuildConfig)); buildConfigXmlClient .Read(BuildConfigXml.ProjectId, BuildConfigXml.BuildConfigId) .Returns(BuildConfigXml); buildConfigXmlClient .ReadAsOf(BuildConfigXml.ProjectId, BuildConfigXml.BuildConfigId, Arg.Any <DateTime>()) .Returns(BuildConfigXml); var clonedBuildConfig = BuildConfig.CloneViaJson(); clonedBuildConfig.Id = BuildConfig.Id + "_Clone"; clonedBuildConfig.Name = buildConfigName + Consts.SuffixSeparator + "Clone"; client.BuildConfigs.GenerateUniqueBuildConfigId(projectId, clonedBuildConfig.Name) .Returns(Task.FromResult(clonedBuildConfig.Id)); }