Skip to content

Commit 7122da4

Browse files
committed
URL encoding paths #2
1 parent bcb5af7 commit 7122da4

File tree

3 files changed

+69
-39
lines changed

3 files changed

+69
-39
lines changed

CHANGELOG.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,19 @@
33
## Unreleased
44
### No issue
55

6+
**URL encoding paths #2**
7+
8+
9+
[73a75a3c4ffe8d1](https://github.com/tomasbjerre/violation-comments-to-bitbucket-server-lib/commit/73a75a3c4ffe8d1) Tomas Bjerre *2017-08-02 15:29:12*
10+
11+
12+
## 1.27
13+
### No issue
14+
615
**Violations-lib 1.29 with reporter field**
716

817

9-
[0a21de3617beebe](https://github.com/tomasbjerre/violation-comments-to-bitbucket-server-lib/commit/0a21de3617beebe) Tomas Bjerre *2017-07-15 09:16:34*
18+
[b729287b348333d](https://github.com/tomasbjerre/violation-comments-to-bitbucket-server-lib/commit/b729287b348333d) Tomas Bjerre *2017-07-15 09:17:53*
1019

1120

1221
## 1.26

src/main/java/se/bjurr/violations/comments/bitbucketserver/lib/client/BitbucketServerClient.java

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
package se.bjurr.violations.comments.bitbucketserver.lib.client;
22

3+
import static com.google.common.base.Charsets.UTF_8;
34
import static com.google.common.collect.Lists.newArrayList;
5+
import static java.net.URLEncoder.encode;
46

7+
import java.io.UnsupportedEncodingException;
58
import java.util.LinkedHashMap;
69
import java.util.List;
710

11+
import se.bjurr.violations.comments.bitbucketserver.lib.client.model.BitbucketServerComment;
12+
import se.bjurr.violations.comments.bitbucketserver.lib.client.model.BitbucketServerDiffResponse;
13+
814
import com.google.common.annotations.VisibleForTesting;
915
import com.google.gson.Gson;
1016
import com.jayway.jsonpath.JsonPath;
1117

12-
import se.bjurr.violations.comments.bitbucketserver.lib.client.model.BitbucketServerComment;
13-
import se.bjurr.violations.comments.bitbucketserver.lib.client.model.BitbucketServerDiffResponse;
14-
1518
public class BitbucketServerClient {
1619
private static BitbucketServerInvoker bitbucketServerInvoker = new BitbucketServerInvoker();
1720

@@ -48,11 +51,11 @@ private String getBitbucketServerPulLRequestBase() {
4851
}
4952

5053
private <T> T invokeAndParse(String url, String jsonPath) {
51-
String json = bitbucketServerInvoker.invokeUrl(url, BitbucketServerInvoker.Method.GET, null, bitbucketServerUser,
54+
final String json = bitbucketServerInvoker.invokeUrl(url, BitbucketServerInvoker.Method.GET, null, bitbucketServerUser,
5255
bitbucketServerPassword);
5356
try {
5457
return JsonPath.read(json, jsonPath);
55-
} catch (Exception e) {
58+
} catch (final Exception e) {
5659
throw new RuntimeException("Unable to parse diff response from " + url + " using " + jsonPath + "\n\n" + json, e);
5760
}
5861
}
@@ -62,7 +65,7 @@ public List<String> pullRequestChanges() {
6265
}
6366

6467
public void pullRequestComment(String message) {
65-
String postContent = "{ \"text\": \"" + safeJson(message) + "\"}";
68+
final String postContent = "{ \"text\": \"" + safeJson(message) + "\"}";
6669
bitbucketServerInvoker.invokeUrl(getBitbucketServerPulLRequestBase() + "/comments",
6770
BitbucketServerInvoker.Method.POST, postContent, bitbucketServerUser, bitbucketServerPassword);
6871
}
@@ -71,25 +74,30 @@ public void pullRequestComment(String changedFile, int line, String message) {
7174
if (line == 0) {
7275
line = 1;
7376
}
74-
String postContent = "{ \"text\": \"" + safeJson(message) + "\", \"anchor\": { \"line\": " + line
77+
final String postContent = "{ \"text\": \"" + safeJson(message) + "\", \"anchor\": { \"line\": " + line
7578
+ ", \"lineType\": \"ADDED\", \"fileType\": \"TO\", \"path\": \"" + changedFile + "\" }}";
7679
bitbucketServerInvoker.invokeUrl(getBitbucketServerPulLRequestBase() + "/comments",
7780
BitbucketServerInvoker.Method.POST, postContent, bitbucketServerUser, bitbucketServerPassword);
7881
}
7982

8083
public List<BitbucketServerComment> pullRequestComments(String changedFile) {
81-
List<LinkedHashMap<?, ?>> parsed = invokeAndParse(
82-
getBitbucketServerPulLRequestBase() + "/comments?path=" + changedFile + "&limit=999999", "$.values[*]");
84+
try {
85+
final String encodedChangedFile = encode(changedFile, UTF_8.name());
86+
final List<LinkedHashMap<?, ?>> parsed = invokeAndParse(
87+
getBitbucketServerPulLRequestBase() + "/comments?path=" + encodedChangedFile + "&limit=999999", "$.values[*]");
8388
return toBitbucketServerComments(parsed);
89+
} catch (final UnsupportedEncodingException e) {
90+
throw new RuntimeException(e);
91+
}
8492
}
8593

8694
public BitbucketServerDiffResponse pullRequestDiff() {
87-
String url = getBitbucketServerPulLRequestBase() + "/diff?limit=999999";
88-
String json = bitbucketServerInvoker.invokeUrl(url, BitbucketServerInvoker.Method.GET, null, bitbucketServerUser,
95+
final String url = getBitbucketServerPulLRequestBase() + "/diff?limit=999999";
96+
final String json = bitbucketServerInvoker.invokeUrl(url, BitbucketServerInvoker.Method.GET, null, bitbucketServerUser,
8997
bitbucketServerPassword);
9098
try {
9199
return new Gson().fromJson(json, BitbucketServerDiffResponse.class);
92-
} catch (Exception e) {
100+
} catch (final Exception e) {
93101
throw new RuntimeException("Unable to parse diff response from " + url + "\n\n" + json, e);
94102
}
95103
}
@@ -106,11 +114,11 @@ String safeJson(String message) {
106114
}
107115

108116
private List<BitbucketServerComment> toBitbucketServerComments(List<LinkedHashMap<?, ?>> parsed) {
109-
List<BitbucketServerComment> transformed = newArrayList();
110-
for (LinkedHashMap<?, ?> from : parsed) {
111-
Integer version = (Integer) from.get("version");
112-
String text = (String) from.get("text");
113-
Integer id = (Integer) from.get("id");
117+
final List<BitbucketServerComment> transformed = newArrayList();
118+
for (final LinkedHashMap<?, ?> from : parsed) {
119+
final Integer version = (Integer) from.get("version");
120+
final String text = (String) from.get("text");
121+
final Integer id = (Integer) from.get("id");
114122
transformed.add(new BitbucketServerComment(version, text, id));
115123
}
116124
return transformed;

src/test/java/se/bjurr/violations/comments/bitbucketserver/lib/client/BitbucketServerClientTest.java

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,36 +12,37 @@
1212
import org.junit.Before;
1313
import org.junit.Test;
1414

15-
import com.google.common.base.Charsets;
16-
import com.google.common.io.Resources;
17-
1815
import se.bjurr.violations.comments.bitbucketserver.lib.client.model.BitbucketServerComment;
1916
import se.bjurr.violations.comments.bitbucketserver.lib.client.model.BitbucketServerDiff;
2017
import se.bjurr.violations.comments.bitbucketserver.lib.client.model.BitbucketServerDiffResponse;
2118
import se.bjurr.violations.comments.bitbucketserver.lib.client.model.DIFFTYPE;
2219
import se.bjurr.violations.comments.bitbucketserver.lib.client.model.DiffHunk;
2320
import se.bjurr.violations.comments.bitbucketserver.lib.client.model.Segment;
2421

22+
import com.google.common.base.Charsets;
23+
import com.google.common.io.Resources;
24+
2525
public class BitbucketServerClientTest {
2626
private String mockedJson = null;
2727
private final BitbucketServerClient sut = new BitbucketServerClient("bitbucketServerBaseUrl", "bitbucketServerProject",
2828
"bitbucketServerRepo", 1, "bitbucketServerUser", "bitbucketServerPassword");
29-
29+
private String invoked;
3030
@Before
3131
public void before() {
3232
BitbucketServerClient.setBitbucketServerInvoker(new BitbucketServerInvoker() {
3333
@Override
3434
public String invokeUrl(String url, Method method, String postContent, String bitbucketServerUser,
3535
String bitbucketServerPassword) {
36+
invoked = url;
3637
return mockedJson;
3738
}
3839
});
3940
}
4041

4142
public List<BitbucketServerDiff> filterByFile(BitbucketServerDiffResponse response, String filename) {
42-
List<BitbucketServerDiff> filtered = newArrayList();
43-
List<BitbucketServerDiff> mixed = response.getDiffs();
44-
for (BitbucketServerDiff d : mixed) {
43+
final List<BitbucketServerDiff> filtered = newArrayList();
44+
final List<BitbucketServerDiff> mixed = response.getDiffs();
45+
for (final BitbucketServerDiff d : mixed) {
4546
if (d.getDestination().getToString().equals(filename)) {
4647
filtered.add(d);
4748
}
@@ -50,10 +51,10 @@ public List<BitbucketServerDiff> filterByFile(BitbucketServerDiffResponse respon
5051
}
5152

5253
public List<Segment> filterSegments(BitbucketServerDiff bitbucketServerDiff, DIFFTYPE diffType) {
53-
List<Segment> filtered = newArrayList();
54-
for (DiffHunk hunk : bitbucketServerDiff.getHunks()) {
55-
List<Segment> mixed = hunk.getSegments();
56-
for (Segment s : mixed) {
54+
final List<Segment> filtered = newArrayList();
55+
for (final DiffHunk hunk : bitbucketServerDiff.getHunks()) {
56+
final List<Segment> mixed = hunk.getSegments();
57+
for (final Segment s : mixed) {
5758
if (s.getType() == diffType) {
5859
filtered.add(s);
5960
}
@@ -66,33 +67,45 @@ public List<Segment> filterSegments(BitbucketServerDiff bitbucketServerDiff, DIF
6667
private void mockJson(String resourceName) {
6768
try {
6869
mockedJson = Resources.toString(Resources.getResource(resourceName), Charsets.UTF_8);
69-
} catch (IOException e) {
70+
} catch (final IOException e) {
7071
e.printStackTrace();
7172
}
7273
}
7374

7475
@Test
7576
public void testPullRequestChanges() {
7677
mockJson("pull-request-changes.json");
77-
List<String> actual = sut.pullRequestChanges();
78+
final List<String> actual = sut.pullRequestChanges();
7879
assertThat(actual).isNotEmpty();
7980
assertThat(actual.get(0)).isEqualTo("basic_branching/file.txt");
8081
}
8182

8283
@Test
8384
public void testPullRequestCommentsOnFile() {
8485
mockJson("pull-request-comments.json");
85-
List<BitbucketServerComment> actual = sut.pullRequestComments("any/file.txt");
86+
final List<BitbucketServerComment> actual = sut.pullRequestComments("any/file.txt");
87+
assertThat(actual).isNotEmpty();
88+
assertThat(actual.get(0).getId()).isEqualTo(2);
89+
assertThat(actual.get(0).getText()).isEqualTo("in diff comment");
90+
assertThat(actual.get(0).getVersion()).isEqualTo(0);
91+
assertThat(invoked).isEqualTo("bitbucketServerBaseUrl/rest/api/1.0/projects/bitbucketServerProject/repos/bitbucketServerRepo/pull-requests/1/comments?path=any%2Ffile.txt&limit=999999");
92+
}
93+
94+
@Test
95+
public void testPullRequestCommentsOnFileWithSpaces() {
96+
mockJson("pull-request-comments.json");
97+
final List<BitbucketServerComment> actual = sut.pullRequestComments("any folder with spaces/file.txt");
8698
assertThat(actual).isNotEmpty();
8799
assertThat(actual.get(0).getId()).isEqualTo(2);
88100
assertThat(actual.get(0).getText()).isEqualTo("in diff comment");
89101
assertThat(actual.get(0).getVersion()).isEqualTo(0);
102+
assertThat(invoked).isEqualTo("bitbucketServerBaseUrl/rest/api/1.0/projects/bitbucketServerProject/repos/bitbucketServerRepo/pull-requests/1/comments?path=any+folder+with+spaces%2Ffile.txt&limit=999999");
90103
}
91104

92105
@Test
93106
public void testPullRequestDiffDiffDeleted() {
94107
mockJson("pull-request-changes-3-deleted.json");
95-
BitbucketServerDiffResponse response = sut.pullRequestDiff();
108+
final BitbucketServerDiffResponse response = sut.pullRequestDiff();
96109
assertThat(response)//
97110
.isNotNull();
98111
assertThat(response.getDiffs())//
@@ -102,12 +115,12 @@ public void testPullRequestDiffDiffDeleted() {
102115
@Test
103116
public void testPullRequestDiffDiffTypes() {
104117
mockJson("pull-request-changes-2.json");
105-
BitbucketServerDiffResponse response = sut.pullRequestDiff();
118+
final BitbucketServerDiffResponse response = sut.pullRequestDiff();
106119
assertThat(response)//
107120
.isNotNull();
108121
assertThat(response.getDiffs())//
109122
.hasSize(12);
110-
BitbucketServerDiff diff = response.getDiffs().get(0);
123+
final BitbucketServerDiff diff = response.getDiffs().get(0);
111124
assertThat(filterSegments(diff, CONTEXT))//
112125
.hasSize(3);
113126
assertThat(filterSegments(diff, ADDED))//
@@ -123,10 +136,10 @@ public void testPullRequestDiffDiffTypes() {
123136
@Test
124137
public void testPullRequestDiffPerFileTestCpp() {
125138
mockJson("pull-request-changes-2.json");
126-
BitbucketServerDiffResponse response = sut.pullRequestDiff();
139+
final BitbucketServerDiffResponse response = sut.pullRequestDiff();
127140
assertThat(response)//
128141
.isNotNull();
129-
List<BitbucketServerDiff> diffs = filterByFile(response, "cpp/test.cpp");
142+
final List<BitbucketServerDiff> diffs = filterByFile(response, "cpp/test.cpp");
130143
assertThat(diffs)//
131144
.hasSize(1);
132145

@@ -141,10 +154,10 @@ public void testPullRequestDiffPerFileTestCpp() {
141154
@Test
142155
public void testPullRequestDiffPerFileTravisYml() {
143156
mockJson("pull-request-changes-2.json");
144-
BitbucketServerDiffResponse response = sut.pullRequestDiff();
157+
final BitbucketServerDiffResponse response = sut.pullRequestDiff();
145158
assertThat(response)//
146159
.isNotNull();
147-
List<BitbucketServerDiff> diffs = filterByFile(response, ".travis.yml");
160+
final List<BitbucketServerDiff> diffs = filterByFile(response, ".travis.yml");
148161
assertThat(diffs)//
149162
.hasSize(1);
150163

0 commit comments

Comments
 (0)