diff --git a/packages/repositories.config b/packages/repositories.config index bcd17bb0..3468aa5e 100644 --- a/packages/repositories.config +++ b/packages/repositories.config @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/src/TeamCitySharp/ActionTypes/Builds.cs b/src/TeamCitySharp/ActionTypes/Builds.cs index 4c52f340..1fe485cf 100644 --- a/src/TeamCitySharp/ActionTypes/Builds.cs +++ b/src/TeamCitySharp/ActionTypes/Builds.cs @@ -16,6 +16,13 @@ internal Builds(TeamCityCaller caller) _caller = caller; } + public Build ByBuildInternalId(string buildInternalId) + { + var build = _caller.GetFormat("/app/rest/builds/id:{0}", buildInternalId); + + return build; + } + public List ByBuildLocator(BuildLocator locator) { var buildWrapper = _caller.GetFormat("/app/rest/builds?locator={0}", locator); diff --git a/src/TeamCitySharp/ActionTypes/Changes.cs b/src/TeamCitySharp/ActionTypes/Changes.cs index 5218b4aa..dd0b6d78 100644 --- a/src/TeamCitySharp/ActionTypes/Changes.cs +++ b/src/TeamCitySharp/ActionTypes/Changes.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using TeamCitySharp.Connection; using TeamCitySharp.DomainEntities; @@ -30,17 +31,23 @@ public Change ByChangeId(string id) public List ByBuildConfigId(string buildConfigId) { - var changeWrapper = _caller.GetFormat("/app/rest/changes?buildType={0}", buildConfigId); + var changeWrapper = _caller.GetFormat("/app/rest/changes?buildType=id:{0}", buildConfigId); return changeWrapper.Change; } + public List ByBuildConfigIdSinceChangeId(string buildConfigId, string sinceChangeId) + { + var changeWrapper = _caller.GetFormat("/app/rest/changes?buildType=id:{0}&sinceChange=id:{1}", buildConfigId, sinceChangeId); + + return changeWrapper.Change; + } + public Change LastChangeDetailByBuildConfigId(string buildConfigId) { var changes = ByBuildConfigId(buildConfigId); return changes.FirstOrDefault(); } - } } \ No newline at end of file diff --git a/src/TeamCitySharp/ActionTypes/IBuilds.cs b/src/TeamCitySharp/ActionTypes/IBuilds.cs index 6afba988..0b372e57 100644 --- a/src/TeamCitySharp/ActionTypes/IBuilds.cs +++ b/src/TeamCitySharp/ActionTypes/IBuilds.cs @@ -7,6 +7,7 @@ namespace TeamCitySharp.ActionTypes { public interface IBuilds { + Build ByBuildInternalId(string buildInternalId); List SuccessfulBuildsByBuildConfigId(string buildConfigId); Build LastSuccessfulBuildByBuildConfigId(string buildConfigId); List FailedBuildsByBuildConfigId(string buildConfigId); diff --git a/src/TeamCitySharp/ActionTypes/IChanges.cs b/src/TeamCitySharp/ActionTypes/IChanges.cs index 1ae51cd5..54796afd 100644 --- a/src/TeamCitySharp/ActionTypes/IChanges.cs +++ b/src/TeamCitySharp/ActionTypes/IChanges.cs @@ -9,5 +9,6 @@ public interface IChanges Change ByChangeId(string id); Change LastChangeDetailByBuildConfigId(string buildConfigId); List ByBuildConfigId(string buildConfigId); + List ByBuildConfigIdSinceChangeId(string buildConfigId, string sinceChangeId); } } \ No newline at end of file diff --git a/src/TeamCitySharp/DomainEntities/Build.cs b/src/TeamCitySharp/DomainEntities/Build.cs index 7d16fc34..832f3ad5 100644 --- a/src/TeamCitySharp/DomainEntities/Build.cs +++ b/src/TeamCitySharp/DomainEntities/Build.cs @@ -16,7 +16,12 @@ public class Build public BuildConfig BuildConfig { get; set; } public Agent Agent { get; set;} - public ChangeWrapper Changes { get; set; } + + public ChangeWrapper Changes { get; set; } + /// + /// TeamCity 8.* response to build queries fills changes in LastChanges. + /// + public ChangeWrapper LastChanges { get; set; } public override string ToString() { diff --git a/src/TeamCitySharp/TeamCitySharp.csproj b/src/TeamCitySharp/TeamCitySharp.csproj index 2e7df5aa..1a71295e 100644 --- a/src/TeamCitySharp/TeamCitySharp.csproj +++ b/src/TeamCitySharp/TeamCitySharp.csproj @@ -42,6 +42,7 @@ + diff --git a/src/Tests/IntegrationTests/SampleBuildsUsage.cs b/src/Tests/IntegrationTests/SampleBuildsUsage.cs index 152cad5f..675f0fca 100644 --- a/src/Tests/IntegrationTests/SampleBuildsUsage.cs +++ b/src/Tests/IntegrationTests/SampleBuildsUsage.cs @@ -177,6 +177,19 @@ public void it_returns_all_successful_builds_since_date() Assert.IsNotNull(builds); } + [TestCase("bt5")] + public void it_returns_a_build_from_id(string buildConfigId) + { + var builds = _client.Builds.ByBuildConfigId(buildConfigId); + + Assert.IsTrue(builds.Any(), "There are no builds from config id " + buildConfigId + ". Cannot test retrieving one!"); + + var build = _client.Builds.ByBuildInternalId(builds.First().Id); + + Assert.IsNotNull(build, "Did not return with a build!"); + Assert.IsNotNullOrEmpty(build.Id, "Did not return with a build!"); + } + [Test] public void it_does_not_populate_the_status_text_field_of_the_build_object() { diff --git a/src/Tests/IntegrationTests/SampleChangeUsage.cs b/src/Tests/IntegrationTests/SampleChangeUsage.cs index fa8eca06..60239790 100644 --- a/src/Tests/IntegrationTests/SampleChangeUsage.cs +++ b/src/Tests/IntegrationTests/SampleChangeUsage.cs @@ -74,5 +74,13 @@ public void it_returns_change_details_for_build_config(string buildConfigId) Assert.That(changeDetails != null, "Cannot find details of that specified change"); } + + [TestCase("bt113", "42843")] + public void it_returns_change_details_since_build_id(string buildConfigId, string changeId) + { + List changes = _client.Changes.ByBuildConfigIdSinceChangeId(buildConfigId, changeId); + + Assert.That(changes.Any(), "Cannot find any changes since the change id specified"); + } } } \ No newline at end of file diff --git a/src/Tests/IntegrationTests/TeamCitySharp.IntegrationTests.csproj b/src/Tests/IntegrationTests/TeamCitySharp.IntegrationTests.csproj index 95e8426c..4326f56f 100644 --- a/src/Tests/IntegrationTests/TeamCitySharp.IntegrationTests.csproj +++ b/src/Tests/IntegrationTests/TeamCitySharp.IntegrationTests.csproj @@ -78,6 +78,9 @@ TeamCitySharp + + +