Add tests for JSON view of refs Change-Id: I920e640e830abe3250fe424d38aa52306fa94e61
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java index 67d5edc..9f551df 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
@@ -225,8 +225,8 @@ } } - private static class RefJsonData { - public RefJsonData(Ref ref) { + static class RefJsonData { + RefJsonData(Ref ref) { value = ref.getObjectId().getName(); if(ref.getPeeledObjectId() != null) { peeled = ref.getPeeledObjectId().getName(); @@ -236,8 +236,8 @@ } } - public String value; - public String peeled; - public String target; + String value; + String peeled; + String target; } }
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java index 6f50185..fcd91f3 100644 --- a/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java +++ b/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
@@ -15,8 +15,15 @@ package com.google.gitiles; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import com.google.common.collect.ImmutableList; +import com.google.common.net.HttpHeaders; +import com.google.gitiles.RefServlet.RefJsonData; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + import org.eclipse.jgit.internal.storage.dfs.DfsRepository; import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription; import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository; @@ -29,6 +36,8 @@ import org.junit.Test; import java.io.IOException; +import java.util.List; +import java.util.Map; /** Tests for {@link Linkifier}. */ public class RefServletTest { @@ -185,4 +194,77 @@ + peeled("refs/tags/atag") + " refs/tags/atag^{}\n", res.getActualBodyString()); } + + @Test + public void getRefsJsonAll() throws Exception { + Map<String, RefJsonData> result = buildJson("/test/+refs"); + List<String> keys = ImmutableList.copyOf(result.keySet()); + assertEquals(ImmutableList.of( + "HEAD", + "refs/heads/branch", + "refs/heads/master", + "refs/tags/atag", + "refs/tags/ctag"), + keys); + + RefJsonData head = result.get(keys.get(0)); + assertEquals(id("HEAD"), head.value); + assertNull(head.peeled); + assertEquals("refs/heads/master", head.target); + + RefJsonData branch = result.get(keys.get(1)); + assertEquals(id("refs/heads/branch"), branch.value); + assertNull(branch.peeled); + assertNull(branch.target); + + RefJsonData master = result.get(keys.get(2)); + assertEquals(id("refs/heads/master"), master.value); + assertNull(master.peeled); + assertNull(master.target); + + RefJsonData atag = result.get(keys.get(3)); + assertEquals(id("refs/tags/atag"), atag.value); + assertEquals(peeled("refs/tags/atag"), atag.peeled); + assertNull(atag.target); + + RefJsonData ctag = result.get(keys.get(4)); + assertEquals(id("refs/tags/ctag"), ctag.value); + assertNull(ctag.peeled); + assertNull(ctag.target); + } + + @Test + public void getRefsHeadsJson() throws Exception { + Map<String, RefJsonData> result = buildJson("/test/+refs/heads"); + List<String> keys = ImmutableList.copyOf(result.keySet()); + assertEquals(ImmutableList.of( + "branch", + "master"), + keys); + + RefJsonData branch = result.get(keys.get(0)); + assertEquals(id("refs/heads/branch"), branch.value); + assertNull(branch.peeled); + assertNull(branch.target); + + RefJsonData master = result.get(keys.get(1)); + assertEquals(id("refs/heads/master"), master.value); + assertNull(master.peeled); + assertNull(master.target); + } + + private Map<String, RefJsonData> buildJson(String path) throws Exception { + FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); + req.setPathInfo(path); + req.setQueryString("format=JSON"); + FakeHttpServletResponse res = new FakeHttpServletResponse(); + servlet.service(req, res); + + assertEquals(200, res.getStatus()); + assertEquals("application/json", res.getHeader(HttpHeaders.CONTENT_TYPE)); + String body = res.getActualBodyString(); + String magic = ")]}'\n"; + assertEquals(magic, body.substring(0, magic.length())); + return new Gson().fromJson(body.substring(magic.length()), new TypeToken<Map<String, RefJsonData>>() {}.getType()); + } }