blob: f98e7bfb2bd62a62c75100ed494dec59c1bfde57 [file] [log] [blame]
Shawn Pearcec709c4c2015-08-28 15:30:42 -07001// Copyright (C) 2015 Google Inc. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package com.google.gitiles;
16
Dave Borowitzfde41fd2015-09-16 15:14:38 -040017import static com.google.common.truth.Truth.assertThat;
Shawn Pearcec709c4c2015-08-28 15:30:42 -070018import static com.google.gitiles.TestGitilesUrls.URLS;
19import static java.nio.charset.StandardCharsets.UTF_8;
Shawn Pearcec709c4c2015-08-28 15:30:42 -070020
21import com.google.gson.reflect.TypeToken;
22import com.google.template.soy.data.SoyListData;
23import com.google.template.soy.data.SoyMapData;
24import com.google.template.soy.data.restricted.NullData;
25
26import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
27import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
28import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
29import org.eclipse.jgit.junit.TestRepository;
30import org.junit.Before;
31import org.junit.Test;
Shawn Pearce9be60222015-08-31 11:41:19 -070032import org.junit.runner.RunWith;
33import org.junit.runners.JUnit4;
Shawn Pearcec709c4c2015-08-28 15:30:42 -070034
35import java.util.Map;
36
Shawn Pearce10e68e62016-01-02 09:37:58 -080037import javax.servlet.http.HttpServletResponse;
38
Shawn Pearcec709c4c2015-08-28 15:30:42 -070039/** Tests for {@link HostIndexServlet}. */
Shawn Pearce9be60222015-08-31 11:41:19 -070040@RunWith(JUnit4.class)
Shawn Pearcec709c4c2015-08-28 15:30:42 -070041public class HostIndexServletTest extends ServletTest {
42 private static final String NAME = "foo/bar/repo";
Dave Borowitz8e290352015-10-26 11:33:30 -040043 private static final TypeToken<Map<String, RepositoryDescription>> REPOS =
44 new TypeToken<Map<String, RepositoryDescription>>() {};
Shawn Pearcec709c4c2015-08-28 15:30:42 -070045
46 @Override
47 @Before
48 public void setUp() throws Exception {
49 repo = new TestRepository<DfsRepository>(
50 new InMemoryRepository(new DfsRepositoryDescription(NAME)));
51 servlet = TestGitilesServlet.create(repo);
52 }
53
54 @Test
55 public void rootHtml() throws Exception {
56 Map<String, ?> data = buildData("/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040057 assertThat(data).containsEntry("hostName", URLS.getHostName(null));
58 assertThat(data).containsEntry("breadcrumbs", NullData.INSTANCE);
59 assertThat(data).containsEntry("prefix", "");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070060
61 SoyListData repos = (SoyListData) data.get("repositories");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040062 assertThat(repos).hasSize(1);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070063
64 SoyMapData ent = (SoyMapData) repos.get(0);
Dave Borowitzfde41fd2015-09-16 15:14:38 -040065 assertThat(ent.get("name").toString()).isEqualTo(NAME);
66 assertThat(ent.get("url").toString()).isEqualTo("/b/" + NAME + "/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070067 }
68
69 @Test
70 public void fooSubdirHtml() throws Exception {
71 Map<String, ?> data = buildData("/foo/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040072 assertThat(data).containsEntry("hostName", URLS.getHostName(null) + "/foo");
73 assertThat(data).containsEntry("prefix", "foo/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070074
75 SoyListData breadcrumbs = (SoyListData) data.get("breadcrumbs");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040076 assertThat(breadcrumbs.length()).isEqualTo(2);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070077
78 SoyListData repos = (SoyListData) data.get("repositories");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040079 assertThat(repos.length()).isEqualTo(1);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070080
81 SoyMapData ent = (SoyMapData) repos.get(0);
Dave Borowitzfde41fd2015-09-16 15:14:38 -040082 assertThat(ent.get("name").toString()).isEqualTo("bar/repo");
83 assertThat(ent.get("url").toString()).isEqualTo("/b/" + NAME + "/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070084 }
85
86 @Test
87 public void fooBarSubdirHtml() throws Exception {
88 Map<String, ?> data = buildData("/foo/bar/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040089 assertThat(data).containsEntry("hostName", URLS.getHostName(null) + "/foo/bar");
90 assertThat(data).containsEntry("prefix", "foo/bar/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070091
92 SoyListData breadcrumbs = (SoyListData) data.get("breadcrumbs");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040093 assertThat(breadcrumbs.length()).isEqualTo(3);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070094
95 SoyListData repos = (SoyListData) data.get("repositories");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040096 assertThat(repos.length()).isEqualTo(1);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070097
98 SoyMapData ent = (SoyMapData) repos.get(0);
Dave Borowitzfde41fd2015-09-16 15:14:38 -040099 assertThat(ent.get("name").toString()).isEqualTo("repo");
100 assertThat(ent.get("url").toString()).isEqualTo("/b/" + NAME + "/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700101 }
102
103 @Test
104 public void rootText() throws Exception {
105 String name = repo.getRepository().getDescription().getRepositoryName();
106 FakeHttpServletResponse res = buildText("/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400107 assertThat(new String(res.getActualBody(), UTF_8)).isEqualTo(name + "\n");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700108 }
109
110 @Test
111 public void fooSubdirText() throws Exception {
112 FakeHttpServletResponse res = buildText("/foo/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400113 assertThat(new String(res.getActualBody(), UTF_8)).isEqualTo("bar/repo\n");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700114 }
115
116 @Test
117 public void fooBarSubdirText() throws Exception {
118 FakeHttpServletResponse res = buildText("/foo/bar/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400119 assertThat(new String(res.getActualBody(), UTF_8)).isEqualTo("repo\n");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700120 }
121
122 @Test
123 public void rootJson() throws Exception {
124 String name = repo.getRepository().getDescription().getRepositoryName();
Dave Borowitza774f592015-10-26 11:41:27 -0400125 Map<String, RepositoryDescription> res = buildJson(REPOS, "/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700126
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400127 assertThat(res).hasSize(1);
128 assertThat(res).containsKey(name);
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700129 RepositoryDescription d = res.get(name);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400130 assertThat(d.name).isEqualTo(name);
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700131 }
132
133 @Test
134 public void fooSubdirJson() throws Exception {
Dave Borowitza774f592015-10-26 11:41:27 -0400135 Map<String, RepositoryDescription> res = buildJson(REPOS, "/foo/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700136
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400137 assertThat(res).hasSize(1);
138 assertThat(res).containsKey("bar/repo");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700139 RepositoryDescription d = res.get("bar/repo");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400140 assertThat(d.name).isEqualTo(repo.getRepository().getDescription().getRepositoryName());
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700141 }
142
143 @Test
144 public void fooBarSubdirJson() throws Exception {
Dave Borowitza774f592015-10-26 11:41:27 -0400145 Map<String, RepositoryDescription> res = buildJson(REPOS, "/foo/bar/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700146
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400147 assertThat(res).hasSize(1);
148 assertThat(res).containsKey("repo");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700149 RepositoryDescription d = res.get("repo");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400150 assertThat(d.name).isEqualTo(repo.getRepository().getDescription().getRepositoryName());
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700151 }
152
153 @Test
154 public void emptySubdirectoryList() throws Exception {
155 assertNotFound("/no.repos/", null);
156 }
Shawn Pearce10e68e62016-01-02 09:37:58 -0800157
158 @Test
159 public void headOnRoot() throws Exception {
160 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
161 req.setMethod("HEAD");
162 req.setPathInfo("/");
163 FakeHttpServletResponse res = new FakeHttpServletResponse();
164 servlet.service(req, res);
165 assertThat(res.getStatus()).isEqualTo(HttpServletResponse.SC_OK);
166 }
167
168 @Test
169 public void headOnMissingSubdir() throws Exception {
170 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
171 req.setMethod("HEAD");
172 req.setPathInfo("/no.repos/");
173 FakeHttpServletResponse res = new FakeHttpServletResponse();
174 servlet.service(req, res);
175 assertThat(res.getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND);
176 }
177
178 @Test
179 public void headOnPopulatedSubdir() throws Exception {
180 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
181 req.setMethod("HEAD");
182 req.setPathInfo("/foo/");
183 FakeHttpServletResponse res = new FakeHttpServletResponse();
184 servlet.service(req, res);
185 assertThat(res.getStatus()).isEqualTo(HttpServletResponse.SC_OK);
186 }
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700187}