in javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CheckCodeOwnerIT.java [1105:1208]
public void checkCodeOwnerFromImportedPerFileConfig() throws Exception {
skipTestIfImportsNotSupportedByCodeOwnersBackend();
TestAccount mdCodeOwner =
accountCreator.create(
"mdCodeOwner", "mdCodeOwner@example.com", "Md Code Owner", /* displayName= */ null);
codeOwnerConfigOperations
.newCodeOwnerConfig()
.project(project)
.branch("master")
.folderPath("/foo/")
.addImport(
CodeOwnerConfigReference.create(
CodeOwnerConfigImportMode.ALL, "/bar/" + getCodeOwnerConfigFileName()))
.create();
codeOwnerConfigOperations
.newCodeOwnerConfig()
.project(project)
.branch("master")
.folderPath("/bar/")
.addCodeOwnerSet(
CodeOwnerSet.builder()
.addPathExpression(testPathExpressions.matchFileType("md"))
.addImport(
CodeOwnerConfigReference.create(
CodeOwnerConfigImportMode.GLOBAL_CODE_OWNER_SETS_ONLY,
"/baz/" + getCodeOwnerConfigFileName()))
.build())
.create();
setAsCodeOwners("/baz/", mdCodeOwner);
// 1. check for mdCodeOwner and path of an md file
String path = "/foo/bar/baz.md";
CodeOwnerCheckInfo checkCodeOwnerInfo = checkCodeOwner(path, mdCodeOwner.email());
assertThat(checkCodeOwnerInfo).isCodeOwner();
assertThat(checkCodeOwnerInfo).isResolvable();
assertThat(checkCodeOwnerInfo)
.hasCodeOwnerConfigFilePathsThat()
.containsExactly(getCodeOwnerConfigFilePath("/foo/"));
assertThat(checkCodeOwnerInfo)
.hasDebugLogsThatContainAllOf(
String.format(
"Code owner config %s:%s:/foo/%s imports:\n"
+ "* /bar/%s (global import, import mode = ALL)\n"
+ " * per-file code owner set with path expressions [%s] matches\n"
+ " * /baz/%s (per-file import, import mode = GLOBAL_CODE_OWNER_SETS_ONLY,"
+ " path expressions = [%s])",
project,
"master",
getCodeOwnerConfigFileName(),
getCodeOwnerConfigFileName(),
testPathExpressions.matchFileType("md"),
getCodeOwnerConfigFileName(),
testPathExpressions.matchFileType("md")),
String.format(
"found email %s as a code owner in %s",
mdCodeOwner.email(), getCodeOwnerConfigFilePath("/foo/")),
String.format(
"resolved email %s to account %s", mdCodeOwner.email(), mdCodeOwner.id()));
// 2. check for user and path of an md file
checkCodeOwnerInfo = checkCodeOwner(path, user.email());
assertThat(checkCodeOwnerInfo).isNotCodeOwner();
assertThat(checkCodeOwnerInfo).isResolvable();
assertThat(checkCodeOwnerInfo).hasCodeOwnerConfigFilePathsThat().isEmpty();
assertThat(checkCodeOwnerInfo)
.hasDebugLogsThatContainAllOf(
String.format(
"Code owner config %s:%s:/foo/%s imports:\n"
+ "* /bar/%s (global import, import mode = ALL)\n"
+ " * per-file code owner set with path expressions [%s] matches\n"
+ " * /baz/%s (per-file import, import mode = GLOBAL_CODE_OWNER_SETS_ONLY,"
+ " path expressions = [%s])",
project,
"master",
getCodeOwnerConfigFileName(),
getCodeOwnerConfigFileName(),
testPathExpressions.matchFileType("md"),
getCodeOwnerConfigFileName(),
testPathExpressions.matchFileType("md")),
String.format("resolved email %s to account %s", user.email(), user.id()));
assertThat(checkCodeOwnerInfo)
.hasDebugLogsThatDoNotContainAnyOf(String.format("email %s", user.email()));
// 3. check for mdCodeOwner and path of an txt file
path = "/foo/bar/baz.txt";
checkCodeOwnerInfo = checkCodeOwner(path, mdCodeOwner.email());
assertThat(checkCodeOwnerInfo).isNotCodeOwner();
assertThat(checkCodeOwnerInfo).isResolvable();
assertThat(checkCodeOwnerInfo).hasCodeOwnerConfigFilePathsThat().isEmpty();
assertThat(checkCodeOwnerInfo)
.hasDebugLogsThatContainAllOf(
String.format(
"Code owner config %s:%s:/foo/%s imports:\n"
+ "* /bar/%s (global import, import mode = ALL)",
project, "master", getCodeOwnerConfigFileName(), getCodeOwnerConfigFileName()),
String.format(
"resolved email %s to account %s", mdCodeOwner.email(), mdCodeOwner.id()));
assertThat(checkCodeOwnerInfo)
.hasDebugLogsThatDoNotContainAnyOf(String.format("email %s", mdCodeOwner.email()));
}