aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2018-07-06 15:00:33 +0200
committerSonarTech <sonartech@sonarsource.com>2018-07-11 20:21:22 +0200
commitd34f9f46391d73cb89e9b7ead8e828dc65362829 (patch)
tree5a3ac767eed34bcb2889968dd5731fe89fbc553d
parent364fc3b7439e8241ed4094837f9dd835375d09cc (diff)
downloadsonarqube-d34f9f46391d73cb89e9b7ead8e828dc65362829.tar.gz
sonarqube-d34f9f46391d73cb89e9b7ead8e828dc65362829.zip
SONAR-10944 Move subscription flag from api/organizations/search to api/navigation/organization
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsSupport.java3
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/ui/ws/OrganizationAction.java5
-rw-r--r--server/sonar-server/src/main/resources/org/sonar/server/organization/ws/create-example.json3
-rw-r--r--server/sonar-server/src/main/resources/org/sonar/server/organization/ws/search-example.json6
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/organization/ws/CreateActionTest.java7
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/organization/ws/SearchActionTest.java26
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/ui/ws/OrganizationActionTest.java143
-rw-r--r--sonar-ws/src/main/protobuf/ws-organizations.proto1
8 files changed, 90 insertions, 104 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsSupport.java b/server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsSupport.java
index e859a354cca..69aaa1723c4 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsSupport.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/organization/ws/OrganizationsWsSupport.java
@@ -115,8 +115,7 @@ public class OrganizationsWsSupport {
builder
.setName(dto.getName())
.setKey(dto.getKey())
- .setGuarded(dto.isGuarded())
- .setSubscription(dto.getSubscription().name());
+ .setGuarded(dto.isGuarded());
setNullable(dto.getDescription(), builder::setDescription);
setNullable(dto.getUrl(), builder::setUrl);
setNullable(dto.getAvatarUrl(), builder::setAvatar);
diff --git a/server/sonar-server/src/main/java/org/sonar/server/ui/ws/OrganizationAction.java b/server/sonar-server/src/main/java/org/sonar/server/ui/ws/OrganizationAction.java
index ca03a893042..574b0a9585e 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/ui/ws/OrganizationAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/ui/ws/OrganizationAction.java
@@ -97,11 +97,12 @@ public class OrganizationAction implements NavigationWsAction {
private void writeOrganization(JsonWriter json, OrganizationDto organization, boolean newProjectPrivate) {
json.name("organization")
.beginObject()
+ .prop("isDefault", organization.getKey().equals(defaultOrganizationProvider.get().getKey()))
+ .prop("projectVisibility", Visibility.getLabel(newProjectPrivate))
+ .prop("subscription", organization.getSubscription().name())
.prop("canAdmin", userSession.hasPermission(ADMINISTER, organization))
.prop("canProvisionProjects", userSession.hasPermission(PROVISION_PROJECTS, organization))
.prop("canDelete", organization.isGuarded() ? userSession.isSystemAdministrator() : userSession.hasPermission(ADMINISTER, organization))
- .prop("isDefault", organization.getKey().equals(defaultOrganizationProvider.get().getKey()))
- .prop("projectVisibility", Visibility.getLabel(newProjectPrivate))
.prop("canUpdateProjectsVisibilityToPrivate",
userSession.hasPermission(ADMINISTER, organization) &&
billingValidations.canUpdateProjectVisibilityToPrivate(new BillingValidations.Organization(organization.getKey(), organization.getUuid())));
diff --git a/server/sonar-server/src/main/resources/org/sonar/server/organization/ws/create-example.json b/server/sonar-server/src/main/resources/org/sonar/server/organization/ws/create-example.json
index e21074c7b12..3acbecf4148 100644
--- a/server/sonar-server/src/main/resources/org/sonar/server/organization/ws/create-example.json
+++ b/server/sonar-server/src/main/resources/org/sonar/server/organization/ws/create-example.json
@@ -5,7 +5,6 @@
"description": "The Foo company produces quality software for Bar.",
"url": "https://www.foo.com",
"avatar": "https://www.foo.com/foo.png",
- "guarded": false,
- "subscription": "FREE"
+ "guarded": false
}
}
diff --git a/server/sonar-server/src/main/resources/org/sonar/server/organization/ws/search-example.json b/server/sonar-server/src/main/resources/org/sonar/server/organization/ws/search-example.json
index 39b1221a5e8..481ae34e9ef 100644
--- a/server/sonar-server/src/main/resources/org/sonar/server/organization/ws/search-example.json
+++ b/server/sonar-server/src/main/resources/org/sonar/server/organization/ws/search-example.json
@@ -9,8 +9,7 @@
"key": "foo-company",
"name": "Foo Company",
"guarded": true,
- "isAdmin": false,
- "subscription": "FREE"
+ "isAdmin": false
},
{
"key": "bar-company",
@@ -19,8 +18,7 @@
"url": "https://www.bar.com",
"avatar": "https://www.bar.com/logo.png",
"guarded": false,
- "isAdmin": true,
- "subscription": "PAID"
+ "isAdmin": true
}
]
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/CreateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/CreateActionTest.java
index d3bd7018985..8ce1370500e 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/CreateActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/CreateActionTest.java
@@ -126,7 +126,6 @@ public class CreateActionTest {
assertThat(response.getOrganization().getDescription()).isEqualTo("My org desc");
assertThat(response.getOrganization().getUrl()).isEqualTo("my url");
assertThat(response.getOrganization().getAvatar()).isEqualTo("my avatar");
- assertThat(response.getOrganization().getSubscription()).isEqualTo(OrganizationDto.Subscription.FREE.name());
OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, "orgfoo").get();
assertThat(organization.getName()).isEqualTo("orgFoo");
assertThat(organization.getDescription()).isEqualTo("My org desc");
@@ -210,7 +209,8 @@ public class CreateActionTest {
assertThat(dbClient.permissionTemplateDao().selectGroupPermissionsByTemplateId(dbSession, defaultTemplate.getId()))
.extracting(PermissionTemplateGroupDto::getGroupId, PermissionTemplateGroupDto::getPermission)
.containsOnly(
- tuple(ownersGroup.getId(), UserRole.ADMIN), tuple(ownersGroup.getId(), UserRole.ISSUE_ADMIN), tuple(ownersGroup.getId(), UserRole.SECURITYHOTSPOT_ADMIN), tuple(ownersGroup.getId(), GlobalPermissions.SCAN_EXECUTION),
+ tuple(ownersGroup.getId(), UserRole.ADMIN), tuple(ownersGroup.getId(), UserRole.ISSUE_ADMIN), tuple(ownersGroup.getId(), UserRole.SECURITYHOTSPOT_ADMIN),
+ tuple(ownersGroup.getId(), GlobalPermissions.SCAN_EXECUTION),
tuple(defaultGroup.getId(), UserRole.USER), tuple(defaultGroup.getId(), UserRole.CODEVIEWER));
}
@@ -227,7 +227,8 @@ public class CreateActionTest {
assertThat(es.client().prepareSearch(UserIndexDefinition.INDEX_TYPE_USER)
.setQuery(boolQuery()
.must(termQuery(FIELD_ORGANIZATION_UUIDS, organization.getUuid()))
- .must(termQuery(FIELD_UUID, user.getUuid()))).get().getHits().getHits()).hasSize(1);
+ .must(termQuery(FIELD_UUID, user.getUuid())))
+ .get().getHits().getHits()).hasSize(1);
}
@Test
diff --git a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/SearchActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/SearchActionTest.java
index 58a32e01792..1f3db59c0d8 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/organization/ws/SearchActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/organization/ws/SearchActionTest.java
@@ -51,7 +51,6 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.sonar.db.organization.OrganizationDto.Subscription.FREE;
import static org.sonar.db.organization.OrganizationDto.Subscription.PAID;
-import static org.sonar.db.organization.OrganizationDto.Subscription.SONARQUBE;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER;
import static org.sonar.server.organization.ws.SearchAction.PARAM_MEMBER;
import static org.sonar.test.JsonAssert.assertJson;
@@ -93,31 +92,6 @@ public class SearchActionTest {
}
@Test
- public void return_sonarcloud_subscription() {
- OrganizationDto paidOrganization = db.organizations().insert(o -> o.setSubscription(PAID));
- OrganizationDto freeOrganization = db.organizations().insert(o -> o.setSubscription(FREE));
- // Organization without subscription should be considered as free
- OrganizationDto organizationWithoutSubscription = db.organizations().insert(o -> o.setSubscription(null));
-
- SearchWsResponse result = call(ws.newRequest());
-
- assertThat(result.getOrganizationsList()).extracting(Organization::getKey, Organization::getSubscription).containsExactlyInAnyOrder(
- tuple(paidOrganization.getKey(), PAID.name()),
- tuple(freeOrganization.getKey(), FREE.name()),
- tuple(organizationWithoutSubscription.getKey(), FREE.name()));
- }
-
- @Test
- public void return_sonarqube_subscription() {
- OrganizationDto sonarQubeOrganization = db.organizations().insert(o -> o.setSubscription(SONARQUBE));
-
- SearchWsResponse result = call(ws.newRequest());
-
- assertThat(result.getOrganizationsList()).extracting(Organization::getKey, Organization::getSubscription).containsExactlyInAnyOrder(
- tuple(sonarQubeOrganization.getKey(), SONARQUBE.name()));
- }
-
- @Test
public void request_returns_empty_on_table_with_single_row_when_not_requesting_the_first_page() {
when(system2.now()).thenReturn(SOME_DATE);
db.organizations().insert();
diff --git a/server/sonar-server/src/test/java/org/sonar/server/ui/ws/OrganizationActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/ui/ws/OrganizationActionTest.java
index e49187b7382..e34cec9cdb5 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/ui/ws/OrganizationActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/ui/ws/OrganizationActionTest.java
@@ -28,12 +28,12 @@ import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.System2;
import org.sonar.api.web.page.Page;
import org.sonar.api.web.page.PageDefinition;
+import org.sonar.core.extension.CoreExtensionRepository;
import org.sonar.core.platform.PluginInfo;
import org.sonar.core.platform.PluginRepository;
import org.sonar.db.DbClient;
import org.sonar.db.DbTester;
import org.sonar.db.organization.OrganizationDto;
-import org.sonar.core.extension.CoreExtensionRepository;
import org.sonar.server.organization.BillingValidations;
import org.sonar.server.organization.BillingValidationsProxy;
import org.sonar.server.organization.DefaultOrganizationProvider;
@@ -51,72 +51,34 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.sonar.api.web.page.Page.Scope.ORGANIZATION;
+import static org.sonar.db.organization.OrganizationDto.Subscription.FREE;
+import static org.sonar.db.organization.OrganizationDto.Subscription.PAID;
+import static org.sonar.db.organization.OrganizationDto.Subscription.SONARQUBE;
import static org.sonar.db.permission.OrganizationPermission.ADMINISTER;
import static org.sonar.db.permission.OrganizationPermission.PROVISION_PROJECTS;
import static org.sonar.test.JsonAssert.assertJson;
public class OrganizationActionTest {
@Rule
- public DbTester dbTester = DbTester.create(System2.INSTANCE);
+ public DbTester db = DbTester.create(System2.INSTANCE);
@Rule
public UserSessionRule userSession = UserSessionRule.standalone();
@Rule
public ExpectedException expectedException = ExpectedException.none();
- private DbClient dbClient = dbTester.getDbClient();
- private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester);
+ private DbClient dbClient = db.getDbClient();
+ private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db);
private PageRepository pageRepository = mock(PageRepository.class);
private BillingValidationsProxy billingValidations = mock(BillingValidationsProxy.class);
private WsActionTester ws = new WsActionTester(new OrganizationAction(dbClient, defaultOrganizationProvider, userSession, pageRepository, billingValidations));
@Test
- public void verify_definition() {
- WebService.Action def = ws.getDef();
-
- assertThat(def.isInternal()).isTrue();
- assertThat(def.description()).isEqualTo("Get information concerning organization navigation for the current user");
- assertThat(def.since()).isEqualTo("6.3");
- assertThat(def.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder(
- tuple("6.4", "The field 'projectVisibility' is added"));
-
- assertThat(def.params()).hasSize(1);
- WebService.Param organization = def.param("organization");
- assertThat(organization.description()).isEqualTo("the organization key");
- assertThat(organization.isRequired()).isTrue();
- assertThat(organization.exampleValue()).isEqualTo("my-org");
- }
-
- @Test
- public void fails_with_IAE_if_parameter_organization_is_not_specified() {
- expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("The 'organization' parameter is missing");
-
- executeRequest(null);
- }
-
- @Test
- public void json_example() {
- initWithPages(
- Page.builder("my-plugin/org-page").setName("Organization page").setScope(ORGANIZATION).build(),
- Page.builder("my-plugin/org-admin-page").setName("Organization admin page").setScope(ORGANIZATION).setAdmin(true).build());
- OrganizationDto organization = dbTester.organizations().insert(dto -> dto.setGuarded(true));
- userSession.logIn()
- .addPermission(ADMINISTER, organization)
- .addPermission(PROVISION_PROJECTS, organization);
-
- TestResponse response = executeRequest(organization);
-
- assertJson(response.getInput())
- .isSimilarTo(ws.getDef().responseExampleAsString());
- }
-
- @Test
public void filter_out_admin_pages_when_user_is_not_admin() {
initWithPages(
Page.builder("my-plugin/org-page").setName("Organization page").setScope(ORGANIZATION).build(),
Page.builder("my-plugin/org-admin-page").setName("Organization admin page").setScope(ORGANIZATION).setAdmin(true).build());
- OrganizationDto organization = dbTester.organizations().insert(dto -> dto.setGuarded(true));
+ OrganizationDto organization = db.organizations().insert(dto -> dto.setGuarded(true));
userSession.logIn()
.addPermission(PROVISION_PROJECTS, organization);
@@ -129,7 +91,7 @@ public class OrganizationActionTest {
@Test
public void returns_non_admin_and_canDelete_false_when_user_not_logged_in_and_key_is_the_default_organization() {
- TestResponse response = executeRequest(dbTester.getDefaultOrganization());
+ TestResponse response = executeRequest(db.getDefaultOrganization());
verifyResponse(response, false, false, false);
}
@@ -138,14 +100,14 @@ public class OrganizationActionTest {
public void returns_non_admin_and_canDelete_false_when_user_logged_in_but_not_admin_and_key_is_the_default_organization() {
userSession.logIn();
- TestResponse response = executeRequest(dbTester.getDefaultOrganization());
+ TestResponse response = executeRequest(db.getDefaultOrganization());
verifyResponse(response, false, false, false);
}
@Test
public void returns_admin_and_canDelete_true_when_user_logged_in_and_admin_and_key_is_the_default_organization() {
- OrganizationDto defaultOrganization = dbTester.getDefaultOrganization();
+ OrganizationDto defaultOrganization = db.getDefaultOrganization();
userSession.logIn().addPermission(ADMINISTER, defaultOrganization);
TestResponse response = executeRequest(defaultOrganization);
@@ -155,7 +117,7 @@ public class OrganizationActionTest {
@Test
public void returns_non_admin_and_canDelete_false_when_user_not_logged_in_and_key_is_not_the_default_organization() {
- OrganizationDto organization = dbTester.organizations().insert();
+ OrganizationDto organization = db.organizations().insert();
TestResponse response = executeRequest(organization);
verifyResponse(response, false, false, false);
@@ -163,7 +125,7 @@ public class OrganizationActionTest {
@Test
public void returns_non_admin_and_canDelete_false_when_user_logged_in_but_not_admin_and_key_is_not_the_default_organization() {
- OrganizationDto organization = dbTester.organizations().insert();
+ OrganizationDto organization = db.organizations().insert();
userSession.logIn();
TestResponse response = executeRequest(organization);
@@ -173,7 +135,7 @@ public class OrganizationActionTest {
@Test
public void returns_admin_and_canDelete_true_when_user_logged_in_and_admin_and_key_is_not_the_default_organization() {
- OrganizationDto organization = dbTester.organizations().insert();
+ OrganizationDto organization = db.organizations().insert();
userSession.logIn().addPermission(ADMINISTER, organization);
TestResponse response = executeRequest(organization);
@@ -183,7 +145,7 @@ public class OrganizationActionTest {
@Test
public void returns_admin_and_canDelete_false_when_user_logged_in_and_admin_and_key_is_guarded_organization() {
- OrganizationDto organization = dbTester.organizations().insert(dto -> dto.setGuarded(true));
+ OrganizationDto organization = db.organizations().insert(dto -> dto.setGuarded(true));
userSession.logIn().addPermission(ADMINISTER, organization);
TestResponse response = executeRequest(organization);
@@ -193,7 +155,7 @@ public class OrganizationActionTest {
@Test
public void returns_only_canDelete_true_when_user_is_system_administrator_and_key_is_guarded_organization() {
- OrganizationDto organization = dbTester.organizations().insert(dto -> dto.setGuarded(true));
+ OrganizationDto organization = db.organizations().insert(dto -> dto.setGuarded(true));
userSession.logIn().setSystemAdministrator();
TestResponse response = executeRequest(organization);
@@ -204,8 +166,8 @@ public class OrganizationActionTest {
@Test
public void returns_provisioning_true_when_user_can_provision_projects_in_organization() {
// user can provision projects in org2 but not in org1
- OrganizationDto org1 = dbTester.organizations().insert();
- OrganizationDto org2 = dbTester.organizations().insert();
+ OrganizationDto org1 = db.organizations().insert();
+ OrganizationDto org2 = db.organizations().insert();
userSession.logIn().addPermission(PROVISION_PROJECTS, org2);
verifyResponse(executeRequest(org1), false, false, false);
@@ -214,35 +176,88 @@ public class OrganizationActionTest {
@Test
public void returns_project_visibility_private() {
- OrganizationDto organization = dbTester.organizations().insert();
- dbTester.organizations().setNewProjectPrivate(organization, true);
+ OrganizationDto organization = db.organizations().insert();
+ db.organizations().setNewProjectPrivate(organization, true);
userSession.logIn().addPermission(PROVISION_PROJECTS, organization);
assertJson(executeRequest(organization).getInput()).isSimilarTo("{\"organization\": {\"projectVisibility\": \"private\"}}");
}
@Test
public void returns_project_visibility_public() {
- OrganizationDto organization = dbTester.organizations().insert();
- dbTester.organizations().setNewProjectPrivate(organization, false);
+ OrganizationDto organization = db.organizations().insert();
+ db.organizations().setNewProjectPrivate(organization, false);
userSession.logIn().addPermission(PROVISION_PROJECTS, organization);
assertJson(executeRequest(organization).getInput()).isSimilarTo("{\"organization\": {\"projectVisibility\": \"public\"}}");
}
@Test
public void returns_non_admin_and_canUpdateProjectsVisibilityToPrivate_false_when_user_logged_in_but_not_admin_and_extension_returns_true() {
- OrganizationDto defaultOrganization = dbTester.getDefaultOrganization();
+ OrganizationDto defaultOrganization = db.getDefaultOrganization();
userSession.logIn();
when(billingValidations.canUpdateProjectVisibilityToPrivate(any(BillingValidations.Organization.class))).thenReturn(true);
- verifyCanUpdateProjectsVisibilityToPrivateResponse(executeRequest(dbTester.getDefaultOrganization()), false);
+ verifyCanUpdateProjectsVisibilityToPrivateResponse(executeRequest(db.getDefaultOrganization()), false);
userSession.logIn().addPermission(ADMINISTER, defaultOrganization);
when(billingValidations.canUpdateProjectVisibilityToPrivate(any(BillingValidations.Organization.class))).thenReturn(false);
- verifyCanUpdateProjectsVisibilityToPrivateResponse(executeRequest(dbTester.getDefaultOrganization()), false);
+ verifyCanUpdateProjectsVisibilityToPrivateResponse(executeRequest(db.getDefaultOrganization()), false);
userSession.logIn().addPermission(ADMINISTER, defaultOrganization);
when(billingValidations.canUpdateProjectVisibilityToPrivate(any(BillingValidations.Organization.class))).thenReturn(true);
- verifyCanUpdateProjectsVisibilityToPrivateResponse(executeRequest(dbTester.getDefaultOrganization()), true);
+ verifyCanUpdateProjectsVisibilityToPrivateResponse(executeRequest(db.getDefaultOrganization()), true);
+ }
+
+ @Test
+ public void return_subscription_flag() {
+ OrganizationDto paidOrganization = db.organizations().insert(o -> o.setSubscription(PAID));
+ assertJson(executeRequest(paidOrganization).getInput()).isSimilarTo("{\"organization\": {\"subscription\": \"PAID\"}}");
+
+ OrganizationDto freeOrganization = db.organizations().insert(o -> o.setSubscription(FREE));
+ assertJson(executeRequest(freeOrganization).getInput()).isSimilarTo("{\"organization\": {\"subscription\": \"FREE\"}}");
+
+ OrganizationDto sonarQubeOrganization = db.organizations().insert(o -> o.setSubscription(SONARQUBE));
+ assertJson(executeRequest(sonarQubeOrganization).getInput()).isSimilarTo("{\"organization\": {\"subscription\": \"SONARQUBE\"}}");
+ }
+
+ @Test
+ public void fails_with_IAE_if_parameter_organization_is_not_specified() {
+ expectedException.expect(IllegalArgumentException.class);
+ expectedException.expectMessage("The 'organization' parameter is missing");
+
+ executeRequest(null);
+ }
+
+ @Test
+ public void json_example() {
+ initWithPages(
+ Page.builder("my-plugin/org-page").setName("Organization page").setScope(ORGANIZATION).build(),
+ Page.builder("my-plugin/org-admin-page").setName("Organization admin page").setScope(ORGANIZATION).setAdmin(true).build());
+ OrganizationDto organization = db.organizations().insert(dto -> dto.setGuarded(true));
+ userSession.logIn()
+ .addPermission(ADMINISTER, organization)
+ .addPermission(PROVISION_PROJECTS, organization);
+
+ TestResponse response = executeRequest(organization);
+
+ assertJson(response.getInput())
+ .isSimilarTo(ws.getDef().responseExampleAsString());
+ }
+
+ @Test
+ public void verify_definition() {
+ WebService.Action def = ws.getDef();
+
+ assertThat(def.isInternal()).isTrue();
+ assertThat(def.description()).isEqualTo("Get information concerning organization navigation for the current user");
+ assertThat(def.since()).isEqualTo("6.3");
+ assertThat(def.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder(
+ tuple("6.4", "The field 'projectVisibility' is added"));
+
+ assertThat(def.params()).hasSize(1);
+ WebService.Param organization = def.param("organization");
+ assertThat(organization.description()).isEqualTo("the organization key");
+ assertThat(organization.isRequired()).isTrue();
+ assertThat(organization.exampleValue()).isEqualTo("my-org");
}
private void initWithPages(Page... pages) {
diff --git a/sonar-ws/src/main/protobuf/ws-organizations.proto b/sonar-ws/src/main/protobuf/ws-organizations.proto
index 4d9941eaeb8..172bf31d85c 100644
--- a/sonar-ws/src/main/protobuf/ws-organizations.proto
+++ b/sonar-ws/src/main/protobuf/ws-organizations.proto
@@ -61,7 +61,6 @@ message Organization {
optional string avatar = 5;
optional bool guarded = 6;
optional bool isAdmin = 7;
- optional string subscription = 8;
}
message User {