use of com.google.gerrit.server.restapi.change.QueryChanges in project gerrit by GerritCodeReview.
the class QueryChangesIT method skipVisibility_noReadPermission.
@Test
@SuppressWarnings("unchecked")
public void skipVisibility_noReadPermission() throws Exception {
createChange().getChangeId();
requestScopeOperations.setApiUser(admin.id());
QueryChanges queryChanges = queryChangesProvider.get();
queryChanges.addQuery("is:open repo:" + project.get());
List<List<ChangeInfo>> result = (List<List<ChangeInfo>>) queryChanges.apply(TopLevelResource.INSTANCE).value();
assertThat(result).hasSize(1);
try (ProjectConfigUpdate u = updateProject(allProjects)) {
ProjectConfig cfg = u.getConfig();
removeAllBranchPermissions(cfg, Permission.READ);
u.save();
}
queryChanges = queryChangesProvider.get();
queryChanges.addQuery("is:open repo:" + project.get());
List<List<ChangeInfo>> result2 = (List<List<ChangeInfo>>) queryChanges.apply(TopLevelResource.INSTANCE).value();
assertThat(result2).hasSize(0);
queryChanges = queryChangesProvider.get();
queryChanges.addQuery("is:open repo:" + project.get());
queryChanges.skipVisibility(true);
List<List<ChangeInfo>> result3 = (List<List<ChangeInfo>>) queryChanges.apply(TopLevelResource.INSTANCE).value();
assertThat(result3).hasSize(1);
}
use of com.google.gerrit.server.restapi.change.QueryChanges in project gerrit by GerritCodeReview.
the class QueryChangesIT method queryByFullNameEmailFormatWithEmptyFullNameWhenEmailMatchesSeveralAccounts.
@Test
public void queryByFullNameEmailFormatWithEmptyFullNameWhenEmailMatchesSeveralAccounts() throws Exception {
// Create 2 accounts with the same preferred email (both account must have no external ID for
// the email because otherwise the account with the external ID takes precedence).
String email = "foo.bar@example.com";
Account.Id account1 = accountOperations.newAccount().create();
accountOperations.account(account1).forInvalidation().preferredEmailWithoutExternalId(email).invalidate();
Account.Id account2 = accountOperations.newAccount().create();
accountOperations.account(account2).forInvalidation().preferredEmailWithoutExternalId(email).invalidate();
// Search with "Full Name <email>" format, but without full name. Both created accounts match
// the email. In this case Gerrit falls back to match on the full name. Check that this logic
// doesn't fail if the full name in the input string is not present.
QueryChanges queryChanges = queryChangesProvider.get();
queryChanges.addQuery("<" + email + ">");
assertThat(queryChanges.apply(TopLevelResource.INSTANCE).statusCode()).isEqualTo(SC_OK);
}
use of com.google.gerrit.server.restapi.change.QueryChanges in project gerrit by GerritCodeReview.
the class QueryChangesIT method withPagedResults.
@Test
@UseClockStep
@SuppressWarnings("unchecked")
public void withPagedResults() throws Exception {
// Create 4 visible changes.
createChange(testRepo).getChange().getId().get();
createChange(testRepo).getChange().getId().get();
int changeId3 = createChange(testRepo).getChange().getId().get();
int changeId4 = createChange(testRepo).getChange().getId().get();
// Create hidden project.
Project.NameKey hiddenProject = projectOperations.newProject().create();
TestRepository<InMemoryRepository> hiddenRepo = cloneProject(hiddenProject, admin);
// Create 2 hidden changes.
createChange(hiddenRepo);
createChange(hiddenRepo);
// Actually hide project
projectOperations.project(hiddenProject).forUpdate().add(block(Permission.READ).ref("refs/*").group(REGISTERED_USERS)).update();
// Create a change query that matches all changes (visible and hidden changes).
// The index returns the changes ordered by last updated timestamp:
// hiddenChange2, hiddenChange1, change4, change3, change2, change1
QueryChanges queryChanges = queryChangesProvider.get();
queryChanges.addQuery("branch:master");
// Set a limit on the query so that we need to paginate over the results from the index.
queryChanges.setLimit(2);
// Execute the query and verify the results.
// Since the limit is set to 2, at most 2 changes are returned to user, but the index query is
// executed with limit 3 (+1 so that we can populate the _more_changes field on the last
// result).
// This means the index query with limit 3 returns these changes:
// hiddenChange2, hiddenChange1, change4
// The 2 hidden changes are filtered out because they are not visible to the caller.
// This means we have only one matching result (change4) but the limit (3) is not exhausted
// yet. Hence the next page is loaded from the index (startIndex is 3 to skip the results
// that we already processed, limit is again 3). The results for the next page are:
// change3, change2, change1
// change2 and change1 are dropped because they are over the limit.
List<ChangeInfo> result = (List<ChangeInfo>) queryChanges.apply(TopLevelResource.INSTANCE).value();
assertThat(result.stream().map(i -> i._number).collect(toList())).containsExactly(changeId3, changeId4);
}
use of com.google.gerrit.server.restapi.change.QueryChanges in project gerrit by GerritCodeReview.
the class QueryChangesIT method skipVisibility_rejectedForNonAdmin.
@Test
public void skipVisibility_rejectedForNonAdmin() throws Exception {
requestScopeOperations.setApiUser(user.id());
final QueryChanges queryChanges = queryChangesProvider.get();
String query = "is:open repo:" + project.get();
queryChanges.addQuery(query);
AuthException thrown = assertThrows(AuthException.class, () -> queryChanges.skipVisibility(true));
assertThat(thrown).hasMessageThat().isEqualTo("administrate server not permitted");
}
use of com.google.gerrit.server.restapi.change.QueryChanges in project gerrit by GerritCodeReview.
the class StarredChanges method list.
@Override
public RestView<AccountResource> list() throws ResourceNotFoundException {
return (RestReadView<AccountResource>) self -> {
QueryChanges query = changes.list();
query.addQuery("has:star");
return query.apply(TopLevelResource.INSTANCE);
};
}
Aggregations