public void getOwnedPathsForRenamedFilesWithLimit()

in javatests/com/google/gerrit/plugins/codeowners/acceptance/api/GetOwnedPathsIT.java [526:639]


  public void getOwnedPathsForRenamedFilesWithLimit() throws Exception {
    setAsCodeOwners("/foo/", user);

    // Rename 1: user owns old and new path
    String newPath1 = "/foo/test1.md";
    String oldPath1 = "/foo/bar/test1.md";

    // Rename 2: user owns only new path
    String newPath2 = "/foo/test2.md";
    String oldPath2 = "/other/test2.md";

    // Rename 3: user owns only old path
    String newPath3 = "/other/test3.md";
    String oldPath3 = "/foo/test3.md";

    // Rename 4: user owns neither old nor new path
    String newPath4 = "/other/test4.md";
    String oldPath4 = "/other/foo/test4.md";

    String changeId1 =
        createChange(
                "Change Adding Files",
                ImmutableMap.of(
                    JgitPath.of(oldPath1).get(),
                    "file content 1",
                    JgitPath.of(oldPath2).get(),
                    "file content 2",
                    JgitPath.of(oldPath3).get(),
                    "file content 3",
                    JgitPath.of(oldPath4).get(),
                    "file content 4"))
            .getChangeId();

    // The PushOneCommit test API doesn't support renaming files in a change. Use the change edit
    // Java API instead.
    ChangeInput changeInput = new ChangeInput();
    changeInput.project = project.get();
    changeInput.branch = "master";
    changeInput.subject = "Change Renaming Files";
    changeInput.baseChange = changeId1;
    String changeId2 = gApi.changes().create(changeInput).get().changeId;
    gApi.changes().id(changeId2).edit().create();
    gApi.changes()
        .id(changeId2)
        .edit()
        .renameFile(JgitPath.of(oldPath1).get(), JgitPath.of(newPath1).get());
    gApi.changes()
        .id(changeId2)
        .edit()
        .renameFile(JgitPath.of(oldPath2).get(), JgitPath.of(newPath2).get());
    gApi.changes()
        .id(changeId2)
        .edit()
        .renameFile(JgitPath.of(oldPath3).get(), JgitPath.of(newPath3).get());
    gApi.changes()
        .id(changeId2)
        .edit()
        .renameFile(JgitPath.of(oldPath4).get(), JgitPath.of(newPath4).get());
    gApi.changes().id(changeId2).edit().publish(new PublishChangeEditInput());

    OwnedPathsInfo ownedPathsInfo =
        changeCodeOwnersApiFactory
            .change(changeId2)
            .current()
            .getOwnedPaths()
            .withLimit(1)
            .forUser(user.email())
            .get();
    assertThat(ownedPathsInfo).hasOwnedChangedFilesThat().hasSize(1);
    assertThat(ownedPathsInfo.ownedChangedFiles.get(0)).hasOwnedNewPath(newPath1);
    assertThat(ownedPathsInfo.ownedChangedFiles.get(0)).hasOwnedOldPath(oldPath1);
    List<String> ownedPaths = Arrays.asList(newPath1, oldPath1);
    Collections.sort(ownedPaths);
    assertThat(ownedPathsInfo).hasOwnedPathsThat().containsExactlyElementsIn(ownedPaths);
    assertThat(ownedPathsInfo).hasMoreThat().isTrue();

    ownedPathsInfo =
        changeCodeOwnersApiFactory
            .change(changeId2)
            .current()
            .getOwnedPaths()
            .withLimit(2)
            .forUser(user.email())
            .get();
    assertThat(ownedPathsInfo).hasOwnedChangedFilesThat().hasSize(2);
    assertThat(ownedPathsInfo.ownedChangedFiles.get(0)).hasOwnedNewPath(newPath1);
    assertThat(ownedPathsInfo.ownedChangedFiles.get(0)).hasOwnedOldPath(oldPath1);
    assertThat(ownedPathsInfo.ownedChangedFiles.get(1)).hasOwnedNewPath(newPath2);
    assertThat(ownedPathsInfo.ownedChangedFiles.get(1)).hasNonOwnedOldPath(oldPath2);
    ownedPaths = Arrays.asList(newPath1, oldPath1, newPath2);
    Collections.sort(ownedPaths);
    assertThat(ownedPathsInfo).hasOwnedPathsThat().containsExactlyElementsIn(ownedPaths).inOrder();
    assertThat(ownedPathsInfo).hasMoreThat().isTrue();

    ownedPathsInfo =
        changeCodeOwnersApiFactory
            .change(changeId2)
            .current()
            .getOwnedPaths()
            .withLimit(3)
            .forUser(user.email())
            .get();
    assertThat(ownedPathsInfo).hasOwnedChangedFilesThat().hasSize(3);
    assertThat(ownedPathsInfo.ownedChangedFiles.get(0)).hasOwnedNewPath(newPath1);
    assertThat(ownedPathsInfo.ownedChangedFiles.get(0)).hasOwnedOldPath(oldPath1);
    assertThat(ownedPathsInfo.ownedChangedFiles.get(1)).hasOwnedNewPath(newPath2);
    assertThat(ownedPathsInfo.ownedChangedFiles.get(1)).hasNonOwnedOldPath(oldPath2);
    assertThat(ownedPathsInfo.ownedChangedFiles.get(2)).hasNonOwnedNewPath(newPath3);
    assertThat(ownedPathsInfo.ownedChangedFiles.get(2)).hasOwnedOldPath(oldPath3);
    ownedPaths = Arrays.asList(newPath1, oldPath1, newPath2, oldPath3);
    Collections.sort(ownedPaths);
    assertThat(ownedPathsInfo).hasOwnedPathsThat().containsExactlyElementsIn(ownedPaths).inOrder();
    assertThat(ownedPathsInfo).hasMoreThat().isNull();
  }