public void autoCommand_branchRedirect()

in javatests/com/google/gitiles/ViewFilterTest.java [514:584]


  public void autoCommand_branchRedirect() throws Exception {
    RevCommit parent = repo.commit().create();
    RevCommit master = repo.branch(MASTER).commit().parent(parent).create();
    RevCommit main = repo.branch(MAIN).commit().parent(parent).create();
    RevCommit someBranch =
        repo.branch("refs/heads/some@branch")
            .commit()
            .parent(main)
            .add("README", "This is a test README")
            .create();
    repo.branch("refs/heads/another@level").commit().parent(someBranch).create();

    String hex = master.name();
    String hexBranch = hex.substring(0, 10);
    repo.branch(hexBranch).commit().create();

    BranchRedirect branchRedirect =
        new BranchRedirect() {
          @Override
          protected Optional<String> getRedirectBranch(Repository repo, String sourceBranch) {
            if (MASTER.equals(toFullBranchName(sourceBranch))) {
              return Optional.of(MAIN);
            }
            if ("refs/heads/some@branch".equals(toFullBranchName(sourceBranch))) {
              return Optional.of(MAIN);
            }
            return Optional.empty();
          }
        };

    GitilesView view = getView("/repo/+/master", branchRedirect);
    assertThat(view.getType()).isEqualTo(Type.REVISION);
    assertThat(view.getRevision().getName()).isEqualTo(MAIN);
    assertThat(view.getRevision().getId()).isEqualTo(main);

    view = getView("/repo/+/master/index.c", branchRedirect);
    assertThat(view.getType()).isEqualTo(Type.PATH);
    assertThat(view.getPathPart()).isEqualTo("index.c");
    assertThat(view.getRevision().getName()).isEqualTo(MAIN);
    assertThat(view.getRevision().getId()).isEqualTo(main);

    view = getView("/repo/+/some@branch", branchRedirect);
    assertThat(view.getType()).isEqualTo(Type.REVISION);
    assertThat(view.getRevision().getName()).isEqualTo(MAIN);
    assertThat(view.getRevision().getId()).isEqualTo(main);

    view = getView("/repo/+/master/master", branchRedirect);
    assertThat(view.getType()).isEqualTo(Type.PATH);
    assertThat(view.getPathPart()).isEqualTo("master");
    assertThat(view.getRevision().getName()).isEqualTo(MAIN);
    assertThat(view.getRevision().getId()).isEqualTo(main);

    FakeHttpServletResponse response = getResponse("/repo/+/master^1", branchRedirect);
    assertThat(response.getHeader(HttpHeaders.LOCATION))
        .contains("/b/repo/+/" + parent.toObjectId().name());

    response = getResponse("/repo/+/master~1", branchRedirect);
    assertThat(response.getHeader(HttpHeaders.LOCATION))
        .contains("/b/repo/+/" + parent.toObjectId().name());

    response = getResponse("/repo/+/another@level^1~2", branchRedirect);
    assertThat(response.getHeader(HttpHeaders.LOCATION))
        .contains("/b/repo/+/" + parent.toObjectId().name());

    assertThrows(
        GitilesRequestFailureException.class,
        () -> getView("/repo/+/some@branch:README", branchRedirect));

    assertThrows(
        GitilesRequestFailureException.class, () -> getView("/repo/+/master@{1}", branchRedirect));
  }