blob: 07b858524cf8dfa882e027460b3c8b3f294e9778 [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 {
Dave Borowitzcf38c032016-05-02 11:06:23 -040049 repo =
50 new TestRepository<DfsRepository>(
51 new InMemoryRepository(new DfsRepositoryDescription(NAME)));
Shawn Pearcec709c4c2015-08-28 15:30:42 -070052 servlet = TestGitilesServlet.create(repo);
53 }
54
55 @Test
56 public void rootHtml() throws Exception {
57 Map<String, ?> data = buildData("/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040058 assertThat(data).containsEntry("hostName", URLS.getHostName(null));
59 assertThat(data).containsEntry("breadcrumbs", NullData.INSTANCE);
60 assertThat(data).containsEntry("prefix", "");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070061
62 SoyListData repos = (SoyListData) data.get("repositories");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040063 assertThat(repos).hasSize(1);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070064
65 SoyMapData ent = (SoyMapData) repos.get(0);
Dave Borowitzfde41fd2015-09-16 15:14:38 -040066 assertThat(ent.get("name").toString()).isEqualTo(NAME);
67 assertThat(ent.get("url").toString()).isEqualTo("/b/" + NAME + "/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070068 }
69
70 @Test
71 public void fooSubdirHtml() throws Exception {
72 Map<String, ?> data = buildData("/foo/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040073 assertThat(data).containsEntry("hostName", URLS.getHostName(null) + "/foo");
74 assertThat(data).containsEntry("prefix", "foo/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070075
76 SoyListData breadcrumbs = (SoyListData) data.get("breadcrumbs");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040077 assertThat(breadcrumbs.length()).isEqualTo(2);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070078
79 SoyListData repos = (SoyListData) data.get("repositories");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040080 assertThat(repos.length()).isEqualTo(1);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070081
82 SoyMapData ent = (SoyMapData) repos.get(0);
Dave Borowitzfde41fd2015-09-16 15:14:38 -040083 assertThat(ent.get("name").toString()).isEqualTo("bar/repo");
84 assertThat(ent.get("url").toString()).isEqualTo("/b/" + NAME + "/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070085 }
86
87 @Test
88 public void fooBarSubdirHtml() throws Exception {
89 Map<String, ?> data = buildData("/foo/bar/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040090 assertThat(data).containsEntry("hostName", URLS.getHostName(null) + "/foo/bar");
91 assertThat(data).containsEntry("prefix", "foo/bar/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070092
93 SoyListData breadcrumbs = (SoyListData) data.get("breadcrumbs");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040094 assertThat(breadcrumbs.length()).isEqualTo(3);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070095
96 SoyListData repos = (SoyListData) data.get("repositories");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040097 assertThat(repos.length()).isEqualTo(1);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070098
99 SoyMapData ent = (SoyMapData) repos.get(0);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400100 assertThat(ent.get("name").toString()).isEqualTo("repo");
101 assertThat(ent.get("url").toString()).isEqualTo("/b/" + NAME + "/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700102 }
103
104 @Test
105 public void rootText() throws Exception {
106 String name = repo.getRepository().getDescription().getRepositoryName();
107 FakeHttpServletResponse res = buildText("/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400108 assertThat(new String(res.getActualBody(), UTF_8)).isEqualTo(name + "\n");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700109 }
110
111 @Test
112 public void fooSubdirText() throws Exception {
113 FakeHttpServletResponse res = buildText("/foo/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400114 assertThat(new String(res.getActualBody(), UTF_8)).isEqualTo("bar/repo\n");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700115 }
116
117 @Test
118 public void fooBarSubdirText() throws Exception {
119 FakeHttpServletResponse res = buildText("/foo/bar/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400120 assertThat(new String(res.getActualBody(), UTF_8)).isEqualTo("repo\n");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700121 }
122
123 @Test
124 public void rootJson() throws Exception {
125 String name = repo.getRepository().getDescription().getRepositoryName();
Dave Borowitza774f592015-10-26 11:41:27 -0400126 Map<String, RepositoryDescription> res = buildJson(REPOS, "/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700127
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400128 assertThat(res).hasSize(1);
129 assertThat(res).containsKey(name);
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700130 RepositoryDescription d = res.get(name);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400131 assertThat(d.name).isEqualTo(name);
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700132 }
133
134 @Test
135 public void fooSubdirJson() throws Exception {
Dave Borowitza774f592015-10-26 11:41:27 -0400136 Map<String, RepositoryDescription> res = buildJson(REPOS, "/foo/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700137
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400138 assertThat(res).hasSize(1);
139 assertThat(res).containsKey("bar/repo");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700140 RepositoryDescription d = res.get("bar/repo");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400141 assertThat(d.name).isEqualTo(repo.getRepository().getDescription().getRepositoryName());
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700142 }
143
144 @Test
145 public void fooBarSubdirJson() throws Exception {
Dave Borowitza774f592015-10-26 11:41:27 -0400146 Map<String, RepositoryDescription> res = buildJson(REPOS, "/foo/bar/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700147
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400148 assertThat(res).hasSize(1);
149 assertThat(res).containsKey("repo");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700150 RepositoryDescription d = res.get("repo");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400151 assertThat(d.name).isEqualTo(repo.getRepository().getDescription().getRepositoryName());
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700152 }
153
154 @Test
155 public void emptySubdirectoryList() throws Exception {
156 assertNotFound("/no.repos/", null);
157 }
Shawn Pearce10e68e62016-01-02 09:37:58 -0800158
159 @Test
160 public void headOnRoot() throws Exception {
161 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
162 req.setMethod("HEAD");
163 req.setPathInfo("/");
164 FakeHttpServletResponse res = new FakeHttpServletResponse();
165 servlet.service(req, res);
166 assertThat(res.getStatus()).isEqualTo(HttpServletResponse.SC_OK);
167 }
168
169 @Test
170 public void headOnMissingSubdir() throws Exception {
171 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
172 req.setMethod("HEAD");
173 req.setPathInfo("/no.repos/");
174 FakeHttpServletResponse res = new FakeHttpServletResponse();
175 servlet.service(req, res);
176 assertThat(res.getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND);
177 }
178
179 @Test
180 public void headOnPopulatedSubdir() throws Exception {
181 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
182 req.setMethod("HEAD");
183 req.setPathInfo("/foo/");
184 FakeHttpServletResponse res = new FakeHttpServletResponse();
185 servlet.service(req, res);
186 assertThat(res.getStatus()).isEqualTo(HttpServletResponse.SC_OK);
187 }
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700188}