private Organizations.SearchWsResponse buildOrganizations(List<OrganizationDto> organizations, Set<String> adminOrganizationUuids, Set<String> provisionOrganizationUuids, Map<String, OrganizationAlmBindingDto> organizationAlmBindingByOrgUuid, boolean onlyMembershipOrganizations, Paging paging) { Organizations.SearchWsResponse.Builder response = Organizations.SearchWsResponse.newBuilder(); response.setPaging(paging); Organization.Builder wsOrganization = Organization.newBuilder(); organizations .forEach(o -> { wsOrganization.clear(); boolean isAdmin = userSession.isRoot() || adminOrganizationUuids.contains(o.getUuid()); boolean canProvision = userSession.isRoot() || provisionOrganizationUuids.contains(o.getUuid()); wsOrganization.setActions(Organization.Actions.newBuilder() .setAdmin(isAdmin) .setProvision(canProvision) .setDelete(o.isGuarded() ? userSession.isRoot() : isAdmin)); response.addOrganizations(toOrganization(wsOrganization, o, organizationAlmBindingByOrgUuid.get(o.getUuid()), onlyMembershipOrganizations)); }); return response.build(); }
@Test public void return_alm_info_when_member_parameter_is_set_to_true() { UserDto user = db.users().insertUser(); userSession.logIn(user); OrganizationDto organization = db.organizations().insert(); AlmAppInstallDto almAppInstall = db.alm().insertAlmAppInstall(); OrganizationAlmBindingDto organizationAlmBinding = db.alm().insertOrganizationAlmBinding(organization, almAppInstall); OrganizationDto organizationNotBoundToAlm = db.organizations().insert(); db.organizations().addMember(organization, user); db.organizations().addMember(organizationNotBoundToAlm, user); SearchWsResponse result = call(ws.newRequest().setParam("member", "true")); Map<String, Organization> orgByKey = result.getOrganizationsList().stream().collect(toMap(Organization::getKey, identity())); assertThat(orgByKey.get(organization.getKey()).getAlm().getKey()).isEqualTo(organizationAlmBinding.getAlm().getId()); assertThat(orgByKey.get(organization.getKey()).getAlm().getUrl()).isEqualTo(organizationAlmBinding.getUrl()); assertThat(orgByKey.get(organizationNotBoundToAlm.getKey()).hasAlm()).isEqualTo(false); }
private void verifyResponseAndDb(CreateWsResponse response, String name, String key, @Nullable String description, @Nullable String url, @Nullable String avatar, long createdAt) { Organization organization = response.getOrganization(); assertThat(organization.getName()).isEqualTo(name); assertThat(organization.getKey()).isEqualTo(key); if (description == null) { assertThat(organization.hasDescription()).isFalse(); } else { assertThat(organization.getDescription()).isEqualTo(description); } if (url == null) { assertThat(organization.hasUrl()).isFalse(); } else { assertThat(organization.getUrl()).isEqualTo(url); } if (avatar == null) { assertThat(organization.hasAvatar()).isFalse(); } else { assertThat(organization.getAvatar()).isEqualTo(avatar); } OrganizationDto dto = dbClient.organizationDao().selectByKey(db.getSession(), key).get(); assertThat(dto.getUuid()).isNotNull(); assertThat(dto.getKey()).isEqualTo(key); assertThat(dto.getName()).isEqualTo(name); assertThat(dto.getDescription()).isEqualTo(description); assertThat(dto.getUrl()).isEqualTo(url); assertThat(dto.getAvatarUrl()).isEqualTo(avatar); assertThat(dto.getCreatedAt()).isEqualTo(createdAt); assertThat(dto.getUpdatedAt()).isEqualTo(createdAt); }
Organization.Builder toOrganization(OrganizationDto dto) { return toOrganization(Organization.newBuilder(), dto); }
private void writeResponse(Request httpRequest, Response httpResponse, List<OrganizationDto> organizations, Set<String> adminOrganizationUuids, Paging paging) { Organizations.SearchWsResponse.Builder response = Organizations.SearchWsResponse.newBuilder(); response.setPaging(paging); Organization.Builder wsOrganization = Organization.newBuilder(); organizations .forEach(o -> { boolean isAdmin = adminOrganizationUuids.contains(o.getUuid()); wsOrganization.clear(); wsOrganization.setIsAdmin(isAdmin); response.addOrganizations(wsSupport.toOrganization(wsOrganization, o)); }); writeProtobuf(response.build(), httpRequest, httpResponse); }
long updateAt) { Organizations.Organization organization = response.getOrganization(); assertThat(organization.getName()).isEqualTo(name); assertThat(organization.getKey()).isEqualTo(dto.getKey()); if (description == null) { assertThat(organization.hasDescription()).isFalse(); } else { assertThat(organization.getDescription()).isEqualTo(description); assertThat(organization.hasUrl()).isFalse(); } else { assertThat(organization.getUrl()).isEqualTo(url); assertThat(organization.hasAvatar()).isFalse(); } else { assertThat(organization.getAvatar()).isEqualTo(avatar);
@Test public void admin_and_delete_action_available_for_each_organization() { OrganizationDto userAdminOrganization = db.organizations().insert(); OrganizationDto groupAdminOrganization = db.organizations().insert(); OrganizationDto browseOrganization = db.organizations().insert(); OrganizationDto guardedOrganization = db.organizations().insert(dto -> dto.setGuarded(true)); UserDto user = db.users().insertUser(); GroupDto group = db.users().insertGroup(groupAdminOrganization); db.users().insertMember(group, user); userSession.logIn(user).addPermission(ADMINISTER, userAdminOrganization) .addPermission(ADMINISTER, guardedOrganization); db.users().insertPermissionOnUser(userAdminOrganization, user, ADMINISTER); db.users().insertPermissionOnUser(guardedOrganization, user, ADMINISTER); db.users().insertPermissionOnGroup(group, ADMINISTER); SearchWsResponse result = call(ws.newRequest()); assertThat(result.getOrganizationsList()) .extracting(Organization::getKey, o -> o.getActions().getAdmin(), o -> o.getActions().getDelete()) .containsExactlyInAnyOrder( tuple(userAdminOrganization.getKey(), true, true), tuple(browseOrganization.getKey(), false, false), tuple(groupAdminOrganization.getKey(), true, true), tuple(guardedOrganization.getKey(), true, false)); }
@Test public void create_organization() { settings.setProperty(ORGANIZATIONS_ANYONE_CAN_CREATE, true); db.qualityGates().insertBuiltInQualityGate(); UserDto user = db.users().insertUser(); userSession.logIn(user); CreateWsResponse response = wsTester.newRequest() .setParam("name", "orgFoo") .setParam("description", "My org desc") .setParam("url", "my url") .setParam("avatar", "my avatar") .executeProtobuf(CreateWsResponse.class); assertThat(response.getOrganization().getKey()).isEqualTo("orgfoo"); assertThat(response.getOrganization().getName()).isEqualTo("orgFoo"); assertThat(response.getOrganization().getDescription()).isEqualTo("My org desc"); assertThat(response.getOrganization().getUrl()).isEqualTo("my url"); assertThat(response.getOrganization().getAvatar()).isEqualTo("my avatar"); OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, "orgfoo").get(); assertThat(organization.getName()).isEqualTo("orgFoo"); assertThat(organization.getDescription()).isEqualTo("My org desc"); assertThat(organization.getUrl()).isEqualTo("my url"); assertThat(organization.getAvatarUrl()).isEqualTo("my avatar"); assertThat(organization.getSubscription()).isEqualTo(OrganizationDto.Subscription.FREE); }
@Test public void provision_action_available_for_each_organization() { OrganizationDto userProvisionOrganization = db.organizations().insert(); OrganizationDto groupProvisionOrganization = db.organizations().insert(); OrganizationDto browseOrganization = db.organizations().insert(); UserDto user = db.users().insertUser(); GroupDto group = db.users().insertGroup(groupProvisionOrganization); db.users().insertMember(group, user); userSession.logIn(user).addPermission(PROVISION_PROJECTS, userProvisionOrganization); db.users().insertPermissionOnUser(userProvisionOrganization, user, PROVISION_PROJECTS); db.users().insertPermissionOnGroup(group, PROVISION_PROJECTS); SearchWsResponse result = call(ws.newRequest()); assertThat(result.getOrganizationsList()).extracting(Organization::getKey, o -> o.getActions().getProvision()).containsExactlyInAnyOrder( tuple(userProvisionOrganization.getKey(), true), tuple(browseOrganization.getKey(), false), tuple(groupProvisionOrganization.getKey(), true)); }
Organization.Builder toOrganization(OrganizationDto dto) { Organization.Builder builder = Organization.newBuilder(); builder .setName(dto.getName()) .setKey(dto.getKey()) .setGuarded(dto.isGuarded()); ofNullable(dto.getDescription()).ifPresent(builder::setDescription); ofNullable(dto.getUrl()).ifPresent(builder::setUrl); ofNullable(dto.getAvatarUrl()).ifPresent(builder::setAvatar); return builder; } }
@Test public void root_can_do_everything() { OrganizationDto organization = db.organizations().insert(); OrganizationDto guardedOrganization = db.organizations().insert(dto -> dto.setGuarded(true)); UserDto user = db.users().insertUser(); userSession.logIn(user).setRoot(); SearchWsResponse result = call(ws.newRequest()); assertThat(result.getOrganizationsList()) .extracting(Organization::getKey, o -> o.getActions().getAdmin(), o -> o.getActions().getDelete(), o -> o.getActions().getProvision()) .containsExactlyInAnyOrder( tuple(organization.getKey(), true, true, true), tuple(guardedOrganization.getKey(), true, true, true)); }