Skip to content

Commit

Permalink
Adding tests for ApiProjectReleasesResponse
Browse files Browse the repository at this point in the history
  • Loading branch information
matt-richardson committed Feb 22, 2016
1 parent daff694 commit b55e07c
Show file tree
Hide file tree
Showing 7 changed files with 953 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
import java.util.List;
import java.util.Map;

public class ApiReleaseResponse {
public class ApiProjectReleasesResponse {
public Releases releases;
public String nextLink;

public ApiReleaseResponse(String releasesResponse) throws ParseException {
public ApiProjectReleasesResponse(String releasesResponse) throws ParseException {
JSONParser parser = new JSONParser();
Map response = (Map)parser.parse(releasesResponse);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
import java.util.Map;

public class Release implements Comparable {
final String id;
final OctopusDate assembledDate;
final String version;
public final String id;
public final OctopusDate assembledDate;
public final String version;

public Release(Map item) {
this.id = item.get("Id").toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,12 @@ else if (release.version.equals(oldRelease.version))
}
return oldRelease;
}

public int size() {
return statusMap.size();
}

public Release[] toArray() {
return statusMap.toArray(new Release[0]);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ public Releases getReleases(String projectId, Release oldRelease) throws Invalid
final ApiRootResponse apiRootResponse = new ApiRootResponse(apiResponse);

String releasesResponse = contentProvider.getContent("/api/projects/" + projectId + "/releases"); //todo: parse properly
ApiReleaseResponse apiReleaseResponse = new ApiReleaseResponse(releasesResponse);
ApiProjectReleasesResponse apiProjectReleasesResponse = new ApiProjectReleasesResponse(releasesResponse);

Releases newReleases = apiReleaseResponse.releases;
Releases newReleases = apiProjectReleasesResponse.releases;

while (shouldGetNextPage(oldRelease, newReleases, apiReleaseResponse)) {
releasesResponse = contentProvider.getContent(apiReleaseResponse.nextLink);
apiReleaseResponse = new ApiReleaseResponse(releasesResponse);
newReleases.Append(apiReleaseResponse.releases);
while (shouldGetNextPage(oldRelease, newReleases, apiProjectReleasesResponse)) {
releasesResponse = contentProvider.getContent(apiProjectReleasesResponse.nextLink);
apiProjectReleasesResponse = new ApiProjectReleasesResponse(releasesResponse);
newReleases.Append(apiProjectReleasesResponse.releases);
}
return newReleases;
}
Expand All @@ -59,10 +59,10 @@ public Releases getReleases(String projectId, Release oldRelease) throws Invalid
}
}

private boolean shouldGetNextPage(Release oldRelease, Releases newReleases, ApiReleaseResponse apiReleaseResponse) {
private boolean shouldGetNextPage(Release oldRelease, Releases newReleases, ApiProjectReleasesResponse apiProjectReleasesResponse) {
if (newReleases.isEmpty())
return false;
if (apiReleaseResponse.nextLink == null)
if (apiProjectReleasesResponse.nextLink == null)
return false;
if (newReleases.overlapsWith(oldRelease))
return false;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.mjrichardson.teamCity.buildTriggers;

import com.mjrichardson.teamCity.buildTriggers.ReleaseCreated.Release;
import org.apache.commons.io.IOUtils;
import org.json.simple.parser.ParseException;
import org.testng.Assert;
import org.testng.annotations.Test;

import java.io.IOException;
import java.io.InputStream;

@Test
public class ApiProjectReleasesResponseTest {
public void can_parse_valid_response_without_next_link() throws ParseException, IOException {
String json = getResource("api/projects/Projects-28/releases");
ApiProjectReleasesResponse sut = new ApiProjectReleasesResponse(json);
Assert.assertEquals(sut.nextLink, null);
Assert.assertEquals(sut.releases.size(), 2);
Release[] releases = sut.releases.toArray();
Assert.assertEquals(releases[0].id, "Releases-70");
Assert.assertEquals(releases[0].version, "0.0.2");
Assert.assertEquals(releases[1].id, "Releases-69");
Assert.assertEquals(releases[1].version, "0.0.1");
}

public void can_parse_valid_response_with_next_link() throws IOException, ParseException {
String json = getResource("api/projects/Projects-103/releases");
ApiProjectReleasesResponse sut = new ApiProjectReleasesResponse(json);
Assert.assertEquals(sut.nextLink, "/api/projects/Projects-103/releases?skip=30");
Assert.assertEquals(sut.releases.size(), 30);
}

private String getResource(String name) throws IOException {
final String resourceName = "/responses/3.3.0/" + name + ".json";
InputStream resource = getClass().getResourceAsStream(resourceName);
return IOUtils.toString(resource);
}
}
Loading

0 comments on commit b55e07c

Please sign in to comment.