Skip to content

Commit f1e8efa

Browse files
author
Davide Santonocito
committed
Bug/91 fix VersionControlChangeType deserialization (#91)
1 parent 81f9c9b commit f1e8efa

File tree

4 files changed

+111
-4
lines changed

4 files changed

+111
-4
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.azd.abstractions.serializer;
2+
3+
import com.fasterxml.jackson.core.JsonParser;
4+
import com.fasterxml.jackson.core.JsonProcessingException;
5+
import com.fasterxml.jackson.databind.DeserializationContext;
6+
import com.fasterxml.jackson.databind.JsonDeserializer;
7+
import org.azd.enums.VersionControlChangeType;
8+
9+
import java.io.IOException;
10+
import java.util.ArrayList;
11+
import java.util.List;
12+
13+
public class VersionControlChangeTypeDeserializer extends JsonDeserializer<List<VersionControlChangeType>> {
14+
15+
@Override
16+
public List<VersionControlChangeType> deserialize(JsonParser p, DeserializationContext ctxt)
17+
throws IOException, JsonProcessingException {
18+
String text = p.getText();
19+
String[] parts = text.split(",");
20+
List<VersionControlChangeType> types = new ArrayList<>();
21+
for (String part : parts) {
22+
try {
23+
types.add(VersionControlChangeType.valueOf(part.trim().toUpperCase().replace(" ", "_")));
24+
} catch (IllegalArgumentException e) {
25+
// Unknown type, skip or log
26+
}
27+
}
28+
return types;
29+
}
30+
}

azd/src/main/java/org/azd/enums/VersionControlChangeType.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77

88
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
99
import com.fasterxml.jackson.annotation.JsonProperty;
10+
import com.fasterxml.jackson.annotation.JsonFormat;
1011

1112
/**
1213
* None
1314
**/
15+
@JsonFormat(shape = JsonFormat.Shape.STRING)
1416
@JsonIgnoreProperties(ignoreUnknown = true)
1517
public enum VersionControlChangeType {
1618
@JsonProperty("add")

azd/src/main/java/org/azd/git/types/GitChange.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,13 @@
77

88
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
99
import com.fasterxml.jackson.annotation.JsonProperty;
10+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
1011
import org.azd.abstractions.serializer.SerializableEntity;
12+
import org.azd.abstractions.serializer.VersionControlChangeTypeDeserializer;
1113
import org.azd.enums.VersionControlChangeType;
1214

15+
import java.util.List;
16+
1317
/**
1418
* None
1519
**/
@@ -24,7 +28,8 @@ public class GitChange extends SerializableEntity {
2428
* The type of change that was made to the item.
2529
**/
2630
@JsonProperty("changeType")
27-
private VersionControlChangeType changeType;
31+
@JsonDeserialize(using = VersionControlChangeTypeDeserializer.class)
32+
private List<VersionControlChangeType> changeType;
2833
/**
2934
* Current version.
3035
**/
@@ -64,12 +69,12 @@ public void setChangeId(Integer changeId) {
6469
this.changeId = changeId;
6570
}
6671

67-
public VersionControlChangeType getChangeType() {
72+
public List<VersionControlChangeType> getChangeType() {
6873
return changeType;
6974
}
7075

71-
public void setChangeType(VersionControlChangeType changeType) {
72-
this.changeType = changeType;
76+
public void setChangeType(List<VersionControlChangeType> changeType) {
77+
this.changeType = List.copyOf(changeType);
7378
}
7479

7580
public GitItem getItem() {
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package org.azd.unittests;
2+
3+
import org.azd.enums.VersionControlChangeType;
4+
import org.azd.exceptions.AzDException;
5+
import org.azd.git.types.GitCommitChanges;
6+
import org.azd.abstractions.serializer.JsonSerializer;
7+
import org.junit.Test;
8+
9+
import java.util.List;
10+
11+
import static org.junit.Assert.assertEquals;
12+
import static org.junit.Assert.assertNotNull;
13+
import static org.junit.Assert.assertTrue;
14+
15+
public class VersionControlChangeTypeTest {
16+
17+
@Test
18+
public void shouldDeserialiseSingleAndMultiValueChangeTypes() throws AzDException {
19+
String mockJson =
20+
"{\n" +
21+
" \"changeCounts\": {\n" +
22+
" \"Edit\": 1,\n" +
23+
" \"Delete, SourceRename\": 1\n" +
24+
" },\n" +
25+
" \"changes\": [\n" +
26+
" {\n" +
27+
" \"item\": {\n" +
28+
" \"objectId\": \"abc123\",\n" +
29+
" \"originalObjectId\": \"abc123\",\n" +
30+
" \"gitObjectType\": \"blob\",\n" +
31+
" \"commitId\": \"deadbeef\",\n" +
32+
" \"path\": \"../deleted-file.xml\",\n" +
33+
" \"url\": \"http://example.com\"\n" +
34+
" },\n" +
35+
" \"changeType\": \"delete, sourceRename\"\n" +
36+
" },\n" +
37+
" {\n" +
38+
" \"item\": {\n" +
39+
" \"objectId\": \"def456\",\n" +
40+
" \"originalObjectId\": \"def456\",\n" +
41+
" \"gitObjectType\": \"blob\",\n" +
42+
" \"commitId\": \"cafebabe\",\n" +
43+
" \"path\": \"../edited-file.xml\",\n" +
44+
" \"url\": \"http://example.com\"\n" +
45+
" },\n" +
46+
" \"changeType\": \"edit\"\n" +
47+
" }\n" +
48+
" ]\n" +
49+
"}";
50+
51+
JsonSerializer serializer = new JsonSerializer();
52+
GitCommitChanges changes = serializer.deserialize(mockJson, GitCommitChanges.class);
53+
54+
assertNotNull(changes);
55+
assertEquals(2, changes.getChanges().size());
56+
57+
// Check multi-value change type
58+
List<VersionControlChangeType> multiTypes = changes.getChanges().get(0).getChangeType();
59+
assertNotNull(multiTypes);
60+
assertEquals(2, multiTypes.size());
61+
assertTrue(multiTypes.contains(VersionControlChangeType.DELETE));
62+
assertTrue(multiTypes.contains(VersionControlChangeType.SOURCERENAME));
63+
64+
// Check single-value change type
65+
List<VersionControlChangeType> singleTypes = changes.getChanges().get(1).getChangeType();
66+
assertNotNull(singleTypes);
67+
assertEquals(1, singleTypes.size());
68+
assertTrue(singleTypes.contains(VersionControlChangeType.EDIT));
69+
}
70+
}

0 commit comments

Comments
 (0)