From 13d76f2a2c2e5b42b3d74bf1ad0c4dbbeca14608 Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 24 Sep 2020 14:21:10 +0200 Subject: [PATCH] SONAR-13903 Remove use of organizations in Quality Profiles and Active Rules --- .../issue/AdHocRuleCreator.java | 10 +- .../issue/RuleRepositoryImpl.java | 9 +- .../LoadReportAnalysisMetadataHolderStep.java | 29 +- .../issue/AdHocRuleCreatorTest.java | 21 +- .../issue/RuleRepositoryImplTest.java | 17 +- ...dReportAnalysisMetadataHolderStepTest.java | 46 +-- .../step/PersistAdHocRulesStepTest.java | 7 +- .../step/PersistIssuesStepTest.java | 5 +- .../step/ViewsPersistComponentsStepTest.java | 1 - .../java/org/sonar/db/es/RuleExtensionId.java | 80 ---- .../qualityprofile/ActiveRuleCountQuery.java | 14 - .../db/qualityprofile/ActiveRuleDao.java | 19 +- .../db/qualityprofile/ActiveRuleMapper.java | 8 +- .../db/qualityprofile/DefaultQProfileDao.java | 13 +- .../db/qualityprofile/DefaultQProfileDto.java | 13 - .../qualityprofile/DefaultQProfileMapper.java | 8 +- .../db/qualityprofile/OrgActiveRuleDto.java | 11 - .../db/qualityprofile/OrgQProfileDto.java | 15 - .../sonar/db/qualityprofile/QProfileDto.java | 18 - .../qualityprofile/QProfileEditGroupsDao.java | 5 +- .../QProfileEditGroupsMapper.java | 2 +- .../qualityprofile/QProfileEditUsersDao.java | 9 +- .../QProfileEditUsersMapper.java | 4 +- .../db/qualityprofile/QualityProfileDao.java | 49 ++- .../qualityprofile/QualityProfileMapper.java | 26 +- .../db/qualityprofile/SearchGroupsQuery.java | 13 - .../db/qualityprofile/SearchUsersQuery.java | 14 - .../main/java/org/sonar/db/rule/RuleDao.java | 79 +--- .../org/sonar/db/rule/RuleDefinitionDto.java | 6 +- .../main/java/org/sonar/db/rule/RuleDto.java | 9 - .../db/rule/RuleExtensionForIndexingDto.java | 10 - .../org/sonar/db/rule/RuleForIndexingDto.java | 5 + .../java/org/sonar/db/rule/RuleMapper.java | 21 +- .../org/sonar/db/rule/RuleMetadataDto.java | 11 - .../db/qualityprofile/ActiveRuleMapper.xml | 10 +- .../qualityprofile/DefaultQProfileMapper.xml | 14 +- .../QProfileEditGroupsMapper.xml | 4 +- .../QProfileEditUsersMapper.xml | 16 +- .../qualityprofile/QualityProfileMapper.xml | 25 +- .../org/sonar/db/rule/RuleMapper.xml | 20 +- server/sonar-db-dao/src/schema/schema-sq.ddl | 8 +- .../db/permission/AuthorizationDaoTest.java | 6 - .../db/qualityprofile/ActiveRuleDaoTest.java | 49 +-- .../DefaultQProfileDaoTest.java | 72 ++-- .../qualityprofile/QProfileChangeDaoTest.java | 24 +- .../QProfileEditGroupsDaoTest.java | 123 +++--- .../QProfileEditUsersDaoTest.java | 105 ++--- .../qualityprofile/QualityProfileDaoTest.java | 269 +++++-------- .../QualityProfileExportDaoTest.java | 7 +- .../java/org/sonar/db/rule/RuleDaoTest.java | 360 ++++-------------- .../org/sonar/db/webhook/WebhookDaoTest.java | 1 - .../sonar/db/component/ComponentDbTester.java | 6 + .../db/organization/OrganizationDbTester.java | 4 + .../QualityProfileDbTester.java | 17 +- .../qualityprofile/QualityProfileTesting.java | 1 - .../java/org/sonar/db/rule/RuleDbTester.java | 18 +- .../java/org/sonar/db/rule/RuleTesting.java | 73 +--- .../java/org/sonar/db/user/UserDbTester.java | 5 + .../v85/AddPrimaryKeyToDefaultQProfiles.java | 36 ++ .../db/migration/version/v85/DbVersion85.java | 6 +- .../version/v85/DropDefaultQProfilesPk.java | 36 ++ .../DropOrganizationFromDefaultQProfiles.java | 36 ++ ...opOrganizationFromQualityProfileTable.java | 37 ++ .../v85/DropOrganizationInRulesMetadata.java | 42 ++ .../AddPrimaryKeyToDefaultQProfilesTest.java | 40 ++ .../v85/DropDefaultQProfilesPkTest.java | 41 ++ ...pOrganizationFromDefaultQProfilesTest.java | 41 ++ ...ganizationFromQualityProfileTableTest.java | 40 ++ .../DropOrganizationInRulesMetadataTest.java | 40 ++ .../schema.sql | 7 + .../v85/DropDefaultQProfilesPkTest/schema.sql | 9 + .../schema.sql | 8 + .../schema.sql | 14 + .../schema.sql | 19 + .../java/org/sonar/server/es/BulkIndexer.java | 14 +- .../java/org/sonar/server/es/EsClient.java | 3 +- .../DefaultOrganizationProviderImpl.java | 2 +- .../sonar/server/rule/DefaultRuleFinder.java | 13 +- .../org/sonar/server/rule/index/RuleDoc.java | 12 + .../server/rule/index/RuleExtensionDoc.java | 102 ----- .../server/rule/index/RuleExtensionScope.java | 61 --- .../sonar/server/rule/index/RuleIndex.java | 75 +--- .../rule/index/RuleIndexDefinition.java | 15 +- .../sonar/server/rule/index/RuleIndexer.java | 73 +--- .../sonar/server/rule/index/RuleQuery.java | 10 - .../index/ActiveRuleIndexerTest.java | 6 +- .../server/rule/DefaultRuleFinderTest.java | 7 +- .../rule/index/RuleIndexDefinitionTest.java | 2 +- .../server/rule/index/RuleIndexTest.java | 126 ++---- .../server/rule/index/RuleIndexerTest.java | 60 +-- .../TestDefaultOrganizationProvider.java | 4 +- .../src/main/js/api/quality-profiles.ts | 7 +- server/sonar-web/src/main/js/api/rules.ts | 12 +- .../meta/MetaQualityProfiles.tsx | 1 - .../js/apps/about/components/AboutApp.tsx | 2 +- .../apps/about/components/AboutStandards.tsx | 18 +- .../__snapshots__/AboutApp-test.tsx.snap | 15 +- .../components/ActivationButton.tsx | 2 - .../components/ActivationFormModal.tsx | 2 - .../js/apps/coding-rules/components/App.tsx | 4 +- .../components/CustomRuleButton.tsx | 2 - .../components/CustomRuleFormModal.tsx | 4 +- .../coding-rules/components/RuleDetails.tsx | 22 +- .../components/RuleDetailsCustomRules.tsx | 11 +- .../components/RuleDetailsDescription.tsx | 4 +- .../components/RuleDetailsIssues.tsx | 20 +- .../components/RuleDetailsMeta.tsx | 6 +- .../components/RuleDetailsProfiles.tsx | 15 +- .../components/RuleDetailsTagsPopup.tsx | 4 +- .../coding-rules/components/RuleListItem.tsx | 3 +- .../__tests__/ActivationFormModal-test.tsx | 1 - .../components/__tests__/App-test.tsx | 10 - .../__tests__/CustomRuleFormModal-test.tsx | 1 - .../components/__tests__/RuleDetails-test.tsx | 2 - .../__tests__/RuleDetailsDescription-test.tsx | 8 +- .../__tests__/RuleDetailsIssues-test.tsx | 2 - .../__tests__/RuleDetailsMeta-test.tsx | 1 - .../__tests__/RuleDetailsTagsPopup-test.tsx | 10 +- .../__tests__/__snapshots__/App-test.tsx.snap | 2 - .../RuleDetailsIssues-test.tsx.snap | 6 +- .../groups/components/__tests__/App-test.tsx | 4 +- .../js/apps/quality-gates/components/App.tsx | 7 +- .../components/CopyQualityGateForm.tsx | 2 +- .../components/CreateQualityGateForm.tsx | 2 +- .../components/DeleteQualityGateForm.tsx | 2 +- .../js/apps/quality-gates/components/List.tsx | 5 +- .../quality-profiles/changelog/Changelog.tsx | 4 +- .../changelog/ChangelogContainer.tsx | 19 +- .../compare/ComparisonContainer.tsx | 1 - .../compare/ComparisonResultActivation.tsx | 1 - .../compare/ComparisonResults.tsx | 4 +- .../components/ProfileActions.tsx | 26 +- .../components/ProfileContainer.tsx | 4 +- .../components/ProfileLink.tsx | 8 +- .../components/ProfileNotFound.tsx | 10 +- .../__tests__/ProfileActions-test.tsx | 5 +- .../ProfileActions-test.tsx.snap | 16 +- .../details/ProfileHeader.tsx | 18 +- .../details/ProfileInheritanceBox.tsx | 7 +- .../quality-profiles/details/ProfileRules.tsx | 5 +- .../details/ProfileRulesDeprecatedWarning.tsx | 4 +- .../details/ProfileRulesRowOfType.tsx | 18 +- .../details/ProfileRulesRowTotal.tsx | 10 +- .../ProfileRulesSonarWayComparison.tsx | 15 +- .../__snapshots__/ProfileHeader-test.tsx.snap | 7 +- .../ProfileInheritanceBox-test.tsx.snap | 4 - .../__snapshots__/ProfileRules-test.tsx.snap | 2 +- ...rofileRulesDeprecatedWarning-test.tsx.snap | 2 +- .../ProfileRulesRowOfType-test.tsx.snap | 4 +- .../ProfileRulesRowTotal-test.tsx.snap | 4 +- ...ofileRulesSonarWayComparison-test.tsx.snap | 2 +- .../home/EvolutionDeprecated.tsx | 8 +- .../quality-profiles/home/EvolutionRules.tsx | 9 +- .../home/EvolutionStagnant.tsx | 3 +- .../apps/quality-profiles/home/PageHeader.tsx | 4 +- .../quality-profiles/home/ProfilesList.tsx | 6 +- .../home/ProfilesListHeader.tsx | 11 +- .../quality-profiles/home/ProfilesListRow.tsx | 29 +- .../__tests__/ProfilesListHeader-test.tsx | 1 - .../EvolutionDeprecated-test.tsx.snap | 12 +- .../__snapshots__/ProfilesList-test.tsx.snap | 3 - .../ProfilesListRow-test.tsx.snap | 4 - .../main/js/apps/quality-profiles/utils.ts | 30 +- .../js/apps/users/components/GroupsForm.tsx | 1 - .../components/__tests__/GroupsForm-test.tsx | 1 - .../workspace/WorkspaceRuleDetails.tsx | 23 +- .../workspace/WorkspaceRuleViewer.tsx | 6 +- .../__tests__/WorkspaceRuleDetails-test.tsx | 26 +- .../WorkspaceRuleViewer-test.tsx.snap | 3 +- .../main/js/helpers/__tests__/urls-test.ts | 14 - server/sonar-web/src/main/js/helpers/urls.ts | 33 +- .../server/organization/MemberUpdater.java | 1 - .../organization/OrganizationUpdaterImpl.java | 6 +- .../qualityprofile/BuiltInQProfileInsert.java | 2 +- .../BuiltInQProfileInsertImpl.java | 42 +- .../organization/MemberUpdaterTest.java | 24 -- .../OrganizationUpdaterImplTest.java | 4 +- .../BuiltInQProfileInsertImplTest.java | 54 +-- .../BuiltInQProfileUpdateImplTest.java | 11 +- .../org/sonar/server/rule/RegisterRules.java | 29 +- .../server/rule/WebServerRuleFinderImpl.java | 4 +- .../sonar/server/rule/RegisterRulesTest.java | 122 ++---- .../rule/WebServerRuleFinderImplTest.java | 3 +- .../organization/ws/OrganizationDeleter.java | 6 - .../qualityprofile/QProfileBackuper.java | 5 +- .../qualityprofile/QProfileBackuperImpl.java | 4 +- .../server/qualityprofile/QProfileCopier.java | 11 +- .../qualityprofile/QProfileFactory.java | 7 +- .../qualityprofile/QProfileFactoryImpl.java | 22 +- .../qualityprofile/QProfileRulesImpl.java | 2 +- .../RegisterQualityProfiles.java | 9 +- .../qualityprofile/ws/ActivateRuleAction.java | 4 +- .../ws/ActivateRulesAction.java | 4 +- .../qualityprofile/ws/AddGroupAction.java | 12 +- .../qualityprofile/ws/AddProjectAction.java | 14 +- .../qualityprofile/ws/AddUserAction.java | 11 +- .../qualityprofile/ws/BackupAction.java | 2 - .../qualityprofile/ws/ChangeParentAction.java | 10 +- .../qualityprofile/ws/ChangelogAction.java | 3 - .../qualityprofile/ws/CompareAction.java | 7 - .../server/qualityprofile/ws/CopyAction.java | 4 +- .../qualityprofile/ws/CreateAction.java | 38 +- .../ws/DeactivateRuleAction.java | 4 +- .../ws/DeactivateRulesAction.java | 4 +- .../qualityprofile/ws/DeleteAction.java | 9 +- .../qualityprofile/ws/ExportAction.java | 19 +- .../qualityprofile/ws/InheritanceAction.java | 11 +- .../qualityprofile/ws/ProjectsAction.java | 22 +- .../qualityprofile/ws/QProfileReference.java | 44 +-- .../qualityprofile/ws/QProfileWsSupport.java | 78 +--- .../qualityprofile/ws/RemoveGroupAction.java | 12 +- .../ws/RemoveProjectAction.java | 12 +- .../qualityprofile/ws/RemoveUserAction.java | 12 +- .../qualityprofile/ws/RenameAction.java | 8 +- .../qualityprofile/ws/RestoreAction.java | 13 +- .../qualityprofile/ws/SearchAction.java | 93 ++--- .../server/qualityprofile/ws/SearchData.java | 11 - .../qualityprofile/ws/SearchGroupsAction.java | 12 +- .../qualityprofile/ws/SearchUsersAction.java | 12 +- .../qualityprofile/ws/SearchUsersRequest.java | 14 - .../qualityprofile/ws/SetDefaultAction.java | 14 +- .../server/qualityprofile/ws/ShowAction.java | 18 +- .../org/sonar/server/rule/RuleCreator.java | 19 +- .../org/sonar/server/rule/RuleUpdate.java | 11 - .../org/sonar/server/rule/RuleUpdater.java | 17 +- .../server/rule/ws/ActiveRuleCompleter.java | 7 +- .../org/sonar/server/rule/ws/AppAction.java | 25 +- .../server/rule/ws/RuleQueryFactory.java | 39 +- .../sonar/server/rule/ws/RuleWsSupport.java | 28 -- .../sonar/server/rule/ws/SearchAction.java | 4 +- .../org/sonar/server/rule/ws/ShowAction.java | 22 +- .../org/sonar/server/rule/ws/TagsAction.java | 36 +- .../sonar/server/rule/ws/UpdateAction.java | 32 +- .../server/branch/pr/ws/ListActionTest.java | 1 - .../server/branch/ws/ListActionTest.java | 1 - .../server/ce/ws/ActivityActionTest.java | 2 - .../server/issue/WebIssueStorageTest.java | 4 +- .../server/issue/ws/AddCommentActionTest.java | 3 +- .../server/issue/ws/AssignActionTest.java | 3 +- .../server/issue/ws/BulkChangeActionTest.java | 2 +- .../issue/ws/DoTransitionActionTest.java | 3 +- .../server/issue/ws/IssueUpdaterTest.java | 3 +- .../issue/ws/SetSeverityActionTest.java | 3 +- .../server/issue/ws/SetTagsActionTest.java | 3 +- .../server/issue/ws/SetTypeActionTest.java | 3 +- .../organization/ws/DeleteActionTest.java | 22 +- .../ws/OrganizationDeleterTest.java | 20 +- .../QProfileBackuperImplTest.java | 40 +- .../QProfileComparisonTest.java | 4 +- .../qualityprofile/QProfileCopierTest.java | 24 +- .../qualityprofile/QProfileExportersTest.java | 9 +- .../QProfileFactoryImplTest.java | 76 ++-- .../qualityprofile/QProfileResetImplTest.java | 8 +- .../qualityprofile/QProfileRuleImplTest.java | 12 +- .../qualityprofile/QProfileRulesImplTest.java | 7 +- .../qualityprofile/QProfileTesting.java | 37 +- .../qualityprofile/QProfileTreeImplTest.java | 4 +- ...gisterQualityProfilesNotificationTest.java | 22 +- .../RegisterQualityProfilesTest.java | 23 +- .../ws/ActivateRuleActionTest.java | 41 +- .../ws/ActivateRulesActionTest.java | 20 +- .../qualityprofile/ws/AddGroupActionTest.java | 95 ++--- .../ws/AddProjectActionTest.java | 95 ++--- .../qualityprofile/ws/AddUserActionTest.java | 94 ++--- .../qualityprofile/ws/BackupActionTest.java | 103 +---- .../ws/ChangeParentActionTest.java | 54 +-- .../ws/ChangelogActionTest.java | 114 +----- .../qualityprofile/ws/CompareActionTest.java | 52 +-- .../qualityprofile/ws/CopyActionTest.java | 46 ++- .../qualityprofile/ws/CreateActionTest.java | 67 +--- .../ws/DeactivateRuleActionTest.java | 48 +-- .../ws/DeactivateRulesActionTest.java | 31 +- .../qualityprofile/ws/DeleteActionTest.java | 83 ++-- .../qualityprofile/ws/ExportActionTest.java | 140 +------ .../ws/InheritanceActionTest.java | 67 +--- .../qualityprofile/ws/ProjectsActionTest.java | 89 ++--- .../ws/QProfileReferenceTest.java | 52 +-- .../ws/QProfileWsSupportTest.java | 39 +- .../ws/QProfilesWsMediumTest.java | 12 +- .../ws/RemoveGroupActionTest.java | 90 +---- .../ws/RemoveProjectActionTest.java | 53 +-- .../ws/RemoveUserActionTest.java | 94 ++--- .../qualityprofile/ws/RenameActionTest.java | 52 +-- .../qualityprofile/ws/RestoreActionTest.java | 33 +- .../qualityprofile/ws/SearchActionTest.java | 209 +++------- .../ws/SearchGroupsActionTest.java | 99 ++--- .../ws/SearchUsersActionTest.java | 111 ++---- .../ws/SetDefaultActionTest.java | 77 +--- .../qualityprofile/ws/ShowActionTest.java | 71 ++-- .../sonar/server/rule/RuleCreatorTest.java | 9 +- .../rule/RuleDescriptionFormatterTest.java | 1 - .../sonar/server/rule/RuleUpdaterTest.java | 127 +++--- .../rule/ws/ActiveRuleCompleterTest.java | 6 +- .../sonar/server/rule/ws/AppActionTest.java | 53 +-- .../server/rule/ws/CreateActionTest.java | 5 +- .../server/rule/ws/DeleteActionTest.java | 3 +- .../server/rule/ws/RuleQueryFactoryTest.java | 127 +----- .../server/rule/ws/SearchActionTest.java | 183 ++------- .../sonar/server/rule/ws/ShowActionTest.java | 109 +----- .../sonar/server/rule/ws/TagsActionTest.java | 25 +- .../server/rule/ws/UpdateActionTest.java | 71 +--- .../server/ui/ws/ComponentActionTest.java | 4 +- .../server/user/ws/DeactivateActionTest.java | 2 +- .../usergroups/ws/DeleteActionTest.java | 2 +- .../QualityProfileWsParameters.java | 1 - .../qualityprofiles/ActivateRulesRequest.java | 14 - .../qualityprofiles/AddGroupRequest.java | 14 - .../qualityprofiles/AddProjectRequest.java | 14 - .../qualityprofiles/AddUserRequest.java | 14 - .../client/qualityprofiles/BackupRequest.java | 14 - .../qualityprofiles/ChangeParentRequest.java | 14 - .../qualityprofiles/ChangelogRequest.java | 14 - .../client/qualityprofiles/CreateRequest.java | 13 - .../DeactivateRulesRequest.java | 14 - .../client/qualityprofiles/DeleteRequest.java | 14 - .../client/qualityprofiles/ExportRequest.java | 14 - .../qualityprofiles/InheritanceRequest.java | 14 - .../QualityprofilesService.java | 22 +- .../qualityprofiles/RemoveGroupRequest.java | 14 - .../qualityprofiles/RemoveProjectRequest.java | 14 - .../qualityprofiles/RemoveUserRequest.java | 14 - .../qualityprofiles/RestoreRequest.java | 13 - .../qualityprofiles/SearchGroupsRequest.java | 14 - .../client/qualityprofiles/SearchRequest.java | 14 - .../qualityprofiles/SearchUsersRequest.java | 14 - .../qualityprofiles/SetDefaultRequest.java | 14 - .../main/protobuf/ws-qualityprofiles.proto | 3 - 327 files changed, 2235 insertions(+), 6032 deletions(-) delete mode 100644 server/sonar-db-dao/src/main/java/org/sonar/db/es/RuleExtensionId.java create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/AddPrimaryKeyToDefaultQProfiles.java create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropDefaultQProfilesPk.java create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromDefaultQProfiles.java create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromQualityProfileTable.java create mode 100644 server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationInRulesMetadata.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/AddPrimaryKeyToDefaultQProfilesTest.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropDefaultQProfilesPkTest.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromDefaultQProfilesTest.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromQualityProfileTableTest.java create mode 100644 server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationInRulesMetadataTest.java create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/AddPrimaryKeyToDefaultQProfilesTest/schema.sql create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropDefaultQProfilesPkTest/schema.sql create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromDefaultQProfilesTest/schema.sql create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromQualityProfileTableTest/schema.sql create mode 100644 server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropOrganizationInRulesMetadataTest/schema.sql delete mode 100644 server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionDoc.java delete mode 100644 server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionScope.java diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/AdHocRuleCreator.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/AdHocRuleCreator.java index 183024ac06a..5b716e059db 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/AdHocRuleCreator.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/AdHocRuleCreator.java @@ -59,9 +59,9 @@ public class AdHocRuleCreator { * Persists a new add hoc rule in the DB and indexes it. * @return the rule that was inserted in the DB, which includes the generated ID. */ - public RuleDto persistAndIndex(DbSession dbSession, NewAdHocRule adHoc, OrganizationDto organizationDto) { + public RuleDto persistAndIndex(DbSession dbSession, NewAdHocRule adHoc) { RuleDao dao = dbClient.ruleDao(); - Optional existingRuleDtoOpt = dao.selectByKey(dbSession, organizationDto.getUuid(), adHoc.getKey()); + Optional existingRuleDtoOpt = dao.selectByKey(dbSession, adHoc.getKey()); RuleMetadataDto metadata; long now = system2.now(); if (!existingRuleDtoOpt.isPresent()) { @@ -76,9 +76,7 @@ public class AdHocRuleCreator { .setCreatedAt(now) .setUpdatedAt(now); dao.insert(dbSession, dto); - metadata = new RuleMetadataDto() - .setRuleUuid(dto.getUuid()) - .setOrganizationUuid(organizationDto.getUuid()); + metadata = new RuleMetadataDto().setRuleUuid(dto.getUuid()); } else { // No need to update the rule, only org specific metadata RuleDto ruleDto = existingRuleDtoOpt.get(); @@ -113,7 +111,7 @@ public class AdHocRuleCreator { } - RuleDto ruleDto = dao.selectOrFailByKey(dbSession, organizationDto, adHoc.getKey()); + RuleDto ruleDto = dao.selectOrFailByKey(dbSession, adHoc.getKey()); ruleIndexer.commitAndIndex(dbSession, ruleDto.getUuid()); return ruleDto; } diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/RuleRepositoryImpl.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/RuleRepositoryImpl.java index 75118b2bd8c..769ddf2cad8 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/RuleRepositoryImpl.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/RuleRepositoryImpl.java @@ -50,14 +50,12 @@ public class RuleRepositoryImpl implements RuleRepository { private final AdHocRuleCreator creator; private final DbClient dbClient; - private final AnalysisMetadataHolder analysisMetadataHolder; private Map adHocRulesPersist = new HashMap<>(); - public RuleRepositoryImpl(AdHocRuleCreator creator, DbClient dbClient, AnalysisMetadataHolder analysisMetadataHolder) { + public RuleRepositoryImpl(AdHocRuleCreator creator, DbClient dbClient) { this.creator = creator; this.dbClient = dbClient; - this.analysisMetadataHolder = analysisMetadataHolder; } public void addOrUpdateAddHocRuleIfNeeded(RuleKey ruleKey, Supplier ruleSupplier) { @@ -79,7 +77,7 @@ public class RuleRepositoryImpl implements RuleRepository { } private void persistAndIndex(DbSession dbSession, NewAdHocRule adHocRule) { - Rule rule = new RuleImpl(creator.persistAndIndex(dbSession, adHocRule, analysisMetadataHolder.getOrganization().toDto())); + Rule rule = new RuleImpl(creator.persistAndIndex(dbSession, adHocRule)); rulesByUuid.put(rule.getUuid(), rule); rulesByKey.put(adHocRule.getKey(), rule); } @@ -135,10 +133,9 @@ public class RuleRepositoryImpl implements RuleRepository { private void loadRulesFromDb(DbSession dbSession) { this.rulesByKey = new HashMap<>(); this.rulesByUuid = new HashMap<>(); - String organizationUuid = analysisMetadataHolder.getOrganization().getUuid(); Multimap deprecatedRuleKeysByRuleUuid = dbClient.ruleDao().selectAllDeprecatedRuleKeys(dbSession).stream() .collect(MoreCollectors.index(DeprecatedRuleKeyDto::getRuleUuid)); - for (RuleDto ruleDto : dbClient.ruleDao().selectAll(dbSession, organizationUuid)) { + for (RuleDto ruleDto : dbClient.ruleDao().selectAll(dbSession)) { Rule rule = new RuleImpl(ruleDto); rulesByKey.put(ruleDto.getKey(), rule); rulesByUuid.put(ruleDto.getUuid(), rule); diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStep.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStep.java index 582475e04da..31b13e5d787 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStep.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStep.java @@ -19,9 +19,7 @@ */ package org.sonar.ce.task.projectanalysis.step; -import com.google.common.base.Joiner; import java.util.Date; -import java.util.List; import java.util.Optional; import javax.annotation.CheckForNull; import javax.annotation.Nullable; @@ -34,12 +32,10 @@ import org.sonar.ce.task.projectanalysis.batch.BatchReportReader; import org.sonar.ce.task.projectanalysis.component.BranchLoader; import org.sonar.ce.task.step.ComputationStep; import org.sonar.core.platform.PluginRepository; -import org.sonar.core.util.stream.MoreCollectors; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.project.ProjectDto; -import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.scanner.protocol.output.ScannerReport; import org.sonar.scanner.protocol.output.ScannerReport.Metadata.Plugin; import org.sonar.scanner.protocol.output.ScannerReport.Metadata.QProfile; @@ -51,7 +47,6 @@ import org.sonar.server.qualityprofile.QualityProfile; import static com.google.common.base.Preconditions.checkState; import static java.lang.String.format; import static java.util.stream.Collectors.toMap; -import static org.sonar.core.util.stream.MoreCollectors.toList; /** * Feed analysis metadata holder with metadata from the analysis report. @@ -86,7 +81,7 @@ public class LoadReportAnalysisMetadataHolderStep implements ComputationStep { loadMetadata(reportMetadata); Organization organization = loadOrganization(reportMetadata); Runnable projectValidation = loadProject(reportMetadata, organization); - loadQualityProfiles(reportMetadata, organization); + loadQualityProfiles(reportMetadata); branchLoader.load(reportMetadata); projectValidation.run(); } @@ -145,8 +140,7 @@ public class LoadReportAnalysisMetadataHolderStep implements ComputationStep { } } - private void loadQualityProfiles(ScannerReport.Metadata reportMetadata, Organization organization) { - checkQualityProfilesConsistency(reportMetadata, organization); + private void loadQualityProfiles(ScannerReport.Metadata reportMetadata) { analysisMetadata.setQProfilesByLanguage(reportMetadata.getQprofilesPerLanguageMap().values().stream() .collect(toMap( QProfile::getLanguage, @@ -167,25 +161,6 @@ public class LoadReportAnalysisMetadataHolderStep implements ComputationStep { return pluginRepository.getPluginInfo(p.getKey()).getBasePlugin(); } - /** - * Check that the Quality profiles sent by scanner correctly relate to the project organization. - */ - private void checkQualityProfilesConsistency(ScannerReport.Metadata metadata, Organization organization) { - List profileKeys = metadata.getQprofilesPerLanguageMap().values().stream() - .map(QProfile::getKey) - .collect(toList(metadata.getQprofilesPerLanguageMap().size())); - try (DbSession dbSession = dbClient.openSession(false)) { - List profiles = dbClient.qualityProfileDao().selectByUuids(dbSession, profileKeys); - String badKeys = profiles.stream() - .filter(p -> !p.getOrganizationUuid().equals(organization.getUuid())) - .map(QProfileDto::getKee) - .collect(MoreCollectors.join(Joiner.on(", "))); - if (!badKeys.isEmpty()) { - throw MessageException.of(format("Quality profiles with following keys don't exist in organization [%s]: %s", organization.getKey(), badKeys)); - } - } - } - private void checkOrganizationKeyConsistency(ScannerReport.Metadata reportMetadata, Organization organization) { String organizationKey = reportMetadata.getOrganizationKey(); String resolveReportOrganizationKey = resolveReportOrganizationKey(organizationKey); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/AdHocRuleCreatorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/AdHocRuleCreatorTest.java index 4d259df8683..46a427db219 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/AdHocRuleCreatorTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/AdHocRuleCreatorTest.java @@ -27,7 +27,6 @@ import org.sonar.api.utils.System2; import org.sonar.core.util.SequenceUuidFactory; import org.sonar.db.DbSession; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleMetadataDto; @@ -52,10 +51,9 @@ public class AdHocRuleCreatorTest { @Test public void create_ad_hoc_rule_from_issue() { - OrganizationDto organization = db.organizations().insert(); NewAdHocRule addHocRule = new NewAdHocRule(ScannerReport.ExternalIssue.newBuilder().setEngineId("eslint").setRuleId("no-cond-assign").build()); - RuleDto rule = underTest.persistAndIndex(dbSession, addHocRule, organization); + RuleDto rule = underTest.persistAndIndex(dbSession, addHocRule); assertThat(rule).isNotNull(); assertThat(rule.isExternal()).isTrue(); @@ -74,7 +72,6 @@ public class AdHocRuleCreatorTest { @Test public void create_ad_hoc_rule_from_scanner_report() { - OrganizationDto organization = db.organizations().insert(); NewAdHocRule addHocRule = new NewAdHocRule(ScannerReport.AdHocRule.newBuilder() .setEngineId("eslint") .setRuleId("no-cond-assign") @@ -84,7 +81,7 @@ public class AdHocRuleCreatorTest { .setType(ScannerReport.IssueType.BUG) .build()); - RuleDto rule = underTest.persistAndIndex(dbSession, addHocRule, organization); + RuleDto rule = underTest.persistAndIndex(dbSession, addHocRule); assertThat(rule).isNotNull(); assertThat(rule.isExternal()).isTrue(); @@ -103,7 +100,6 @@ public class AdHocRuleCreatorTest { @Test public void truncate_metadata_name_and_desc_if_longer_than_max_value() { - OrganizationDto organization = db.organizations().insert(); NewAdHocRule addHocRule = new NewAdHocRule(ScannerReport.AdHocRule.newBuilder() .setEngineId("eslint") .setRuleId("no-cond-assign") @@ -113,7 +109,7 @@ public class AdHocRuleCreatorTest { .setType(ScannerReport.IssueType.BUG) .build()); - RuleDto rule = underTest.persistAndIndex(dbSession, addHocRule, organization); + RuleDto rule = underTest.persistAndIndex(dbSession, addHocRule); assertThat(rule.getMetadata().getAdHocName()).isEqualTo(repeat("a", 200)); assertThat(rule.getMetadata().getAdHocDescription()).isEqualTo(repeat("a", 16_777_215)); @@ -121,7 +117,6 @@ public class AdHocRuleCreatorTest { @Test public void update_metadata_only() { - OrganizationDto organization = db.organizations().insert(); NewAdHocRule addHocRule = new NewAdHocRule(ScannerReport.AdHocRule.newBuilder() .setEngineId("eslint") .setRuleId("no-cond-assign") @@ -130,7 +125,7 @@ public class AdHocRuleCreatorTest { .setSeverity(Constants.Severity.BLOCKER) .setType(ScannerReport.IssueType.BUG) .build()); - RuleDto rule = underTest.persistAndIndex(dbSession, addHocRule, organization); + RuleDto rule = underTest.persistAndIndex(dbSession, addHocRule); long creationDate = rule.getCreatedAt(); NewAdHocRule addHocRuleUpdated = new NewAdHocRule(ScannerReport.AdHocRule.newBuilder() .setEngineId("eslint") @@ -141,7 +136,7 @@ public class AdHocRuleCreatorTest { .setType(ScannerReport.IssueType.CODE_SMELL) .build()); - RuleDto ruleUpdated = underTest.persistAndIndex(dbSession, addHocRuleUpdated, organization); + RuleDto ruleUpdated = underTest.persistAndIndex(dbSession, addHocRuleUpdated); assertThat(ruleUpdated).isNotNull(); assertThat(ruleUpdated.isExternal()).isTrue(); @@ -163,9 +158,8 @@ public class AdHocRuleCreatorTest { @Test public void does_not_update_rule_when_no_change() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule = db.rules().insert(r -> r.setRepositoryKey("external_eslint").setIsExternal(true).setIsAdHoc(true)); - RuleMetadataDto ruleMetadata = db.rules().insertOrUpdateMetadata(rule, organization); + RuleMetadataDto ruleMetadata = db.rules().insertOrUpdateMetadata(rule); RuleDto ruleUpdated = underTest.persistAndIndex(dbSession, new NewAdHocRule(ScannerReport.AdHocRule.newBuilder() .setEngineId("eslint") @@ -174,8 +168,7 @@ public class AdHocRuleCreatorTest { .setDescription(ruleMetadata.getAdHocDescription()) .setSeverity(Constants.Severity.valueOf(ruleMetadata.getAdHocSeverity())) .setType(ScannerReport.IssueType.forNumber(ruleMetadata.getAdHocType())) - .build()), - organization); + .build())); assertThat(ruleUpdated).isNotNull(); assertThat(ruleUpdated.isExternal()).isTrue(); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/RuleRepositoryImplTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/RuleRepositoryImplTest.java index 7e2e87fc10b..1204f361642 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/RuleRepositoryImplTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/RuleRepositoryImplTest.java @@ -64,9 +64,6 @@ public class RuleRepositoryImplTest { @org.junit.Rule public ExpectedException expectedException = ExpectedException.none(); - @org.junit.Rule - public AnalysisMetadataHolderRule analysisMetadataHolder = new AnalysisMetadataHolderRule() - .setOrganizationUuid(ORGANIZATION_UUID, QUALITY_GATE_UUID); @org.junit.Rule public DbTester db = DbTester.create(System2.INSTANCE); @@ -77,13 +74,13 @@ public class RuleRepositoryImplTest { private RuleIndexer ruleIndexer = mock(RuleIndexer.class); private AdHocRuleCreator adHocRuleCreator = new AdHocRuleCreator(db.getDbClient(), System2.INSTANCE, ruleIndexer, new SequenceUuidFactory()); - private RuleRepositoryImpl underTest = new RuleRepositoryImpl(adHocRuleCreator, dbClient, analysisMetadataHolder); + private RuleRepositoryImpl underTest = new RuleRepositoryImpl(adHocRuleCreator, dbClient); @Before public void setUp() { when(dbClient.openSession(anyBoolean())).thenReturn(dbSession); when(dbClient.ruleDao()).thenReturn(ruleDao); - when(ruleDao.selectAll(any(DbSession.class), eq(ORGANIZATION_UUID))).thenReturn(ImmutableList.of(AB_RULE)); + when(ruleDao.selectAll(any(DbSession.class))).thenReturn(ImmutableList.of(AB_RULE)); DeprecatedRuleKeyDto abDeprecatedRuleKey1 = deprecatedRuleKeyOf(AB_RULE, AB_RULE_DEPRECATED_KEY_1); DeprecatedRuleKeyDto abDeprecatedRuleKey2 = deprecatedRuleKeyOf(AB_RULE, AB_RULE_DEPRECATED_KEY_2); DeprecatedRuleKeyDto deprecatedRuleOfNonExistingRule = deprecatedRuleKeyOf("unknown-rule-uuid", DEPRECATED_KEY_OF_NON_EXITING_RULE); @@ -110,7 +107,7 @@ public class RuleRepositoryImplTest { public void first_call_to_getByKey_triggers_call_to_db_and_any_subsequent_get_or_find_call_does_not() { underTest.getByKey(AB_RULE.getKey()); - verify(ruleDao, times(1)).selectAll(any(DbSession.class), eq(ORGANIZATION_UUID)); + verify(ruleDao, times(1)).selectAll(any(DbSession.class)); verifyNoMethodCallTriggersCallToDB(); } @@ -119,7 +116,7 @@ public class RuleRepositoryImplTest { public void first_call_to_findByKey_triggers_call_to_db_and_any_subsequent_get_or_find_call_does_not() { underTest.findByKey(AB_RULE.getKey()); - verify(ruleDao, times(1)).selectAll(any(DbSession.class), eq(ORGANIZATION_UUID)); + verify(ruleDao, times(1)).selectAll(any(DbSession.class)); verifyNoMethodCallTriggersCallToDB(); } @@ -128,7 +125,7 @@ public class RuleRepositoryImplTest { public void first_call_to_getById_triggers_call_to_db_and_any_subsequent_get_or_find_call_does_not() { underTest.getByUuid(AB_RULE.getUuid()); - verify(ruleDao, times(1)).selectAll(any(DbSession.class), eq(ORGANIZATION_UUID)); + verify(ruleDao, times(1)).selectAll(any(DbSession.class)); verifyNoMethodCallTriggersCallToDB(); } @@ -137,7 +134,7 @@ public class RuleRepositoryImplTest { public void first_call_to_findById_triggers_call_to_db_and_any_subsequent_get_or_find_call_does_not() { underTest.findByUuid(AB_RULE.getUuid()); - verify(ruleDao, times(1)).selectAll(any(DbSession.class), eq(ORGANIZATION_UUID)); + verify(ruleDao, times(1)).selectAll(any(DbSession.class)); verifyNoMethodCallTriggersCallToDB(); } @@ -280,7 +277,7 @@ public class RuleRepositoryImplTest { @Test public void persist_new_externally_defined_Rules() { - underTest = new RuleRepositoryImpl(adHocRuleCreator, db.getDbClient(), analysisMetadataHolder); + underTest = new RuleRepositoryImpl(adHocRuleCreator, db.getDbClient()); RuleKey ruleKey = RuleKey.of("external_eslint", "no-cond-assign"); underTest.addOrUpdateAddHocRuleIfNeeded(ruleKey, () -> new NewAdHocRule(ScannerReport.ExternalIssue.newBuilder().setEngineId("eslint").setRuleId("no-cond-assign").build())); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStepTest.java index 4d10423cfff..8c4ebcc864f 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStepTest.java @@ -205,7 +205,8 @@ public class LoadReportAnalysisMetadataHolderStepTest { ComputationStep underTest = createStep(res); expectedException.expect(MessageException.class); - expectedException.expectMessage("Compute Engine task main component key is null. Project with UUID main_prj_uuid must have been deleted since report was uploaded. Can not proceed."); + expectedException + .expectMessage("Compute Engine task main component key is null. Project with UUID main_prj_uuid must have been deleted since report was uploaded. Can not proceed."); underTest.execute(new TestComputationStepContext()); } @@ -357,49 +358,6 @@ public class LoadReportAnalysisMetadataHolderStepTest { }; } - @Test - public void execute_ensures_that_report_has_quality_profiles_matching_the_project_organization() { - OrganizationDto organization = db.organizations().insert(); - ComponentDto project = db.components().insertPublicProject(organization); - ScannerReport.Metadata.Builder metadataBuilder = newBatchReportBuilder(); - metadataBuilder - .setOrganizationKey(organization.getKey()) - .setProjectKey(project.getDbKey()); - metadataBuilder.getMutableQprofilesPerLanguage().put("js", ScannerReport.Metadata.QProfile.newBuilder().setKey("p1").setName("Sonar way").setLanguage("js").build()); - reportReader.setMetadata(metadataBuilder.build()); - - db.qualityProfiles().insert(organization, p -> p.setLanguage("js").setKee("p1")); - - ComputationStep underTest = createStep(createCeTask(project.getDbKey(), organization.getUuid())); - - // no errors - underTest.execute(new TestComputationStepContext()); - } - - @Test - public void execute_fails_with_MessageException_when_report_has_quality_profiles_on_other_organizations() { - OrganizationDto organization1 = db.organizations().insert(); - OrganizationDto organization2 = db.organizations().insert(); - ComponentDto projectInOrg1 = db.components().insertPublicProject(organization1); - ScannerReport.Metadata.Builder metadataBuilder = newBatchReportBuilder(); - metadataBuilder - .setOrganizationKey(organization1.getKey()) - .setProjectKey(projectInOrg1.getDbKey()); - metadataBuilder.putQprofilesPerLanguage("js", ScannerReport.Metadata.QProfile.newBuilder().setKey("jsInOrg1").setName("Sonar way").setLanguage("js").build()); - metadataBuilder.putQprofilesPerLanguage("php", ScannerReport.Metadata.QProfile.newBuilder().setKey("phpInOrg2").setName("PHP way").setLanguage("php").build()); - reportReader.setMetadata(metadataBuilder.build()); - - db.qualityProfiles().insert(organization1, p -> p.setLanguage("js").setKee("jsInOrg1")); - db.qualityProfiles().insert(organization2, p -> p.setLanguage("php").setKee("phpInOrg2")); - - ComputationStep underTest = createStep(createCeTask(projectInOrg1.getDbKey(), organization1.getUuid())); - - expectedException.expect(MessageException.class); - expectedException.expectMessage("Quality profiles with following keys don't exist in organization [" + organization1.getKey() + "]: phpInOrg2"); - - underTest.execute(new TestComputationStepContext()); - } - @Test public void execute_does_not_fail_when_report_has_a_quality_profile_that_does_not_exist_anymore() { OrganizationDto organization = db.organizations().insert(); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistAdHocRulesStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistAdHocRulesStepTest.java index 939ee87853a..2aa58c65beb 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistAdHocRulesStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistAdHocRulesStepTest.java @@ -48,10 +48,6 @@ public class PersistAdHocRulesStepTest extends BaseStepTest { @Rule public DbTester db = DbTester.create(System2.INSTANCE); - @Rule - public AnalysisMetadataHolderRule analysisMetadataHolder = new AnalysisMetadataHolderRule() - .setOrganizationUuid("org-1", "qg-uuid-1"); - private DbClient dbClient = db.getDbClient(); private ComputationStep underTest; @@ -70,13 +66,12 @@ public class PersistAdHocRulesStepTest extends BaseStepTest { @Before public void setup() { - ruleRepository = new RuleRepositoryImpl(adHocRuleCreator, dbClient, analysisMetadataHolder); + ruleRepository = new RuleRepositoryImpl(adHocRuleCreator, dbClient); underTest = new PersistAdHocRulesStep(dbClient, ruleRepository); } @Test public void persist_and_index_new_ad_hoc_rules() { - RuleKey ruleKey = RuleKey.of("external_eslint", "no-cond-assign"); ruleRepository.addOrUpdateAddHocRuleIfNeeded(ruleKey, () -> new NewAdHocRule(ScannerReport.ExternalIssue.newBuilder().setEngineId("eslint").setRuleId("no-cond-assign").build())); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistIssuesStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistIssuesStepTest.java index 7779b704c23..fb6d7c5fcaa 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistIssuesStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/PersistIssuesStepTest.java @@ -81,9 +81,6 @@ public class PersistIssuesStepTest extends BaseStepTest { public DbTester db = DbTester.create(System2.INSTANCE); @Rule public BatchReportReaderRule reportReader = new BatchReportReaderRule(); - @Rule - public AnalysisMetadataHolderRule analysisMetadataHolder = new AnalysisMetadataHolderRule() - .setOrganizationUuid("org-1", "qg-uuid-1"); private System2 system2 = mock(System2.class); private DbSession session = db.getSession(); @@ -104,7 +101,7 @@ public class PersistIssuesStepTest extends BaseStepTest { protoIssueCache = new ProtoIssueCache(temp.newFile(), System2.INSTANCE); reportReader.setMetadata(ScannerReport.Metadata.getDefaultInstance()); - underTest = new PersistIssuesStep(dbClient, system2, conflictResolver, new RuleRepositoryImpl(adHocRuleCreator, dbClient, analysisMetadataHolder), protoIssueCache, + underTest = new PersistIssuesStep(dbClient, system2, conflictResolver, new RuleRepositoryImpl(adHocRuleCreator, dbClient), protoIssueCache, new IssueStorage(), new SequenceUuidFactory()); } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepTest.java index 7ad6b12745c..514531a2ccd 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepTest.java @@ -99,7 +99,6 @@ public class ViewsPersistComponentsStepTest extends BaseStepTest { now = DATE_FORMAT.parse("2015-06-02"); when(system2.now()).thenReturn(now.getTime()); - dbTester.organizations().insertForUuid(ORGANIZATION_UUID); analysisMetadataHolder.setBranch(new DefaultBranchImpl()); BranchPersister branchPersister = mock(BranchPersister.class); ProjectPersister projectPersister = mock(ProjectPersister.class); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/es/RuleExtensionId.java b/server/sonar-db-dao/src/main/java/org/sonar/db/es/RuleExtensionId.java deleted file mode 100644 index ded4facd8c2..00000000000 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/es/RuleExtensionId.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2020 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.db.es; - -import com.google.common.base.CharMatcher; -import com.google.common.base.Splitter; -import java.util.List; - -import static com.google.common.base.Preconditions.checkArgument; -import static java.lang.String.format; - -public class RuleExtensionId { - private final String ruleUuid; - private final String organizationUuid; - private final String id; - - private static final Splitter ID_SPLITTER = Splitter.on(CharMatcher.anyOf("|")); - - public RuleExtensionId(String organizationUuid, String ruleUuid) { - this.organizationUuid = organizationUuid; - this.ruleUuid = ruleUuid; - this.id = format("%s|%s", ruleUuid, organizationUuid); - } - - public RuleExtensionId(String ruleExtensionId) { - List splittedId = ID_SPLITTER.splitToList(ruleExtensionId); - checkArgument(splittedId.size() == 2, "Incorrect Id %s", ruleExtensionId); - this.id = ruleExtensionId; - this.ruleUuid = splittedId.get(0); - this.organizationUuid = splittedId.get(1); - } - - public String getRuleUuid() { - return this.ruleUuid; - } - - public String getOrganizationUuid() { - return organizationUuid; - } - - public String getId() { - return id; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof RuleExtensionId)) { - return false; - } - - RuleExtensionId that = (RuleExtensionId) o; - - return id.equals(that.id); - } - - @Override - public int hashCode() { - return id.hashCode(); - } -} diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/ActiveRuleCountQuery.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/ActiveRuleCountQuery.java index 451627bc42f..d95e39f5a49 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/ActiveRuleCountQuery.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/ActiveRuleCountQuery.java @@ -24,13 +24,11 @@ import javax.annotation.CheckForNull; import javax.annotation.Nullable; import org.sonar.api.rule.RuleStatus; import org.sonar.core.util.stream.MoreCollectors; -import org.sonar.db.organization.OrganizationDto; import static com.google.common.base.Preconditions.checkState; public class ActiveRuleCountQuery { - private final OrganizationDto organization; private final List profileUuids; private final RuleStatus ruleStatus; private final String inheritance; @@ -39,11 +37,6 @@ public class ActiveRuleCountQuery { this.profileUuids = builder.profiles.stream().map(QProfileDto::getKee).collect(MoreCollectors.toList()); this.ruleStatus = builder.ruleStatus; this.inheritance = builder.inheritance; - this.organization = builder.organization; - } - - public OrganizationDto getOrganization() { - return organization; } public List getProfileUuids() { @@ -68,16 +61,10 @@ public class ActiveRuleCountQuery { } public static class Builder { - private OrganizationDto organization; private List profiles; private RuleStatus ruleStatus; private String inheritance; - public Builder setOrganization(OrganizationDto organization) { - this.organization = organization; - return this; - } - public Builder setProfiles(List profiles) { this.profiles = profiles; return this; @@ -94,7 +81,6 @@ public class ActiveRuleCountQuery { } public ActiveRuleCountQuery build() { - checkState(organization != null, "Organization cannot be null"); checkState(profiles != null, "Profiles cannot be null"); return new ActiveRuleCountQuery(this); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/ActiveRuleDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/ActiveRuleDao.java index 650e7dd6a5c..bd7812d76e4 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/ActiveRuleDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/ActiveRuleDao.java @@ -29,7 +29,6 @@ import org.sonar.core.util.UuidFactory; import org.sonar.db.Dao; import org.sonar.db.DatabaseUtils; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleParamDto; import static com.google.common.base.Preconditions.checkArgument; @@ -58,16 +57,16 @@ public class ActiveRuleDao implements Dao { return Optional.ofNullable(mapper(dbSession).selectByKey(key.getRuleProfileUuid(), key.getRuleKey().repository(), key.getRuleKey().rule())); } - public List selectByRuleUuid(DbSession dbSession, OrganizationDto organization, String ruleUuid) { - return mapper(dbSession).selectByRuleUuid(organization.getUuid(), ruleUuid); + public List selectByOrgRuleUuid(DbSession dbSession, String ruleUuid) { + return mapper(dbSession).selectOrgByRuleUuid(ruleUuid); } - public List selectByRuleUuidOfAllOrganizations(DbSession dbSession, String ruleUuid) { - return mapper(dbSession).selectByRuleUuidOfAllOrganizations(ruleUuid); + public List selectByRuleUuid(DbSession dbSession, String ruleUuid) { + return mapper(dbSession).selectByRuleUuid(ruleUuid); } - public List selectByRuleUuids(DbSession dbSession, OrganizationDto organization, List uuids) { - return executeLargeInputs(uuids, chunk -> mapper(dbSession).selectByRuleUuids(organization.getUuid(), chunk)); + public List selectByRuleUuids(DbSession dbSession, List uuids) { + return executeLargeInputs(uuids, chunk -> mapper(dbSession).selectByRuleUuids(chunk)); } /** @@ -176,8 +175,8 @@ public class ActiveRuleDao implements Dao { mapper(dbSession).deleteParameter(uuid); } - public void deleteParamsByRuleParamOfAllOrganizations(DbSession dbSession, RuleParamDto param) { - List activeRules = selectByRuleUuidOfAllOrganizations(dbSession, param.getRuleUuid()); + public void deleteParamsByRuleParam(DbSession dbSession, RuleParamDto param) { + List activeRules = selectByRuleUuid(dbSession, param.getRuleUuid()); for (ActiveRuleDto activeRule : activeRules) { for (ActiveRuleParamDto activeParam : selectParamsByActiveRuleUuid(dbSession, activeRule.getUuid())) { if (activeParam.getKey().equals(param.getName())) { @@ -194,7 +193,7 @@ public class ActiveRuleDao implements Dao { public Map countActiveRulesByQuery(DbSession dbSession, ActiveRuleCountQuery query) { return toMap(executeLargeInputs(query.getProfileUuids(), - partition -> mapper(dbSession).countActiveRulesByQuery(query.getOrganization().getUuid(), partition, query.getRuleStatus(), query.getInheritance()))); + partition -> mapper(dbSession).countActiveRulesByQuery(partition, query.getRuleStatus(), query.getInheritance()))); } public void scrollAllForIndexing(DbSession dbSession, Consumer consumer) { diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/ActiveRuleMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/ActiveRuleMapper.java index c7909a8cdd2..79c6a766a57 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/ActiveRuleMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/ActiveRuleMapper.java @@ -45,11 +45,11 @@ public interface ActiveRuleMapper { List selectByKeys(@Param("keys") List keys); - List selectByRuleUuid(@Param("organizationUuid") String organizationUuid, @Param("ruleUuid") String ruleUuid); + List selectOrgByRuleUuid(@Param("ruleUuid") String ruleUuid); - List selectByRuleUuidOfAllOrganizations(String ruleUuid); + List selectByRuleUuid(String ruleUuid); - List selectByRuleUuids(@Param("organizationUuid") String organizationUuid, @Param("ruleUuids") List partitionOfRuleUuids); + List selectByRuleUuids(@Param("ruleUuids") List partitionOfRuleUuids); List selectByProfileUuid(String uuid); @@ -77,7 +77,7 @@ public interface ActiveRuleMapper { List selectParamsByActiveRuleUuids(@Param("uuids") List uuids); - List countActiveRulesByQuery(@Param("organizationUuid") String organizationUuid, @Param("profileUuids") List profileUuids, + List countActiveRulesByQuery(@Param("profileUuids") List profileUuids, @Nullable @Param("ruleStatus") RuleStatus ruleStatus, @Param("inheritance") String inheritance); void scrollAllForIndexing(ResultHandler handler); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/DefaultQProfileDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/DefaultQProfileDao.java index 908131cee6a..ad0b922ce26 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/DefaultQProfileDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/DefaultQProfileDao.java @@ -21,6 +21,7 @@ package org.sonar.db.qualityprofile; import java.util.Collection; import java.util.HashSet; +import java.util.Optional; import java.util.Set; import org.sonar.api.utils.System2; import org.sonar.db.Dao; @@ -50,16 +51,16 @@ public class DefaultQProfileDao implements Dao { DatabaseUtils.executeLargeUpdates(qProfileUuids, mapper::deleteByQProfileUuids); } - public Set selectExistingQProfileUuids(DbSession dbSession, String organizationUuid, Collection qProfileUuids) { - return new HashSet<>(DatabaseUtils.executeLargeInputs(qProfileUuids, uuids -> mapper(dbSession).selectExistingQProfileUuids(organizationUuid, uuids))); + public Set selectExistingQProfileUuids(DbSession dbSession, Collection qProfileUuids) { + return new HashSet<>(DatabaseUtils.executeLargeInputs(qProfileUuids, uuids -> mapper(dbSession).selectExistingQProfileUuids(uuids))); } - public boolean isDefault(DbSession dbSession, String organizationUuid, String qProfileUuid) { - return selectExistingQProfileUuids(dbSession, organizationUuid, singletonList(qProfileUuid)).contains(qProfileUuid); + public boolean isDefault(DbSession dbSession, String qProfileUuid) { + return selectExistingQProfileUuids(dbSession, singletonList(qProfileUuid)).contains(qProfileUuid); } - public Set selectUuidsOfOrganizationsWithoutDefaultProfile(DbSession dbSession, String language) { - return mapper(dbSession).selectUuidsOfOrganizationsWithoutDefaultProfile(language); + public Optional selectDefaultQProfileUuid(DbSession dbSession, String language) { + return mapper(dbSession).selectDefaultQProfileUuid(language); } private static DefaultQProfileMapper mapper(DbSession dbSession) { diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/DefaultQProfileDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/DefaultQProfileDto.java index bb8ede8827f..cc950c65d46 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/DefaultQProfileDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/DefaultQProfileDto.java @@ -20,20 +20,9 @@ package org.sonar.db.qualityprofile; public class DefaultQProfileDto { - - private String organizationUuid; private String language; private String qProfileUuid; - public String getOrganizationUuid() { - return organizationUuid; - } - - public DefaultQProfileDto setOrganizationUuid(String s) { - this.organizationUuid = s; - return this; - } - public String getLanguage() { return language; } @@ -54,7 +43,6 @@ public class DefaultQProfileDto { public static DefaultQProfileDto from(QProfileDto profile) { return new DefaultQProfileDto() - .setOrganizationUuid(profile.getOrganizationUuid()) .setLanguage(profile.getLanguage()) .setQProfileUuid(profile.getKee()); } @@ -62,7 +50,6 @@ public class DefaultQProfileDto { @Override public String toString() { StringBuilder sb = new StringBuilder("DefaultQProfileDto{"); - sb.append("organizationUuid='").append(organizationUuid).append('\''); sb.append(", language='").append(language).append('\''); sb.append(", qProfileUuid='").append(qProfileUuid).append('\''); sb.append('}'); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/DefaultQProfileMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/DefaultQProfileMapper.java index 35602099d10..973c7736c5b 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/DefaultQProfileMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/DefaultQProfileMapper.java @@ -21,7 +21,7 @@ package org.sonar.db.qualityprofile; import java.util.Collection; import java.util.List; -import java.util.Set; +import java.util.Optional; import org.apache.ibatis.annotations.Param; public interface DefaultQProfileMapper { @@ -31,9 +31,7 @@ public interface DefaultQProfileMapper { void deleteByQProfileUuids(@Param("qProfileUuids") Collection qProfileUuids); - List selectExistingQProfileUuids( - @Param("organizationUuid") String organizationUuid, - @Param("qProfileUuids") Collection qProfileUuids); + List selectExistingQProfileUuids(@Param("qProfileUuids") Collection qProfileUuids); - Set selectUuidsOfOrganizationsWithoutDefaultProfile(@Param("language") String language); + Optional selectDefaultQProfileUuid(@Param("language") String language); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/OrgActiveRuleDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/OrgActiveRuleDto.java index 59aacb3335a..fc00ce43121 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/OrgActiveRuleDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/OrgActiveRuleDto.java @@ -20,19 +20,8 @@ package org.sonar.db.qualityprofile; public class OrgActiveRuleDto extends ActiveRuleDto { - - private String organizationUuid; private String orgProfileUuid; - public String getOrganizationUuid() { - return organizationUuid; - } - - public OrgActiveRuleDto setOrganizationUuid(String s) { - this.organizationUuid = s; - return this; - } - public String getOrgProfileUuid() { return orgProfileUuid; } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/OrgQProfileDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/OrgQProfileDto.java index e513e440527..c408a8f96e6 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/OrgQProfileDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/OrgQProfileDto.java @@ -39,11 +39,6 @@ public class OrgQProfileDto { private String uuid; - /** - * UUID of organization. Not null. - */ - private String organizationUuid; - /** * UUID of referenced row in table "rules_profiles". Not null. */ @@ -53,15 +48,6 @@ public class OrgQProfileDto { private Long lastUsed; private Long userUpdatedAt; - public String getOrganizationUuid() { - return organizationUuid; - } - - public OrgQProfileDto setOrganizationUuid(String organizationUuid) { - this.organizationUuid = organizationUuid; - return this; - } - public String getUuid() { return uuid; } @@ -113,7 +99,6 @@ public class OrgQProfileDto { public static OrgQProfileDto from(QProfileDto qProfileDto) { return new OrgQProfileDto() .setUuid(qProfileDto.getKee()) - .setOrganizationUuid(qProfileDto.getOrganizationUuid()) .setRulesProfileUuid(qProfileDto.getRulesProfileUuid()) .setParentUuid(qProfileDto.getParentKee()) .setLastUsed(qProfileDto.getLastUsed()) diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileDto.java index ff041a371f8..5dddcb64898 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileDto.java @@ -23,19 +23,11 @@ import java.util.Date; import javax.annotation.CheckForNull; import javax.annotation.Nullable; import org.sonar.core.util.UtcDateUtils; -import org.sonar.db.organization.OrganizationDto; /** * Represents the join of "org_qprofiles" and "rules_profiles" */ public class QProfileDto { - - /** - * The organization, that this quality profile belongs to. - * Must not be null, but can be the default organization's uuid. - * Refers to {@link OrganizationDto#getUuid()}. - */ - private String organizationUuid; private String kee; private String name; private String language; @@ -46,15 +38,6 @@ public class QProfileDto { private boolean isBuiltIn; private String rulesProfileUuid; - public String getOrganizationUuid() { - return organizationUuid; - } - - public QProfileDto setOrganizationUuid(String s) { - this.organizationUuid = s; - return this; - } - public String getKee() { return kee; } @@ -149,7 +132,6 @@ public class QProfileDto { .setIsBuiltIn(rules.isBuiltIn()) .setKee(org.getUuid()) .setParentKee(org.getParentUuid()) - .setOrganizationUuid(org.getOrganizationUuid()) .setRulesProfileUuid(rules.getUuid()) .setLanguage(rules.getLanguage()) .setName(rules.getName()) diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditGroupsDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditGroupsDao.java index 1861da0c493..f4ac7780e38 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditGroupsDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditGroupsDao.java @@ -27,7 +27,6 @@ import org.sonar.db.Dao; import org.sonar.db.DatabaseUtils; import org.sonar.db.DbSession; import org.sonar.db.Pagination; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.user.GroupDto; import static org.sonar.core.util.stream.MoreCollectors.toList; @@ -59,9 +58,9 @@ public class QProfileEditGroupsDao implements Dao { return mapper(dbSession).selectByQuery(query, pagination); } - public List selectQProfileUuidsByOrganizationAndGroups(DbSession dbSession, OrganizationDto organization, Collection groups) { + public List selectQProfileUuidsByGroups(DbSession dbSession, Collection groups) { return DatabaseUtils.executeLargeInputs(groups.stream().map(GroupDto::getUuid).collect(toList()), - g -> mapper(dbSession).selectQProfileUuidsByOrganizationAndGroups(organization.getUuid(), g)); + g -> mapper(dbSession).selectQProfileUuidsByGroups(g)); } public void insert(DbSession dbSession, QProfileEditGroupsDto dto) { diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditGroupsMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditGroupsMapper.java index fbc41a420ae..fc5273efa62 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditGroupsMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditGroupsMapper.java @@ -32,7 +32,7 @@ public interface QProfileEditGroupsMapper { List selectByQuery(@Param("query") SearchGroupsQuery query, @Param("pagination") Pagination pagination); - List selectQProfileUuidsByOrganizationAndGroups(@Param("organizationUuid") String organizationUuid, @Param("groupUuids") List groupUuids); + List selectQProfileUuidsByGroups(@Param("groupUuids") List groupUuids); void insert(@Param("dto") QProfileEditGroupsDto dto, @Param("now") long now); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditUsersDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditUsersDao.java index c38a03a1f1c..eb837f87677 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditUsersDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditUsersDao.java @@ -24,7 +24,6 @@ import org.sonar.api.utils.System2; import org.sonar.db.Dao; import org.sonar.db.DbSession; import org.sonar.db.Pagination; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.user.UserDto; import static org.sonar.core.util.stream.MoreCollectors.toList; @@ -50,8 +49,8 @@ public class QProfileEditUsersDao implements Dao { return mapper(dbSession).selectByQuery(query, pagination); } - public List selectQProfileUuidsByOrganizationAndUser(DbSession dbSession, OrganizationDto organization, UserDto userDto) { - return mapper(dbSession).selectQProfileUuidsByOrganizationAndUser(organization.getUuid(), userDto.getUuid()); + public List selectQProfileUuidsByUser(DbSession dbSession,UserDto userDto) { + return mapper(dbSession).selectQProfileUuidsByUser(userDto.getUuid()); } public void insert(DbSession dbSession, QProfileEditUsersDto dto) { @@ -70,10 +69,6 @@ public class QProfileEditUsersDao implements Dao { mapper(dbSession).deleteByUser(user.getUuid()); } - public void deleteByOrganizationAndUser(DbSession dbSession, OrganizationDto organization, UserDto user) { - mapper(dbSession).deleteByOrganizationAndUser(organization.getUuid(), user.getUuid()); - } - private static QProfileEditUsersMapper mapper(DbSession dbSession) { return dbSession.getMapper(QProfileEditUsersMapper.class); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditUsersMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditUsersMapper.java index 5a1cb6e486a..918122119bb 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditUsersMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QProfileEditUsersMapper.java @@ -32,7 +32,7 @@ public interface QProfileEditUsersMapper { List selectByQuery(@Param("query") SearchUsersQuery query, @Param("pagination") Pagination pagination); - List selectQProfileUuidsByOrganizationAndUser(@Param("organizationUuid") String organizationUuid, @Param("userUuid") String userUuid); + List selectQProfileUuidsByUser(@Param("userUuid") String userUuid); void insert(@Param("dto") QProfileEditUsersDto dto, @Param("now") long now); @@ -41,6 +41,4 @@ public interface QProfileEditUsersMapper { void deleteByQProfiles(@Param("qProfileUuids") Collection qProfileUuids); void deleteByUser(@Param("userUuid") String userUuid); - - void deleteByOrganizationAndUser(@Param("organizationUuid") String organizationUuid, @Param("userUuid") String userUuid); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QualityProfileDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QualityProfileDao.java index 1c7c77b3e3b..fd71cfa5a7c 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QualityProfileDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QualityProfileDao.java @@ -36,7 +36,6 @@ import org.sonar.db.DatabaseUtils; import org.sonar.db.DbSession; import org.sonar.db.KeyLongValue; import org.sonar.db.RowNotFoundException; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.project.ProjectDto; import static java.util.Collections.emptyList; @@ -70,8 +69,8 @@ public class QualityProfileDao implements Dao { return executeLargeInputs(uuids, mapper(dbSession)::selectByUuids); } - public List selectOrderedByOrganizationUuid(DbSession dbSession, OrganizationDto organization) { - return mapper(dbSession).selectOrderedByOrganizationUuid(organization.getUuid()); + public List selectAll(DbSession dbSession) { + return mapper(dbSession).selectAll(); } public List selectBuiltInRuleProfiles(DbSession dbSession) { @@ -142,8 +141,8 @@ public class QualityProfileDao implements Dao { mapper.updateOrgQProfile(OrgQProfileDto.from(profile), now); } - public List selectDefaultProfiles(DbSession dbSession, OrganizationDto organization, Collection languages) { - return executeLargeInputs(languages, partition -> mapper(dbSession).selectDefaultProfiles(organization.getUuid(), partition)); + public List selectDefaultProfiles(DbSession dbSession, Collection languages) { + return executeLargeInputs(languages, partition -> mapper(dbSession).selectDefaultProfiles(partition)); } public List selectDefaultBuiltInProfilesWithoutActiveRules(DbSession dbSession, Set languages) { @@ -151,21 +150,21 @@ public class QualityProfileDao implements Dao { } @CheckForNull - public QProfileDto selectDefaultProfile(DbSession dbSession, OrganizationDto organization, String language) { - return mapper(dbSession).selectDefaultProfile(organization.getUuid(), language); + public QProfileDto selectDefaultProfile(DbSession dbSession, String language) { + return mapper(dbSession).selectDefaultProfile(language); } @CheckForNull public QProfileDto selectAssociatedToProjectAndLanguage(DbSession dbSession, ProjectDto project, String language) { - return mapper(dbSession).selectAssociatedToProjectUuidAndLanguage(project.getOrganizationUuid(), project.getUuid(), language); + return mapper(dbSession).selectAssociatedToProjectUuidAndLanguage(project.getUuid(), language); } public List selectAssociatedToProjectUuidAndLanguages(DbSession dbSession, ProjectDto project, Collection languages) { - return executeLargeInputs(languages, partition -> mapper(dbSession).selectAssociatedToProjectUuidAndLanguages(project.getOrganizationUuid(), project.getUuid(), partition)); + return executeLargeInputs(languages, partition -> mapper(dbSession).selectAssociatedToProjectUuidAndLanguages(project.getUuid(), partition)); } - public List selectByLanguage(DbSession dbSession, OrganizationDto organization, String language) { - return mapper(dbSession).selectByLanguage(organization.getUuid(), language); + public List selectByLanguage(DbSession dbSession, String language) { + return mapper(dbSession).selectByLanguage(language); } public List selectChildren(DbSession dbSession, Collection profiles) { @@ -187,22 +186,22 @@ public class QualityProfileDao implements Dao { } @CheckForNull - public QProfileDto selectByNameAndLanguage(DbSession dbSession, OrganizationDto organization, String name, String language) { - return mapper(dbSession).selectByNameAndLanguage(organization.getUuid(), name, language); + public QProfileDto selectByNameAndLanguage(DbSession dbSession, String name, String language) { + return mapper(dbSession).selectByNameAndLanguage(name, language); } @CheckForNull - public QProfileDto selectByRuleProfileUuid(DbSession dbSession, String organizationUuid, String ruleProfileKee) { - return mapper(dbSession).selectByRuleProfileUuid(organizationUuid, ruleProfileKee); + public QProfileDto selectByRuleProfileUuid(DbSession dbSession, String ruleProfileKee) { + return mapper(dbSession).selectByRuleProfileUuid(ruleProfileKee); } - public List selectByNameAndLanguages(DbSession dbSession, OrganizationDto organization, String name, Collection languages) { - return mapper(dbSession).selectByNameAndLanguages(organization.getUuid(), name, languages); + public List selectByNameAndLanguages(DbSession dbSession, String name, Collection languages) { + return mapper(dbSession).selectByNameAndLanguages(name, languages); } - public Map countProjectsByOrganizationAndProfiles(DbSession dbSession, OrganizationDto organization, List profiles) { + public Map countProjectsByProfiles(DbSession dbSession, List profiles) { List profileUuids = profiles.stream().map(QProfileDto::getKee).collect(MoreCollectors.toList()); - return KeyLongValue.toMap(executeLargeInputs(profileUuids, partition -> mapper(dbSession).countProjectsByOrganizationAndProfiles(organization.getUuid(), partition))); + return KeyLongValue.toMap(executeLargeInputs(profileUuids, partition -> mapper(dbSession).countProjectsByProfiles(partition))); } public void insertProjectProfileAssociation(DbSession dbSession, ProjectDto project, QProfileDto profile) { @@ -222,19 +221,19 @@ public class QualityProfileDao implements Dao { DatabaseUtils.executeLargeUpdates(profileUuids, mapper::deleteProjectAssociationByProfileUuids); } - public List selectSelectedProjects(DbSession dbSession, OrganizationDto organization, QProfileDto profile, @Nullable String query) { + public List selectSelectedProjects(DbSession dbSession, QProfileDto profile, @Nullable String query) { String nameQuery = sqlQueryString(query); - return mapper(dbSession).selectSelectedProjects(organization.getUuid(), profile.getKee(), nameQuery); + return mapper(dbSession).selectSelectedProjects(profile.getKee(), nameQuery); } - public List selectDeselectedProjects(DbSession dbSession, OrganizationDto organization, QProfileDto profile, @Nullable String query) { + public List selectDeselectedProjects(DbSession dbSession, QProfileDto profile, @Nullable String query) { String nameQuery = sqlQueryString(query); - return mapper(dbSession).selectDeselectedProjects(organization.getUuid(), profile.getKee(), nameQuery); + return mapper(dbSession).selectDeselectedProjects(profile.getKee(), nameQuery); } - public List selectProjectAssociations(DbSession dbSession, OrganizationDto organization, QProfileDto profile, @Nullable String query) { + public List selectProjectAssociations(DbSession dbSession, QProfileDto profile, @Nullable String query) { String nameQuery = sqlQueryString(query); - return mapper(dbSession).selectProjectAssociations(organization.getUuid(), profile.getKee(), nameQuery); + return mapper(dbSession).selectProjectAssociations(profile.getKee(), nameQuery); } public Collection selectUuidsOfCustomRulesProfiles(DbSession dbSession, String language, String name) { diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QualityProfileMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QualityProfileMapper.java index 7679ac35c02..4f729c0eef3 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QualityProfileMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/QualityProfileMapper.java @@ -47,41 +47,32 @@ public interface QualityProfileMapper { @CheckForNull RulesProfileDto selectRuleProfile(@Param("uuid") String ruleProfileUuid); - List selectOrderedByOrganizationUuid(@Param("organizationUuid") String organizationUuid); + List selectAll(); @CheckForNull - QProfileDto selectDefaultProfile(@Param("organizationUuid") String organizationUuid, @Param("language") String language); + QProfileDto selectDefaultProfile(@Param("language") String language); List selectDefaultBuiltInProfilesWithoutActiveRules(@Param("languages") List languages); List selectDefaultProfiles( - @Param("organizationUuid") String organizationUuid, @Param("languages") Collection languages); @CheckForNull QProfileDto selectByNameAndLanguage( - @Param("organizationUuid") String organizationUuid, @Param("name") String name, @Param("language") String language); @CheckForNull - QProfileDto selectByRuleProfileUuid( - @Param("organizationUuid") String organizationUuid, - @Param("ruleProfileUuid") String ruleProfileKee); + QProfileDto selectByRuleProfileUuid(@Param("ruleProfileUuid") String ruleProfileKee); - List selectByNameAndLanguages( - @Param("organizationUuid") String organizationUuid, - @Param("name") String name, - @Param("languages") Collection languages); + List selectByNameAndLanguages(@Param("name") String name, @Param("languages") Collection languages); @CheckForNull QProfileDto selectByUuid(String uuid); List selectByUuids(@Param("uuids") Collection uuids); - List selectByLanguage( - @Param("organizationUuid") String organizationUuid, - @Param("language") String language); + List selectByLanguage(@Param("language") String language); // INHERITANCE @@ -89,16 +80,14 @@ public interface QualityProfileMapper { // PROJECTS - List countProjectsByOrganizationAndProfiles(@Param("organizationUuid") String organizationUuid, @Param("profileUuids") List profiles); + List countProjectsByProfiles(@Param("profileUuids") List profiles); @CheckForNull QProfileDto selectAssociatedToProjectUuidAndLanguage( - @Param("organizationUuid") String organizationUuid, @Param("projectUuid") String projectUuid, @Param("language") String language); List selectAssociatedToProjectUuidAndLanguages( - @Param("organizationUuid") String organizationUuid, @Param("projectUuid") String projectUuid, @Param("languages") Collection languages); @@ -117,17 +106,14 @@ public interface QualityProfileMapper { void deleteProjectAssociationByProfileUuids(@Param("profileUuids") Collection profileUuids); List selectSelectedProjects( - @Param("organizationUuid") String organizationUuid, @Param("profileUuid") String profileUuid, @Param("nameQuery") String nameQuery); List selectDeselectedProjects( - @Param("organizationUuid") String organizationUuid, @Param("profileUuid") String profileUuid, @Param("nameQuery") String nameQuery); List selectProjectAssociations( - @Param("organizationUuid") String organizationUuid, @Param("profileUuid") String profileUuid, @Param("nameQuery") String nameQuery); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/SearchGroupsQuery.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/SearchGroupsQuery.java index 19a7ed4923a..48cb218df96 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/SearchGroupsQuery.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/SearchGroupsQuery.java @@ -25,7 +25,6 @@ import java.util.Set; import javax.annotation.CheckForNull; import javax.annotation.Nullable; import org.apache.commons.lang.StringUtils; -import org.sonar.db.organization.OrganizationDto; import static com.google.common.base.MoreObjects.firstNonNull; import static com.google.common.base.Preconditions.checkArgument; @@ -39,7 +38,6 @@ public class SearchGroupsQuery { public static final String OUT = "OUT"; public static final Set AVAILABLE_MEMBERSHIPS = ImmutableSet.of(ANY, IN, OUT); - private final String organizationUuid; private final String qProfileUuid; private final String query; private final String membership; @@ -48,17 +46,12 @@ public class SearchGroupsQuery { final String querySqlLowercase; private SearchGroupsQuery(Builder builder) { - this.organizationUuid = builder.organization.getUuid(); this.qProfileUuid = builder.profile.getKee(); this.query = builder.query; this.membership = builder.membership; this.querySqlLowercase = query == null ? null : buildLikeValue(query, BEFORE_AND_AFTER).toLowerCase(Locale.ENGLISH); } - public String getOrganizationUuid() { - return organizationUuid; - } - public String getQProfileUuid() { return qProfileUuid; } @@ -77,7 +70,6 @@ public class SearchGroupsQuery { } public static class Builder { - private OrganizationDto organization; private QProfileDto profile; private String query; private String membership; @@ -85,11 +77,6 @@ public class SearchGroupsQuery { private Builder() { } - public Builder setOrganization(OrganizationDto organization) { - this.organization = organization; - return this; - } - public Builder setProfile(QProfileDto profile) { this.profile = profile; return this; diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/SearchUsersQuery.java b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/SearchUsersQuery.java index d11535ea5a3..a6e8f36a24c 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/SearchUsersQuery.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/SearchUsersQuery.java @@ -25,7 +25,6 @@ import java.util.Set; import javax.annotation.CheckForNull; import javax.annotation.Nullable; import org.apache.commons.lang.StringUtils; -import org.sonar.db.organization.OrganizationDto; import static com.google.common.base.MoreObjects.firstNonNull; import static com.google.common.base.Preconditions.checkArgument; @@ -40,7 +39,6 @@ public class SearchUsersQuery { public static final String OUT = "OUT"; public static final Set AVAILABLE_MEMBERSHIPS = ImmutableSet.of(ANY, IN, OUT); - private final String organizationUuid; private final String qProfileUuid; private final String query; private final String membership; @@ -50,7 +48,6 @@ public class SearchUsersQuery { final String querySqlLowercase; private SearchUsersQuery(Builder builder) { - this.organizationUuid = builder.organization.getUuid(); this.qProfileUuid = builder.profile.getKee(); this.query = builder.query; this.membership = builder.membership; @@ -58,10 +55,6 @@ public class SearchUsersQuery { this.querySqlLowercase = querySql == null ? null : querySql.toLowerCase(Locale.ENGLISH); } - public String getOrganizationUuid() { - return organizationUuid; - } - public String getQProfileUuid() { return qProfileUuid; } @@ -80,7 +73,6 @@ public class SearchUsersQuery { } public static class Builder { - private OrganizationDto organization; private QProfileDto profile; private String query; private String membership; @@ -88,11 +80,6 @@ public class SearchUsersQuery { private Builder() { } - public Builder setOrganization(OrganizationDto organization) { - this.organization = organization; - return this; - } - public Builder setProfile(QProfileDto profile) { this.profile = profile; return this; @@ -115,7 +102,6 @@ public class SearchUsersQuery { } public SearchUsersQuery build() { - requireNonNull(organization, "Organization cannot be null"); requireNonNull(profile, "Quality profile cant be null."); initMembership(); return new SearchUsersQuery(this); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDao.java index 419f4485eeb..dc449fb528b 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDao.java @@ -24,7 +24,6 @@ import java.util.List; import java.util.Optional; import java.util.Set; import java.util.function.Consumer; -import javax.annotation.Nullable; import org.apache.ibatis.session.ResultHandler; import org.sonar.api.rule.RuleKey; import org.sonar.api.rules.RuleQuery; @@ -32,8 +31,6 @@ import org.sonar.core.util.UuidFactory; import org.sonar.db.Dao; import org.sonar.db.DbSession; import org.sonar.db.RowNotFoundException; -import org.sonar.db.es.RuleExtensionId; -import org.sonar.db.organization.OrganizationDto; import static com.google.common.base.Preconditions.checkNotNull; import static java.util.Collections.emptyList; @@ -50,31 +47,24 @@ public class RuleDao implements Dao { this.uuidFactory = uuidFactory; } - public Optional selectByKey(DbSession session, String organizationUuid, RuleKey key) { - RuleDto res = mapper(session).selectByKey(organizationUuid, key); - ensureOrganizationIsSet(organizationUuid, res); + public Optional selectByKey(DbSession session, RuleKey key) { + RuleDto res = mapper(session).selectByKey(key); return ofNullable(res); } - public RuleDto selectOrFailByKey(DbSession session, RuleKey key) { - RuleDefinitionDto ruleDefinitionDto = selectOrFailDefinitionByKey(session, key); - return new RuleDto(ruleDefinitionDto, new RuleMetadataDto()); - } - public Optional selectDefinitionByKey(DbSession session, RuleKey key) { return ofNullable(mapper(session).selectDefinitionByKey(key)); } - public Optional selectMetadataByKey(DbSession session, RuleKey key, String organizationUuid) { - return ofNullable(mapper(session).selectMetadataByKey(key, organizationUuid)); + public Optional selectMetadataByKey(DbSession session, RuleKey key) { + return ofNullable(mapper(session).selectMetadataByKey(key)); } - public RuleDto selectOrFailByKey(DbSession session, OrganizationDto organization, RuleKey key) { - RuleDto rule = mapper(session).selectByKey(organization.getUuid(), key); + public RuleDto selectOrFailByKey(DbSession session, RuleKey key) { + RuleDto rule = mapper(session).selectByKey(key); if (rule == null) { throw new RowNotFoundException(String.format("Rule with key '%s' does not exist", key)); } - ensureOrganizationIsSet(organization.getUuid(), rule); return rule; } @@ -86,9 +76,8 @@ public class RuleDao implements Dao { return rule; } - public Optional selectByUuid(String uuid, String organizationUuid, DbSession session) { - RuleDto res = mapper(session).selectByUuid(organizationUuid, uuid); - ensureOrganizationIsSet(organizationUuid, res); + public Optional selectByUuid(String uuid, DbSession session) { + RuleDto res = mapper(session).selectByUuid(uuid); return ofNullable(res); } @@ -96,13 +85,11 @@ public class RuleDao implements Dao { return ofNullable(mapper(session).selectDefinitionByUuid(uuid)); } - public List selectByUuids(DbSession session, String organizationUuid, List uuids) { + public List selectByUuids(DbSession session, List uuids) { if (uuids.isEmpty()) { return emptyList(); } - return ensureOrganizationIsSet( - organizationUuid, - executeLargeInputs(uuids, chunk -> mapper(session).selectByUuids(organizationUuid, chunk))); + return executeLargeInputs(uuids, chunk -> mapper(session).selectByUuids(chunk)); } public List selectDefinitionByUuids(DbSession session, Collection uuids) { @@ -112,20 +99,11 @@ public class RuleDao implements Dao { return executeLargeInputs(uuids, mapper(session)::selectDefinitionByUuids); } - public List selectByKeys(DbSession session, OrganizationDto organization, Collection keys) { - if (keys.isEmpty()) { - return emptyList(); - } - return ensureOrganizationIsSet(organization.getUuid(), - executeLargeInputs(keys, chunk -> mapper(session).selectByKeys(organization.getUuid(), chunk))); - } - - public List selectByKeys(DbSession session, String organizationUuid, Collection keys) { + public List selectByKeys(DbSession session, Collection keys) { if (keys.isEmpty()) { return emptyList(); } - return ensureOrganizationIsSet(organizationUuid, - executeLargeInputs(keys, chunk -> mapper(session).selectByKeys(organizationUuid, chunk))); + return executeLargeInputs(keys, chunk -> mapper(session).selectByKeys(chunk)); } public List selectDefinitionByKeys(DbSession session, Collection keys) { @@ -139,32 +117,20 @@ public class RuleDao implements Dao { mapper(session).selectEnabled(resultHandler); } - public List selectAll(DbSession session, String organizationUuid) { - return ensureOrganizationIsSet(organizationUuid, mapper(session).selectAll(organizationUuid)); + public List selectAll(DbSession session) { + return mapper(session).selectAll(); } public List selectAllDefinitions(DbSession session) { return mapper(session).selectAllDefinitions(); } - public List selectByTypeAndLanguages(DbSession session, String organizationUuid, List types, List languages) { - return ensureOrganizationIsSet(organizationUuid, - executeLargeInputs(languages, chunk -> mapper(session).selectByTypeAndLanguages(organizationUuid, types, chunk))); + public List selectByTypeAndLanguages(DbSession session, List types, List languages) { + return executeLargeInputs(languages, chunk -> mapper(session).selectByTypeAndLanguages(types, chunk)); } - public List selectByQuery(DbSession session, String organizationUuid, RuleQuery ruleQuery) { - return ensureOrganizationIsSet(organizationUuid, mapper(session).selectByQuery(organizationUuid, ruleQuery)); - } - - private static void ensureOrganizationIsSet(String organizationUuid, @Nullable RuleDto res) { - if (res != null) { - res.setOrganizationUuid(organizationUuid); - } - } - - private static List ensureOrganizationIsSet(String organizationUuid, List res) { - res.forEach(dto -> ensureOrganizationIsSet(organizationUuid, dto)); - return res; + public List selectByQuery(DbSession session, RuleQuery ruleQuery) { + return mapper(session).selectByQuery(ruleQuery); } public void insert(DbSession session, RuleDefinitionDto dto) { @@ -189,7 +155,7 @@ public class RuleDao implements Dao { } } - public void scrollIndexingRuleExtensionsByIds(DbSession dbSession, Collection ruleExtensionIds, Consumer consumer) { + public void scrollIndexingRuleExtensionsByIds(DbSession dbSession, Collection ruleExtensionIds, Consumer consumer) { RuleMapper mapper = mapper(dbSession); executeLargeInputsWithoutOutput(ruleExtensionIds, @@ -198,13 +164,6 @@ public class RuleDao implements Dao { .forEach(consumer)); } - public void scrollIndexingRuleExtensions(DbSession dbSession, Consumer consumer) { - mapper(dbSession).scrollIndexingRuleExtensions(context -> { - RuleExtensionForIndexingDto dto = context.getResultObject(); - consumer.accept(dto); - }); - } - public void scrollIndexingRulesByKeys(DbSession dbSession, Collection ruleUuids, Consumer consumer) { RuleMapper mapper = mapper(dbSession); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDefinitionDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDefinitionDto.java index ad96e58961e..9ca00aed2a0 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDefinitionDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDefinitionDto.java @@ -104,12 +104,12 @@ public class RuleDefinitionDto { return deserializeStringSet(securityStandards); } - private static Set deserializeStringSet(@Nullable String securityStandards) { - if (securityStandards == null || securityStandards.isEmpty()) { + private static Set deserializeStringSet(@Nullable String str) { + if (str == null || str.isEmpty()) { return ImmutableSet.of(); } - return ImmutableSet.copyOf(SPLITTER.split(securityStandards)); + return ImmutableSet.copyOf(SPLITTER.split(str)); } private static String serializeStringSet(@Nullable Set strings) { diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDto.java index cae2d18cade..e7c6f001880 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDto.java @@ -408,15 +408,6 @@ public class RuleDto { } } - public String getOrganizationUuid() { - return metadata.getOrganizationUuid(); - } - - public RuleDto setOrganizationUuid(String organizationUuid) { - metadata.setOrganizationUuid(organizationUuid); - return this; - } - @CheckForNull public String getNoteData() { return metadata.getNoteData(); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleExtensionForIndexingDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleExtensionForIndexingDto.java index bc82e93c302..94cd764fbe0 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleExtensionForIndexingDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleExtensionForIndexingDto.java @@ -31,7 +31,6 @@ public class RuleExtensionForIndexingDto { private String ruleUuid; private String pluginName; private String pluginRuleKey; - private String organizationUuid; private String tags; public String getPluginName() { @@ -60,15 +59,6 @@ public class RuleExtensionForIndexingDto { this.ruleUuid = ruleUuid; } - public String getOrganizationUuid() { - return organizationUuid; - } - - public RuleExtensionForIndexingDto setOrganizationUuid(String organizationUuid) { - this.organizationUuid = organizationUuid; - return this; - } - public String getTags() { return tags; } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleForIndexingDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleForIndexingDto.java index 046a4e5c333..9d71294e0d1 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleForIndexingDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleForIndexingDto.java @@ -37,6 +37,7 @@ public class RuleForIndexingDto { private RuleStatus status; private boolean isTemplate; private String systemTags; + private String tags; private String securityStandards; private String templateRuleKey; private String templateRepository; @@ -91,6 +92,10 @@ public class RuleForIndexingDto { return RuleDefinitionDto.deserializeTagsString(systemTags); } + public Set getTags() { + return RuleDefinitionDto.deserializeTagsString(tags); + } + public Set getSecurityStandards() { return RuleDefinitionDto.deserializeSecurityStandardsString(securityStandards); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleMapper.java index debac92c73d..8dae814bd25 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleMapper.java @@ -25,31 +25,30 @@ import org.apache.ibatis.annotations.Param; import org.apache.ibatis.session.ResultHandler; import org.sonar.api.rule.RuleKey; import org.sonar.api.rules.RuleQuery; -import org.sonar.db.es.RuleExtensionId; public interface RuleMapper { - List selectAll(@Param("organizationUuid") String organizationUuid); + List selectAll(); List selectAllDefinitions(); void selectEnabled(ResultHandler resultHandler); - RuleDto selectByUuid(@Param("organizationUuid") String organizationUuid, @Param("uuid") String uuid); + RuleDto selectByUuid(@Param("uuid") String uuid); RuleDefinitionDto selectDefinitionByUuid(String uuid); - List selectByUuids(@Param("organizationUuid") String organizationUuid, @Param("uuids") List uuids); + List selectByUuids(@Param("uuids") List uuids); List selectDefinitionByUuids(@Param("uuids") List uuids); - RuleDto selectByKey(@Param("organizationUuid") String organizationUuid, @Param("ruleKey") RuleKey ruleKey); + RuleDto selectByKey(@Param("ruleKey") RuleKey ruleKey); RuleDefinitionDto selectDefinitionByKey(RuleKey ruleKey); - RuleMetadataDto selectMetadataByKey(@Param("ruleKey") RuleKey ruleKey, @Param("organizationUuid") String organizationUuid); + RuleMetadataDto selectMetadataByKey(@Param("ruleKey") RuleKey ruleKey); - List selectByKeys(@Param("organizationUuid") String organizationUuid, @Param("ruleKeys") List keys); + List selectByKeys(@Param("ruleKeys") List keys); List selectDefinitionByKeys(@Param("ruleKeys") List keys); @@ -57,13 +56,11 @@ public interface RuleMapper { List selectIndexingRulesByUuids(@Param("ruleUuids") List ruleUuids); - void scrollIndexingRuleExtensions(ResultHandler handler); + List selectIndexingRuleExtensionsByIds(@Param("ruleExtensionIds") List ruleExtensionIds); - List selectIndexingRuleExtensionsByIds(@Param("ruleExtensionIds") List ruleExtensionIds); + List selectByQuery(@Param("query") RuleQuery ruleQuery); - List selectByQuery(@Param("organizationUuid") String organizationUuid, @Param("query") RuleQuery ruleQuery); - - List selectByTypeAndLanguages(@Param("organizationUuid") String organizationUuid, @Param("types") List types, @Param("languages") List languages); + List selectByTypeAndLanguages(@Param("types") List types, @Param("languages") List languages); void insertDefinition(RuleDefinitionDto ruleDefinitionDto); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleMetadataDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleMetadataDto.java index 168305cc358..dc617049225 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleMetadataDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleMetadataDto.java @@ -32,7 +32,6 @@ import static com.google.common.base.Preconditions.checkArgument; public class RuleMetadataDto { private String ruleUuid; - private String organizationUuid; private String noteData; private String noteUserUuid; private Long noteCreatedAt; @@ -81,15 +80,6 @@ public class RuleMetadataDto { return this; } - public String getOrganizationUuid() { - return organizationUuid; - } - - public RuleMetadataDto setOrganizationUuid(String organizationUuid) { - this.organizationUuid = organizationUuid; - return this; - } - @CheckForNull public String getNoteData() { return noteData; @@ -250,7 +240,6 @@ public class RuleMetadataDto { public String toString() { return "RuleMetadataDto{" + "ruleUuid=" + ruleUuid + - ", organizationUuid='" + organizationUuid + '\'' + ", noteData='" + noteData + '\'' + ", noteUserUuid='" + noteUserUuid + '\'' + ", noteCreatedAt=" + noteCreatedAt + diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/ActiveRuleMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/ActiveRuleMapper.xml index 3a88ac5f287..8872334858d 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/ActiveRuleMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/ActiveRuleMapper.xml @@ -28,7 +28,6 @@ rp.uuid as "ruleProfileUuid", a.created_at as "createdAt", a.updated_at as "updatedAt", - oqp.organization_uuid as "organizationUuid", oqp.uuid as "orgProfileUuid" @@ -157,7 +156,7 @@ and rp.uuid in #{ruleProfileUuid, jdbcType=VARCHAR} - select from active_rules a @@ -166,10 +165,9 @@ inner join rules r on r.uuid = a.rule_uuid where a.rule_uuid = #{ruleUuid, jdbcType=VARCHAR} - and oqp.organization_uuid = #{organizationUuid, jdbcType=VARCHAR} - select from active_rules a @@ -190,7 +188,6 @@ #{ruleUuid, jdbcType=VARCHAR} - and oqp.organization_uuid = #{organizationUuid, jdbcType=VARCHAR} @@ -280,8 +277,7 @@ inner join org_qprofiles oqp on oqp.rules_profile_uuid = rp.uuid inner join rules r on r.uuid = ar.rule_uuid - oqp.organization_uuid = #{organizationUuid, jdbcType=VARCHAR} - and + oqp.uuid = #{profileUuid, jdbcType=VARCHAR} diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/DefaultQProfileMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/DefaultQProfileMapper.xml index 81c5b96fef7..93063cbe1a9 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/DefaultQProfileMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/DefaultQProfileMapper.xml @@ -6,13 +6,11 @@ insert into default_qprofiles ( - organization_uuid, language, qprofile_uuid, created_at, updated_at ) values ( - #{dto.organizationUuid, jdbcType=VARCHAR}, #{dto.language, jdbcType=VARCHAR}, #{dto.qProfileUuid, jdbcType=VARCHAR}, #{now, jdbcType=BIGINT}, @@ -26,8 +24,7 @@ qprofile_uuid = #{dto.qProfileUuid, jdbcType=VARCHAR}, updated_at = #{now, jdbcType=BIGINT} where - organization_uuid = #{dto.organizationUuid, jdbcType=VARCHAR} - and language = #{dto.language, jdbcType=VARCHAR} + language = #{dto.language, jdbcType=VARCHAR} @@ -42,17 +39,14 @@ select qprofile_uuid from default_qprofiles where - organization_uuid = #{organizationUuid, jdbcType=VARCHAR} - and qprofile_uuid in + qprofile_uuid in #{qProfileUuid, jdbcType=VARCHAR} - + select qprofile_uuid from default_qprofiles where language = #{language, jdbcType=VARCHAR} diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QProfileEditGroupsMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QProfileEditGroupsMapper.xml index ccd81869b94..7539227c211 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QProfileEditGroupsMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QProfileEditGroupsMapper.xml @@ -60,7 +60,6 @@ FROM groups g LEFT JOIN qprofile_edit_groups qeg ON qeg.group_uuid=g.uuid AND qeg.qprofile_uuid=#{query.qProfileUuid, jdbcType=VARCHAR} - AND g.organization_uuid=#{query.organizationUuid,jdbcType=VARCHAR} AND qeg.uuid IS NOT NULL @@ -75,10 +74,9 @@ - select distinct qeg.qprofile_uuid as qProfileUuid from qprofile_edit_groups qeg - inner join org_qprofiles oq on qeg.qprofile_uuid=oq.uuid and oq.organization_uuid=#{organizationUuid, jdbcType=VARCHAR} qeg.group_uuid in #{groupUuid, jdbcType=VARCHAR} diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QProfileEditUsersMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QProfileEditUsersMapper.xml index ae20212efcd..67daf154734 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QProfileEditUsersMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QProfileEditUsersMapper.xml @@ -57,7 +57,6 @@ FROM users u LEFT JOIN qprofile_edit_users qeu ON qeu.user_uuid=u.uuid AND qeu.qprofile_uuid=#{query.qProfileUuid, jdbcType=VARCHAR} - INNER JOIN organization_members om ON u.uuid=om.user_uuid AND om.organization_uuid=#{query.organizationUuid, jdbcType=VARCHAR} @@ -76,10 +75,9 @@ - SELECT qeu.qprofile_uuid as qProfileUuid FROM qprofile_edit_users qeu - INNER JOIN org_qprofiles oq ON qeu.qprofile_uuid=oq.uuid AND oq.organization_uuid=#{organizationUuid, jdbcType=VARCHAR} qeu.user_uuid=#{userUuid, jdbcType=VARCHAR} @@ -115,17 +113,5 @@ where user_uuid = #{userUuid, jdbcType=VARCHAR} - - delete from qprofile_edit_users - - user_uuid=#{userUuid, jdbcType=VARCHAR} - and qprofile_uuid in ( - select oq.uuid - from org_qprofiles oq - where oq.organization_uuid=#{organizationUuid, jdbcType=VARCHAR} - ) - - - diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QualityProfileMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QualityProfileMapper.xml index 9856551d7ba..31c61544ed1 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QualityProfileMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/qualityprofile/QualityProfileMapper.xml @@ -5,7 +5,6 @@ oqp.uuid as kee, - oqp.organization_uuid as organizationUuid, oqp.parent_uuid as parentKee, oqp.last_used as lastUsed, oqp.user_updated_at as userUpdatedAt, @@ -47,7 +46,6 @@ insert into org_qprofiles ( uuid, - organization_uuid, rules_profile_uuid, parent_uuid, last_used, @@ -56,7 +54,6 @@ updated_at ) values ( #{dto.uuid, jdbcType=VARCHAR}, - #{dto.organizationUuid, jdbcType=VARCHAR}, #{dto.rulesProfileUuid, jdbcType=VARCHAR}, #{dto.parentUuid, jdbcType=VARCHAR}, #{dto.lastUsed, jdbcType=BIGINT}, @@ -123,13 +120,11 @@ where rp.uuid = #{uuid, jdbcType=VARCHAR} - select from org_qprofiles oqp inner join rules_profiles rp on oqp.rules_profile_uuid = rp.uuid - where - oqp.organization_uuid = #{organizationUuid,jdbcType=VARCHAR} order by rp.name, rp.language @@ -141,9 +136,7 @@ inner join default_qprofiles dp on dp.qprofile_uuid = oqp.uuid where dp.language = #{language, jdbcType=VARCHAR} - and dp.organization_uuid = #{organizationUuid, jdbcType=VARCHAR} and rp.language = dp.language - and oqp.organization_uuid = dp.organization_uuid @@ -257,15 +244,13 @@ order by rp.name - select pqp.profile_key as "key", count(pj.uuid) as "value" from components pj inner join project_qprofiles pqp on pqp.project_uuid = pj.uuid inner join org_qprofiles oqp on oqp.uuid = pqp.profile_key where pj.enabled = ${_true} - and pj.organization_uuid = #{organizationUuid, jdbcType=VARCHAR} - and oqp.organization_uuid = pj.organization_uuid and oqp.uuid = #{profileUuid, jdbcType=VARCHAR} @@ -281,7 +266,6 @@ where rp.language = #{language, jdbcType=VARCHAR} and pqp.project_uuid = #{projectUuid, jdbcType=VARCHAR} - and oqp.organization_uuid = #{organizationUuid, jdbcType=VARCHAR} @@ -345,7 +328,6 @@ and pj.qualifier = 'TRK' and pj.main_branch_project_uuid is null and upper(pj.name) like #{nameQuery, jdbcType=VARCHAR} - and pj.organization_uuid = #{organizationUuid, jdbcType=VARCHAR} order by pj.name ASC @@ -357,7 +339,6 @@ WHERE pj.scope='PRJ' AND pj.qualifier='TRK' AND pj.main_branch_project_uuid is null AND UPPER(pj.name) LIKE #{nameQuery, jdbcType=VARCHAR} AND pp.profile_key IS NULL - AND pj.organization_uuid = #{organizationUuid, jdbcType=VARCHAR} ORDER BY pj.name ASC @@ -368,14 +349,12 @@ AND pp.profile_key = #{profileUuid, jdbcType=VARCHAR} WHERE pj.scope='PRJ' AND pj.qualifier='TRK' AND pj.main_branch_project_uuid is null AND UPPER(pj.name) LIKE #{nameQuery, jdbcType=VARCHAR} - AND pj.organization_uuid = #{organizationUuid, jdbcType=VARCHAR} ORDER BY pj.name ASC @@ -152,21 +151,15 @@ and - ( r.uuid = #{ruleExtId.ruleUuid, jdbcType=VARCHAR} and - rm.organization_uuid = #{ruleExtId.organizationUuid, jdbcType=VARCHAR} ) + ( r.uuid = #{ruleExtId, jdbcType=VARCHAR} ) - - select r.uuid as "ruleUuid", r.plugin_name as "pluginName", r.plugin_rule_key as "pluginRuleKey", - rm.organization_uuid as "organizationUuid", rm.tags as "tags" from rules r inner join rules_metadata rm on rm.rule_uuid = r.uuid @@ -180,7 +173,6 @@ r.uuid as "ruleUuid", r.plugin_name as "pluginName", r.plugin_rule_key as "pluginRuleKey", - rm.organization_uuid as "organizationUuid", rm.tags as "tags" from rules r inner join rules_metadata rm on rm.rule_uuid = r.uuid @@ -191,7 +183,6 @@ @@ -403,13 +395,11 @@ rules_metadata rm where rm.rule_uuid=#{ruleUuid,jdbcType=VARCHAR} - and rm.organization_uuid=#{organizationUuid,jdbcType=VARCHAR} insert into rules_metadata ( rule_uuid, - organization_uuid, note_data, note_user_uuid, note_created_at, @@ -427,7 +417,6 @@ ) values ( #{ruleUuid,jdbcType=VARCHAR}, - #{organizationUuid,jdbcType=VARCHAR}, #{noteData,jdbcType=CLOB}, #{noteUserUuid,jdbcType=VARCHAR}, #{noteCreatedAt,jdbcType=BIGINT}, @@ -462,7 +451,6 @@ updated_at=#{updatedAt,jdbcType=BIGINT} where rule_uuid=#{ruleUuid,jdbcType=VARCHAR} - and organization_uuid=#{organizationUuid,jdbcType=VARCHAR} diff --git a/server/sonar-db-dao/src/schema/schema-sq.ddl b/server/sonar-db-dao/src/schema/schema-sq.ddl index ae5bb2b7ca8..6f54915f01d 100644 --- a/server/sonar-db-dao/src/schema/schema-sq.ddl +++ b/server/sonar-db-dao/src/schema/schema-sq.ddl @@ -219,13 +219,12 @@ CREATE INDEX "PROJECTS_ROOT_UUID" ON "COMPONENTS"("ROOT_UUID"); CREATE INDEX "PROJECTS_UUID" ON "COMPONENTS"("UUID"); CREATE TABLE "DEFAULT_QPROFILES"( - "ORGANIZATION_UUID" VARCHAR(40) NOT NULL, "LANGUAGE" VARCHAR(20) NOT NULL, "QPROFILE_UUID" VARCHAR(255) NOT NULL, "CREATED_AT" BIGINT NOT NULL, "UPDATED_AT" BIGINT NOT NULL ); -ALTER TABLE "DEFAULT_QPROFILES" ADD CONSTRAINT "PK_DEFAULT_QPROFILES" PRIMARY KEY("ORGANIZATION_UUID", "LANGUAGE"); +ALTER TABLE "DEFAULT_QPROFILES" ADD CONSTRAINT "PK_DEFAULT_QPROFILES" PRIMARY KEY("LANGUAGE"); CREATE UNIQUE INDEX "UNIQ_DEFAULT_QPROFILES_UUID" ON "DEFAULT_QPROFILES"("QPROFILE_UUID"); CREATE TABLE "DEPRECATED_RULE_KEYS"( @@ -493,7 +492,6 @@ ALTER TABLE "NOTIFICATIONS" ADD CONSTRAINT "PK_NOTIFICATIONS" PRIMARY KEY("UUID" CREATE TABLE "ORG_QPROFILES"( "UUID" VARCHAR(255) NOT NULL, - "ORGANIZATION_UUID" VARCHAR(40) NOT NULL, "RULES_PROFILE_UUID" VARCHAR(255) NOT NULL, "PARENT_UUID" VARCHAR(255), "LAST_USED" BIGINT, @@ -502,7 +500,6 @@ CREATE TABLE "ORG_QPROFILES"( "UPDATED_AT" BIGINT NOT NULL ); ALTER TABLE "ORG_QPROFILES" ADD CONSTRAINT "PK_ORG_QPROFILES" PRIMARY KEY("UUID"); -CREATE INDEX "QPROFILES_ORG_UUID" ON "ORG_QPROFILES"("ORGANIZATION_UUID"); CREATE INDEX "QPROFILES_RP_UUID" ON "ORG_QPROFILES"("RULES_PROFILE_UUID"); CREATE INDEX "ORG_QPROFILES_PARENT_UUID" ON "ORG_QPROFILES"("PARENT_UUID"); @@ -816,7 +813,6 @@ ALTER TABLE "RULES" ADD CONSTRAINT "PK_RULES" PRIMARY KEY("UUID"); CREATE UNIQUE INDEX "RULES_REPO_KEY" ON "RULES"("PLUGIN_RULE_KEY", "PLUGIN_NAME"); CREATE TABLE "RULES_METADATA"( - "ORGANIZATION_UUID" VARCHAR(40) NOT NULL, "NOTE_DATA" CLOB, "NOTE_USER_UUID" VARCHAR(255), "NOTE_CREATED_AT" BIGINT, @@ -833,7 +829,7 @@ CREATE TABLE "RULES_METADATA"( "UPDATED_AT" BIGINT NOT NULL, "RULE_UUID" VARCHAR(40) NOT NULL ); -ALTER TABLE "RULES_METADATA" ADD CONSTRAINT "PK_RULES_METADATA" PRIMARY KEY("RULE_UUID", "ORGANIZATION_UUID"); +ALTER TABLE "RULES_METADATA" ADD CONSTRAINT "PK_RULES_METADATA" PRIMARY KEY("RULE_UUID"); CREATE TABLE "RULES_PARAMETERS"( "NAME" VARCHAR(128) NOT NULL, diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/permission/AuthorizationDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/permission/AuthorizationDaoTest.java index db5e82f133c..a36bfefc37c 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/permission/AuthorizationDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/permission/AuthorizationDaoTest.java @@ -245,16 +245,10 @@ public class AuthorizationDaoTest { db.users().insertPermissionOnUser(organization, user3, ADMINISTER); db.users().insertPermissionOnAnyone(organization, ADMINISTER); - // other organizations are ignored - OrganizationDto org2 = db.organizations().insert(); - db.users().insertPermissionOnUser(org2, user1, ADMINISTER); - assertThat(underTest.selectUserUuidsWithGlobalPermission(db.getSession(), organization.getUuid(), ADMINISTER.getKey())) .containsExactlyInAnyOrder(user1.getUuid(), user2.getUuid(), user3.getUuid()); assertThat(underTest.selectUserUuidsWithGlobalPermission(db.getSession(), organization.getUuid(), PROVISION_PROJECTS.getKey())) .containsExactlyInAnyOrder(user1.getUuid(), user2.getUuid()); - assertThat(underTest.selectUserUuidsWithGlobalPermission(db.getSession(), org2.getUuid(), ADMINISTER.getKey())) - .containsExactlyInAnyOrder(user1.getUuid()); } @Test diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/ActiveRuleDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/ActiveRuleDaoTest.java index 0063c05752a..20ce6764f80 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/ActiveRuleDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/ActiveRuleDaoTest.java @@ -35,7 +35,6 @@ import org.sonar.api.server.rule.RuleParamType; import org.sonar.api.utils.System2; import org.sonar.db.DbSession; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleParamDto; @@ -62,7 +61,6 @@ public class ActiveRuleDaoTest { private static final long NOW = 10_000_000L; - private OrganizationDto organization; private QProfileDto profile1; private QProfileDto profile2; private RuleDefinitionDto rule1; @@ -83,9 +81,8 @@ public class ActiveRuleDaoTest { @Before public void setUp() { - organization = db.organizations().insert(); - profile1 = db.qualityProfiles().insert(organization); - profile2 = db.qualityProfiles().insert(organization); + profile1 = db.qualityProfiles().insert(); + profile2 = db.qualityProfiles().insert(); rule1 = db.rules().insert(); rule2 = db.rules().insert(); rule3 = db.rules().insert(); @@ -117,9 +114,9 @@ public class ActiveRuleDaoTest { underTest.insert(dbSession, activeRule2); dbSession.commit(); - assertThat(underTest.selectByRuleUuid(dbSession, organization, rule1.getUuid())).extracting("key") + assertThat(underTest.selectByOrgRuleUuid(dbSession, rule1.getUuid())).extracting("key") .containsOnly(activeRule1.getKey(), activeRule2.getKey()); - assertThat(underTest.selectByRuleUuid(dbSession, organization, rule3.getUuid())).isEmpty(); + assertThat(underTest.selectByOrgRuleUuid(dbSession, rule3.getUuid())).isEmpty(); } @Test @@ -132,9 +129,9 @@ public class ActiveRuleDaoTest { underTest.insert(dbSession, activeRule3); dbSession.commit(); - assertThat(underTest.selectByRuleUuids(dbSession, organization, singletonList(rule1.getUuid()))) + assertThat(underTest.selectByRuleUuids(dbSession, singletonList(rule1.getUuid()))) .extracting("key").containsOnly(activeRule1.getKey(), activeRule3.getKey()); - assertThat(underTest.selectByRuleUuids(dbSession, organization, newArrayList(rule1.getUuid(), rule2.getUuid()))) + assertThat(underTest.selectByRuleUuids(dbSession, newArrayList(rule1.getUuid(), rule2.getUuid()))) .extracting("key").containsOnly(activeRule1.getKey(), activeRule2.getKey(), activeRule3.getKey()); } @@ -148,8 +145,8 @@ public class ActiveRuleDaoTest { List result = underTest.selectByProfile(dbSession, profile1); assertThat(result) .hasSize(2) - .extracting(OrgActiveRuleDto::getOrganizationUuid, OrgActiveRuleDto::getOrgProfileUuid, OrgActiveRuleDto::getProfileUuid) - .containsOnly(tuple(organization.getUuid(), profile1.getKee(), profile1.getRulesProfileUuid())); + .extracting(OrgActiveRuleDto::getOrgProfileUuid, OrgActiveRuleDto::getProfileUuid) + .containsOnly(tuple(profile1.getKee(), profile1.getRulesProfileUuid())); assertThat(underTest.selectByProfile(dbSession, profile2)).isEmpty(); } @@ -170,8 +167,8 @@ public class ActiveRuleDaoTest { underTest.insert(dbSession, activeRule1); assertThat(underTest.selectByTypeAndProfileUuids(dbSession, singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList(profile1.getKee()))) - .extracting(OrgActiveRuleDto::getOrgProfileUuid, OrgActiveRuleDto::getOrganizationUuid, OrgActiveRuleDto::getRuleUuid) - .contains(tuple(profile1.getKee(), profile1.getOrganizationUuid(), rule1.getUuid())); + .extracting(OrgActiveRuleDto::getOrgProfileUuid, OrgActiveRuleDto::getRuleUuid) + .contains(tuple(profile1.getKee(), rule1.getUuid())); } @Test @@ -196,8 +193,8 @@ public class ActiveRuleDaoTest { underTest.selectByTypeAndProfileUuids(dbSession, singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList(profile1.getKee()))) - .extracting(OrgActiveRuleDto::getOrgProfileUuid, OrgActiveRuleDto::getOrganizationUuid, OrgActiveRuleDto::getRuleUuid) - .contains(tuple(profile1.getKee(), profile1.getOrganizationUuid(), rule1.getUuid())); + .extracting(OrgActiveRuleDto::getOrgProfileUuid, OrgActiveRuleDto::getRuleUuid) + .contains(tuple(profile1.getKee(), rule1.getUuid())); assertThat( underTest.selectByTypeAndProfileUuids(dbSession, @@ -579,7 +576,7 @@ public class ActiveRuleDaoTest { List activeRuleUuids = asList(activeRule1.getUuid(), activeRule2.getUuid()); assertThat(underTest.selectParamsByActiveRuleUuids(dbSession, activeRuleUuids)).hasSize(2); - underTest.deleteParamsByRuleParamOfAllOrganizations(dbSession, rule1Param1); + underTest.deleteParamsByRuleParam(dbSession, rule1Param1); assertThat(underTest.selectParamsByActiveRuleUuids(dbSession, activeRuleUuids)).isEmpty(); } @@ -606,9 +603,9 @@ public class ActiveRuleDaoTest { db.qualityProfiles().activateRule(profile1, rule2); db.qualityProfiles().activateRule(profile1, removedRule); db.qualityProfiles().activateRule(profile2, rule1); - QProfileDto profileWithoutActiveRule = db.qualityProfiles().insert(organization); + QProfileDto profileWithoutActiveRule = db.qualityProfiles().insert(); - ActiveRuleCountQuery.Builder builder = ActiveRuleCountQuery.builder().setOrganization(organization); + ActiveRuleCountQuery.Builder builder = ActiveRuleCountQuery.builder(); assertThat(underTest.countActiveRulesByQuery(dbSession, builder.setProfiles(asList(profile1, profile2)).build())) .containsOnly(entry(profile1.getKee(), 2L), entry(profile2.getKee(), 1L)); assertThat(underTest.countActiveRulesByQuery(dbSession, builder.setProfiles(singletonList(profileWithoutActiveRule)).build())).isEmpty(); @@ -628,7 +625,7 @@ public class ActiveRuleDaoTest { db.qualityProfiles().activateRule(profile2, rule1); db.qualityProfiles().activateRule(profile2, betaRule); - ActiveRuleCountQuery.Builder builder = ActiveRuleCountQuery.builder().setOrganization(organization); + ActiveRuleCountQuery.Builder builder = ActiveRuleCountQuery.builder(); assertThat(underTest.countActiveRulesByQuery(dbSession, builder.setProfiles(asList(profile1, profile2)).setRuleStatus(BETA).build())) .containsOnly(entry(profile1.getKee(), 1L), entry(profile2.getKee(), 1L)); assertThat(underTest.countActiveRulesByQuery(dbSession, builder.setProfiles(singletonList(profile1)).setRuleStatus(READY).build())) @@ -645,25 +642,13 @@ public class ActiveRuleDaoTest { db.qualityProfiles().activateRule(profile2, rule1, ar -> ar.setInheritance(OVERRIDES)); db.qualityProfiles().activateRule(profile2, rule2, ar -> ar.setInheritance(INHERITED)); - ActiveRuleCountQuery.Builder builder = ActiveRuleCountQuery.builder().setOrganization(organization); + ActiveRuleCountQuery.Builder builder = ActiveRuleCountQuery.builder(); assertThat(underTest.countActiveRulesByQuery(dbSession, builder.setProfiles(asList(profile1, profile2)).setInheritance(OVERRIDES).build())) .containsOnly(entry(profile1.getKee(), 1L), entry(profile2.getKee(), 1L)); assertThat(underTest.countActiveRulesByQuery(dbSession, builder.setProfiles(asList(profile1, profile2)).setInheritance(INHERITED).build())) .containsOnly(entry(profile2.getKee(), 1L)); } - @Test - public void countActiveRulesByQuery_filter_by_organization() { - db.qualityProfiles().activateRule(profile1, rule1); - OrganizationDto anotherOrganization = db.organizations().insert(); - QProfileDto profileOnAnotherOrganization = db.qualityProfiles().insert(anotherOrganization); - db.qualityProfiles().activateRule(profileOnAnotherOrganization, rule1); - - assertThat(underTest.countActiveRulesByQuery(dbSession, - ActiveRuleCountQuery.builder().setOrganization(organization).setProfiles(asList(profile1, profileOnAnotherOrganization)).build())) - .containsOnly(entry(profile1.getKee(), 1L)); - } - @Test public void scrollAllForIndexing_empty_table() { Accumulator accumulator = new Accumulator(); diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/DefaultQProfileDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/DefaultQProfileDaoTest.java index b9b57430a6e..4d25b3b8c0c 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/DefaultQProfileDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/DefaultQProfileDaoTest.java @@ -27,7 +27,6 @@ import org.sonar.api.utils.System2; import org.sonar.core.util.Uuids; import org.sonar.db.DbSession; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; @@ -35,31 +34,28 @@ import static org.assertj.core.api.Assertions.assertThat; public class DefaultQProfileDaoTest { @Rule - public DbTester dbTester = DbTester.create(System2.INSTANCE).setDisableDefaultOrganization(true); + public DbTester dbTester = DbTester.create(System2.INSTANCE); private DbSession dbSession = dbTester.getSession(); private DefaultQProfileDao underTest = dbTester.getDbClient().defaultQProfileDao(); @Test public void insertOrUpdate_inserts_row_when_does_not_exist() { - OrganizationDto org = dbTester.organizations().insert(); - QProfileDto profile = dbTester.qualityProfiles().insert(org); + QProfileDto profile = dbTester.qualityProfiles().insert(); DefaultQProfileDto dto = DefaultQProfileDto.from(profile); underTest.insertOrUpdate(dbSession, dto); dbSession.commit(); assertThat(countRows()).isEqualTo(1); - assertThatIsDefault(org, profile); + assertThatIsDefault(profile); } @Test public void insertOrUpdate_updates_row_when_exists() { - OrganizationDto org = dbTester.organizations().insert(); String previousQProfileUuid = Uuids.create(); DefaultQProfileDto dto = new DefaultQProfileDto() .setLanguage("java") - .setOrganizationUuid(org.getUuid()) .setQProfileUuid(previousQProfileUuid); underTest.insertOrUpdate(dbSession, dto); dbSession.commit(); @@ -70,79 +66,55 @@ public class DefaultQProfileDaoTest { dbSession.commit(); assertThat(countRows()).isEqualTo(1); - assertThat(selectUuidOfDefaultProfile(org, dto.getLanguage())).hasValue(newQProfileUuid); + assertThat(selectUuidOfDefaultProfile(dto.getLanguage())).hasValue(newQProfileUuid); } @Test public void deleteByQProfileUuids_deletes_rows_related_to_specified_profile() { - OrganizationDto org1 = dbTester.organizations().insert(); - OrganizationDto org2 = dbTester.organizations().insert(); - underTest.insertOrUpdate(dbSession, new DefaultQProfileDto().setOrganizationUuid(org1.getUuid()).setLanguage("java").setQProfileUuid("u1")); - underTest.insertOrUpdate(dbSession, new DefaultQProfileDto().setOrganizationUuid(org1.getUuid()).setLanguage("js").setQProfileUuid("u2")); - underTest.insertOrUpdate(dbSession, new DefaultQProfileDto().setOrganizationUuid(org2.getUuid()).setLanguage("java").setQProfileUuid("u3")); - underTest.insertOrUpdate(dbSession, new DefaultQProfileDto().setOrganizationUuid(org2.getUuid()).setLanguage("js").setQProfileUuid("u4")); + underTest.insertOrUpdate(dbSession, new DefaultQProfileDto().setLanguage("java").setQProfileUuid("u1")); + underTest.insertOrUpdate(dbSession, new DefaultQProfileDto().setLanguage("js").setQProfileUuid("u2")); underTest.deleteByQProfileUuids(dbSession, asList("u1", "u3")); dbSession.commit(); - assertThat(countRows()).isEqualTo(2); - assertThat(selectUuidOfDefaultProfile(org1, "java")).isEmpty(); - assertThat(selectUuidOfDefaultProfile(org1, "js")).hasValue("u2"); - assertThat(selectUuidOfDefaultProfile(org2, "java")).isEmpty(); - assertThat(selectUuidOfDefaultProfile(org2, "js")).hasValue("u4"); + assertThat(countRows()).isEqualTo(1); + assertThat(selectUuidOfDefaultProfile("java")).isEmpty(); + assertThat(selectUuidOfDefaultProfile("js")).hasValue("u2"); } @Test public void selectExistingQProfileUuids_filters_defaults() { - OrganizationDto org = dbTester.organizations().insert(); - QProfileDto profile1 = dbTester.qualityProfiles().insert(org); - QProfileDto profile2 = dbTester.qualityProfiles().insert(org); + QProfileDto profile1 = dbTester.qualityProfiles().insert(); + QProfileDto profile2 = dbTester.qualityProfiles().insert(); dbTester.qualityProfiles().setAsDefault(profile1); List profileUuids = asList(profile1.getKee(), profile2.getKee(), "other"); - assertThat(underTest.selectExistingQProfileUuids(dbSession, org.getUuid(), profileUuids)) + assertThat(underTest.selectExistingQProfileUuids(dbSession, profileUuids)) .containsExactly(profile1.getKee()); } @Test public void isDefault_returns_true_if_profile_is_marked_as_default() { - OrganizationDto org = dbTester.organizations().insert(); - QProfileDto profile1 = dbTester.qualityProfiles().insert(org); - QProfileDto profile2 = dbTester.qualityProfiles().insert(org); + QProfileDto profile1 = dbTester.qualityProfiles().insert(); + QProfileDto profile2 = dbTester.qualityProfiles().insert(); dbTester.qualityProfiles().setAsDefault(profile1); - assertThat(underTest.isDefault(dbSession, org.getUuid(), profile1.getKee())).isTrue(); - assertThat(underTest.isDefault(dbSession, org.getUuid(), profile2.getKee())).isFalse(); - assertThat(underTest.isDefault(dbSession, org.getUuid(), "does_not_exist")).isFalse(); - } - - @Test - public void selectUuidsOfOrganizationsWithoutDefaultProfile() { - OrganizationDto org1 = dbTester.organizations().insert(); - OrganizationDto org2 = dbTester.organizations().insert(); - QProfileDto profileInOrg1 = dbTester.qualityProfiles().insert(org1, p -> p.setLanguage("java")); - QProfileDto profileInOrg2 = dbTester.qualityProfiles().insert(org2, p -> p.setLanguage("java")); - dbTester.qualityProfiles().setAsDefault(profileInOrg1); - - assertThat(underTest.selectUuidsOfOrganizationsWithoutDefaultProfile(dbSession, "java")) - .containsExactly(org2.getUuid()); - assertThat(underTest.selectUuidsOfOrganizationsWithoutDefaultProfile(dbSession, "js")) - .containsExactlyInAnyOrder(org1.getUuid(), org2.getUuid()); + assertThat(underTest.isDefault(dbSession, profile1.getKee())).isTrue(); + assertThat(underTest.isDefault(dbSession, profile2.getKee())).isFalse(); + assertThat(underTest.isDefault(dbSession, "does_not_exist")).isFalse(); } - private void assertThatIsDefault(OrganizationDto org, QProfileDto profile) { - assertThat(selectUuidOfDefaultProfile(org, profile.getLanguage())).hasValue(profile.getKee()); - assertThat(underTest.isDefault(dbSession, org.getUuid(), profile.getKee())).isTrue(); + private void assertThatIsDefault(QProfileDto profile) { + assertThat(selectUuidOfDefaultProfile(profile.getLanguage())).hasValue(profile.getKee()); + assertThat(underTest.isDefault(dbSession, profile.getKee())).isTrue(); } private int countRows() { return dbTester.countRowsOfTable("default_qprofiles"); } - private Optional selectUuidOfDefaultProfile(OrganizationDto org, String language) { - return dbTester.select("select qprofile_uuid as \"profileUuid\" " + - " from default_qprofiles " + - " where organization_uuid='" + org.getUuid() + "' and language='" + language + "'") + private Optional selectUuidOfDefaultProfile(String language) { + return dbTester.select("select qprofile_uuid as \"profileUuid\" from default_qprofiles where language='" + language + "'") .stream() .findFirst() .map(m -> (String) m.get("profileUuid")); diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QProfileChangeDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QProfileChangeDaoTest.java index a7595986b8d..18c9815f66c 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QProfileChangeDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QProfileChangeDaoTest.java @@ -92,8 +92,8 @@ public class QProfileChangeDaoTest { @Test public void selectByQuery_returns_changes_ordered_by_descending_date() { - QProfileDto profile1 = db.qualityProfiles().insert(db.getDefaultOrganization()); - QProfileDto profile2 = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto profile1 = db.qualityProfiles().insert(); + QProfileDto profile2 = db.qualityProfiles().insert(); QProfileChangeDto change1OnP1 = insertChange(profile1, "ACTIVATED", null, null); QProfileChangeDto change2OnP1 = insertChange(profile1, "ACTIVATED", null, null); @@ -107,7 +107,7 @@ public class QProfileChangeDaoTest { @Test public void selectByQuery_supports_pagination_of_changes() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto profile = db.qualityProfiles().insert(); QProfileChangeDto change1 = insertChange(profile, "ACTIVATED", null, null); QProfileChangeDto change2 = insertChange(profile, "ACTIVATED", null, null); QProfileChangeDto change3 = insertChange(profile, "ACTIVATED", null, null); @@ -124,7 +124,7 @@ public class QProfileChangeDaoTest { @Test public void selectByQuery_returns_changes_after_given_date() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto profile = db.qualityProfiles().insert(); QProfileChangeDto change1 = insertChange(profile, "ACTIVATED", null, null); QProfileChangeDto change2 = insertChange(profile, "ACTIVATED", null, null); QProfileChangeDto change3 = insertChange(profile, "ACTIVATED", null, null); @@ -139,7 +139,7 @@ public class QProfileChangeDaoTest { @Test public void selectByQuery_returns_changes_before_given_date() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto profile = db.qualityProfiles().insert(); QProfileChangeDto change1 = insertChange(profile, "ACTIVATED", null, null); QProfileChangeDto change2 = insertChange(profile, "ACTIVATED", null, null); QProfileChangeDto change3 = insertChange(profile, "ACTIVATED", null, null); @@ -154,7 +154,7 @@ public class QProfileChangeDaoTest { @Test public void selectByQuery_returns_changes_in_a_range_of_dates() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto profile = db.qualityProfiles().insert(); QProfileChangeDto change1 = insertChange(profile, "ACTIVATED", null, null); QProfileChangeDto change2 = insertChange(profile, "ACTIVATED", null, null); QProfileChangeDto change3 = insertChange(profile, "ACTIVATED", null, null); @@ -171,7 +171,7 @@ public class QProfileChangeDaoTest { @Test public void test_selectByQuery_mapping() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto profile = db.qualityProfiles().insert(); QProfileChangeDto inserted = insertChange(profile, "ACTIVATED", "theLogin", "theData"); List result = underTest.selectByQuery(dbSession, new QProfileChangeQuery(profile.getKee())); @@ -188,8 +188,8 @@ public class QProfileChangeDaoTest { @Test public void countByQuery() { - QProfileDto profile1 = db.qualityProfiles().insert(db.getDefaultOrganization()); - QProfileDto profile2 = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto profile1 = db.qualityProfiles().insert(); + QProfileDto profile2 = db.qualityProfiles().insert(); long start = system2.now(); insertChange(profile1, "ACTIVATED", null, null); insertChange(profile1, "ACTIVATED", null, null); @@ -211,8 +211,8 @@ public class QProfileChangeDaoTest { @Test public void deleteByRulesProfileUuids() { - QProfileDto profile1 = db.qualityProfiles().insert(db.getDefaultOrganization()); - QProfileDto profile2 = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto profile1 = db.qualityProfiles().insert(); + QProfileDto profile2 = db.qualityProfiles().insert(); insertChange(profile1, "ACTIVATED", null, null); insertChange(profile1, "ACTIVATED", null, null); insertChange(profile2, "ACTIVATED", null, null); @@ -225,7 +225,7 @@ public class QProfileChangeDaoTest { @Test public void deleteByProfileKeys_does_nothing_if_row_with_specified_key_does_not_exist() { - QProfileDto profile1 = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto profile1 = db.qualityProfiles().insert(); insertChange(profile1.getRulesProfileUuid(), "ACTIVATED", null, null); underTest.deleteByRulesProfileUuids(dbSession, asList("does not exist")); diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QProfileEditGroupsDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QProfileEditGroupsDaoTest.java index 0ccd071dc06..efbc9bb80d9 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QProfileEditGroupsDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QProfileEditGroupsDaoTest.java @@ -21,11 +21,10 @@ package org.sonar.db.qualityprofile; import org.junit.Rule; import org.junit.Test; -import org.sonar.api.utils.System2; import org.sonar.api.impl.utils.TestSystem2; +import org.sonar.api.utils.System2; import org.sonar.db.DbTester; import org.sonar.db.Pagination; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.user.GroupDto; import static java.util.Arrays.asList; @@ -52,11 +51,10 @@ public class QProfileEditGroupsDaoTest { @Test public void exists() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); - QProfileDto anotherProfile = db.qualityProfiles().insert(organization); - GroupDto group = db.users().insertGroup(organization); - GroupDto anotherGroup = db.users().insertGroup(organization); + QProfileDto profile = db.qualityProfiles().insert(); + QProfileDto anotherProfile = db.qualityProfiles().insert(); + GroupDto group = db.users().insertGroup(); + GroupDto anotherGroup = db.users().insertGroup(); db.qualityProfiles().addGroupPermission(profile, group); assertThat(underTest.exists(db.getSession(), profile, group)).isTrue(); @@ -70,28 +68,24 @@ public class QProfileEditGroupsDaoTest { @Test public void countByQuery() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); - GroupDto group1 = db.users().insertGroup(organization); - GroupDto group2 = db.users().insertGroup(organization); - GroupDto group3 = db.users().insertGroup(organization); + QProfileDto profile = db.qualityProfiles().insert(); + GroupDto group1 = db.users().insertGroup(); + GroupDto group2 = db.users().insertGroup(); + GroupDto group3 = db.users().insertGroup(); db.qualityProfiles().addGroupPermission(profile, group1); db.qualityProfiles().addGroupPermission(profile, group2); assertThat(underTest.countByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(ANY).build())) .isEqualTo(3); assertThat(underTest.countByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(IN).build())) .isEqualTo(2); assertThat(underTest.countByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(OUT).build())) .isEqualTo(1); @@ -99,16 +93,14 @@ public class QProfileEditGroupsDaoTest { @Test public void selectByQuery() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); - GroupDto group1 = db.users().insertGroup(organization); - GroupDto group2 = db.users().insertGroup(organization); - GroupDto group3 = db.users().insertGroup(organization); + QProfileDto profile = db.qualityProfiles().insert(); + GroupDto group1 = db.users().insertGroup(); + GroupDto group2 = db.users().insertGroup(); + GroupDto group3 = db.users().insertGroup(); db.qualityProfiles().addGroupPermission(profile, group1); db.qualityProfiles().addGroupPermission(profile, group2); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(ANY).build(), Pagination.all())) .extracting(GroupMembershipDto::getGroupUuid, GroupMembershipDto::isSelected) @@ -118,7 +110,6 @@ public class QProfileEditGroupsDaoTest { tuple(group3.getUuid(), false)); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(IN).build(), Pagination.all())) @@ -126,7 +117,6 @@ public class QProfileEditGroupsDaoTest { .containsExactlyInAnyOrder(tuple(group1.getUuid(), true), tuple(group2.getUuid(), true)); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(OUT).build(), Pagination.all())) @@ -136,17 +126,15 @@ public class QProfileEditGroupsDaoTest { @Test public void selectByQuery_search_by_name() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); - GroupDto group1 = db.users().insertGroup(organization, "sonar-users-project"); - GroupDto group2 = db.users().insertGroup(organization, "sonar-users-qprofile"); - GroupDto group3 = db.users().insertGroup(organization, "sonar-admin"); + QProfileDto profile = db.qualityProfiles().insert(); + GroupDto group1 = db.users().insertGroup("sonar-users-project"); + GroupDto group2 = db.users().insertGroup("sonar-users-qprofile"); + GroupDto group3 = db.users().insertGroup("sonar-admin"); db.qualityProfiles().addGroupPermission(profile, group1); db.qualityProfiles().addGroupPermission(profile, group2); db.qualityProfiles().addGroupPermission(profile, group3); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(IN) .setQuery("project").build(), @@ -155,7 +143,6 @@ public class QProfileEditGroupsDaoTest { .containsExactlyInAnyOrder(group1.getUuid()); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(IN) .setQuery("UserS").build(), @@ -166,16 +153,14 @@ public class QProfileEditGroupsDaoTest { @Test public void selectByQuery_with_paging() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); - GroupDto group1 = db.users().insertGroup(organization, "group1"); - GroupDto group2 = db.users().insertGroup(organization, "group2"); - GroupDto group3 = db.users().insertGroup(organization, "group3"); + QProfileDto profile = db.qualityProfiles().insert(); + GroupDto group1 = db.users().insertGroup("group1"); + GroupDto group2 = db.users().insertGroup("group2"); + GroupDto group3 = db.users().insertGroup("group3"); db.qualityProfiles().addGroupPermission(profile, group1); db.qualityProfiles().addGroupPermission(profile, group2); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(ANY) .build(), @@ -184,7 +169,6 @@ public class QProfileEditGroupsDaoTest { .containsExactly(group1.getUuid()); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(ANY) .build(), @@ -193,7 +177,6 @@ public class QProfileEditGroupsDaoTest { .containsExactly(group3.getUuid()); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(ANY) .build(), @@ -203,27 +186,21 @@ public class QProfileEditGroupsDaoTest { } @Test - public void selectQProfileUuidsByOrganizationAndGroups() { - OrganizationDto organization = db.organizations().insert(); - OrganizationDto anotherOrganization = db.organizations().insert(); - QProfileDto profile1 = db.qualityProfiles().insert(organization); - QProfileDto profile2 = db.qualityProfiles().insert(organization); - QProfileDto anotherProfile = db.qualityProfiles().insert(anotherOrganization); - GroupDto group1 = db.users().insertGroup(organization, "group1"); - GroupDto group2 = db.users().insertGroup(organization, "group2"); - GroupDto group3 = db.users().insertGroup(organization, "group3"); + public void selectQProfileUuidsByGroups() { + QProfileDto profile1 = db.qualityProfiles().insert(); + QProfileDto profile2 = db.qualityProfiles().insert(); + GroupDto group1 = db.users().insertGroup("group1"); + GroupDto group2 = db.users().insertGroup("group2"); + GroupDto group3 = db.users().insertGroup("group3"); db.qualityProfiles().addGroupPermission(profile1, group1); db.qualityProfiles().addGroupPermission(profile1, group2); db.qualityProfiles().addGroupPermission(profile2, group2); - db.qualityProfiles().addGroupPermission(anotherProfile, group1); - db.qualityProfiles().addGroupPermission(anotherProfile, group3); - assertThat(underTest.selectQProfileUuidsByOrganizationAndGroups(db.getSession(), organization, asList(group1, group2))) - .containsExactlyInAnyOrder(profile1.getKee(), profile2.getKee()) - .doesNotContain(anotherProfile.getKee()); - assertThat(underTest.selectQProfileUuidsByOrganizationAndGroups(db.getSession(), organization, asList(group1, group2, group3))) + assertThat(underTest.selectQProfileUuidsByGroups(db.getSession(), asList(group1, group2))) + .containsExactlyInAnyOrder(profile1.getKee(), profile2.getKee()); + assertThat(underTest.selectQProfileUuidsByGroups(db.getSession(), asList(group1, group2, group3))) .containsExactlyInAnyOrder(profile1.getKee(), profile2.getKee()); - assertThat(underTest.selectQProfileUuidsByOrganizationAndGroups(db.getSession(), organization, emptyList())).isEmpty(); + assertThat(underTest.selectQProfileUuidsByGroups(db.getSession(),emptyList())).isEmpty(); } @Test @@ -234,7 +211,8 @@ public class QProfileEditGroupsDaoTest { .setQProfileUuid("QPROFILE") ); - assertThat(db.selectFirst(db.getSession(), "select uuid as \"uuid\", group_uuid as \"groupUuid\", qprofile_uuid as \"qProfileUuid\", created_at as \"createdAt\" from qprofile_edit_groups")).contains( + assertThat(db.selectFirst(db.getSession(), + "select uuid as \"uuid\", group_uuid as \"groupUuid\", qprofile_uuid as \"qProfileUuid\", created_at as \"createdAt\" from qprofile_edit_groups")).contains( entry("uuid", "ABCD"), entry("groupUuid", "100"), entry("qProfileUuid", "QPROFILE"), @@ -243,9 +221,8 @@ public class QProfileEditGroupsDaoTest { @Test public void deleteByQProfileAndGroup() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); - GroupDto group = db.users().insertGroup(organization); + QProfileDto profile = db.qualityProfiles().insert(); + GroupDto group = db.users().insertGroup(); db.qualityProfiles().addGroupPermission(profile, group); assertThat(underTest.exists(db.getSession(), profile, group)).isTrue(); @@ -256,48 +233,38 @@ public class QProfileEditGroupsDaoTest { @Test public void deleteByQProfiles() { - OrganizationDto organization = db.organizations().insert(); - OrganizationDto anotherOrganization = db.organizations().insert(); - QProfileDto profile1 = db.qualityProfiles().insert(organization); - QProfileDto profile2 = db.qualityProfiles().insert(organization); - QProfileDto profile3 = db.qualityProfiles().insert(organization); - QProfileDto anotherProfile = db.qualityProfiles().insert(anotherOrganization); - GroupDto group1 = db.users().insertGroup(organization); - GroupDto group2 = db.users().insertGroup(organization); + QProfileDto profile1 = db.qualityProfiles().insert(); + QProfileDto profile2 = db.qualityProfiles().insert(); + QProfileDto profile3 = db.qualityProfiles().insert(); + GroupDto group1 = db.users().insertGroup(); + GroupDto group2 = db.users().insertGroup(); db.qualityProfiles().addGroupPermission(profile1, group1); db.qualityProfiles().addGroupPermission(profile2, group2); db.qualityProfiles().addGroupPermission(profile3, group1); - db.qualityProfiles().addGroupPermission(anotherProfile, group1); underTest.deleteByQProfiles(db.getSession(), asList(profile1, profile2)); assertThat(underTest.exists(db.getSession(), profile1, group1)).isFalse(); assertThat(underTest.exists(db.getSession(), profile2, group2)).isFalse(); assertThat(underTest.exists(db.getSession(), profile3, group1)).isTrue(); - assertThat(underTest.exists(db.getSession(), anotherProfile, group1)).isTrue(); } @Test public void deleteByGroup() { - OrganizationDto organization = db.organizations().insert(); - OrganizationDto anotherOrganization = db.organizations().insert(); - QProfileDto profile1 = db.qualityProfiles().insert(organization); - QProfileDto profile2 = db.qualityProfiles().insert(organization); - QProfileDto profile3 = db.qualityProfiles().insert(organization); - QProfileDto anotherProfile = db.qualityProfiles().insert(anotherOrganization); - GroupDto group1 = db.users().insertGroup(organization); - GroupDto group2 = db.users().insertGroup(organization); + QProfileDto profile1 = db.qualityProfiles().insert(); + QProfileDto profile2 = db.qualityProfiles().insert(); + QProfileDto profile3 = db.qualityProfiles().insert(); + GroupDto group1 = db.users().insertGroup(); + GroupDto group2 = db.users().insertGroup(); db.qualityProfiles().addGroupPermission(profile1, group1); db.qualityProfiles().addGroupPermission(profile2, group2); db.qualityProfiles().addGroupPermission(profile3, group1); - db.qualityProfiles().addGroupPermission(anotherProfile, group1); underTest.deleteByGroup(db.getSession(), group1); assertThat(underTest.exists(db.getSession(), profile1, group1)).isFalse(); assertThat(underTest.exists(db.getSession(), profile2, group2)).isTrue(); assertThat(underTest.exists(db.getSession(), profile3, group1)).isFalse(); - assertThat(underTest.exists(db.getSession(), anotherProfile, group1)).isFalse(); } } diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QProfileEditUsersDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QProfileEditUsersDaoTest.java index d80585bf96e..03c0b365d94 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QProfileEditUsersDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QProfileEditUsersDaoTest.java @@ -55,9 +55,8 @@ public class QProfileEditUsersDaoTest { @Test public void exists() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); - QProfileDto anotherProfile = db.qualityProfiles().insert(organization); + QProfileDto profile = db.qualityProfiles().insert(); + QProfileDto anotherProfile = db.qualityProfiles().insert(); UserDto user = db.users().insertUser(); UserDto anotherUser = db.users().insertUser(); db.qualityProfiles().addUserPermission(profile, user); @@ -70,8 +69,8 @@ public class QProfileEditUsersDaoTest { @Test public void countByQuery() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); + OrganizationDto organization = db.getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(); UserDto user1 = db.users().insertUser(); UserDto user2 = db.users().insertUser(); UserDto user3 = db.users().insertUser(); @@ -82,19 +81,16 @@ public class QProfileEditUsersDaoTest { db.qualityProfiles().addUserPermission(profile, user2); assertThat(underTest.countByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(ANY).build())) .isEqualTo(3); assertThat(underTest.countByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(IN).build())) .isEqualTo(2); assertThat(underTest.countByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(OUT).build())) .isEqualTo(1); @@ -102,19 +98,17 @@ public class QProfileEditUsersDaoTest { @Test public void selectByQuery() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); + QProfileDto profile = db.qualityProfiles().insert(); UserDto user1 = db.users().insertUser(); UserDto user2 = db.users().insertUser(); UserDto user3 = db.users().insertUser(); - db.organizations().addMember(organization, user1); - db.organizations().addMember(organization, user2); - db.organizations().addMember(organization, user3); + db.organizations().addMember(db.getDefaultOrganization(), user1); + db.organizations().addMember(db.getDefaultOrganization(), user2); + db.organizations().addMember(db.getDefaultOrganization(), user3); db.qualityProfiles().addUserPermission(profile, user1); db.qualityProfiles().addUserPermission(profile, user2); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(ANY).build(), Pagination.all())) .extracting(UserMembershipDto::getUserUuid, UserMembershipDto::isSelected) @@ -124,7 +118,6 @@ public class QProfileEditUsersDaoTest { tuple(user3.getUuid(), false)); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(IN).build(), Pagination.all())) @@ -132,7 +125,6 @@ public class QProfileEditUsersDaoTest { .containsExactlyInAnyOrder(tuple(user1.getUuid(), true), tuple(user2.getUuid(), true)); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(OUT).build(), Pagination.all())) @@ -142,20 +134,18 @@ public class QProfileEditUsersDaoTest { @Test public void selectByQuery_search_by_name_or_login() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); + QProfileDto profile = db.qualityProfiles().insert(); UserDto user1 = db.users().insertUser(u -> u.setLogin("user1").setName("John Doe")); UserDto user2 = db.users().insertUser(u -> u.setLogin("user2").setName("John Smith")); UserDto user3 = db.users().insertUser(u -> u.setLogin("user3").setName("Jane Doe")); - db.organizations().addMember(organization, user1); - db.organizations().addMember(organization, user2); - db.organizations().addMember(organization, user3); + db.organizations().addMember(db.getDefaultOrganization(), user1); + db.organizations().addMember(db.getDefaultOrganization(), user2); + db.organizations().addMember(db.getDefaultOrganization(), user3); db.qualityProfiles().addUserPermission(profile, user1); db.qualityProfiles().addUserPermission(profile, user2); db.qualityProfiles().addUserPermission(profile, user3); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(IN) .setQuery("user2").build(), @@ -164,7 +154,6 @@ public class QProfileEditUsersDaoTest { .containsExactlyInAnyOrder(user2.getUuid()); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(IN) .setQuery("joh").build(), @@ -173,7 +162,6 @@ public class QProfileEditUsersDaoTest { .containsExactlyInAnyOrder(user1.getUuid(), user2.getUuid()); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(IN) .setQuery("Doe").build(), @@ -184,19 +172,17 @@ public class QProfileEditUsersDaoTest { @Test public void selectByQuery_with_paging() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); + QProfileDto profile = db.qualityProfiles().insert(); UserDto user1 = db.users().insertUser(u -> u.setName("user1")); UserDto user2 = db.users().insertUser(u -> u.setName("user2")); UserDto user3 = db.users().insertUser(u -> u.setName("user3")); - db.organizations().addMember(organization, user1); - db.organizations().addMember(organization, user2); - db.organizations().addMember(organization, user3); + db.organizations().addMember(db.getDefaultOrganization(), user1); + db.organizations().addMember(db.getDefaultOrganization(), user2); + db.organizations().addMember(db.getDefaultOrganization(), user3); db.qualityProfiles().addUserPermission(profile, user1); db.qualityProfiles().addUserPermission(profile, user2); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(ANY) .build(), @@ -205,7 +191,6 @@ public class QProfileEditUsersDaoTest { .containsExactly(user1.getUuid()); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(ANY) .build(), @@ -214,7 +199,6 @@ public class QProfileEditUsersDaoTest { .containsExactly(user3.getUuid()); assertThat(underTest.selectByQuery(db.getSession(), builder() - .setOrganization(organization) .setProfile(profile) .setMembership(ANY) .build(), @@ -224,22 +208,17 @@ public class QProfileEditUsersDaoTest { } @Test - public void selectQProfileUuidsByOrganizationAndUser() { - OrganizationDto organization = db.organizations().insert(); - OrganizationDto anotherOrganization = db.organizations().insert(); - QProfileDto profile1 = db.qualityProfiles().insert(organization); - QProfileDto profile2 = db.qualityProfiles().insert(organization); - QProfileDto anotherProfile = db.qualityProfiles().insert(anotherOrganization); + public void selectQProfileUuidsByUser() { + QProfileDto profile1 = db.qualityProfiles().insert(); + QProfileDto profile2 = db.qualityProfiles().insert(); UserDto user1 = db.users().insertUser(u -> u.setName("user1")); UserDto user2 = db.users().insertUser(u -> u.setName("user2")); db.qualityProfiles().addUserPermission(profile1, user1); db.qualityProfiles().addUserPermission(profile2, user1); - db.qualityProfiles().addUserPermission(anotherProfile, user1); - assertThat(underTest.selectQProfileUuidsByOrganizationAndUser(db.getSession(), organization, user1)) - .containsExactlyInAnyOrder(profile1.getKee(), profile2.getKee()) - .doesNotContain(anotherProfile.getKee()); - assertThat(underTest.selectQProfileUuidsByOrganizationAndUser(db.getSession(), organization, user2)).isEmpty(); + assertThat(underTest.selectQProfileUuidsByUser(db.getSession(), user1)) + .containsExactlyInAnyOrder(profile1.getKee(), profile2.getKee()); + assertThat(underTest.selectQProfileUuidsByUser(db.getSession(), user2)).isEmpty(); } @Test @@ -274,8 +253,7 @@ public class QProfileEditUsersDaoTest { @Test public void deleteByQProfileAndUser() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); + QProfileDto profile = db.qualityProfiles().insert(); UserDto user = db.users().insertUser(); db.qualityProfiles().addUserPermission(profile, user); assertThat(underTest.exists(db.getSession(), profile, user)).isTrue(); @@ -287,62 +265,35 @@ public class QProfileEditUsersDaoTest { @Test public void deleteByQProfiles() { - OrganizationDto organization = db.organizations().insert(); - OrganizationDto anotherOrganization = db.organizations().insert(); - QProfileDto profile1 = db.qualityProfiles().insert(organization); - QProfileDto profile2 = db.qualityProfiles().insert(organization); - QProfileDto profile3 = db.qualityProfiles().insert(organization); - QProfileDto anotherProfile = db.qualityProfiles().insert(anotherOrganization); + QProfileDto profile1 = db.qualityProfiles().insert(); + QProfileDto profile2 = db.qualityProfiles().insert(); + QProfileDto profile3 = db.qualityProfiles().insert(); UserDto user1 = db.users().insertUser(); UserDto user2 = db.users().insertUser(); db.qualityProfiles().addUserPermission(profile1, user1); db.qualityProfiles().addUserPermission(profile2, user2); db.qualityProfiles().addUserPermission(profile3, user1); - db.qualityProfiles().addUserPermission(anotherProfile, user1); underTest.deleteByQProfiles(db.getSession(), asList(profile1, profile2)); assertThat(underTest.exists(db.getSession(), profile1, user1)).isFalse(); assertThat(underTest.exists(db.getSession(), profile2, user2)).isFalse(); assertThat(underTest.exists(db.getSession(), profile3, user1)).isTrue(); - assertThat(underTest.exists(db.getSession(), anotherProfile, user1)).isTrue(); } @Test public void deleteByUser() { - OrganizationDto organization1 = db.organizations().insert(); - OrganizationDto organization2 = db.organizations().insert(); - QProfileDto profile1 = db.qualityProfiles().insert(organization1); - QProfileDto profile2 = db.qualityProfiles().insert(organization2); - QProfileDto profile3 = db.qualityProfiles().insert(organization1); + QProfileDto profile1 = db.qualityProfiles().insert(); + QProfileDto profile3 = db.qualityProfiles().insert(); UserDto user1 = db.users().insertUser(); UserDto user2 = db.users().insertUser(); db.qualityProfiles().addUserPermission(profile1, user1); - db.qualityProfiles().addUserPermission(profile2, user1); db.qualityProfiles().addUserPermission(profile3, user2); underTest.deleteByUser(db.getSession(), user1); assertThat(underTest.exists(db.getSession(), profile1, user1)).isFalse(); - assertThat(underTest.exists(db.getSession(), profile2, user1)).isFalse(); assertThat(underTest.exists(db.getSession(), profile3, user2)).isTrue(); } - @Test - public void deleteByOrganizationAndUser() { - OrganizationDto organization1 = db.organizations().insert(); - OrganizationDto organization2 = db.organizations().insert(); - QProfileDto profile1 = db.qualityProfiles().insert(organization1); - QProfileDto profile2 = db.qualityProfiles().insert(organization2); - UserDto user = db.users().insertUser(); - db.organizations().addMember(organization1, user); - db.organizations().addMember(organization2, user); - db.qualityProfiles().addUserPermission(profile1, user); - db.qualityProfiles().addUserPermission(profile2, user); - - underTest.deleteByOrganizationAndUser(db.getSession(), organization1, user); - - assertThat(underTest.exists(db.getSession(), profile1, user)).isFalse(); - assertThat(underTest.exists(db.getSession(), profile2, user)).isTrue(); - } } diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QualityProfileDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QualityProfileDaoTest.java index a8f3ecaba0b..ce85e85643c 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QualityProfileDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QualityProfileDaoTest.java @@ -38,7 +38,6 @@ import org.sonar.db.DbSession; import org.sonar.db.DbTester; import org.sonar.db.component.ComponentDto; import org.sonar.db.organization.OrganizationDto; -import org.sonar.db.organization.OrganizationTesting; import org.sonar.db.project.ProjectDto; import org.sonar.db.rule.RuleDefinitionDto; @@ -64,12 +63,10 @@ public class QualityProfileDaoTest { private DbSession dbSession = db.getSession(); private QualityProfileDao underTest = db.getDbClient().qualityProfileDao(); - private OrganizationDto organization; @Before public void before() { when(system.now()).thenReturn(UtcDateUtils.parseDateTime("2014-01-20T12:00:00+0000").getTime()); - organization = db.organizations().insertForUuid("QualityProfileDaoTest-ORG"); } @After @@ -82,7 +79,6 @@ public class QualityProfileDaoTest { QProfileDto dto = new QProfileDto() .setKee("theUuid") .setRulesProfileUuid("theRulesProfileUuid") - .setOrganizationUuid(organization.getUuid()) .setName("theName") .setLanguage("theLang") .setLastUsed(1_000L) @@ -101,7 +97,6 @@ public class QualityProfileDaoTest { assertThat(reloaded.getLastUsed()).isEqualTo(dto.getLastUsed()); assertThat(reloaded.getRulesUpdatedAt()).isEqualTo(dto.getRulesUpdatedAt()); assertThat(reloaded.getParentKee()).isEqualTo(dto.getParentKee()); - assertThat(reloaded.getOrganizationUuid()).isEqualTo(dto.getOrganizationUuid()); assertThat(reloaded.isBuiltIn()).isEqualTo(dto.isBuiltIn()); } @@ -110,7 +105,6 @@ public class QualityProfileDaoTest { QProfileDto initial = new QProfileDto() .setKee("theUuid") .setRulesProfileUuid("theRulesProfileUuid") - .setOrganizationUuid(organization.getUuid()) .setName("theName") .setLanguage("theLang") .setLastUsed(1_000L) @@ -129,15 +123,11 @@ public class QualityProfileDaoTest { .setParentKee("theNewParentUuid") .setUserUpdatedAt(12_000L) .setRulesUpdatedAt("2017-06-01") - .setIsBuiltIn(false) - - // field that cannot be changed - .setOrganizationUuid("theNewOrg"); + .setIsBuiltIn(false); underTest.update(dbSession, update); QProfileDto reloaded = underTest.selectByUuid(dbSession, initial.getKee()); assertThat(reloaded.getKee()).isEqualTo(initial.getKee()); - assertThat(reloaded.getOrganizationUuid()).isEqualTo(initial.getOrganizationUuid()); // updated fields assertThat(reloaded.getLanguage()).isEqualTo(update.getLanguage()); @@ -237,11 +227,11 @@ public class QualityProfileDaoTest { @Test public void test_deleteProjectAssociationsByProfileUuids() { - QProfileDto profile1 = db.qualityProfiles().insert(organization); - QProfileDto profile2 = db.qualityProfiles().insert(organization); - ProjectDto project1 = db.components().insertPrivateProjectDto(organization); - ProjectDto project2 = db.components().insertPrivateProjectDto(organization); - ProjectDto project3 = db.components().insertPrivateProjectDto(organization); + QProfileDto profile1 = db.qualityProfiles().insert(); + QProfileDto profile2 = db.qualityProfiles().insert(); + ProjectDto project1 = db.components().insertPrivateProjectDto(); + ProjectDto project2 = db.components().insertPrivateProjectDto(); + ProjectDto project3 = db.components().insertPrivateProjectDto(); db.getDbClient().projectDao().selectByUuid(dbSession, project1.getUuid()).get(); @@ -259,7 +249,7 @@ public class QualityProfileDaoTest { @Test public void deleteProjectAssociationsByProfileUuids_does_nothing_if_empty_uuids() { - QProfileDto profile = db.qualityProfiles().insert(organization); + QProfileDto profile = db.qualityProfiles().insert(); ProjectDto project = db.components().insertPrivateProjectDto(); db.qualityProfiles().associateWithProject(project, profile); @@ -272,7 +262,7 @@ public class QualityProfileDaoTest { public void test_selectAll() { List sharedData = createSharedData(); - List reloadeds = underTest.selectOrderedByOrganizationUuid(dbSession, organization); + List reloadeds = underTest.selectAll(dbSession); assertThat(reloadeds).hasSize(sharedData.size()); @@ -285,7 +275,6 @@ public class QualityProfileDaoTest { assertThat(reloaded.getRulesProfileUuid()).isEqualTo(original.getRulesProfileUuid()); assertThat(reloaded.getName()).isEqualTo(original.getName()); assertThat(reloaded.getKee()).isEqualTo(original.getKee()); - assertThat(reloaded.getOrganizationUuid()).isEqualTo(original.getOrganizationUuid()); assertThat(reloaded.getLanguage()).isEqualTo(original.getLanguage()); assertThat(reloaded.getParentKee()).isEqualTo(original.getParentKee()); assertThat(reloaded.getRulesUpdatedAt()).isEqualTo(original.getRulesUpdatedAt()); @@ -296,11 +285,10 @@ public class QualityProfileDaoTest { } @Test - public void selectOrderedByOrganizationUuid_is_sorted_by_profile_name() { + public void selectAll_is_sorted_by_profile_name() { QProfileDto dto1 = new QProfileDto() .setKee("js_first") .setRulesProfileUuid("rp-js_first") - .setOrganizationUuid(organization.getUuid()) .setName("First") .setLanguage("js") .setLastUsed(1_000L) @@ -312,7 +300,6 @@ public class QualityProfileDaoTest { QProfileDto dto2 = new QProfileDto() .setKee("js_second") .setRulesProfileUuid("rp-js_second") - .setOrganizationUuid(organization.getUuid()) .setName("Second") .setLanguage("js") .setLastUsed(1_000L) @@ -324,7 +311,6 @@ public class QualityProfileDaoTest { QProfileDto dto3 = new QProfileDto() .setKee("js_third") .setRulesProfileUuid("rp-js_third") - .setOrganizationUuid(organization.getUuid()) .setName("Third") .setLanguage("js") .setLastUsed(1_000L) @@ -333,7 +319,7 @@ public class QualityProfileDaoTest { .setIsBuiltIn(false); underTest.insert(dbSession, dto3); - List dtos = underTest.selectOrderedByOrganizationUuid(dbSession, organization); + List dtos = underTest.selectAll(dbSession); assertThat(dtos).hasSize(3); assertThat(dtos.get(0).getName()).isEqualTo("First"); @@ -343,92 +329,78 @@ public class QualityProfileDaoTest { @Test public void selectDefaultProfile() { - List sharedData = createSharedData(); + createSharedData(); - QProfileDto java = underTest.selectDefaultProfile(dbSession, organization, "java"); + QProfileDto java = underTest.selectDefaultProfile(dbSession, "java"); assertThat(java).isNotNull(); assertThat(java.getKee()).isEqualTo("java_sonar_way"); - assertThat(underTest.selectDefaultProfile(dbSession, db.organizations().insert(), "java")).isNull(); - assertThat(underTest.selectDefaultProfile(dbSession, organization, "js")).isNull(); + assertThat(underTest.selectDefaultProfile(dbSession, "js")).isNull(); } @Test public void selectDefaultProfiles() { createSharedData(); - List java = underTest.selectDefaultProfiles(dbSession, organization, singletonList("java")); + List java = underTest.selectDefaultProfiles(dbSession, singletonList("java")); assertThat(java).extracting(QProfileDto::getKee).containsOnly("java_sonar_way"); - assertThat(underTest.selectDefaultProfiles(dbSession, organization, singletonList("js"))).isEmpty(); - assertThat(underTest.selectDefaultProfiles(dbSession, organization, of("java", "js"))).extracting(QProfileDto::getKee).containsOnly("java_sonar_way"); - assertThat(underTest.selectDefaultProfiles(dbSession, organization, of("js", "java"))).extracting(QProfileDto::getKee).containsOnly("java_sonar_way"); - assertThat(underTest.selectDefaultProfiles(dbSession, organization, Collections.emptyList())).isEmpty(); + assertThat(underTest.selectDefaultProfiles(dbSession, singletonList("js"))).isEmpty(); + assertThat(underTest.selectDefaultProfiles(dbSession, of("java", "js"))).extracting(QProfileDto::getKee).containsOnly("java_sonar_way"); + assertThat(underTest.selectDefaultProfiles(dbSession, of("js", "java"))).extracting(QProfileDto::getKee).containsOnly("java_sonar_way"); + assertThat(underTest.selectDefaultProfiles(dbSession, Collections.emptyList())).isEmpty(); } @Test public void selectByNameAndLanguage() { List sharedData = createSharedData(); - QProfileDto dto = underTest.selectByNameAndLanguage(dbSession, organization, "Sonar Way", "java"); + QProfileDto dto = underTest.selectByNameAndLanguage(dbSession, "Sonar Way", "java"); assertThat(dto.getName()).isEqualTo("Sonar Way"); assertThat(dto.getLanguage()).isEqualTo("java"); assertThat(dto.getParentKee()).isNull(); - assertThat(underTest.selectByNameAndLanguage(dbSession, organization, "Sonar Way", "java")).isNotNull(); - assertThat(underTest.selectByNameAndLanguage(dbSession, organization, "Sonar Way", "unknown")).isNull(); + assertThat(underTest.selectByNameAndLanguage(dbSession, "Sonar Way", "java")).isNotNull(); + assertThat(underTest.selectByNameAndLanguage(dbSession, "Sonar Way", "unknown")).isNull(); } @Test public void selectByNameAndLanguages() { createSharedData(); - List dtos = underTest.selectByNameAndLanguages(dbSession, organization, "Sonar Way", singletonList("java")); + List dtos = underTest.selectByNameAndLanguages(dbSession, "Sonar Way", singletonList("java")); assertThat(dtos).hasSize(1); QProfileDto dto = dtos.iterator().next(); assertThat(dto.getName()).isEqualTo("Sonar Way"); assertThat(dto.getLanguage()).isEqualTo("java"); assertThat(dto.getParentKee()).isNull(); - assertThat(underTest.selectByNameAndLanguages(dbSession, organization, "Sonar Way", singletonList("unknown"))).isEmpty(); - assertThat(underTest.selectByNameAndLanguages(dbSession, organization, "Sonar Way", of("java", "unknown"))) + assertThat(underTest.selectByNameAndLanguages(dbSession, "Sonar Way", singletonList("unknown"))).isEmpty(); + assertThat(underTest.selectByNameAndLanguages(dbSession, "Sonar Way", of("java", "unknown"))) .extracting(QProfileDto::getKee).containsOnly(dto.getKee()); } @Test public void selectByLanguage() { - QProfileDto profile = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organization.getUuid()); + QProfileDto profile = QualityProfileTesting.newQualityProfileDto(); underTest.insert(dbSession, profile); - List results = underTest.selectByLanguage(dbSession, organization, profile.getLanguage()); + List results = underTest.selectByLanguage(dbSession, profile.getLanguage()); assertThat(results).hasSize(1); QProfileDto result = results.get(0); assertThat(result.getName()).isEqualTo(profile.getName()); assertThat(result.getKee()).isEqualTo(profile.getKee()); assertThat(result.getLanguage()).isEqualTo(profile.getLanguage()); - assertThat(result.getOrganizationUuid()).isEqualTo(profile.getOrganizationUuid()); assertThat(result.getRulesProfileUuid()).isEqualTo(profile.getRulesProfileUuid()); } - @Test - public void should_not_selectByLanguage_in_wrong_organization() { - QProfileDto profile = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organization.getUuid()); - underTest.insert(dbSession, profile); - - List results = underTest.selectByLanguage(dbSession, OrganizationTesting.newOrganizationDto(), profile.getLanguage()); - assertThat(results).isEmpty(); - } - @Test public void should_not_selectByLanguage_with_wrong_language() { - QProfileDto profile = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organization.getUuid()); + QProfileDto profile = QualityProfileTesting.newQualityProfileDto(); underTest.insert(dbSession, profile); - List results = underTest.selectByLanguage(dbSession, organization, "another language"); + List results = underTest.selectByLanguage(dbSession, "another language"); assertThat(results).isEmpty(); } @@ -437,7 +409,6 @@ public class QualityProfileDaoTest { QProfileDto original1 = new QProfileDto() .setKee("java_child1") .setRulesProfileUuid("rp-java_child1") - .setOrganizationUuid(organization.getUuid()) .setName("Child1") .setLanguage("java") .setLastUsed(1_000L) @@ -450,7 +421,6 @@ public class QualityProfileDaoTest { QProfileDto original2 = new QProfileDto() .setKee("java_child2") .setRulesProfileUuid("rp-java_child2") - .setOrganizationUuid(organization.getUuid()) .setName("Child2") .setLanguage("java") .setLastUsed(1_000L) @@ -463,7 +433,6 @@ public class QualityProfileDaoTest { QProfileDto original3 = new QProfileDto() .setKee("java_parent") .setRulesProfileUuid("rp-java_parent") - .setOrganizationUuid(organization.getUuid()) .setName("Parent") .setLanguage("java") .setLastUsed(1_000L) @@ -475,7 +444,6 @@ public class QualityProfileDaoTest { QProfileDto original4 = new QProfileDto() .setKee("js_child1") .setRulesProfileUuid("rp-js_child1") - .setOrganizationUuid(organization.getUuid()) .setName("Child1") .setLanguage("js") .setLastUsed(1_000L) @@ -488,7 +456,6 @@ public class QualityProfileDaoTest { QProfileDto original5 = new QProfileDto() .setKee("js_child2") .setRulesProfileUuid("rp-js_child2") - .setOrganizationUuid(organization.getUuid()) .setName("Child2") .setLanguage("js") .setLastUsed(1_000L) @@ -501,7 +468,6 @@ public class QualityProfileDaoTest { QProfileDto original6 = new QProfileDto() .setKee("js_parent") .setRulesProfileUuid("rp-js_parent") - .setOrganizationUuid(organization.getUuid()) .setName("Parent") .setLanguage("js") .setLastUsed(1_000L) @@ -528,13 +494,13 @@ public class QualityProfileDaoTest { @Test public void selectBuiltInRuleProfilesWithActiveRules() { // a quality profile without active rules but not builtin - db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setIsBuiltIn(false)); + db.qualityProfiles().insert(qp -> qp.setIsBuiltIn(false)); // a built-in quality profile without active rules - db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setIsBuiltIn(true)); + db.qualityProfiles().insert(qp -> qp.setIsBuiltIn(true)); // a built-in quality profile with active rules - QProfileDto builtInQPWithActiveRules = db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setIsBuiltIn(true)); + QProfileDto builtInQPWithActiveRules = db.qualityProfiles().insert(qp -> qp.setIsBuiltIn(true)); RuleDefinitionDto ruleDefinitionDto = db.rules().insert(); db.qualityProfiles().activateRule(builtInQPWithActiveRules, ruleDefinitionDto); @@ -547,38 +513,35 @@ public class QualityProfileDaoTest { @Test public void selectByRuleProfileUuid() { - db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setIsBuiltIn(false)); - db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setIsBuiltIn(true)); - QProfileDto qprofile1 = db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setIsBuiltIn(true)); + db.qualityProfiles().insert(qp -> qp.setIsBuiltIn(false)); + db.qualityProfiles().insert(qp -> qp.setIsBuiltIn(true)); + QProfileDto qprofile1 = db.qualityProfiles().insert(qp -> qp.setIsBuiltIn(true)); dbSession.commit(); - assertThat(underTest.selectByRuleProfileUuid(dbSession, db.getDefaultOrganization().getUuid(), qprofile1.getRulesProfileUuid())) + assertThat(underTest.selectByRuleProfileUuid(dbSession, qprofile1.getRulesProfileUuid())) .extracting(QProfileDto::getName) .isEqualTo(qprofile1.getName()); - assertThat(underTest.selectByRuleProfileUuid(dbSession, "A", qprofile1.getRulesProfileUuid())) - .isNull(); - - assertThat(underTest.selectByRuleProfileUuid(dbSession, db.getDefaultOrganization().getUuid(), "A")) + assertThat(underTest.selectByRuleProfileUuid(dbSession, "A")) .isNull(); } @Test public void selectDefaultBuiltInProfilesWithoutActiveRules() { // a quality profile without active rules but not builtin - db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setIsBuiltIn(false).setLanguage("java")); + db.qualityProfiles().insert(qp -> qp.setIsBuiltIn(false).setLanguage("java")); // a built-in quality profile without active rules - QProfileDto javaQPWithoutActiveRules = db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setIsBuiltIn(true).setLanguage("java")); + QProfileDto javaQPWithoutActiveRules = db.qualityProfiles().insert(qp -> qp.setIsBuiltIn(true).setLanguage("java")); db.qualityProfiles().setAsDefault(javaQPWithoutActiveRules); // a built-in quality profile without active rules - QProfileDto cppQPWithoutActiveRules = db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setIsBuiltIn(true).setLanguage("cpp")); + QProfileDto cppQPWithoutActiveRules = db.qualityProfiles().insert(qp -> qp.setIsBuiltIn(true).setLanguage("cpp")); db.qualityProfiles().setAsDefault(cppQPWithoutActiveRules); // a built-in quality profile with active rules - QProfileDto builtInQPWithActiveRules = db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setIsBuiltIn(true).setLanguage("java")); + QProfileDto builtInQPWithActiveRules = db.qualityProfiles().insert(qp -> qp.setIsBuiltIn(true).setLanguage("java")); RuleDefinitionDto ruleDefinitionDto = db.rules().insert(); db.qualityProfiles().activateRule(builtInQPWithActiveRules, ruleDefinitionDto); @@ -601,7 +564,7 @@ public class QualityProfileDaoTest { @Test public void selectDescendants_returns_empty_if_no_children() { - QProfileDto base = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto base = db.qualityProfiles().insert(); Collection descendants = underTest.selectDescendants(dbSession, singleton(base)); @@ -617,14 +580,14 @@ public class QualityProfileDaoTest { @Test public void selectDescendants_returns_descendants_in_any_order() { - QProfileDto base1 = db.qualityProfiles().insert(db.getDefaultOrganization()); - QProfileDto child1OfBase1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setParentKee(base1.getKee())); - QProfileDto child2OfBase1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setParentKee(base1.getKee())); - QProfileDto grandChildOfBase1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setParentKee(child1OfBase1.getKee())); - QProfileDto base2 = db.qualityProfiles().insert(db.getDefaultOrganization()); - QProfileDto childOfBase2 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setParentKee(base2.getKee())); - QProfileDto grandChildOfBase2 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setParentKee(childOfBase2.getKee())); - QProfileDto other = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto base1 = db.qualityProfiles().insert(); + QProfileDto child1OfBase1 = db.qualityProfiles().insert(p -> p.setParentKee(base1.getKee())); + QProfileDto child2OfBase1 = db.qualityProfiles().insert(p -> p.setParentKee(base1.getKee())); + QProfileDto grandChildOfBase1 = db.qualityProfiles().insert(p -> p.setParentKee(child1OfBase1.getKee())); + QProfileDto base2 = db.qualityProfiles().insert(); + QProfileDto childOfBase2 = db.qualityProfiles().insert(p -> p.setParentKee(base2.getKee())); + QProfileDto grandChildOfBase2 = db.qualityProfiles().insert(p -> p.setParentKee(childOfBase2.getKee())); + QProfileDto other = db.qualityProfiles().insert(); // descendants of a single base profile verifyDescendants(singleton(base1), asList(child1OfBase1, child2OfBase1, grandChildOfBase1)); @@ -650,32 +613,25 @@ public class QualityProfileDaoTest { @Test public void countProjectsByProfileKey() { - QProfileDto profileWithoutProjects = db.qualityProfiles().insert(organization); - QProfileDto profileWithProjects = db.qualityProfiles().insert(organization); - ProjectDto project1 = db.components().insertPrivateProjectDto(organization); - ProjectDto project2 = db.components().insertPrivateProjectDto(organization); + QProfileDto profileWithoutProjects = db.qualityProfiles().insert(); + QProfileDto profileWithProjects = db.qualityProfiles().insert(); + ProjectDto project1 = db.components().insertPrivateProjectDto(); + ProjectDto project2 = db.components().insertPrivateProjectDto(); db.qualityProfiles().associateWithProject(project1, profileWithProjects); db.qualityProfiles().associateWithProject(project2, profileWithProjects); - OrganizationDto otherOrg = db.organizations().insert(); - QProfileDto profileInOtherOrg = db.qualityProfiles().insert(otherOrg); - ProjectDto projectInOtherOrg = db.components().insertPrivateProjectDto(otherOrg); - db.qualityProfiles().associateWithProject(projectInOtherOrg, profileInOtherOrg); - - assertThat(underTest.countProjectsByOrganizationAndProfiles(dbSession, organization, asList(profileWithoutProjects, profileWithProjects, profileInOtherOrg))).containsOnly( + assertThat(underTest.countProjectsByProfiles(dbSession, asList(profileWithoutProjects, profileWithProjects))).containsOnly( MapEntry.entry(profileWithProjects.getKee(), 2L)); - assertThat(underTest.countProjectsByOrganizationAndProfiles(dbSession, otherOrg, singletonList(profileWithoutProjects))).isEmpty(); - assertThat(underTest.countProjectsByOrganizationAndProfiles(dbSession, organization, Collections.emptyList())).isEmpty(); + assertThat(underTest.countProjectsByProfiles(dbSession, Collections.emptyList())).isEmpty(); } @Test public void test_selectAssociatedToProjectAndLanguage() { - OrganizationDto org = db.organizations().insert(); - ProjectDto project1 = db.components().insertPublicProjectDto(org); - ProjectDto project2 = db.components().insertPublicProjectDto(org); - QProfileDto javaProfile = db.qualityProfiles().insert(org, p -> p.setLanguage("java")); - QProfileDto jsProfile = db.qualityProfiles().insert(org, p -> p.setLanguage("js")); + ProjectDto project1 = db.components().insertPublicProjectDto(); + ProjectDto project2 = db.components().insertPublicProjectDto(); + QProfileDto javaProfile = db.qualityProfiles().insert(p -> p.setLanguage("java")); + QProfileDto jsProfile = db.qualityProfiles().insert(p -> p.setLanguage("js")); db.qualityProfiles().associateWithProject(project1, javaProfile, jsProfile); assertThat(underTest.selectAssociatedToProjectAndLanguage(dbSession, project1, "java").getKee()) @@ -690,11 +646,10 @@ public class QualityProfileDaoTest { @Test public void test_selectAssociatedToProjectUuidAndLanguages() { - OrganizationDto org = db.organizations().insert(); - ProjectDto project1 = db.components().insertPublicProjectDto(org); - ProjectDto project2 = db.components().insertPublicProjectDto(org); - QProfileDto javaProfile = db.qualityProfiles().insert(org, p -> p.setLanguage("java")); - QProfileDto jsProfile = db.qualityProfiles().insert(org, p -> p.setLanguage("js")); + ProjectDto project1 = db.components().insertPublicProjectDto(); + ProjectDto project2 = db.components().insertPublicProjectDto(); + QProfileDto javaProfile = db.qualityProfiles().insert(p -> p.setLanguage("java")); + QProfileDto jsProfile = db.qualityProfiles().insert(p -> p.setLanguage("js")); db.qualityProfiles().associateWithProject(project1, javaProfile, jsProfile); assertThat(underTest.selectAssociatedToProjectUuidAndLanguages(dbSession, project1, singletonList("java"))) @@ -713,11 +668,10 @@ public class QualityProfileDaoTest { @Test public void test_updateProjectProfileAssociation() { - OrganizationDto org = db.organizations().insert(); - ProjectDto project = db.components().insertPrivateProjectDto(org); - QProfileDto javaProfile1 = db.qualityProfiles().insert(org, p -> p.setLanguage("java")); - QProfileDto jsProfile = db.qualityProfiles().insert(org, p -> p.setLanguage("js")); - QProfileDto javaProfile2 = db.qualityProfiles().insert(org, p -> p.setLanguage("java")); + ProjectDto project = db.components().insertPrivateProjectDto(); + QProfileDto javaProfile1 = db.qualityProfiles().insert(p -> p.setLanguage("java")); + QProfileDto jsProfile = db.qualityProfiles().insert(p -> p.setLanguage("js")); + QProfileDto javaProfile2 = db.qualityProfiles().insert(p -> p.setLanguage("java")); db.qualityProfiles().associateWithProject(project, javaProfile1, jsProfile); underTest.updateProjectProfileAssociation(dbSession, project, javaProfile2.getKee(), javaProfile1.getKee()); @@ -741,9 +695,9 @@ public class QualityProfileDaoTest { @Test public void select_selected_projects() { - ComponentDto project1 = db.components().insertPrivateProject(t -> t.setName("Project1 name").setOrganizationUuid(organization.getUuid())); - ComponentDto project2 = db.components().insertPrivateProject(t -> t.setName("Project2 name").setOrganizationUuid(organization.getUuid())); - ComponentDto project3 = db.components().insertPrivateProject(t -> t.setName("Project3 name").setOrganizationUuid(organization.getUuid())); + ComponentDto project1 = db.components().insertPrivateProject(t -> t.setName("Project1 name")); + ComponentDto project2 = db.components().insertPrivateProject(t -> t.setName("Project2 name")); + ComponentDto project3 = db.components().insertPrivateProject(t -> t.setName("Project3 name")); OrganizationDto organization2 = db.organizations().insert(); ComponentDto project4 = db.components().insertPrivateProject(t -> t.setName("Project4 name").setOrganizationUuid(organization2.getUuid())); ComponentDto branch = db.components().insertProjectBranch(project1, t -> t.setKey("branch")); @@ -758,24 +712,21 @@ public class QualityProfileDaoTest { db.qualityProfiles().associateWithProject(db.components().getProjectDto(project3), profile2); QProfileDto profile3 = newQualityProfileDto(); - assertThat(underTest.selectSelectedProjects(dbSession, organization, profile1, null)) + assertThat(underTest.selectSelectedProjects(dbSession, profile1, null)) .extracting("projectUuid", "projectKey", "projectName", "profileKey") .containsOnly( tuple(project1.uuid(), project1.getDbKey(), project1.name(), profile1.getKee()), tuple(project2.uuid(), project2.getDbKey(), project2.name(), profile1.getKee())); - assertThat(underTest.selectSelectedProjects(dbSession, organization, profile1, "ect1")).hasSize(1); - assertThat(underTest.selectSelectedProjects(dbSession, organization, profile3, null)).isEmpty(); + assertThat(underTest.selectSelectedProjects(dbSession, profile1, "ect1")).hasSize(1); + assertThat(underTest.selectSelectedProjects(dbSession, profile3, null)).isEmpty(); } @Test public void select_deselected_projects() { - ComponentDto project1 = db.components().insertPrivateProject(t -> t.setName("Project1 name").setOrganizationUuid(organization.getUuid())); - ComponentDto project2 = db.components().insertPrivateProject(t -> t.setName("Project2 name").setOrganizationUuid(organization.getUuid())); - ComponentDto project3 = db.components().insertPrivateProject(t -> t.setName("Project3 name").setOrganizationUuid(organization.getUuid())); - OrganizationDto organization2 = db.organizations().insert(); - ComponentDto project4 = db.components().insertPrivateProject(t -> t.setName("Project4 name").setOrganizationUuid(organization2.getUuid())); - ComponentDto branch = db.components().insertProjectBranch(project1, t -> t.setKey("branch")); + ComponentDto project1 = db.components().insertPrivateProject(t -> t.setName("Project1 name")); + ComponentDto project2 = db.components().insertPrivateProject(t -> t.setName("Project2 name")); + ComponentDto project3 = db.components().insertPrivateProject(t -> t.setName("Project3 name")); QProfileDto profile1 = newQualityProfileDto(); db.qualityProfiles().insert(profile1); @@ -786,23 +737,21 @@ public class QualityProfileDaoTest { db.qualityProfiles().associateWithProject(db.components().getProjectDto(project2), profile2); QProfileDto profile3 = newQualityProfileDto(); - assertThat(underTest.selectDeselectedProjects(dbSession, organization, profile1, null)) + assertThat(underTest.selectDeselectedProjects(dbSession, profile1, null)) .extracting("projectUuid", "projectKey", "projectName", "profileKey") .containsExactly( tuple(project2.uuid(), project2.getDbKey(), project2.name(), null), tuple(project3.uuid(), project3.getDbKey(), project3.name(), null)); - assertThat(underTest.selectDeselectedProjects(dbSession, organization, profile1, "ect2")).hasSize(1); - assertThat(underTest.selectDeselectedProjects(dbSession, organization, profile3, null)).hasSize(3); + assertThat(underTest.selectDeselectedProjects(dbSession, profile1, "ect2")).hasSize(1); + assertThat(underTest.selectDeselectedProjects(dbSession, profile3, null)).hasSize(3); } @Test public void select_project_associations() { - ComponentDto project1 = db.components().insertPrivateProject(t -> t.setName("Project1 name").setOrganizationUuid(organization.getUuid())); - ComponentDto project2 = db.components().insertPrivateProject(t -> t.setName("Project2 name").setOrganizationUuid(organization.getUuid())); - ComponentDto project3 = db.components().insertPrivateProject(t -> t.setName("Project3 name").setOrganizationUuid(organization.getUuid())); - OrganizationDto organization2 = db.organizations().insert(); - ComponentDto project4 = db.components().insertPrivateProject(t -> t.setName("Project4 name").setOrganizationUuid(organization2.getUuid())); + ComponentDto project1 = db.components().insertPrivateProject(t -> t.setName("Project1 name")); + ComponentDto project2 = db.components().insertPrivateProject(t -> t.setName("Project2 name")); + ComponentDto project3 = db.components().insertPrivateProject(t -> t.setName("Project3 name")); ComponentDto branch = db.components().insertProjectBranch(project1, t -> t.setKey("branch")); QProfileDto profile1 = newQualityProfileDto(); @@ -814,31 +763,25 @@ public class QualityProfileDaoTest { db.qualityProfiles().associateWithProject(db.components().getProjectDto(project2), profile2); QProfileDto profile3 = newQualityProfileDto(); - assertThat(underTest.selectProjectAssociations(dbSession, organization, profile1, null)) + assertThat(underTest.selectProjectAssociations(dbSession, profile1, null)) .extracting("projectUuid", "projectKey", "projectName", "profileKey") .containsOnly( tuple(project1.uuid(), project1.getDbKey(), project1.name(), profile1.getKee()), tuple(project2.uuid(), project2.getDbKey(), project2.name(), null), tuple(project3.uuid(), project3.getDbKey(), project3.name(), null)); - assertThat(underTest.selectProjectAssociations(dbSession, organization, profile1, "ect2")).hasSize(1); - assertThat(underTest.selectProjectAssociations(dbSession, organization, profile3, null)).hasSize(3); + assertThat(underTest.selectProjectAssociations(dbSession, profile1, "ect2")).hasSize(1); + assertThat(underTest.selectProjectAssociations(dbSession, profile3, null)).hasSize(3); } @Test public void selectUuidsOfCustomRulesProfiles_returns_the_custom_profiles_with_specified_name() { - OrganizationDto org1 = db.organizations().insert(); - OrganizationDto org2 = db.organizations().insert(); - OrganizationDto org3 = db.organizations().insert(); - QProfileDto outdatedProfile1 = db.qualityProfiles().insert(org1, p -> p.setIsBuiltIn(false).setLanguage("java").setName("foo")); - QProfileDto outdatedProfile2 = db.qualityProfiles().insert(org2, p -> p.setIsBuiltIn(false).setLanguage("java").setName("foo")); - QProfileDto builtInProfile = db.qualityProfiles().insert(org3, p -> p.setIsBuiltIn(true).setLanguage("java").setName("foo")); - QProfileDto differentLanguage = db.qualityProfiles().insert(org1, p -> p.setIsBuiltIn(false).setLanguage("cobol").setName("foo")); - QProfileDto differentName = db.qualityProfiles().insert(org1, p -> p.setIsBuiltIn(false).setLanguage("java").setName("bar")); + QProfileDto outdatedProfile1 = db.qualityProfiles().insert(p -> p.setIsBuiltIn(false).setLanguage("java").setName("foo")); + QProfileDto differentLanguage = db.qualityProfiles().insert(p -> p.setIsBuiltIn(false).setLanguage("cobol").setName("foo")); + QProfileDto differentName = db.qualityProfiles().insert(p -> p.setIsBuiltIn(false).setLanguage("java").setName("bar")); Collection keys = underTest.selectUuidsOfCustomRulesProfiles(dbSession, "java", "foo"); - - assertThat(keys).containsExactlyInAnyOrder(outdatedProfile1.getRulesProfileUuid(), outdatedProfile2.getRulesProfileUuid()); + assertThat(keys).containsOnly(outdatedProfile1.getRulesProfileUuid()); } @Test @@ -849,22 +792,18 @@ public class QualityProfileDaoTest { @Test public void renameAndCommit_updates_name_of_specified_profiles() { OrganizationDto org1 = db.organizations().insert(); - OrganizationDto org2 = db.organizations().insert(); - QProfileDto fooInOrg1 = db.qualityProfiles().insert(org1, p -> p.setName("foo")); - QProfileDto fooInOrg2 = db.qualityProfiles().insert(org2, p -> p.setName("foo")); - QProfileDto bar = db.qualityProfiles().insert(org1, p -> p.setName("bar")); + QProfileDto fooInOrg1 = db.qualityProfiles().insert(p -> p.setName("foo")); + QProfileDto bar = db.qualityProfiles().insert(p -> p.setName("bar")); - underTest.renameRulesProfilesAndCommit(dbSession, asList(fooInOrg1.getRulesProfileUuid(), fooInOrg2.getRulesProfileUuid()), "foo (copy)"); + underTest.renameRulesProfilesAndCommit(dbSession, asList(fooInOrg1.getRulesProfileUuid()), "foo (copy)"); assertThat(underTest.selectOrFailByUuid(dbSession, fooInOrg1.getKee()).getName()).isEqualTo("foo (copy)"); - assertThat(underTest.selectOrFailByUuid(dbSession, fooInOrg2.getKee()).getName()).isEqualTo("foo (copy)"); assertThat(underTest.selectOrFailByUuid(dbSession, bar.getKee()).getName()).isEqualTo("bar"); } @Test public void renameAndCommit_does_nothing_if_empty_keys() { - OrganizationDto org = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(org, p -> p.setName("foo")); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setName("foo")); underTest.renameRulesProfilesAndCommit(dbSession, Collections.emptyList(), "foo (copy)"); @@ -873,25 +812,13 @@ public class QualityProfileDaoTest { @Test public void selectQProfilesByRuleProfileUuid() { - OrganizationDto org1 = db.organizations().insert(); - OrganizationDto org2 = db.organizations().insert(); - RulesProfileDto ruleProfile1 = QualityProfileTesting.newRuleProfileDto(); - OrgQProfileDto profile1InOrg1 = new OrgQProfileDto().setOrganizationUuid(org1.getUuid()).setRulesProfileUuid(ruleProfile1.getUuid()).setUuid(Uuids.create()); - OrgQProfileDto profile1InOrg2 = new OrgQProfileDto().setOrganizationUuid(org2.getUuid()).setRulesProfileUuid(ruleProfile1.getUuid()).setUuid(Uuids.create()); - RulesProfileDto ruleProfile2 = QualityProfileTesting.newRuleProfileDto(); - OrgQProfileDto profile2InOrg1 = new OrgQProfileDto().setOrganizationUuid(org1.getUuid()).setRulesProfileUuid(ruleProfile2.getUuid()).setUuid(Uuids.create()); + OrgQProfileDto profile1InOrg1 = new OrgQProfileDto().setRulesProfileUuid(ruleProfile1.getUuid()).setUuid(Uuids.create()); db.getDbClient().qualityProfileDao().insert(db.getSession(), ruleProfile1); db.getDbClient().qualityProfileDao().insert(db.getSession(), profile1InOrg1); - db.getDbClient().qualityProfileDao().insert(db.getSession(), profile1InOrg2); - db.getDbClient().qualityProfileDao().insert(db.getSession(), ruleProfile2); - db.getDbClient().qualityProfileDao().insert(db.getSession(), profile2InOrg1); List result = db.getDbClient().qualityProfileDao().selectQProfilesByRuleProfile(db.getSession(), ruleProfile1); - assertThat(result).extracting(QProfileDto::getKee).containsExactlyInAnyOrder(profile1InOrg1.getUuid(), profile1InOrg2.getUuid()); - - result = db.getDbClient().qualityProfileDao().selectQProfilesByRuleProfile(db.getSession(), ruleProfile2); - assertThat(result).extracting(QProfileDto::getKee).containsExactlyInAnyOrder(profile2InOrg1.getUuid()); + assertThat(result).extracting(QProfileDto::getKee).containsExactlyInAnyOrder(profile1InOrg1.getUuid()); } @Test @@ -905,7 +832,6 @@ public class QualityProfileDaoTest { QProfileDto dto1 = new QProfileDto() .setKee("java_sonar_way") .setRulesProfileUuid("rp-java_sonar_way") - .setOrganizationUuid(organization.getUuid()) .setName("Sonar Way") .setLanguage("java") .setLastUsed(1_000L) @@ -917,7 +843,6 @@ public class QualityProfileDaoTest { QProfileDto dto2 = new QProfileDto() .setKee("js_sonar_way") .setRulesProfileUuid("rp-js_sonar_way") - .setOrganizationUuid(organization.getUuid()) .setName("Sonar Way") .setLanguage("js") .setLastUsed(1_000L) @@ -926,10 +851,6 @@ public class QualityProfileDaoTest { .setIsBuiltIn(true); underTest.insert(dbSession, dto2); - DefaultQProfileDto defaultQProfileDto = new DefaultQProfileDto() - .setQProfileUuid(dto1.getKee()) - .setLanguage(dto1.getLanguage()) - .setOrganizationUuid(organization.getUuid()); db.getDbClient().defaultQProfileDao().insertOrUpdate(dbSession, DefaultQProfileDto.from(dto1)); return Arrays.asList(dto1, dto2); diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QualityProfileExportDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QualityProfileExportDaoTest.java index e1133e84e37..e682253e503 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QualityProfileExportDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QualityProfileExportDaoTest.java @@ -75,15 +75,12 @@ public class QualityProfileExportDaoTest { RuleDefinitionDto customRule = createRule(language, RuleStatus.READY, ruleTemplate.getUuid()); RuleMetadataDto customRuleMetadata = createRuleMetadata(new RuleMetadataDto() .setRuleUuid(customRule.getUuid()) - .setOrganizationUuid(db.getDefaultOrganization().getUuid()) .setNoteData("Extended description") .setTags(Sets.newHashSet("tag1", "tag2", "tag3"))); RuleDefinitionDto rule = createRule(language, RuleStatus.READY, null); RuleMetadataDto ruleMetadata = createRuleMetadata(new RuleMetadataDto() - .setRuleUuid(rule.getUuid()) - .setOrganizationUuid(db.getDefaultOrganization().getUuid())); - + .setRuleUuid(rule.getUuid())); QProfileDto profile = createProfile(language); List activeRules = activate(profile, customRule, rule); @@ -225,7 +222,7 @@ public class QualityProfileExportDaoTest { } private QProfileDto createProfile(String lanugage) { - return db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(lanugage)); + return db.qualityProfiles().insert(p -> p.setLanguage(lanugage)); } private List activate(QProfileDto profile, RuleDefinitionDto... rules) { diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleDaoTest.java index e5b8035ce44..0f45bb7f4db 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleDaoTest.java @@ -29,7 +29,6 @@ import java.util.Set; import java.util.function.Consumer; import org.apache.ibatis.exceptions.PersistenceException; import org.apache.ibatis.session.ResultHandler; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -43,9 +42,6 @@ import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.System2; import org.sonar.db.DbTester; import org.sonar.db.RowNotFoundException; -import org.sonar.db.es.RuleExtensionId; -import org.sonar.db.organization.OrganizationDto; -import org.sonar.db.organization.OrganizationTesting; import org.sonar.db.rule.RuleDto.Scope; import static com.google.common.collect.Sets.newHashSet; @@ -59,8 +55,6 @@ import static org.sonar.api.rule.RuleStatus.REMOVED; import static org.sonar.db.rule.RuleTesting.newRuleMetadata; public class RuleDaoTest { - - private static final String ORGANIZATION_UUID = "org-1"; private static final String UNKNOWN_RULE_UUID = "unknown-uuid"; @Rule @@ -69,58 +63,35 @@ public class RuleDaoTest { public DbTester db = DbTester.create(System2.INSTANCE); private RuleDao underTest = db.getDbClient().ruleDao(); - private OrganizationDto organization; - - @Before - public void before() { - organization = db.organizations().insert(o -> o.setUuid(ORGANIZATION_UUID)); - } @Test public void selectByKey() { RuleDefinitionDto ruleDefinition = db.rules().insert(); - OrganizationDto organization = db.organizations().insert(); - RuleMetadataDto metadata = newRuleMetadata(ruleDefinition, organization); + RuleMetadataDto metadata = newRuleMetadata(ruleDefinition); db.rules().insertRule(ruleDefinition, metadata); - assertThat(underTest.selectByKey(db.getSession(), organization.getUuid(), RuleKey.of("foo", "bar"))) + assertThat(underTest.selectByKey(db.getSession(), RuleKey.of("foo", "bar"))) .isEmpty(); - RuleDto rule = underTest.selectByKey(db.getSession(), organization.getUuid(), ruleDefinition.getKey()).get(); + RuleDto rule = underTest.selectByKey(db.getSession(), ruleDefinition.getKey()).get(); assertEquals(rule.getDefinition(), ruleDefinition); - verifyMetadata(rule.getMetadata(), ruleDefinition, metadata); + verifyMetadata(rule.getMetadata(), metadata); } @Test - public void selectByKey_return_rule_even_if_organization_does_not_exist() { + public void selectByKey_return_rule() { RuleDefinitionDto ruleDefinition = db.rules().insert(); - assertThat(underTest.selectByKey(db.getSession(), OrganizationTesting.newOrganizationDto().getUuid(), ruleDefinition.getKey())) - .isNotEmpty(); + assertThat(underTest.selectByKey(db.getSession(), ruleDefinition.getKey())).isNotEmpty(); } @Test - public void selectByKey_populates_organizationUuid_even_when_organization_has_no_metadata() { - OrganizationDto organization = db.organizations().insert(); + public void selectByKey_returns_metadata() { RuleDefinitionDto ruleDefinition = db.rules().insert(); + RuleMetadataDto ruleMetadata = newRuleMetadata(ruleDefinition); + db.rules().insertRule(ruleDefinition, ruleMetadata); - RuleDto rule = underTest.selectByKey(db.getSession(), organization.getUuid(), ruleDefinition.getKey()).get(); - verifyNoMetadata(rule.getMetadata(), organization); - } - - @Test - public void selectByKey_returns_metadata_of_specified_organization() { - RuleDefinitionDto ruleDefinition = db.rules().insert(); - OrganizationDto organization1 = db.organizations().insert(); - RuleMetadataDto expectedOrg1 = newRuleMetadata(ruleDefinition, organization1); - db.rules().insertRule(ruleDefinition, expectedOrg1); - OrganizationDto organization2 = db.organizations().insert(); - RuleMetadataDto expectedOrg2 = newRuleMetadata(ruleDefinition, organization2); - db.rules().insertRule(ruleDefinition, expectedOrg2); - - RuleDto rule = underTest.selectByKey(db.getSession(), organization1.getUuid(), ruleDefinition.getKey()).get(); - verifyMetadata(rule.getMetadata(), ruleDefinition, expectedOrg1); - rule = underTest.selectByKey(db.getSession(), organization2.getUuid(), ruleDefinition.getKey()).get(); - verifyMetadata(rule.getMetadata(), ruleDefinition, expectedOrg2); + RuleDto rule = underTest.selectByKey(db.getSession(), ruleDefinition.getKey()).get(); + verifyMetadata(rule.getMetadata(), ruleMetadata); } @Test @@ -136,48 +107,14 @@ public class RuleDaoTest { @Test public void selectByUuid() { RuleDefinitionDto ruleDefinition = db.rules().insert(); - OrganizationDto organization = db.organizations().insert(); - RuleMetadataDto metadata = newRuleMetadata(ruleDefinition, organization); + RuleMetadataDto metadata = newRuleMetadata(ruleDefinition); RuleDto expected = db.rules().insertRule(ruleDefinition, metadata); - assertThat(underTest.selectByUuid(expected.getUuid() + 500, organization.getUuid(), db.getSession())) + assertThat(underTest.selectByUuid(expected.getUuid() + 500, db.getSession())) .isEmpty(); - RuleDto rule = underTest.selectByUuid(expected.getUuid(), organization.getUuid(), db.getSession()).get(); + RuleDto rule = underTest.selectByUuid(expected.getUuid(), db.getSession()).get(); assertEquals(rule.getDefinition(), ruleDefinition); - verifyMetadata(rule.getMetadata(), ruleDefinition, metadata); - } - - @Test - public void selectByUuid_return_rule_even_if_organization_does_not_exist() { - RuleDefinitionDto ruleDefinition = db.rules().insert(); - - assertThat(underTest.selectByUuid(ruleDefinition.getUuid(), "dfdfdf", db.getSession())) - .isNotEmpty(); - } - - @Test - public void selectByUuid_populates_organizationUuid_even_when_organization_has_no_metadata() { - OrganizationDto organization = db.organizations().insert(); - RuleDefinitionDto ruleDefinition = db.rules().insert(); - - RuleDto rule = underTest.selectByUuid(ruleDefinition.getUuid(), organization.getUuid(), db.getSession()).get(); - verifyNoMetadata(rule.getMetadata(), organization); - } - - @Test - public void selectByUuid_returns_metadata_of_specified_organization() { - RuleDefinitionDto ruleDefinition = db.rules().insert(); - OrganizationDto organization1 = db.organizations().insert(); - RuleMetadataDto expectedOrg1 = newRuleMetadata(ruleDefinition, organization1); - db.rules().insertRule(ruleDefinition, expectedOrg1); - OrganizationDto organization2 = db.organizations().insert(); - RuleMetadataDto expectedOrg2 = newRuleMetadata(ruleDefinition, organization2); - db.rules().insertRule(ruleDefinition, expectedOrg2); - - RuleDto rule = underTest.selectByUuid(ruleDefinition.getUuid(), organization1.getUuid(), db.getSession()).get(); - verifyMetadata(rule.getMetadata(), ruleDefinition, expectedOrg1); - rule = underTest.selectByUuid(ruleDefinition.getUuid(), organization2.getUuid(), db.getSession()).get(); - verifyMetadata(rule.getMetadata(), ruleDefinition, expectedOrg2); + verifyMetadata(rule.getMetadata(), metadata); } @Test @@ -191,30 +128,18 @@ public class RuleDaoTest { @Test public void selectByUuids() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule1 = db.rules().insert(); - db.rules().insertOrUpdateMetadata(rule1, organization); + db.rules().insertOrUpdateMetadata(rule1); RuleDefinitionDto rule2 = db.rules().insert(); - db.rules().insertOrUpdateMetadata(rule2, organization); + db.rules().insertOrUpdateMetadata(rule2); RuleDefinitionDto removedRule = db.rules().insert(r -> r.setStatus(REMOVED)); - db.rules().insertOrUpdateMetadata(removedRule, organization); - - assertThat(underTest.selectByUuids(db.getSession(), organization.getUuid(), singletonList(rule1.getUuid()))).hasSize(1); - assertThat(underTest.selectByUuids(db.getSession(), organization.getUuid(), asList(rule1.getUuid(), rule2.getUuid()))).hasSize(2); - assertThat(underTest.selectByUuids(db.getSession(), organization.getUuid(), asList(rule1.getUuid(), rule2.getUuid(), UNKNOWN_RULE_UUID))).hasSize(2); - assertThat(underTest.selectByUuids(db.getSession(), organization.getUuid(), asList(rule1.getUuid(), rule2.getUuid(), removedRule.getUuid()))).hasSize(3); - assertThat(underTest.selectByUuids(db.getSession(), organization.getUuid(), singletonList(UNKNOWN_RULE_UUID))).isEmpty(); - } - - @Test - public void selectByUuids_populates_organizationUuid_even_when_organization_has_no_metadata() { - OrganizationDto organization = db.organizations().insert(); - RuleDefinitionDto rule1 = db.rules().insert(); - RuleDefinitionDto rule2 = db.rules().insert(); + db.rules().insertOrUpdateMetadata(removedRule); - assertThat(underTest.selectByUuids(db.getSession(), organization.getUuid(), asList(rule1.getUuid(), rule2.getUuid()))) - .extracting(RuleDto::getOrganizationUuid) - .containsExactly(organization.getUuid(), organization.getUuid()); + assertThat(underTest.selectByUuids(db.getSession(), singletonList(rule1.getUuid()))).hasSize(1); + assertThat(underTest.selectByUuids(db.getSession(), asList(rule1.getUuid(), rule2.getUuid()))).hasSize(2); + assertThat(underTest.selectByUuids(db.getSession(), asList(rule1.getUuid(), rule2.getUuid(), UNKNOWN_RULE_UUID))).hasSize(2); + assertThat(underTest.selectByUuids(db.getSession(), asList(rule1.getUuid(), rule2.getUuid(), removedRule.getUuid()))).hasSize(3); + assertThat(underTest.selectByUuids(db.getSession(), singletonList(UNKNOWN_RULE_UUID))).isEmpty(); } @Test @@ -230,31 +155,19 @@ public class RuleDaoTest { @Test public void selectOrFailByKey() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule1 = db.rules().insert(); db.rules().insert(); - RuleDto rule = underTest.selectOrFailByKey(db.getSession(), organization, rule1.getKey()); + RuleDto rule = underTest.selectOrFailByKey(db.getSession(), rule1.getKey()); assertThat(rule.getUuid()).isEqualTo(rule1.getUuid()); } @Test public void selectOrFailByKey_fails_if_rule_not_found() { - OrganizationDto organization = db.organizations().insert(); - thrown.expect(RowNotFoundException.class); thrown.expectMessage("Rule with key 'NOT:FOUND' does not exist"); - underTest.selectOrFailByKey(db.getSession(), organization, RuleKey.of("NOT", "FOUND")); - } - - @Test - public void selectOrFailByKey_populates_organizationUuid_even_when_organization_has_no_metadata() { - OrganizationDto organization = db.organizations().insert(); - RuleDefinitionDto rule = db.rules().insert(); - - assertThat(underTest.selectOrFailByKey(db.getSession(), organization, rule.getKey()).getOrganizationUuid()) - .isEqualTo(organization.getUuid()); + underTest.selectOrFailByKey(db.getSession(), RuleKey.of("NOT", "FOUND")); } @Test @@ -267,30 +180,19 @@ public class RuleDaoTest { @Test public void selectByKeys() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule1 = db.rules().insert(); - db.rules().insertOrUpdateMetadata(rule1, organization); + db.rules().insertOrUpdateMetadata(rule1); RuleDefinitionDto rule2 = db.rules().insert(); - db.rules().insertOrUpdateMetadata(rule2, organization); + db.rules().insertOrUpdateMetadata(rule2); - assertThat(underTest.selectByKeys(db.getSession(), organization.getUuid(), Collections.emptyList())).isEmpty(); - assertThat(underTest.selectByKeys(db.getSession(), organization.getUuid(), singletonList(RuleKey.of("NOT", "FOUND")))).isEmpty(); + assertThat(underTest.selectByKeys(db.getSession(), Collections.emptyList())).isEmpty(); + assertThat(underTest.selectByKeys(db.getSession(), singletonList(RuleKey.of("NOT", "FOUND")))).isEmpty(); - List rules = underTest.selectByKeys(db.getSession(), organization.getUuid(), asList(rule1.getKey(), RuleKey.of("java", "OTHER"))); + List rules = underTest.selectByKeys(db.getSession(), asList(rule1.getKey(), RuleKey.of("java", "OTHER"))); assertThat(rules).hasSize(1); assertThat(rules.get(0).getUuid()).isEqualTo(rule1.getUuid()); } - @Test - public void selectByKeys_populates_organizationUuid_even_when_organization_has_no_metadata() { - OrganizationDto organization = db.organizations().insert(); - RuleDefinitionDto rule = db.rules().insert(); - - assertThat(underTest.selectByKeys(db.getSession(), organization.getUuid(), singletonList(rule.getKey()))) - .extracting(RuleDto::getOrganizationUuid) - .containsExactly(organization.getUuid()); - } - @Test public void selectDefinitionByKeys() { RuleDefinitionDto rule = db.rules().insert(); @@ -305,53 +207,25 @@ public class RuleDaoTest { @Test public void selectAll() { - OrganizationDto organization = db.organizations().insert(); - RuleDto rule1 = db.rules().insertRule(organization); - RuleDto rule2 = db.rules().insertRule(organization); - RuleDto rule3 = db.rules().insertRule(organization); - - assertThat(underTest.selectAll(db.getSession(), organization.getUuid())) - .extracting(RuleDto::getUuid) - .containsOnly(rule1.getUuid(), rule2.getUuid(), rule3.getUuid()); - } - - @Test - public void selectAll_returns_all_rules_even_if_organization_does_not_exist() { - RuleDefinitionDto rule1 = db.rules().insert(); - RuleDefinitionDto rule2 = db.rules().insert(); - RuleDefinitionDto rule3 = db.rules().insert(); + RuleDto rule1 = db.rules().insertRule(); + RuleDto rule2 = db.rules().insertRule(); + RuleDto rule3 = db.rules().insertRule(); - assertThat(underTest.selectAll(db.getSession(), "dfdfdf")) + assertThat(underTest.selectAll(db.getSession())) .extracting(RuleDto::getUuid) .containsOnly(rule1.getUuid(), rule2.getUuid(), rule3.getUuid()); } @Test - public void selectAll_populates_organizationUuid_even_when_organization_has_no_metadata() { - OrganizationDto organization = db.organizations().insert(); - RuleDefinitionDto ruleDefinition1 = db.rules().insert(); - RuleDefinitionDto ruleDefinition2 = db.rules().insert(); - - List rules = underTest.selectAll(db.getSession(), organization.getUuid()); - assertThat(rules) - .extracting(RuleDto::getUuid) - .containsOnly(ruleDefinition1.getUuid(), ruleDefinition2.getUuid()); - assertThat(rules) - .extracting(RuleDto::getOrganizationUuid) - .containsExactly(organization.getUuid(), organization.getUuid()); - } - - @Test - public void selectAll_returns_metadata_of_specified_organization() { + public void selectAll_returns_metadata() { RuleDefinitionDto ruleDefinition = db.rules().insert(); - OrganizationDto organization = db.organizations().insert(); - RuleMetadataDto expected = newRuleMetadata(ruleDefinition, organization); + RuleMetadataDto expected = newRuleMetadata(ruleDefinition); db.rules().insertRule(ruleDefinition, expected); - List rules = underTest.selectAll(db.getSession(), organization.getUuid()); + List rules = underTest.selectAll(db.getSession()); assertThat(rules).hasSize(1); - verifyMetadata(rules.iterator().next().getMetadata(), ruleDefinition, expected); + verifyMetadata(rules.iterator().next().getMetadata(), expected); } private void assertEquals(RuleDefinitionDto actual, RuleDefinitionDto expected) { @@ -379,8 +253,7 @@ public class RuleDaoTest { assertThat(actual.getType()).isEqualTo(expected.getType()); } - private static void verifyMetadata(RuleMetadataDto metadata, RuleDefinitionDto ruleDefinition, RuleMetadataDto expected) { - assertThat(metadata.getOrganizationUuid()).isEqualTo(expected.getOrganizationUuid()); + private static void verifyMetadata(RuleMetadataDto metadata, RuleMetadataDto expected) { assertThat(metadata.getRemediationBaseEffort()).isEqualTo(expected.getRemediationBaseEffort()); assertThat(metadata.getRemediationFunction()).isEqualTo(expected.getRemediationFunction()); assertThat(metadata.getRemediationGapMultiplier()).isEqualTo(expected.getRemediationGapMultiplier()); @@ -394,21 +267,6 @@ public class RuleDaoTest { assertThat(metadata.getAdHocType()).isEqualTo(expected.getAdHocType()); } - private static void verifyNoMetadata(RuleMetadataDto metadata, OrganizationDto organization) { - assertThat(metadata.getOrganizationUuid()).isEqualTo(organization.getUuid()); - assertThat(metadata.getRemediationBaseEffort()).isNull(); - assertThat(metadata.getRemediationFunction()).isNull(); - assertThat(metadata.getRemediationGapMultiplier()).isNull(); - assertThat(metadata.getTags()).isEmpty(); - assertThat(metadata.getNoteData()).isNull(); - assertThat(metadata.getNoteCreatedAt()).isNull(); - assertThat(metadata.getNoteUpdatedAt()).isNull(); - assertThat(metadata.getAdHocName()).isNull(); - assertThat(metadata.getAdHocDescription()).isNull(); - assertThat(metadata.getAdHocSeverity()).isNull(); - assertThat(metadata.getAdHocType()).isNull(); - } - @Test public void selectAllDefinitions() { RuleDefinitionDto rule1 = db.rules().insert(); @@ -436,156 +294,121 @@ public class RuleDaoTest { @Test public void selectByTypeAndLanguages() { - OrganizationDto organization = db.organizations().insert(); - OrganizationDto organization2 = db.organizations().insert(); - RuleDefinitionDto rule1 = db.rules().insert( r -> r.setKey(RuleKey.of("java", "S001")) .setConfigKey("S1") .setType(RuleType.VULNERABILITY) .setLanguage("java")); - db.rules().insertOrUpdateMetadata(rule1, organization); + db.rules().insertOrUpdateMetadata(rule1); RuleDefinitionDto rule2 = db.rules().insert( r -> r.setKey(RuleKey.of("js", "S002")) .setType(RuleType.SECURITY_HOTSPOT) .setLanguage("js")); - db.rules().insertOrUpdateMetadata(rule2, organization); + db.rules().insertOrUpdateMetadata(rule2); - assertThat(underTest.selectByTypeAndLanguages(db.getSession(), organization.getUuid(), singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList("java"))) - .extracting(RuleDto::getOrganizationUuid, RuleDto::getUuid, RuleDto::getLanguage, RuleDto::getType) - .containsExactly(tuple(organization.getUuid(), rule1.getUuid(), "java", RuleType.VULNERABILITY.getDbConstant())); + assertThat(underTest.selectByTypeAndLanguages(db.getSession(), singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList("java"))) + .extracting(RuleDto::getUuid, RuleDto::getLanguage, RuleDto::getType) + .containsExactly(tuple(rule1.getUuid(), "java", RuleType.VULNERABILITY.getDbConstant())); - // Rule available also on organization2 - assertThat(underTest.selectByTypeAndLanguages(db.getSession(), organization2.getUuid(), singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList("java"))) - .extracting(RuleDto::getOrganizationUuid, RuleDto::getUuid, RuleDto::getLanguage, RuleDto::getType) - .containsExactly(tuple(organization2.getUuid(), rule1.getUuid(), "java", RuleType.VULNERABILITY.getDbConstant())); + assertThat(underTest.selectByTypeAndLanguages(db.getSession(), singletonList(RuleType.SECURITY_HOTSPOT.getDbConstant()), singletonList("js"))) + .extracting(RuleDto::getUuid, RuleDto::getLanguage, RuleDto::getType) + .containsExactly(tuple(rule2.getUuid(), "js", RuleType.SECURITY_HOTSPOT.getDbConstant())); - assertThat(underTest.selectByTypeAndLanguages(db.getSession(), organization.getUuid(), singletonList(RuleType.SECURITY_HOTSPOT.getDbConstant()), singletonList("js"))) - .extracting(RuleDto::getOrganizationUuid, RuleDto::getUuid, RuleDto::getLanguage, RuleDto::getType) - .containsExactly(tuple(organization.getUuid(), rule2.getUuid(), "js", RuleType.SECURITY_HOTSPOT.getDbConstant())); - - // Rule available also on organization2 - assertThat(underTest.selectByTypeAndLanguages(db.getSession(), organization2.getUuid(), singletonList(RuleType.SECURITY_HOTSPOT.getDbConstant()), singletonList("js"))) - .extracting(RuleDto::getOrganizationUuid, RuleDto::getUuid, RuleDto::getLanguage, RuleDto::getType) - .containsExactly(tuple(organization2.getUuid(), rule2.getUuid(), "js", RuleType.SECURITY_HOTSPOT.getDbConstant())); - - assertThat(underTest.selectByTypeAndLanguages(db.getSession(), organization.getUuid(), singletonList(RuleType.SECURITY_HOTSPOT.getDbConstant()), singletonList("java"))) - .isEmpty(); - assertThat(underTest.selectByTypeAndLanguages(db.getSession(), organization.getUuid(), singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList("js"))) - .isEmpty(); + assertThat(underTest.selectByTypeAndLanguages(db.getSession(), singletonList(RuleType.SECURITY_HOTSPOT.getDbConstant()), singletonList("java"))).isEmpty(); + assertThat(underTest.selectByTypeAndLanguages(db.getSession(), singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList("js"))).isEmpty(); } @Test public void selectByTypeAndLanguages_return_nothing_when_no_rule_on_languages() { - OrganizationDto organization = db.organizations().insert(); - RuleDefinitionDto rule1 = db.rules().insert( r -> r.setKey(RuleKey.of("java", "S001")) .setConfigKey("S1") .setType(RuleType.VULNERABILITY) .setLanguage("java")); - db.rules().insertOrUpdateMetadata(rule1, organization); + db.rules().insertOrUpdateMetadata(rule1); RuleDefinitionDto rule2 = db.rules().insert( r -> r.setKey(RuleKey.of("js", "S002")) .setType(RuleType.VULNERABILITY) .setLanguage("js")); - db.rules().insertOrUpdateMetadata(rule2, organization); + db.rules().insertOrUpdateMetadata(rule2); - assertThat(underTest.selectByTypeAndLanguages(db.getSession(), organization.getUuid(), singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList("cpp"))) + assertThat(underTest.selectByTypeAndLanguages(db.getSession(), singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList("cpp"))) .isEmpty(); } @Test public void selectByTypeAndLanguages_return_nothing_when_no_rule_with_type() { - OrganizationDto organization = db.organizations().insert(); - RuleDefinitionDto rule1 = db.rules().insert( r -> r.setKey(RuleKey.of("java", "S001")) .setConfigKey("S1") .setType(RuleType.VULNERABILITY) .setLanguage("java")); - db.rules().insertOrUpdateMetadata(rule1, organization); + db.rules().insertOrUpdateMetadata(rule1); RuleDefinitionDto rule2 = db.rules().insert( r -> r.setKey(RuleKey.of("java", "S002")) .setType(RuleType.SECURITY_HOTSPOT) .setLanguage("java")); - db.rules().insertOrUpdateMetadata(rule2, organization); + db.rules().insertOrUpdateMetadata(rule2); RuleDefinitionDto rule3 = db.rules().insert( r -> r.setKey(RuleKey.of("java", "S003")) .setType(RuleType.CODE_SMELL) .setLanguage("java")); - db.rules().insertOrUpdateMetadata(rule3, organization); + db.rules().insertOrUpdateMetadata(rule3); - assertThat(underTest.selectByTypeAndLanguages(db.getSession(), organization.getUuid(), singletonList(RuleType.BUG.getDbConstant()), singletonList("java"))) + assertThat(underTest.selectByTypeAndLanguages(db.getSession(), singletonList(RuleType.BUG.getDbConstant()), singletonList("java"))) .isEmpty(); } @Test public void selectByTypeAndLanguages_ignores_external_rules() { - OrganizationDto organization = db.organizations().insert(); - RuleDefinitionDto rule1 = db.rules().insert( r -> r.setKey(RuleKey.of("java", "S001")) .setConfigKey("S1") .setType(RuleType.VULNERABILITY) .setIsExternal(true) .setLanguage("java")); - db.rules().insertOrUpdateMetadata(rule1, organization); + db.rules().insertOrUpdateMetadata(rule1); - assertThat(underTest.selectByTypeAndLanguages(db.getSession(), organization.getUuid(), singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList("java"))) - .extracting(RuleDto::getOrganizationUuid, RuleDto::getUuid, RuleDto::getLanguage, RuleDto::getType) + assertThat(underTest.selectByTypeAndLanguages(db.getSession(), singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList("java"))) + .extracting(RuleDto::getUuid, RuleDto::getLanguage, RuleDto::getType) .isEmpty(); } @Test public void selectByTypeAndLanguages_ignores_template_rules() { - OrganizationDto organization = db.organizations().insert(); - RuleDefinitionDto rule1 = db.rules().insert( r -> r.setKey(RuleKey.of("java", "S001")) .setConfigKey("S1") .setType(RuleType.VULNERABILITY) .setIsTemplate(true) .setLanguage("java")); - db.rules().insertOrUpdateMetadata(rule1, organization); + db.rules().insertOrUpdateMetadata(rule1); - assertThat(underTest.selectByTypeAndLanguages(db.getSession(), organization.getUuid(), singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList("java"))) - .extracting(RuleDto::getOrganizationUuid, RuleDto::getUuid, RuleDto::getLanguage, RuleDto::getType) + assertThat(underTest.selectByTypeAndLanguages(db.getSession(),singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList("java"))) + .extracting( RuleDto::getUuid, RuleDto::getLanguage, RuleDto::getType) .isEmpty(); } @Test public void select_by_query() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule1 = db.rules().insert(r -> r.setKey(RuleKey.of("java", "S001")).setConfigKey("S1")); - db.rules().insertOrUpdateMetadata(rule1, organization); + db.rules().insertOrUpdateMetadata(rule1); RuleDefinitionDto rule2 = db.rules().insert(r -> r.setKey(RuleKey.of("java", "S002"))); - db.rules().insertOrUpdateMetadata(rule2, organization); + db.rules().insertOrUpdateMetadata(rule2); RuleDefinitionDto removedRule = db.rules().insert(r -> r.setStatus(REMOVED)); - assertThat(underTest.selectByQuery(db.getSession(), organization.getUuid(), RuleQuery.create())).hasSize(2); - assertThat(underTest.selectByQuery(db.getSession(), organization.getUuid(), RuleQuery.create().withKey("S001"))).hasSize(1); - assertThat(underTest.selectByQuery(db.getSession(), organization.getUuid(), RuleQuery.create().withConfigKey("S1"))).hasSize(1); - assertThat(underTest.selectByQuery(db.getSession(), organization.getUuid(), RuleQuery.create().withRepositoryKey("java"))).hasSize(2); - assertThat(underTest.selectByQuery(db.getSession(), organization.getUuid(), + assertThat(underTest.selectByQuery(db.getSession(), RuleQuery.create())).hasSize(2); + assertThat(underTest.selectByQuery(db.getSession(), RuleQuery.create().withKey("S001"))).hasSize(1); + assertThat(underTest.selectByQuery(db.getSession(), RuleQuery.create().withConfigKey("S1"))).hasSize(1); + assertThat(underTest.selectByQuery(db.getSession(), RuleQuery.create().withRepositoryKey("java"))).hasSize(2); + assertThat(underTest.selectByQuery(db.getSession(), RuleQuery.create().withKey("S001").withConfigKey("S1").withRepositoryKey("java"))).hasSize(1); } - @Test - public void select_by_query_populates_organizationUuid_even_when_organization_has_no_metadata() { - OrganizationDto organization = db.organizations().insert(); - db.rules().insert(); - db.rules().insert(); - - assertThat(underTest.selectByQuery(db.getSession(), organization.getUuid(), RuleQuery.create())) - .extracting(RuleDto::getOrganizationUuid) - .containsExactly(organization.getUuid(), organization.getUuid()); - } - @Test public void insert() { RuleDefinitionDto newRule = new RuleDefinitionDto() @@ -703,11 +526,9 @@ public class RuleDaoTest { @Test public void update_RuleMetadataDto_inserts_row_in_RULE_METADATA_if_not_exists_yet() { RuleDefinitionDto rule = db.rules().insert(); - String organizationUuid = "org-1"; RuleMetadataDto metadataToUpdate = new RuleMetadataDto() .setRuleUuid(rule.getUuid()) - .setOrganizationUuid(organizationUuid) .setNoteData("My note") .setNoteUserUuid("admin") .setNoteCreatedAt(DateUtils.parseDate("2013-12-19").getTime()) @@ -726,8 +547,7 @@ public class RuleDaoTest { underTest.insertOrUpdate(db.getSession(), metadataToUpdate); db.getSession().commit(); - OrganizationDto organization = OrganizationTesting.newOrganizationDto().setUuid(organizationUuid); - RuleDto ruleDto = underTest.selectOrFailByKey(db.getSession(), organization, rule.getKey()); + RuleDto ruleDto = underTest.selectOrFailByKey(db.getSession(), rule.getKey()); assertThat(ruleDto.getNoteData()).isEqualTo("My note"); assertThat(ruleDto.getNoteUserUuid()).isEqualTo("admin"); assertThat(ruleDto.getNoteCreatedAt()).isNotNull(); @@ -755,16 +575,12 @@ public class RuleDaoTest { @Test public void update_RuleMetadataDto_updates_row_in_RULE_METADATA_if_already_exists() { RuleDefinitionDto rule = db.rules().insert(); - String organizationUuid = "org-1"; - OrganizationDto organization = OrganizationTesting.newOrganizationDto().setUuid(organizationUuid); RuleMetadataDto metadataV1 = new RuleMetadataDto() .setRuleUuid(rule.getUuid()) - .setOrganizationUuid(organizationUuid) .setCreatedAt(3_500_000_000_000L) .setUpdatedAt(4_000_000_000_000L); RuleMetadataDto metadataV2 = new RuleMetadataDto() .setRuleUuid(rule.getUuid()) - .setOrganizationUuid(organizationUuid) .setNoteData("My note") .setNoteUserUuid("admin") .setNoteCreatedAt(DateUtils.parseDate("2013-12-19").getTime()) @@ -784,7 +600,7 @@ public class RuleDaoTest { db.commit(); assertThat(db.countRowsOfTable("RULES_METADATA")).isEqualTo(1); - RuleDto ruleDto = underTest.selectOrFailByKey(db.getSession(), organization, rule.getKey()); + RuleDto ruleDto = underTest.selectOrFailByKey(db.getSession(), rule.getKey()); assertThat(ruleDto.getNoteData()).isNull(); assertThat(ruleDto.getNoteUserUuid()).isNull(); assertThat(ruleDto.getNoteCreatedAt()).isNull(); @@ -804,7 +620,7 @@ public class RuleDaoTest { underTest.insertOrUpdate(db.getSession(), metadataV2); db.commit(); - ruleDto = underTest.selectOrFailByKey(db.getSession(), organization, rule.getKey()); + ruleDto = underTest.selectOrFailByKey(db.getSession(), rule.getKey()); assertThat(ruleDto.getNoteData()).isEqualTo("My note"); assertThat(ruleDto.getNoteUserUuid()).isEqualTo("admin"); assertThat(ruleDto.getNoteCreatedAt()).isNotNull(); @@ -1057,42 +873,20 @@ public class RuleDaoTest { assertThat(accumulator.list).isEmpty(); } - @Test - public void scrollIndexingRuleExtensions() { - Accumulator accumulator = new Accumulator<>(); - RuleDefinitionDto r1 = db.rules().insert(); - RuleMetadataDto r1Extension = db.rules().insertOrUpdateMetadata(r1, organization, r -> r.setTagsField("t1,t2")); - RuleDefinitionDto r2 = db.rules().insert(); - RuleMetadataDto r2Extension = db.rules().insertOrUpdateMetadata(r2, organization, r -> r.setTagsField("t1,t3")); - - underTest.scrollIndexingRuleExtensions(db.getSession(), accumulator); - - assertThat(accumulator.list) - .extracting(RuleExtensionForIndexingDto::getRuleUuid, - RuleExtensionForIndexingDto::getRuleKey, - RuleExtensionForIndexingDto::getOrganizationUuid, RuleExtensionForIndexingDto::getTags) - .containsExactlyInAnyOrder( - tuple(r1.getUuid(), r1.getKey(), organization.getUuid(), r1Extension.getTagsAsString()), - tuple(r2.getUuid(), r2.getKey(), organization.getUuid(), r2Extension.getTagsAsString())); - } - @Test public void scrollIndexingRuleExtensionsByIds() { Accumulator accumulator = new Accumulator<>(); RuleDefinitionDto r1 = db.rules().insert(); - RuleMetadataDto r1Extension = db.rules().insertOrUpdateMetadata(r1, organization, r -> r.setTagsField("t1,t2")); - RuleExtensionId r1ExtensionId = new RuleExtensionId(organization.getUuid(), r1.getUuid()); + RuleMetadataDto r1Extension = db.rules().insertOrUpdateMetadata(r1, r -> r.setTagsField("t1,t2")); RuleDefinitionDto r2 = db.rules().insert(); - db.rules().insertOrUpdateMetadata(r2, organization, r -> r.setTagsField("t1,t3")); + db.rules().insertOrUpdateMetadata(r2, r -> r.setTagsField("t1,t3")); - underTest.scrollIndexingRuleExtensionsByIds(db.getSession(), singletonList(r1ExtensionId), accumulator); + underTest.scrollIndexingRuleExtensionsByIds(db.getSession(), singletonList(r1.getUuid()), accumulator); assertThat(accumulator.list) - .extracting(RuleExtensionForIndexingDto::getRuleUuid, - RuleExtensionForIndexingDto::getRuleKey, - RuleExtensionForIndexingDto::getOrganizationUuid, RuleExtensionForIndexingDto::getTags) + .extracting(RuleExtensionForIndexingDto::getRuleUuid, RuleExtensionForIndexingDto::getRuleKey, RuleExtensionForIndexingDto::getTags) .containsExactlyInAnyOrder( - tuple(r1.getUuid(), r1.getKey(), organization.getUuid(), r1Extension.getTagsAsString())); + tuple(r1.getUuid(), r1.getKey(), r1Extension.getTagsAsString())); } @Test diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/webhook/WebhookDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/webhook/WebhookDaoTest.java index 38e619a7a80..5d8b6eaea06 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/webhook/WebhookDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/webhook/WebhookDaoTest.java @@ -49,7 +49,6 @@ public class WebhookDaoTest { private final DbSession dbSession = dbTester.getSession(); private final WebhookDao underTest = dbClient.webhookDao(); private final WebhookDbTester webhookDbTester = dbTester.webhooks(); - private final WebhookDeliveryDbTester webhookDeliveryDbTester = dbTester.webhookDelivery(); private final ComponentDbTester componentDbTester = dbTester.components(); private final OrganizationDbTester organizationDbTester = dbTester.organizations(); diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentDbTester.java index 8b3f6c50e89..8a7ca726cae 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentDbTester.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentDbTester.java @@ -140,6 +140,12 @@ public class ComponentDbTester { return getProjectDto(componentDto); } + public ProjectDto insertPublicProjectDto(Consumer dtoPopulator) { + ComponentDto componentDto = insertPublicProject(dtoPopulator); + return getProjectDto(componentDto); + } + + public final ProjectDto insertPublicProjectDto(OrganizationDto organization, Consumer dtoPopulator) { ComponentDto componentDto = insertPublicProject(organization, dtoPopulator); return getProjectDto(componentDto); diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/organization/OrganizationDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/organization/OrganizationDbTester.java index 84e0afdf5fd..34356e1fbec 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/organization/OrganizationDbTester.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/organization/OrganizationDbTester.java @@ -40,6 +40,10 @@ public class OrganizationDbTester { this.db = db; } + public OrganizationDto getDefaultOrganization() { + return db.getDefaultOrganization(); + } + /** * Insert an {@link OrganizationDto} and commit the session */ diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/qualityprofile/QualityProfileDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/qualityprofile/QualityProfileDbTester.java index 63be5801b23..71790bdea02 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/qualityprofile/QualityProfileDbTester.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/qualityprofile/QualityProfileDbTester.java @@ -27,7 +27,6 @@ import org.sonar.core.util.Uuids; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.project.ProjectDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.user.GroupDto; @@ -41,10 +40,12 @@ import static org.sonar.db.qualityprofile.ActiveRuleDto.createFor; public class QualityProfileDbTester { private final DbClient dbClient; private final DbSession dbSession; + private final DbTester dbTester; public QualityProfileDbTester(DbTester dbTester) { this.dbClient = dbTester.getDbClient(); this.dbSession = dbTester.getSession(); + this.dbTester = dbTester; } public Optional selectByUuid(String uuid) { @@ -54,17 +55,17 @@ public class QualityProfileDbTester { /** * Create a profile with random field values on the specified organization. */ - public QProfileDto insert(OrganizationDto organization) { - return insert(organization, c -> { + public QProfileDto insert() { + return insert(c -> { }); } + /** - * Create a profile with random field values on the specified organization. + * Create a profile with random field values */ - public QProfileDto insert(OrganizationDto organization, Consumer consumer) { - QProfileDto profile = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organization.getUuid()); + public QProfileDto insert(Consumer consumer) { + QProfileDto profile = QualityProfileTesting.newQualityProfileDto(); consumer.accept(profile); dbClient.qualityProfileDao().insert(dbSession, profile); @@ -107,7 +108,7 @@ public class QualityProfileDbTester { public QualityProfileDbTester setAsDefault(QProfileDto profile, QProfileDto... others) { dbClient.defaultQProfileDao().insertOrUpdate(dbSession, DefaultQProfileDto.from(profile)); for (QProfileDto other : others) { - dbClient.defaultQProfileDao().insertOrUpdate(dbSession, DefaultQProfileDto.from(other)); + dbClient.defaultQProfileDao().insertOrUpdate(dbSession, DefaultQProfileDto.from( other)); } dbSession.commit(); return this; diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/qualityprofile/QualityProfileTesting.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/qualityprofile/QualityProfileTesting.java index 2df3eef2984..7590b1901e6 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/qualityprofile/QualityProfileTesting.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/qualityprofile/QualityProfileTesting.java @@ -41,7 +41,6 @@ public class QualityProfileTesting { return new QProfileDto() .setKee(uuid) .setRulesProfileUuid(Uuids.createFast()) - .setOrganizationUuid(randomAlphanumeric(40)) .setName(uuid) .setLanguage(randomAlphanumeric(20)) .setLastUsed(nextLong()); diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleDbTester.java index c97a88fd380..83eb32a043d 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleDbTester.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleDbTester.java @@ -129,15 +129,15 @@ public class RuleDbTester { } @SafeVarargs - public final RuleMetadataDto insertOrUpdateMetadata(RuleDefinitionDto rule, OrganizationDto organization, Consumer... populaters) { - RuleMetadataDto dto = RuleTesting.newRuleMetadata(rule, organization); + public final RuleMetadataDto insertOrUpdateMetadata(RuleDefinitionDto rule, Consumer... populaters) { + RuleMetadataDto dto = RuleTesting.newRuleMetadata(rule); asList(populaters).forEach(populater -> populater.accept(dto)); return insertOrUpdateMetadata(dto); } @SafeVarargs - public final RuleMetadataDto insertOrUpdateMetadata(RuleDefinitionDto rule, UserDto noteUser, OrganizationDto organization, Consumer... populaters) { - RuleMetadataDto dto = RuleTesting.newRuleMetadata(rule, noteUser, organization); + public final RuleMetadataDto insertOrUpdateMetadata(RuleDefinitionDto rule, UserDto noteUser, Consumer... populaters) { + RuleMetadataDto dto = RuleTesting.newRuleMetadata(rule, noteUser); asList(populaters).forEach(populater -> populater.accept(dto)); return insertOrUpdateMetadata(dto); } @@ -169,10 +169,8 @@ public class RuleDbTester { insert(ruleDto.getDefinition()); RuleMetadataDto metadata = ruleDto.getMetadata(); - if (metadata.getOrganizationUuid() != null) { - db.getDbClient().ruleDao().insertOrUpdate(db.getSession(), metadata.setRuleUuid(ruleDto.getUuid())); - db.commit(); - } + db.getDbClient().ruleDao().insertOrUpdate(db.getSession(), metadata.setRuleUuid(ruleDto.getUuid())); + db.commit(); return ruleDto; } @@ -185,8 +183,8 @@ public class RuleDbTester { } @SafeVarargs - public final RuleDto insertRule(OrganizationDto organization, Consumer... populaters) { - RuleDto ruleDto = newRuleDto(organization); + public final RuleDto insertRule(Consumer... populaters) { + RuleDto ruleDto = newRuleDto(); asList(populaters).forEach(populater -> populater.accept(ruleDto)); return insertRule(ruleDto); } diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleTesting.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleTesting.java index 56c70c72080..fbe81281289 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleTesting.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleTesting.java @@ -95,7 +95,6 @@ public class RuleTesting { public static RuleMetadataDto newRuleMetadata() { return new RuleMetadataDto() .setRuleUuid("uuid_" + randomAlphanumeric(5)) - .setOrganizationUuid("org_" + randomAlphanumeric(5)) .setRemediationBaseEffort(nextInt(10) + "h") .setRemediationGapMultiplier(nextInt(10) + "h") .setRemediationFunction("LINEAR_OFFSET") @@ -112,15 +111,13 @@ public class RuleTesting { .setUpdatedAt(System.currentTimeMillis() - 50); } - public static RuleMetadataDto newRuleMetadata(RuleDefinitionDto rule, OrganizationDto organization) { + public static RuleMetadataDto newRuleMetadata(RuleDefinitionDto rule) { return newRuleMetadata() - .setRuleUuid(rule.getUuid()) - .setOrganizationUuid(organization.getUuid()); + .setRuleUuid(rule.getUuid()); } - public static RuleMetadataDto newRuleMetadata(RuleDefinitionDto rule, UserDto noteUser, OrganizationDto organization) { - return newRuleMetadata(rule, organization) - .setNoteUserUuid(noteUser.getUuid()); + public static RuleMetadataDto newRuleMetadata(RuleDefinitionDto rule, UserDto noteUser) { + return newRuleMetadata(rule).setNoteUserUuid(noteUser.getUuid()); } public static RuleParamDto newRuleParam(RuleDefinitionDto rule) { @@ -149,14 +146,6 @@ public class RuleTesting { return newDto(XOO_X1).setLanguage("xoo"); } - /** - * @deprecated use newRule(...) - */ - @Deprecated - public static RuleDto newXooX1(OrganizationDto organization) { - return newDto(XOO_X1, requireNonNull(organization, "organization can't be null")).setLanguage("xoo"); - } - /** * @deprecated use newRule(...) */ @@ -165,14 +154,6 @@ public class RuleTesting { return newDto(XOO_X2).setLanguage("xoo"); } - /** - * @deprecated use newRule(...) - */ - @Deprecated - public static RuleDto newXooX2(OrganizationDto organization) { - return newDto(XOO_X2, requireNonNull(organization, "organization can't be null")).setLanguage("xoo"); - } - /** * @deprecated use newRule(...) */ @@ -181,27 +162,11 @@ public class RuleTesting { return newDto(XOO_X3).setLanguage("xoo"); } - /** - * @deprecated use newRule(...) - */ - @Deprecated - public static RuleDto newXooX3(OrganizationDto organization) { - return newDto(XOO_X3, requireNonNull(organization, "organization can't be null")).setLanguage("xoo"); - } - /** * @deprecated use newRule(...) */ @Deprecated public static RuleDto newDto(RuleKey ruleKey) { - return newDto(ruleKey, null); - } - - /** - * @deprecated use newRule(...) - */ - @Deprecated - public static RuleDto newDto(RuleKey ruleKey, @Nullable OrganizationDto organization) { RuleDto res = new RuleDto() .setUuid("uuid_" + Uuids.createFast()) .setRuleKey(ruleKey.rule()) @@ -222,14 +187,11 @@ public class RuleTesting { .setType(RuleType.CODE_SMELL) .setCreatedAt(new Date().getTime()) .setUpdatedAt(new Date().getTime()) - .setScope(Scope.MAIN); - if (organization != null) { - res - .setOrganizationUuid(organization.getUuid()) - .setTags(ImmutableSet.of("tag1", "tag2")) - .setRemediationFunction("LINEAR") - .setRemediationGapMultiplier("1h"); - } + .setScope(Scope.MAIN) + .setTags(ImmutableSet.of("tag1", "tag2")) + .setRemediationFunction("LINEAR") + .setRemediationGapMultiplier("1h"); + return res; } @@ -241,24 +203,11 @@ public class RuleTesting { return newDto(RuleKey.of(randomAlphanumeric(30), randomAlphanumeric(30))); } - /** - * @deprecated use newRule(...) - */ - @Deprecated - public static RuleDto newRuleDto(OrganizationDto organization) { - return newDto(RuleKey.of(randomAlphanumeric(30), randomAlphanumeric(30)), organization); - } - public static RuleDto newTemplateRule(RuleKey ruleKey) { return newDto(ruleKey) .setIsTemplate(true); } - public static RuleDto newTemplateRule(RuleKey ruleKey, OrganizationDto organization) { - return newDto(ruleKey, organization) - .setIsTemplate(true); - } - /** * @deprecated use {@link #newCustomRule(RuleDefinitionDto)} */ @@ -343,10 +292,6 @@ public class RuleTesting { return rule -> rule.setSystemTags(copyOf(tags)); } - public static Consumer setOrganization(OrganizationDto organization) { - return rule -> rule.setOrganizationUuid(organization.getUuid()); - } - public static Consumer setTags(String... tags) { return rule -> rule.setTags(copyOf(tags)); } diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/user/UserDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/user/UserDbTester.java index d3b3d4540e3..928651f904a 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/user/UserDbTester.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/user/UserDbTester.java @@ -146,6 +146,11 @@ public class UserDbTester { return insertGroup(group); } + public GroupDto insertGroup(String name) { + GroupDto group = GroupTesting.newGroupDto().setName(name).setOrganizationUuid(db.getDefaultOrganization().getUuid()); + return insertGroup(group); + } + /** * Create group in default organization */ diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/AddPrimaryKeyToDefaultQProfiles.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/AddPrimaryKeyToDefaultQProfiles.java new file mode 100644 index 00000000000..5f0b04849b5 --- /dev/null +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/AddPrimaryKeyToDefaultQProfiles.java @@ -0,0 +1,36 @@ +/* + * SonarQube + * Copyright (C) 2009-2020 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.platform.db.migration.version.v85; + +import java.sql.SQLException; +import org.sonar.db.Database; +import org.sonar.server.platform.db.migration.step.DdlChange; +import org.sonar.server.platform.db.migration.version.v84.util.AddPrimaryKeyBuilder; + +public class AddPrimaryKeyToDefaultQProfiles extends DdlChange { + public AddPrimaryKeyToDefaultQProfiles(Database db) { + super(db); + } + + @Override + public void execute(Context context) throws SQLException { + context.execute(new AddPrimaryKeyBuilder("default_qprofiles", "language").build()); + } +} diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DbVersion85.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DbVersion85.java index daeb281ea00..c11641605a6 100644 --- a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DbVersion85.java +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DbVersion85.java @@ -55,7 +55,11 @@ public class DbVersion85 implements DbVersion { .add(4024, "Populate 'branch_type' in 'project_branches'", FillProjectBranchesBranchType.class) .add(4025, "Make 'branch_type' in 'project_branches' not nullable", MakeProjectBranchesBranchTypeNotNullable.class) .add(4026, "Drop column 'key_type' in table 'project_branches'", DropProjectBranchesKeyType.class) - + .add(4027, "Drop organization_uuid from 'quality_profile' table", DropOrganizationFromQualityProfileTable.class) + .add(4028, "Drop primary key of table 'default_qprofiles'", DropDefaultQProfilesPk.class) + .add(4029, "Drop organization_uuid from 'default_qprofiles' table", DropOrganizationFromDefaultQProfiles.class) + .add(4030, "Add primary key to the table 'default_qprofiles", AddPrimaryKeyToDefaultQProfiles.class) + .add(4031, "Drop 'organization_uuid' in 'rules_metadata'", DropOrganizationInRulesMetadata.class) ; } } diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropDefaultQProfilesPk.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropDefaultQProfilesPk.java new file mode 100644 index 00000000000..ac4e2746683 --- /dev/null +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropDefaultQProfilesPk.java @@ -0,0 +1,36 @@ +/* + * SonarQube + * Copyright (C) 2009-2020 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.platform.db.migration.version.v85; + +import java.sql.SQLException; +import org.sonar.db.Database; +import org.sonar.server.platform.db.migration.sql.DropConstraintBuilder; +import org.sonar.server.platform.db.migration.step.DdlChange; + +public class DropDefaultQProfilesPk extends DdlChange { + public DropDefaultQProfilesPk(Database db) { + super(db); + } + + @Override + public void execute(Context context) throws SQLException { + context.execute(new DropConstraintBuilder(getDialect()).setName("pk_default_qprofiles").setTable("default_qprofiles").build()); + } +} diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromDefaultQProfiles.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromDefaultQProfiles.java new file mode 100644 index 00000000000..0c5fad100b8 --- /dev/null +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromDefaultQProfiles.java @@ -0,0 +1,36 @@ +/* + * SonarQube + * Copyright (C) 2009-2020 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.platform.db.migration.version.v85; + +import java.sql.SQLException; +import org.sonar.db.Database; +import org.sonar.server.platform.db.migration.sql.DropColumnsBuilder; +import org.sonar.server.platform.db.migration.step.DdlChange; + +public class DropOrganizationFromDefaultQProfiles extends DdlChange { + public DropOrganizationFromDefaultQProfiles(Database db) { + super(db); + } + + @Override + public void execute(Context context) throws SQLException { + context.execute(new DropColumnsBuilder(getDialect(), "default_qprofiles", "organization_uuid").build()); + } +} diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromQualityProfileTable.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromQualityProfileTable.java new file mode 100644 index 00000000000..441b1656976 --- /dev/null +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromQualityProfileTable.java @@ -0,0 +1,37 @@ +/* + * SonarQube + * Copyright (C) 2009-2020 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.platform.db.migration.version.v85; + +import java.sql.SQLException; +import org.sonar.db.Database; +import org.sonar.server.platform.db.migration.sql.DropColumnsBuilder; +import org.sonar.server.platform.db.migration.step.DdlChange; + +public class DropOrganizationFromQualityProfileTable extends DdlChange { + + public DropOrganizationFromQualityProfileTable(Database db) { + super(db); + } + + @Override + public void execute(Context context) throws SQLException { + context.execute(new DropColumnsBuilder(getDialect(), "org_qprofiles", "organization_uuid").build()); + } +} diff --git a/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationInRulesMetadata.java b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationInRulesMetadata.java new file mode 100644 index 00000000000..6348aad6123 --- /dev/null +++ b/server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationInRulesMetadata.java @@ -0,0 +1,42 @@ +/* + * SonarQube + * Copyright (C) 2009-2020 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.platform.db.migration.version.v85; + +import java.sql.SQLException; +import org.sonar.db.Database; +import org.sonar.server.platform.db.migration.sql.DropColumnsBuilder; +import org.sonar.server.platform.db.migration.sql.DropConstraintBuilder; +import org.sonar.server.platform.db.migration.step.DdlChange; +import org.sonar.server.platform.db.migration.version.v84.util.AddPrimaryKeyBuilder; + +public class DropOrganizationInRulesMetadata extends DdlChange { + private static final String TABLE_NAME = "rules_metadata"; + + public DropOrganizationInRulesMetadata(Database db) { + super(db); + } + + @Override + public void execute(Context context) throws SQLException { + context.execute(new DropConstraintBuilder(getDialect()).setName("pk_rules_metadata").setTable(TABLE_NAME).build()); + context.execute(new DropColumnsBuilder(getDialect(), TABLE_NAME, "organization_uuid").build()); + context.execute(new AddPrimaryKeyBuilder(TABLE_NAME, "rule_uuid").build()); + } +} diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/AddPrimaryKeyToDefaultQProfilesTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/AddPrimaryKeyToDefaultQProfilesTest.java new file mode 100644 index 00000000000..bb5e8e7b52e --- /dev/null +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/AddPrimaryKeyToDefaultQProfilesTest.java @@ -0,0 +1,40 @@ +/* + * SonarQube + * Copyright (C) 2009-2020 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.platform.db.migration.version.v85; + +import java.sql.SQLException; +import org.junit.Rule; +import org.junit.Test; +import org.sonar.db.CoreDbTester; +import org.sonar.server.platform.db.migration.step.MigrationStep; + +public class AddPrimaryKeyToDefaultQProfilesTest { + @Rule + public CoreDbTester db = CoreDbTester.createForSchema(AddPrimaryKeyToDefaultQProfilesTest.class, "schema.sql"); + + private MigrationStep underTest = new AddPrimaryKeyToDefaultQProfiles(db.database()); + + @Test + public void execute() throws SQLException { + db.assertNoPrimaryKey("default_qprofiles"); + underTest.execute(); + db.assertPrimaryKey("default_qprofiles", "pk_default_qprofiles", "language"); + } +} diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropDefaultQProfilesPkTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropDefaultQProfilesPkTest.java new file mode 100644 index 00000000000..7070feb72d2 --- /dev/null +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropDefaultQProfilesPkTest.java @@ -0,0 +1,41 @@ +/* + * SonarQube + * Copyright (C) 2009-2020 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.platform.db.migration.version.v85; + +import java.sql.SQLException; +import org.junit.Rule; +import org.junit.Test; +import org.sonar.db.CoreDbTester; +import org.sonar.server.platform.db.migration.step.MigrationStep; + +public class DropDefaultQProfilesPkTest { + @Rule + public CoreDbTester db = CoreDbTester.createForSchema(DropDefaultQProfilesPkTest.class, "schema.sql"); + + private MigrationStep underTest = new DropDefaultQProfilesPk(db.database()); + + @Test + public void execute() throws SQLException { + db.assertPrimaryKey("default_qprofiles", "pk_default_qprofiles", "organization_uuid", "language"); + + underTest.execute(); + db.assertNoPrimaryKey("default_qprofiles"); + } +} diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromDefaultQProfilesTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromDefaultQProfilesTest.java new file mode 100644 index 00000000000..00b40ce7164 --- /dev/null +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromDefaultQProfilesTest.java @@ -0,0 +1,41 @@ +/* + * SonarQube + * Copyright (C) 2009-2020 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.platform.db.migration.version.v85; + +import java.sql.SQLException; +import java.sql.Types; +import org.junit.Rule; +import org.junit.Test; +import org.sonar.db.CoreDbTester; +import org.sonar.server.platform.db.migration.step.MigrationStep; + +public class DropOrganizationFromDefaultQProfilesTest { + @Rule + public CoreDbTester db = CoreDbTester.createForSchema(DropOrganizationFromDefaultQProfilesTest.class, "schema.sql"); + + private MigrationStep underTest = new DropOrganizationFromDefaultQProfiles(db.database()); + + @Test + public void execute() throws SQLException { + db.assertColumnDefinition("default_qprofiles", "organization_uuid", Types.VARCHAR, 40, false); + underTest.execute(); + db.assertColumnDoesNotExist("default_qprofiles", "organization_uuid"); + } +} diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromQualityProfileTableTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromQualityProfileTableTest.java new file mode 100644 index 00000000000..27471cbe8c6 --- /dev/null +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromQualityProfileTableTest.java @@ -0,0 +1,40 @@ +/* + * SonarQube + * Copyright (C) 2009-2020 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.platform.db.migration.version.v85; + +import java.sql.SQLException; +import org.junit.Rule; +import org.junit.Test; +import org.sonar.db.CoreDbTester; + +public class DropOrganizationFromQualityProfileTableTest { + + @Rule + public CoreDbTester dbTester = CoreDbTester.createForSchema(DropOrganizationFromQualityProfileTableTest.class, "schema.sql"); + + private DropOrganizationFromQualityProfileTable underTest = new DropOrganizationFromQualityProfileTable(dbTester.database()); + + @Test + public void column_has_been_dropped() throws SQLException { + underTest.execute(); + dbTester.assertColumnDoesNotExist("org_qprofiles", "organization_uuid"); + } + +} diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationInRulesMetadataTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationInRulesMetadataTest.java new file mode 100644 index 00000000000..6cf2e7c7b80 --- /dev/null +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v85/DropOrganizationInRulesMetadataTest.java @@ -0,0 +1,40 @@ +/* + * SonarQube + * Copyright (C) 2009-2020 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.platform.db.migration.version.v85; + +import java.sql.SQLException; +import org.junit.Rule; +import org.junit.Test; +import org.sonar.db.CoreDbTester; +import org.sonar.server.platform.db.migration.step.MigrationStep; + +public class DropOrganizationInRulesMetadataTest { + @Rule + public CoreDbTester dbTester = CoreDbTester.createForSchema(DropOrganizationInRulesMetadataTest.class, "schema.sql"); + + private MigrationStep underTest = new DropOrganizationInRulesMetadata(dbTester.database()); + + @Test + public void column_has_been_dropped() throws SQLException { + underTest.execute(); + dbTester.assertColumnDoesNotExist("rules_metadata", "organization_uuid"); + dbTester.assertPrimaryKey("rules_metadata", "pk_rules_metadata", "rule_uuid"); + } +} diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/AddPrimaryKeyToDefaultQProfilesTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/AddPrimaryKeyToDefaultQProfilesTest/schema.sql new file mode 100644 index 00000000000..6e5205d8d1f --- /dev/null +++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/AddPrimaryKeyToDefaultQProfilesTest/schema.sql @@ -0,0 +1,7 @@ +CREATE TABLE "DEFAULT_QPROFILES"( + "LANGUAGE" VARCHAR(20) NOT NULL, + "QPROFILE_UUID" VARCHAR(255) NOT NULL, + "CREATED_AT" BIGINT NOT NULL, + "UPDATED_AT" BIGINT NOT NULL +); +CREATE UNIQUE INDEX "UNIQ_DEFAULT_QPROFILES_UUID" ON "DEFAULT_QPROFILES"("QPROFILE_UUID"); diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropDefaultQProfilesPkTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropDefaultQProfilesPkTest/schema.sql new file mode 100644 index 00000000000..85b059b64a1 --- /dev/null +++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropDefaultQProfilesPkTest/schema.sql @@ -0,0 +1,9 @@ +CREATE TABLE "DEFAULT_QPROFILES"( + "ORGANIZATION_UUID" VARCHAR(40) NOT NULL, + "LANGUAGE" VARCHAR(20) NOT NULL, + "QPROFILE_UUID" VARCHAR(255) NOT NULL, + "CREATED_AT" BIGINT NOT NULL, + "UPDATED_AT" BIGINT NOT NULL +); +ALTER TABLE "DEFAULT_QPROFILES" ADD CONSTRAINT "PK_DEFAULT_QPROFILES" PRIMARY KEY("ORGANIZATION_UUID", "LANGUAGE"); +CREATE UNIQUE INDEX "UNIQ_DEFAULT_QPROFILES_UUID" ON "DEFAULT_QPROFILES"("QPROFILE_UUID"); diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromDefaultQProfilesTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromDefaultQProfilesTest/schema.sql new file mode 100644 index 00000000000..c72d6748129 --- /dev/null +++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromDefaultQProfilesTest/schema.sql @@ -0,0 +1,8 @@ +CREATE TABLE "DEFAULT_QPROFILES"( + "ORGANIZATION_UUID" VARCHAR(40) NOT NULL, + "LANGUAGE" VARCHAR(20) NOT NULL, + "QPROFILE_UUID" VARCHAR(255) NOT NULL, + "CREATED_AT" BIGINT NOT NULL, + "UPDATED_AT" BIGINT NOT NULL +); +CREATE UNIQUE INDEX "UNIQ_DEFAULT_QPROFILES_UUID" ON "DEFAULT_QPROFILES"("QPROFILE_UUID"); diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromQualityProfileTableTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromQualityProfileTableTest/schema.sql new file mode 100644 index 00000000000..52373a8009a --- /dev/null +++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropOrganizationFromQualityProfileTableTest/schema.sql @@ -0,0 +1,14 @@ +CREATE TABLE "ORG_QPROFILES"( + "UUID" VARCHAR(255) NOT NULL, + "ORGANIZATION_UUID" VARCHAR(40) NOT NULL, + "RULES_PROFILE_UUID" VARCHAR(255) NOT NULL, + "PARENT_UUID" VARCHAR(255), + "LAST_USED" BIGINT, + "USER_UPDATED_AT" BIGINT, + "CREATED_AT" BIGINT NOT NULL, + "UPDATED_AT" BIGINT NOT NULL +); +ALTER TABLE "ORG_QPROFILES" ADD CONSTRAINT "PK_ORG_QPROFILES" PRIMARY KEY("UUID"); +CREATE INDEX "QPROFILES_ORG_UUID" ON "ORG_QPROFILES"("ORGANIZATION_UUID"); +CREATE INDEX "QPROFILES_RP_UUID" ON "ORG_QPROFILES"("RULES_PROFILE_UUID"); +CREATE INDEX "ORG_QPROFILES_PARENT_UUID" ON "ORG_QPROFILES"("PARENT_UUID"); diff --git a/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropOrganizationInRulesMetadataTest/schema.sql b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropOrganizationInRulesMetadataTest/schema.sql new file mode 100644 index 00000000000..a7137424d38 --- /dev/null +++ b/server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v85/DropOrganizationInRulesMetadataTest/schema.sql @@ -0,0 +1,19 @@ +CREATE TABLE "RULES_METADATA"( + "ORGANIZATION_UUID" VARCHAR(40) NOT NULL, + "NOTE_DATA" CLOB, + "NOTE_USER_UUID" VARCHAR(255), + "NOTE_CREATED_AT" BIGINT, + "NOTE_UPDATED_AT" BIGINT, + "REMEDIATION_FUNCTION" VARCHAR(20), + "REMEDIATION_GAP_MULT" VARCHAR(20), + "REMEDIATION_BASE_EFFORT" VARCHAR(20), + "TAGS" VARCHAR(4000), + "AD_HOC_NAME" VARCHAR(200), + "AD_HOC_DESCRIPTION" CLOB, + "AD_HOC_SEVERITY" VARCHAR(10), + "AD_HOC_TYPE" TINYINT, + "CREATED_AT" BIGINT NOT NULL, + "UPDATED_AT" BIGINT NOT NULL, + "RULE_UUID" VARCHAR(40) NOT NULL +); +ALTER TABLE "RULES_METADATA" ADD CONSTRAINT "PK_RULES_METADATA" PRIMARY KEY("RULE_UUID", "ORGANIZATION_UUID"); diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/es/BulkIndexer.java b/server/sonar-server-common/src/main/java/org/sonar/server/es/BulkIndexer.java index 66afd4feda8..115887d2a7e 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/es/BulkIndexer.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/es/BulkIndexer.java @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.concurrent.TimeUnit; import javax.annotation.Nullable; @@ -288,21 +289,12 @@ public class BulkIndexer { return false; } BulkRequestKey that = (BulkRequestKey) o; - if (!docType.equals(that.docType)) { - return false; - } - if (!index.equals(that.index)) { - return false; - } - return requestType.equals(that.requestType); + return Objects.equals(docType, that.docType) && Objects.equals(index, that.index) && Objects.equals(requestType, that.requestType); } @Override public int hashCode() { - int result = requestType.hashCode(); - result = 31 * result + index.hashCode(); - result = 31 * result + docType.hashCode(); - return result; + return Objects.hash(requestType, index, docType); } @Override diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/es/EsClient.java b/server/sonar-server-common/src/main/java/org/sonar/server/es/EsClient.java index 903f8f4dca8..87d32d64f5a 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/es/EsClient.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/es/EsClient.java @@ -126,7 +126,8 @@ public class EsClient implements Closeable { return new ProxySearchRequestBuilder(nativeClient()).setIndices(index.getName()); } - public SearchRequestBuilder prepareSearch(IndexMainType indexType) { + public SearchRequestBuilder + prepareSearch(IndexMainType indexType) { return new ProxySearchRequestBuilder(nativeClient()) .setIndices(indexType.getIndex().getName()) .setTypes(indexType.getType()); diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/organization/DefaultOrganizationProviderImpl.java b/server/sonar-server-common/src/main/java/org/sonar/server/organization/DefaultOrganizationProviderImpl.java index 3b958ef838b..207913fe827 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/organization/DefaultOrganizationProviderImpl.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/organization/DefaultOrganizationProviderImpl.java @@ -44,7 +44,7 @@ public class DefaultOrganizationProviderImpl implements DefaultOrganizationProvi return cache; } - private static DefaultOrganization getDefaultOrganization(DbClient dbClient) { + public static DefaultOrganization getDefaultOrganization(DbClient dbClient) { try (DbSession dbSession = dbClient.openSession(false)) { Optional uuid = dbClient.internalPropertiesDao().selectByKey(dbSession, InternalProperties.DEFAULT_ORGANIZATION); checkState(uuid.isPresent() && !uuid.get().isEmpty(), "No Default organization uuid configured"); diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java index 1b4752ab9c4..ab64116df6a 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java @@ -54,12 +54,10 @@ public class DefaultRuleFinder implements ServerRuleFinder { private final DbClient dbClient; private final RuleDao ruleDao; - private final DefaultOrganizationProvider defaultOrganizationProvider; - public DefaultRuleFinder(DbClient dbClient, DefaultOrganizationProvider defaultOrganizationProvider) { + public DefaultRuleFinder(DbClient dbClient) { this.dbClient = dbClient; this.ruleDao = dbClient.ruleDao(); - this.defaultOrganizationProvider = defaultOrganizationProvider; } @Override @@ -78,10 +76,7 @@ public class DefaultRuleFinder implements ServerRuleFinder { @CheckForNull public org.sonar.api.rules.Rule findByKey(RuleKey key) { try (DbSession dbSession = dbClient.openSession(false)) { - String defaultOrganizationUuid = defaultOrganizationProvider.get().getUuid(); - OrganizationDto defaultOrganization = dbClient.organizationDao().selectByUuid(dbSession, defaultOrganizationUuid) - .orElseThrow(() -> new IllegalStateException(String.format("Cannot find default organization '%s'", defaultOrganizationUuid))); - Optional rule = ruleDao.selectByKey(dbSession, defaultOrganization.getUuid(), key); + Optional rule = ruleDao.selectByKey(dbSession, key); if (rule.isPresent() && rule.get().getStatus() != RuleStatus.REMOVED) { return toRule(rule.get(), ruleDao.selectRuleParamsByRuleKey(dbSession, rule.get().getKey())); } else { @@ -99,7 +94,7 @@ public class DefaultRuleFinder implements ServerRuleFinder { @Override public final org.sonar.api.rules.Rule find(org.sonar.api.rules.RuleQuery query) { try (DbSession dbSession = dbClient.openSession(false)) { - List rules = ruleDao.selectByQuery(dbSession, defaultOrganizationProvider.get().getUuid(), query); + List rules = ruleDao.selectByQuery(dbSession, query); if (!rules.isEmpty()) { RuleDto rule = rules.get(0); return toRule(rule, ruleDao.selectRuleParamsByRuleKey(dbSession, rule.getKey())); @@ -111,7 +106,7 @@ public class DefaultRuleFinder implements ServerRuleFinder { @Override public final Collection findAll(org.sonar.api.rules.RuleQuery query) { try (DbSession dbSession = dbClient.openSession(false)) { - List rules = ruleDao.selectByQuery(dbSession, defaultOrganizationProvider.get().getUuid(), query); + List rules = ruleDao.selectByQuery(dbSession, query); if (rules.isEmpty()) { return Collections.emptyList(); } diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleDoc.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleDoc.java index ab65bcb66b8..970f42b73c8 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleDoc.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleDoc.java @@ -21,10 +21,12 @@ package org.sonar.server.rule.index; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Optional; +import java.util.Set; import javax.annotation.CheckForNull; import javax.annotation.Nullable; import org.apache.commons.lang.builder.ReflectionToStringBuilder; @@ -196,6 +198,15 @@ public class RuleDoc extends BaseDoc { return this; } + public Set getTags() { + return getField(RuleIndexDefinition.FIELD_RULE_TAGS); + } + + public RuleDoc setTags(Set tags) { + setField(RuleIndexDefinition.FIELD_RULE_TAGS, tags); + return this; + } + @CheckForNull public RuleStatus status() { return RuleStatus.valueOf(getField(RuleIndexDefinition.FIELD_RULE_STATUS)); @@ -287,6 +298,7 @@ public class RuleDoc extends BaseDoc { .setStatus(dto.getStatus().toString()) .setType(dto.getTypeAsRuleType()) .setCreatedAt(dto.getCreatedAt()) + .setTags(Sets.union(dto.getTags(), dto.getSystemTags())) .setUpdatedAt(dto.getUpdatedAt()); if (dto.getTemplateRuleKey() != null && dto.getTemplateRepository() != null) { diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionDoc.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionDoc.java deleted file mode 100644 index 361f9120c5c..00000000000 --- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionDoc.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2020 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.server.rule.index; - -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import org.apache.commons.lang.builder.ReflectionToStringBuilder; -import org.sonar.db.rule.RuleExtensionForIndexingDto; -import org.sonar.db.rule.RuleForIndexingDto; -import org.sonar.server.es.BaseDoc; - -import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE_EXTENSION; - -public class RuleExtensionDoc extends BaseDoc { - - public RuleExtensionDoc(Map fields) { - super(TYPE_RULE_EXTENSION, fields); - } - - public RuleExtensionDoc() { - super(TYPE_RULE_EXTENSION, new HashMap<>(4)); - } - - @Override - public String getId() { - return idOf(getRuleUuid(), getScope()); - } - - public String getRuleUuid() { - return ruleUuidAsString(); - } - - private String ruleUuidAsString() { - return getField(RuleIndexDefinition.FIELD_RULE_UUID); - } - - public RuleExtensionDoc setRuleUuid(String ruleUuid) { - String parent = ruleUuid; - setField(RuleIndexDefinition.FIELD_RULE_UUID, parent); - setParent(parent); - return this; - } - - public RuleExtensionScope getScope() { - return RuleExtensionScope.parse(getField(RuleIndexDefinition.FIELD_RULE_EXTENSION_SCOPE)); - } - - public RuleExtensionDoc setScope(RuleExtensionScope scope) { - setField(RuleIndexDefinition.FIELD_RULE_EXTENSION_SCOPE, scope.getScope()); - return this; - } - - public Set getTags() { - return getField(RuleIndexDefinition.FIELD_RULE_EXTENSION_TAGS); - } - - public RuleExtensionDoc setTags(Set tags) { - setField(RuleIndexDefinition.FIELD_RULE_EXTENSION_TAGS, tags); - return this; - } - - public static RuleExtensionDoc of(RuleForIndexingDto rule) { - return new RuleExtensionDoc() - .setRuleUuid(rule.getUuid()) - .setScope(RuleExtensionScope.system()) - .setTags(rule.getSystemTags()); - } - - public static RuleExtensionDoc of(RuleExtensionForIndexingDto rule) { - return new RuleExtensionDoc() - .setRuleUuid(rule.getRuleUuid()) - .setScope(RuleExtensionScope.organization(rule.getOrganizationUuid())) - .setTags(rule.getTagsAsSet()); - } - - public static String idOf(String ruleUuid, RuleExtensionScope scope) { - return ruleUuid + "|" + scope.getScope(); - } - - @Override - public String toString() { - return ReflectionToStringBuilder.toString(this); - } -} diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionScope.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionScope.java deleted file mode 100644 index 919046bdf02..00000000000 --- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleExtensionScope.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2020 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.server.rule.index; - -import java.util.Optional; -import javax.annotation.Nullable; -import org.sonar.db.organization.OrganizationDto; - -import static com.google.common.base.Preconditions.checkArgument; - -public class RuleExtensionScope { - - private static final String FAKE_UUID_FOR_SYSTEM = "system"; - - private final Optional organizationUuid; - - private RuleExtensionScope(@Nullable String organizationUuid) { - this.organizationUuid = Optional.ofNullable(organizationUuid); - } - - public static RuleExtensionScope system() { - return new RuleExtensionScope(null); - } - - public static RuleExtensionScope organization(OrganizationDto organization) { - return organization(organization.getUuid()); - } - - public static RuleExtensionScope organization(String organizationUuid) { - checkArgument(!FAKE_UUID_FOR_SYSTEM.equals(organizationUuid), "The organization uuid '%s' is reserved for to store system tags in the rules index.", FAKE_UUID_FOR_SYSTEM); - return new RuleExtensionScope(organizationUuid); - } - - public String getScope() { - return organizationUuid.orElse(FAKE_UUID_FOR_SYSTEM); - } - - public static RuleExtensionScope parse(String scope) { - if (FAKE_UUID_FOR_SYSTEM.equals(scope)) { - return system(); - } - return new RuleExtensionScope(scope); - } -} diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndex.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndex.java index fa61b365c6b..e30b69aed3c 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndex.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndex.java @@ -20,7 +20,6 @@ package org.sonar.server.rule.index; import com.google.common.base.Joiner; -import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -39,14 +38,12 @@ import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.Operator; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.index.query.TermsQueryBuilder; import org.elasticsearch.join.aggregations.JoinAggregationBuilders; import org.elasticsearch.join.query.HasParentQueryBuilder; import org.elasticsearch.join.query.JoinQueryBuilders; import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.BucketOrder; -import org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.IncludeExclude; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.sort.FieldSortBuilder; @@ -57,7 +54,6 @@ import org.sonar.api.rule.Severity; import org.sonar.api.rules.RuleType; import org.sonar.api.utils.System2; import org.sonar.core.util.stream.MoreCollectors; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.es.EsClient; import org.sonar.server.es.EsUtils; @@ -93,8 +89,6 @@ import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_ACTIVE_RULE_ import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_ACTIVE_RULE_SEVERITY; import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_CREATED_AT; import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_CWE; -import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_EXTENSION_SCOPE; -import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_EXTENSION_TAGS; import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_HTML_DESCRIPTION; import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_INTERNAL_KEY; import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_IS_EXTERNAL; @@ -109,12 +103,12 @@ import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_SANS_TO import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_SEVERITY; import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_SONARSOURCE_SECURITY; import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_STATUS; +import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_TAGS; import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_TEMPLATE_KEY; import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_TYPE; import static org.sonar.server.rule.index.RuleIndexDefinition.FIELD_RULE_UPDATED_AT; import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_ACTIVE_RULE; import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE; -import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE_EXTENSION; /** * The unique entry-point to interact with Elasticsearch index "rules". @@ -153,8 +147,7 @@ public class RuleIndex { } public SearchIdResult search(RuleQuery query, SearchOptions options) { - SearchRequestBuilder esSearch = client - .prepareSearch(TYPE_RULE); + SearchRequestBuilder esSearch = client.prepareSearch(TYPE_RULE); QueryBuilder qb = buildQuery(query); Map filters = buildFilters(query); @@ -216,13 +209,13 @@ public class RuleIndex { BoolQueryBuilder textQuery = boolQuery(); JavaTokenizer.split(queryString) .stream().map(token -> boolQuery().should( - matchQuery( - SEARCH_GRAMS_ANALYZER.subField(FIELD_RULE_NAME), - StringUtils.left(token, DefaultIndexSettings.MAXIMUM_NGRAM_LENGTH)).boost(20f)) - .should( - matchPhraseQuery( - ENGLISH_HTML_ANALYZER.subField(FIELD_RULE_HTML_DESCRIPTION), - token).boost(3f))) + matchQuery( + SEARCH_GRAMS_ANALYZER.subField(FIELD_RULE_NAME), + StringUtils.left(token, DefaultIndexSettings.MAXIMUM_NGRAM_LENGTH)).boost(20f)) + .should( + matchPhraseQuery( + ENGLISH_HTML_ANALYZER.subField(FIELD_RULE_HTML_DESCRIPTION), + token).boost(3f))) .forEach(textQuery::must); qb.should(textQuery.boost(20f)); } @@ -316,8 +309,7 @@ public class RuleIndex { } if (isNotEmpty(query.getTags())) { - filters.put(FIELD_RULE_EXTENSION_TAGS, - buildTagsFilter(query.getTags(), query.getOrganization())); + filters.put(FIELD_RULE_TAGS, buildTagsFilter(query.getTags())); } Collection types = query.getTypes(); @@ -387,14 +379,11 @@ public class RuleIndex { return filters; } - private static BoolQueryBuilder buildTagsFilter(Collection tags, OrganizationDto organization) { + private static BoolQueryBuilder buildTagsFilter(Collection tags) { BoolQueryBuilder q = boolQuery(); - tags.stream() - .map(tag -> boolQuery() - .filter(QueryBuilders.termQuery(FIELD_RULE_EXTENSION_TAGS, tag)) - .filter(termsQuery(FIELD_RULE_EXTENSION_SCOPE, RuleExtensionScope.system().getScope(), RuleExtensionScope.organization(organization).getScope()))) - .map(childQuery -> JoinQueryBuilders.hasChildQuery(TYPE_RULE_EXTENSION.getName(), childQuery, ScoreMode.None)) - .forEach(q::should); + for (String tag : tags) { + q.should(boolQuery().filter(QueryBuilders.termQuery(FIELD_RULE_TAGS, tag))); + } return q; } @@ -460,23 +449,8 @@ public class RuleIndex { } if (options.getFacets().contains(FACET_TAGS) || options.getFacets().contains(FACET_OLD_DEFAULT)) { Collection tags = query.getTags(); - checkArgument(query.getOrganization() != null, "Cannot use tags facet, if no organization is specified.", query.getTags()); - - Function childFeature = termsAggregation -> { - - FilterAggregationBuilder scopeAggregation = AggregationBuilders.filter( - "scope_filter_for_" + FACET_TAGS, - termsQuery(FIELD_RULE_EXTENSION_SCOPE, - RuleExtensionScope.system().getScope(), - RuleExtensionScope.organization(query.getOrganization()).getScope())) - .subAggregation(termsAggregation); - - return JoinAggregationBuilders.children("children_for_" + termsAggregation.getName(), TYPE_RULE_EXTENSION.getName()) - .subAggregation(scopeAggregation); - }; - aggregations.put(FACET_TAGS, - stickyFacetBuilder.buildStickyFacet(FIELD_RULE_EXTENSION_TAGS, FACET_TAGS, MAX_FACET_SIZE, childFeature, + stickyFacetBuilder.buildStickyFacet(FIELD_RULE_TAGS, FACET_TAGS, MAX_FACET_SIZE, (tags == null) ? (new String[0]) : tags.toArray())); } if (options.getFacets().contains(FACET_TYPES)) { @@ -619,24 +593,15 @@ public class RuleIndex { esSearch.setSize(options.getLimit()); } - public List listTags(@Nullable OrganizationDto organization, @Nullable String query, int size) { + public List listTags(@Nullable String query, int size) { int maxPageSize = 500; checkArgument(size <= maxPageSize, "Page size must be lower than or equals to " + maxPageSize); if (size <= 0) { return emptyList(); } - ImmutableList.Builder scopes = ImmutableList.builder() - .add(RuleExtensionScope.system().getScope()); - if (organization != null) { - scopes.add(RuleExtensionScope.organization(organization).getScope()); - } - TermsQueryBuilder scopeFilter = QueryBuilders.termsQuery( - FIELD_RULE_EXTENSION_SCOPE, - scopes.build().toArray(new String[0])); - TermsAggregationBuilder termsAggregation = AggregationBuilders.terms(AGGREGATION_NAME_FOR_TAGS) - .field(FIELD_RULE_EXTENSION_TAGS) + .field(FIELD_RULE_TAGS) .size(size) .order(BucketOrder.key(true)) .minDocCount(1); @@ -647,8 +612,8 @@ public class RuleIndex { .ifPresent(termsAggregation::includeExclude); SearchRequestBuilder request = client - .prepareSearch(TYPE_RULE_EXTENSION.getMainType()) - .setQuery(boolQuery().filter(scopeFilter)) + .prepareSearch(TYPE_RULE.getMainType()) + .setQuery(matchAllQuery()) .setSize(0) .addAggregation(termsAggregation); @@ -656,7 +621,7 @@ public class RuleIndex { return EsUtils.termsKeys(esResponse.getAggregations().get(AGGREGATION_NAME_FOR_TAGS)); } - private static boolean isNotEmpty(@Nullable Collection list) { + private static boolean isNotEmpty(@Nullable Collection list) { return list != null && !list.isEmpty(); } } diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexDefinition.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexDefinition.java index daf8a1a1cd0..e6893a77ca0 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexDefinition.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexDefinition.java @@ -64,6 +64,7 @@ public class RuleIndexDefinition implements IndexDefinition { public static final String FIELD_RULE_OWASP_TOP_10 = "owaspTop10"; public static final String FIELD_RULE_SANS_TOP_25 = "sansTop25"; public static final String FIELD_RULE_SONARSOURCE_SECURITY = "sonarsourceSecurity"; + public static final String FIELD_RULE_TAGS = "tags"; public static final Set SORT_FIELDS = ImmutableSet.of( FIELD_RULE_NAME, @@ -71,14 +72,6 @@ public class RuleIndexDefinition implements IndexDefinition { FIELD_RULE_CREATED_AT, FIELD_RULE_KEY); - // Rule extension fields - public static final IndexRelationType TYPE_RULE_EXTENSION = IndexType.relation(TYPE_RULE, "ruleExtension"); - /** - * The uuid of a {@link RuleExtensionScope} - */ - public static final String FIELD_RULE_EXTENSION_SCOPE = "ruleExt_scope"; - public static final String FIELD_RULE_EXTENSION_TAGS = "ruleExt_tags"; - // Active rule fields public static final IndexRelationType TYPE_ACTIVE_RULE = IndexType.relation(TYPE_RULE, "activeRule"); public static final String FIELD_ACTIVE_RULE_UUID = "activeRule_uuid"; @@ -137,6 +130,7 @@ public class RuleIndexDefinition implements IndexDefinition { ruleMapping.keywordFieldBuilder(FIELD_RULE_SEVERITY).disableNorms().build(); ruleMapping.keywordFieldBuilder(FIELD_RULE_STATUS).disableNorms().build(); ruleMapping.keywordFieldBuilder(FIELD_RULE_LANGUAGE).disableNorms().build(); + ruleMapping.keywordFieldBuilder(FIELD_RULE_TAGS).build(); ruleMapping.createBooleanField(FIELD_RULE_IS_TEMPLATE); ruleMapping.createBooleanField(FIELD_RULE_IS_EXTERNAL); @@ -158,10 +152,5 @@ public class RuleIndexDefinition implements IndexDefinition { .keywordFieldBuilder(FIELD_ACTIVE_RULE_PROFILE_UUID).disableNorms().build() .keywordFieldBuilder(FIELD_ACTIVE_RULE_INHERITANCE).disableNorms().build() .keywordFieldBuilder(FIELD_ACTIVE_RULE_SEVERITY).disableNorms().build(); - - // Rule extension - index.createTypeMapping(TYPE_RULE_EXTENSION) - .keywordFieldBuilder(FIELD_RULE_EXTENSION_SCOPE).disableNorms().build() - .keywordFieldBuilder(FIELD_RULE_EXTENSION_TAGS).build(); } } diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexer.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexer.java index e7447d060f8..3ac59206b3c 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexer.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleIndexer.java @@ -33,8 +33,6 @@ import org.sonar.core.util.stream.MoreCollectors; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.es.EsQueueDto; -import org.sonar.db.es.RuleExtensionId; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleForIndexingDto; import org.sonar.server.es.BulkIndexer; import org.sonar.server.es.BulkIndexer.Size; @@ -47,14 +45,11 @@ import org.sonar.server.es.ResilientIndexer; import org.sonar.server.rule.HotspotRuleDescription; import org.sonar.server.security.SecurityStandards; -import static com.google.common.base.Preconditions.checkArgument; import static java.util.Arrays.asList; -import static java.util.Collections.singletonList; import static java.util.stream.Collectors.joining; import static java.util.stream.Stream.concat; import static org.sonar.core.util.stream.MoreCollectors.toHashSet; import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE; -import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE_EXTENSION; import static org.sonar.server.security.SecurityStandards.SQ_CATEGORY_KEYS_ORDERING; public class RuleIndexer implements ResilientIndexer { @@ -70,7 +65,7 @@ public class RuleIndexer implements ResilientIndexer { @Override public Set getIndexTypes() { - return ImmutableSet.of(TYPE_RULE, TYPE_RULE_EXTENSION); + return ImmutableSet.of(TYPE_RULE); } @Override @@ -79,27 +74,15 @@ public class RuleIndexer implements ResilientIndexer { BulkIndexer bulk = createBulkIndexer(Size.LARGE, IndexingListener.FAIL_ON_ERROR); bulk.start(); - // index all definitions and system extensions + // index all definitions if (uninitializedIndexTypes.contains(TYPE_RULE)) { - dbClient.ruleDao().scrollIndexingRules(dbSession, dto -> { - bulk.add(ruleDocOf(dto).toIndexRequest()); - bulk.add(RuleExtensionDoc.of(dto).toIndexRequest()); - }); - } - - // index all organization extensions - if (uninitializedIndexTypes.contains(TYPE_RULE_EXTENSION)) { - dbClient.ruleDao().scrollIndexingRuleExtensions(dbSession, dto -> bulk.add(RuleExtensionDoc.of(dto).toIndexRequest())); + dbClient.ruleDao().scrollIndexingRules(dbSession, dto -> bulk.add(ruleDocOf(dto).toIndexRequest())); } bulk.stop(); } } - public void commitAndIndex(DbSession dbSession, String ruleUuid) { - commitAndIndex(dbSession, singletonList(ruleUuid)); - } - public void commitAndIndex(DbSession dbSession, Collection ruleUuids) { List items = ruleUuids.stream() .map(RuleIndexer::createQueueDtoForRule) @@ -113,8 +96,8 @@ public class RuleIndexer implements ResilientIndexer { /** * Commit a change on a rule and its extension on the given organization */ - public void commitAndIndex(DbSession dbSession, String ruleUuid, OrganizationDto organization) { - List items = asList(createQueueDtoForRule(ruleUuid), createQueueDtoForRuleExtension(ruleUuid, organization)); + public void commitAndIndex(DbSession dbSession, String ruleUuid) { + List items = asList(createQueueDtoForRule(ruleUuid)); dbClient.esQueueDao().insert(dbSession, items); dbSession.commit(); postCommit(dbSession, items); @@ -133,7 +116,6 @@ public class RuleIndexer implements ResilientIndexer { if (!items.isEmpty()) { ListMultimap itemsByType = groupItemsByIndexTypeFormat(items); doIndexRules(dbSession, itemsByType.get(TYPE_RULE.format())).ifPresent(result::add); - doIndexRuleExtensions(dbSession, itemsByType.get(TYPE_RULE_EXTENSION.format())).ifPresent(result::add); } return result; } @@ -154,49 +136,17 @@ public class RuleIndexer implements ResilientIndexer { dbClient.ruleDao().scrollIndexingRulesByKeys(dbSession, ruleUuids, r -> { bulkIndexer.add(ruleDocOf(r).toIndexRequest()); - bulkIndexer.add(RuleExtensionDoc.of(r).toIndexRequest()); ruleUuids.remove(r.getUuid()); }); - // the remaining items reference rows that don't exist in db. They must - // be deleted from index. + // the remaining items reference rows that don't exist in db. They must be deleted from index. ruleUuids.forEach(ruleUuid -> { bulkIndexer.addDeletion(TYPE_RULE, ruleUuid, ruleUuid); - bulkIndexer.addDeletion(TYPE_RULE_EXTENSION, RuleExtensionDoc.idOf(ruleUuid, RuleExtensionScope.system()), ruleUuid); }); return Optional.of(bulkIndexer.stop()); } - private Optional doIndexRuleExtensions(DbSession dbSession, List items) { - if (items.isEmpty()) { - return Optional.empty(); - } - - BulkIndexer bulkIndexer = createBulkIndexer(Size.REGULAR, new OneToOneResilientIndexingListener(dbClient, dbSession, items)); - bulkIndexer.start(); - - Set docIds = items - .stream() - .map(RuleIndexer::explodeRuleExtensionDocId) - .collect(toHashSet(items.size())); - - dbClient.ruleDao().scrollIndexingRuleExtensionsByIds(dbSession, docIds, - // only index requests, no deletion requests. - // Deactivated users are not deleted but updated. - r -> { - RuleExtensionId docId = new RuleExtensionId(r.getOrganizationUuid(), r.getRuleUuid()); - docIds.remove(docId); - bulkIndexer.add(RuleExtensionDoc.of(r).toIndexRequest()); - }); - - // the remaining items reference rows that don't exist in db. They must - // be deleted from index. - docIds.forEach(docId -> bulkIndexer.addDeletion(TYPE_RULE_EXTENSION, docId.getId(), docId.getRuleUuid())); - - return Optional.of(bulkIndexer.stop()); - } - private static RuleDoc ruleDocOf(RuleForIndexingDto dto) { SecurityStandards securityStandards = SecurityStandards.fromSecurityStandards(dto.getSecurityStandards()); if (!securityStandards.getIgnoredSQCategories().isEmpty()) { @@ -234,19 +184,8 @@ public class RuleIndexer implements ResilientIndexer { return items.stream().collect(MoreCollectors.index(EsQueueDto::getDocType)); } - private static RuleExtensionId explodeRuleExtensionDocId(EsQueueDto esQueueDto) { - checkArgument(TYPE_RULE_EXTENSION.format().equals(esQueueDto.getDocType())); - return new RuleExtensionId(esQueueDto.getDocId()); - } - private static EsQueueDto createQueueDtoForRule(String ruleUuid) { String docId = ruleUuid; return EsQueueDto.create(TYPE_RULE.format(), docId, null, docId); } - - private static EsQueueDto createQueueDtoForRuleExtension(String ruleUuid, OrganizationDto organization) { - String docId = RuleExtensionDoc.idOf(ruleUuid, RuleExtensionScope.organization(organization)); - return EsQueueDto.create(TYPE_RULE_EXTENSION.format(), docId, null, ruleUuid); - } - } diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleQuery.java b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleQuery.java index 57f42918eec..fc5fefcfeab 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleQuery.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/rule/index/RuleQuery.java @@ -53,7 +53,6 @@ public class RuleQuery { private boolean ascendingSort = true; private String internalKey; private String ruleKey; - private OrganizationDto organization; private boolean includeExternal; private Collection owaspTop10; private Collection sansTop25; @@ -279,15 +278,6 @@ public class RuleQuery { return ruleKey; } - public OrganizationDto getOrganization() { - return organization; - } - - public RuleQuery setOrganization(OrganizationDto o) { - this.organization = o; - return this; - } - @CheckForNull public QProfileDto getCompareToQProfile() { return compareToQProfile; diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/qualityprofile/index/ActiveRuleIndexerTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/qualityprofile/index/ActiveRuleIndexerTest.java index 58ae6cc54e2..a3e706a2308 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/qualityprofile/index/ActiveRuleIndexerTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/qualityprofile/index/ActiveRuleIndexerTest.java @@ -30,7 +30,6 @@ import org.junit.Test; import org.sonar.api.utils.System2; import org.sonar.db.DbTester; import org.sonar.db.es.EsQueueDto; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.ActiveRuleDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.rule.RuleDefinitionDto; @@ -63,9 +62,8 @@ public class ActiveRuleIndexerTest { public void before() { rule1 = db.rules().insert(); rule2 = db.rules().insert(); - OrganizationDto org = db.organizations().insert(); - profile1 = db.qualityProfiles().insert(org); - profile2 = db.qualityProfiles().insert(org); + profile1 = db.qualityProfiles().insert(); + profile2 = db.qualityProfiles().insert(); } @Test diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/rule/DefaultRuleFinderTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/rule/DefaultRuleFinderTest.java index b1d8498dee0..5769006c1f6 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/rule/DefaultRuleFinderTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/rule/DefaultRuleFinderTest.java @@ -29,7 +29,6 @@ import org.sonar.api.utils.System2; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleDto.Scope; @@ -46,7 +45,6 @@ public class DefaultRuleFinderTest { private DbClient dbClient = dbTester.getDbClient(); private DbSession session = dbTester.getSession(); - private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester); private RuleDto rule1 = new RuleDto() .setName("Check Header") @@ -84,7 +82,7 @@ public class DefaultRuleFinderTest { .setScope(Scope.MAIN) .setStatus(RuleStatus.READY); - private DefaultRuleFinder underTest = new DefaultRuleFinder(dbClient, defaultOrganizationProvider); + private DefaultRuleFinder underTest = new DefaultRuleFinder(dbClient); @Before public void setup() { @@ -131,8 +129,7 @@ public class DefaultRuleFinderTest { public void findByKey_populates_system_tags_but_not_tags() { RuleDefinitionDto ruleDefinition = dbTester.rules() .insert(t -> t.setSystemTags(ImmutableSet.of(randomAlphanumeric(5), randomAlphanumeric(6)))); - OrganizationDto organization = dbTester.organizations().insert(); - dbTester.rules().insertRule(organization); + dbTester.rules().insertRule(); Rule rule = underTest.findByKey(ruleDefinition.getKey()); assertThat(rule.getSystemTags()) diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexDefinitionTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexDefinitionTest.java index e123607d8e3..33cc879982a 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexDefinitionTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexDefinitionTest.java @@ -61,7 +61,7 @@ public class RuleIndexDefinitionTest { .isEqualTo(IndexType.main(Index.withRelations("rules"), "rule")); assertThat(ruleIndex.getRelationsStream()) .extracting(IndexType.IndexRelationType::getName) - .containsOnly("activeRule", "ruleExtension"); + .containsOnly("activeRule"); // no cluster by default assertThat(ruleIndex.getSetting("index.number_of_shards")).isEqualTo("2"); diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java index 2dc3371373c..be13bf85728 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexTest.java @@ -31,10 +31,8 @@ import org.junit.rules.ExpectedException; import org.sonar.api.impl.utils.AlwaysIncreasingSystem2; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; -import org.sonar.api.rules.RuleType; import org.sonar.api.utils.System2; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleMetadataDto; @@ -67,7 +65,6 @@ import static org.sonar.db.rule.RuleTesting.setIsExternal; import static org.sonar.db.rule.RuleTesting.setIsTemplate; import static org.sonar.db.rule.RuleTesting.setLanguage; import static org.sonar.db.rule.RuleTesting.setName; -import static org.sonar.db.rule.RuleTesting.setOrganization; import static org.sonar.db.rule.RuleTesting.setRepositoryKey; import static org.sonar.db.rule.RuleTesting.setRuleKey; import static org.sonar.db.rule.RuleTesting.setSecurityStandards; @@ -86,7 +83,6 @@ import static org.sonar.server.rule.index.RuleIndex.FACET_TAGS; import static org.sonar.server.rule.index.RuleIndex.FACET_TYPES; import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_ACTIVE_RULE; import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE; -import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE_EXTENSION; import static org.sonar.server.security.SecurityStandards.SANS_TOP_25_INSECURE_INTERACTION; import static org.sonar.server.security.SecurityStandards.SANS_TOP_25_RISKY_RESOURCE; @@ -293,21 +289,19 @@ public class RuleIndexTest { @Test public void filter_by_tags() { - OrganizationDto organization = db.organizations().insert(); - RuleDefinitionDto rule1 = createRule(setSystemTags("tag1s")); - createRuleMetadata(rule1, organization, setTags("tag1")); + createRuleMetadata(rule1, setTags("tag1")); RuleDefinitionDto rule2 = createRule(setSystemTags("tag2s")); - createRuleMetadata(rule2, organization, setTags("tag2")); + createRuleMetadata(rule2, setTags("tag2")); index(); - assertThat(es.countDocuments(TYPE_RULE_EXTENSION)).isEqualTo(4); + assertThat(es.countDocuments(TYPE_RULE)).isEqualTo(2); // tag2s in filter - RuleQuery query = new RuleQuery().setOrganization(organization).setTags(of("tag2s")); + RuleQuery query = new RuleQuery().setTags(of("tag2s")); verifySearch(query, rule2); // tag2 in filter - query = new RuleQuery().setOrganization(organization).setTags(of("tag2")); + query = new RuleQuery().setTags(of("tag2")); verifySearch(query, rule2); // empty list => no filter @@ -321,14 +315,11 @@ public class RuleIndexTest { @Test public void tags_facet_supports_selected_value_with_regexp_special_characters() { - OrganizationDto organization = db.organizations().insert(); - RuleDefinitionDto rule = createRule(); - createRuleMetadata(rule, organization, setTags("misra++")); + createRuleMetadata(rule, setTags("misra++")); index(); RuleQuery query = new RuleQuery() - .setOrganization(organization) .setTags(singletonList("misra[")); SearchOptions options = new SearchOptions().addFacets(FACET_TAGS); @@ -507,8 +498,8 @@ public class RuleIndexTest { @Test public void compare_to_another_profile() { String xoo = "xoo"; - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(xoo)); - QProfileDto anotherProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(xoo)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(xoo)); + QProfileDto anotherProfile = db.qualityProfiles().insert(p -> p.setLanguage(xoo)); RuleDefinitionDto commonRule = db.rules().insertRule(r -> r.setLanguage(xoo)).getDefinition(); RuleDefinitionDto profileRule1 = db.rules().insertRule(r -> r.setLanguage(xoo)).getDefinition(); RuleDefinitionDto profileRule2 = db.rules().insertRule(r -> r.setLanguage(xoo)).getDefinition(); @@ -544,8 +535,8 @@ public class RuleIndexTest { } @SafeVarargs - private final RuleMetadataDto createRuleMetadata(RuleDefinitionDto rule, OrganizationDto organization, Consumer... populaters) { - return db.rules().insertOrUpdateMetadata(rule, organization, populaters); + private final RuleMetadataDto createRuleMetadata(RuleDefinitionDto rule, Consumer... populaters) { + return db.rules().insertOrUpdateMetadata(rule, populaters); } @Test @@ -641,16 +632,16 @@ public class RuleIndexTest { } private void index() { - ruleIndexer.indexOnStartup(Sets.newHashSet(TYPE_RULE, TYPE_RULE_EXTENSION)); + ruleIndexer.indexOnStartup(Sets.newHashSet(TYPE_RULE)); activeRuleIndexer.indexOnStartup(Sets.newHashSet(TYPE_ACTIVE_RULE)); } private RuleQuery newRuleQuery() { - return new RuleQuery().setOrganization(db.getDefaultOrganization()); + return new RuleQuery(); } private QProfileDto createJavaProfile() { - return db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage("java")); + return db.qualityProfiles().insert(p -> p.setLanguage("java")); } @Test @@ -733,46 +724,24 @@ public class RuleIndexTest { } @Test - public void listTags_should_return_both_system_tags_and_organization_specific_tags() { - OrganizationDto organization = db.organizations().insert(); - + public void listTags_should_return_tags() { RuleDefinitionDto rule1 = createRule(setSystemTags("sys1", "sys2")); - createRuleMetadata(rule1, organization, setOrganization(organization), setTags("tag1")); + createRuleMetadata(rule1, setTags("tag1")); RuleDefinitionDto rule2 = createRule(setSystemTags()); - createRuleMetadata(rule2, organization, setOrganization(organization), setTags("tag2")); - - index(); - - assertThat(underTest.listTags(organization, null, 10)).containsOnly("tag1", "tag2", "sys1", "sys2"); - } - - @Test - public void listTags_must_not_return_tags_of_other_organizations() { - OrganizationDto organization1 = db.organizations().insert(); - RuleDefinitionDto rule1 = createRule(setSystemTags("sys1")); - createRuleMetadata(rule1, organization1, setOrganization(organization1), setTags("tag1")); + createRuleMetadata(rule2, setTags("tag2")); - OrganizationDto organization2 = db.organizations().insert(); - RuleDefinitionDto rule2 = createRule(setSystemTags("sys2")); - createRuleMetadata(rule2, organization2, setOrganization(organization2), setTags("tag2")); - - OrganizationDto organization3 = db.organizations().insert(); index(); - assertThat(underTest.listTags(organization1, null, 10)).containsOnly("tag1", "sys1", "sys2"); - assertThat(underTest.listTags(organization2, null, 10)).containsOnly("tag2", "sys1", "sys2"); - assertThat(underTest.listTags(organization3, null, 10)).containsOnly("sys1", "sys2"); + assertThat(underTest.listTags(null, 10)).containsOnly("tag1", "tag2", "sys1", "sys2"); } @Test public void fail_to_list_tags_when_size_greater_than_500() { - OrganizationDto organization = db.organizations().insert(); - expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Page size must be lower than or equals to 500"); - underTest.listTags(organization, null, 501); + underTest.listTags(null, 501); } @Test @@ -795,17 +764,15 @@ public class RuleIndexTest { @Test public void global_facet_on_repositories_and_tags() { - OrganizationDto organization = db.organizations().insert(); - createRule(setRepositoryKey("php"), setSystemTags("sysTag")); RuleDefinitionDto rule1 = createRule(setRepositoryKey("php"), setSystemTags()); - createRuleMetadata(rule1, organization, setTags("tag1")); + createRuleMetadata(rule1, setTags("tag1")); RuleDefinitionDto rule2 = createRule(setRepositoryKey("javascript"), setSystemTags()); - createRuleMetadata(rule2, organization, setTags("tag1", "tag2")); + createRuleMetadata(rule2, setTags("tag1", "tag2")); index(); // should not have any facet! - RuleQuery query = new RuleQuery().setOrganization(organization); + RuleQuery query = new RuleQuery(); SearchIdResult result1 = underTest.search(query, new SearchOptions()); assertThat(result1.getFacets().getAll()).isEmpty(); @@ -859,9 +826,7 @@ public class RuleIndexTest { @Test public void sticky_facets_no_filters() { setupStickyFacets(); - OrganizationDto organization = db.organizations().insert(); - - RuleQuery query = new RuleQuery().setOrganization(organization); + RuleQuery query = new RuleQuery(); SearchIdResult result = underTest.search(query, new SearchOptions().addFacets(asList(FACET_LANGUAGES, FACET_REPOSITORIES, FACET_TAGS, FACET_TYPES))); @@ -880,12 +845,9 @@ public class RuleIndexTest { @Test public void sticky_facets_with_1_filter() { setupStickyFacets(); - OrganizationDto organization = db.organizations().insert(); - - RuleQuery query = new RuleQuery().setOrganization(organization).setLanguages(ImmutableList.of("cpp")); + RuleQuery query = new RuleQuery().setLanguages(ImmutableList.of("cpp")); - SearchIdResult result = underTest.search(query, new SearchOptions().addFacets(asList(FACET_LANGUAGES, - FACET_REPOSITORIES, FACET_TAGS))); + SearchIdResult result = underTest.search(query, new SearchOptions().addFacets(asList(FACET_LANGUAGES, FACET_REPOSITORIES, FACET_TAGS))); assertThat(result.getUuids()).hasSize(3); assertThat(result.getFacets().getAll()).hasSize(3); assertThat(result.getFacets().get(FACET_LANGUAGES).keySet()).containsOnly("cpp", "java", "cobol"); @@ -915,12 +877,11 @@ public class RuleIndexTest { @Test public void tags_facet_should_find_tags_of_specified_organization() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule = createRule(setSystemTags()); - createRuleMetadata(rule, organization, setTags("bla")); + createRuleMetadata(rule, setTags("bla")); index(); - RuleQuery query = new RuleQuery().setOrganization(organization); + RuleQuery query = new RuleQuery(); SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS)); SearchIdResult result = underTest.search(query, options); @@ -934,8 +895,7 @@ public class RuleIndexTest { createRule(setSystemTags(tags)); index(); - RuleQuery query = new RuleQuery() - .setOrganization(db.getDefaultOrganization()); + RuleQuery query = new RuleQuery(); SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS)); SearchIdResult result = underTest.search(query, options); assertThat(result.getFacets().get(FACET_TAGS).size()).isEqualTo(100); @@ -951,7 +911,6 @@ public class RuleIndexTest { index(); RuleQuery query = new RuleQuery() - .setOrganization(db.getDefaultOrganization()) .setTags(singletonList("tagA")); SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS)); SearchIdResult result = underTest.search(query, options); @@ -964,42 +923,15 @@ public class RuleIndexTest { entry("tag0", 1L), entry("tag25", 1L), entry("tag99", 1L)); } - @Test - public void tags_facet_should_not_find_tags_of_any_other_organization() { - OrganizationDto organization1 = db.organizations().insert(); - OrganizationDto organization2 = db.organizations().insert(); - RuleDefinitionDto rule = createRule(setSystemTags()); - createRuleMetadata(rule, organization1, setTags("bla1")); - createRuleMetadata(rule, organization2, setTags("bla2")); - index(); - - RuleQuery query = new RuleQuery().setOrganization(organization2); - SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS)); - - SearchIdResult result = underTest.search(query, options); - assertThat(result.getFacets().get(FACET_TAGS).entrySet()).extracting(e -> entry(e.getKey(), e.getValue())).containsExactly( - entry("bla2", 1L)); - } - @Test public void tags_facet_should_be_available_if_organization_is_specified() { - OrganizationDto organization = db.organizations().insert(); - RuleQuery query = new RuleQuery().setOrganization(organization); + RuleQuery query = new RuleQuery(); SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS)); SearchIdResult result = underTest.search(query, options); assertThat(result.getFacets().get(FACET_TAGS)).isNotNull(); } - @Test - public void tags_facet_should_be_unavailable_if_no_organization_is_specfified() { - RuleQuery query = new RuleQuery(); - SearchOptions options = new SearchOptions().addFacets(singletonList(FACET_TAGS)); - - expectedException.expectMessage("Cannot use tags facet, if no organization is specified."); - underTest.search(query, options); - } - /** * Facet with 2 filters * -- lang facet for tag T2 @@ -1011,7 +943,6 @@ public class RuleIndexTest { setupStickyFacets(); RuleQuery query = new RuleQuery() - .setOrganization(db.getDefaultOrganization()) .setLanguages(ImmutableList.of("cpp")) .setTags(ImmutableList.of("T2")); @@ -1037,7 +968,6 @@ public class RuleIndexTest { setupStickyFacets(); RuleQuery query = new RuleQuery() - .setOrganization(db.getDefaultOrganization()) .setLanguages(ImmutableList.of("cpp", "java")) .setTags(ImmutableList.of("T2")) .setTypes(asList(BUG, CODE_SMELL)); diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexerTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexerTest.java index 9b9d1915615..21205f37cdf 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexerTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/rule/index/RuleIndexerTest.java @@ -44,7 +44,6 @@ import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleDto.Scope; -import org.sonar.db.rule.RuleMetadataDto; import org.sonar.db.rule.RuleTesting; import org.sonar.server.es.EsTester; import org.sonar.server.security.SecurityStandards; @@ -53,14 +52,11 @@ import org.sonar.server.security.SecurityStandards.SQCategory; import static com.google.common.collect.Sets.newHashSet; import static java.lang.String.format; import static java.util.Collections.emptyList; -import static java.util.Collections.emptySet; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toSet; import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic; import static org.assertj.core.api.Assertions.assertThat; -import static org.elasticsearch.index.query.QueryBuilders.termQuery; import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE; -import static org.sonar.server.rule.index.RuleIndexDefinition.TYPE_RULE_EXTENSION; import static org.sonar.server.security.SecurityStandards.CWES_BY_SQ_CATEGORY; import static org.sonar.server.security.SecurityStandards.SQ_CATEGORY_KEYS_ORDERING; @@ -129,50 +125,6 @@ public class RuleIndexerTest { assertThat(es.countDocuments(TYPE_RULE)).isEqualTo(1); } - @Test - public void index_rule_extension_with_long_id() { - RuleDefinitionDto rule = dbTester.rules().insert(r -> r.setRuleKey(RuleTesting.randomRuleKeyOfMaximumLength())); - underTest.commitAndIndex(dbTester.getSession(), rule.getUuid()); - OrganizationDto organization = dbTester.organizations().insert(); - RuleMetadataDto metadata = RuleTesting.newRuleMetadata(rule, organization).setTags(ImmutableSet.of("bla")); - dbTester.getDbClient().ruleDao().insertOrUpdate(dbTester.getSession(), metadata); - underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization); - - RuleExtensionDoc doc = new RuleExtensionDoc() - .setRuleUuid(rule.getUuid()) - .setScope(RuleExtensionScope.organization(organization.getUuid())); - assertThat( - es.client() - .prepareSearch(TYPE_RULE_EXTENSION.getMainType()) - .setQuery(termQuery("_id", doc.getId())) - .get() - .getHits() - .getHits()[0] - .getId()).isEqualTo(doc.getId()); - } - - @Test - public void delete_rule_extension_from_index_when_setting_rule_tags_to_empty() { - RuleDefinitionDto rule = dbTester.rules().insert(r -> r.setRuleKey(RuleTesting.randomRuleKeyOfMaximumLength())); - underTest.commitAndIndex(dbTester.getSession(), rule.getUuid()); - OrganizationDto organization = dbTester.organizations().insert(); - RuleMetadataDto metadata = RuleTesting.newRuleMetadata(rule, organization).setTags(ImmutableSet.of("bla")); - dbTester.getDbClient().ruleDao().insertOrUpdate(dbTester.getSession(), metadata); - underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization); - - // index tags - RuleExtensionDoc doc = new RuleExtensionDoc() - .setRuleUuid(rule.getUuid()) - .setScope(RuleExtensionScope.organization(organization.getUuid())); - assertThat(es.getIds(TYPE_RULE_EXTENSION)).contains(doc.getId()); - - // update db table "rules_metadata" with empty tags and delete tags from index - metadata = RuleTesting.newRuleMetadata(rule, organization).setTags(emptySet()); - dbTester.getDbClient().ruleDao().insertOrUpdate(dbTester.getSession(), metadata); - underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization); - assertThat(es.getIds(TYPE_RULE_EXTENSION)).doesNotContain(doc.getId()); - } - @Test public void index_long_rule_description() { String description = IntStream.range(0, 100000).map(i -> i % 100).mapToObj(Integer::toString).collect(joining(" ")); @@ -194,7 +146,7 @@ public class RuleIndexerTest { .setSecurityStandards(standards) .setDescription(VALID_HOTSPOT_RULE_DESCRIPTION)); OrganizationDto organization = dbTester.organizations().insert(); - underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization); + underTest.commitAndIndex(dbTester.getSession(), rule.getUuid()); assertThat(logTester.getLogs()).hasSize(1); assertThat(logTester.logs(LoggerLevel.WARN).get(0)) @@ -230,7 +182,7 @@ public class RuleIndexerTest { .setType(RuleType.SECURITY_HOTSPOT) .setDescription(description)); OrganizationDto organization = dbTester.organizations().insert(); - underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization); + underTest.commitAndIndex(dbTester.getSession(), rule.getUuid()); assertThat(logTester.getLogs()).hasSize(1); assertThat(logTester.logs(LoggerLevel.WARN).get(0)) @@ -253,7 +205,7 @@ public class RuleIndexerTest { .setType(RuleType.SECURITY_HOTSPOT) .setDescription(randomAlphabetic(30))); OrganizationDto organization = dbTester.organizations().insert(); - underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization); + underTest.commitAndIndex(dbTester.getSession(), rule.getUuid()); assertThat(logTester.getLogs()).hasSize(1); assertThat(logTester.logs(LoggerLevel.WARN).get(0)) @@ -270,7 +222,7 @@ public class RuleIndexerTest { "

Ask Yourself Whether

\n" + "foo")); OrganizationDto organization = dbTester.organizations().insert(); - underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization); + underTest.commitAndIndex(dbTester.getSession(), rule.getUuid()); assertThat(logTester.getLogs()).hasSize(1); assertThat(logTester.logs(LoggerLevel.WARN).get(0)) @@ -288,7 +240,7 @@ public class RuleIndexerTest { "

Recommended Secure Coding Practices

\n" + "foo")); OrganizationDto organization = dbTester.organizations().insert(); - underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization); + underTest.commitAndIndex(dbTester.getSession(), rule.getUuid()); assertThat(logTester.getLogs()).hasSize(1); assertThat(logTester.logs(LoggerLevel.WARN).get(0)) @@ -305,7 +257,7 @@ public class RuleIndexerTest { "

Recommended Secure Coding Practices

\n" + "foo")); OrganizationDto organization = dbTester.organizations().insert(); - underTest.commitAndIndex(dbTester.getSession(), rule.getUuid(), organization); + underTest.commitAndIndex(dbTester.getSession(), rule.getUuid()); assertThat(logTester.getLogs()).hasSize(1); assertThat(logTester.logs(LoggerLevel.WARN).get(0)) diff --git a/server/sonar-server-common/src/testFixtures/java/org/sonar/server/organization/TestDefaultOrganizationProvider.java b/server/sonar-server-common/src/testFixtures/java/org/sonar/server/organization/TestDefaultOrganizationProvider.java index 22bdbf30e74..4c27c0e59cd 100644 --- a/server/sonar-server-common/src/testFixtures/java/org/sonar/server/organization/TestDefaultOrganizationProvider.java +++ b/server/sonar-server-common/src/testFixtures/java/org/sonar/server/organization/TestDefaultOrganizationProvider.java @@ -66,11 +66,11 @@ public class TestDefaultOrganizationProvider implements DefaultOrganizationProvi } } - private static final class DbTesterDefaultOrganizationProvider implements DefaultOrganizationProvider { + public static final class DbTesterDefaultOrganizationProvider implements DefaultOrganizationProvider { private final DbTester dbTester; private DefaultOrganization defaultOrganization = null; - private DbTesterDefaultOrganizationProvider(DbTester dbTester) { + public DbTesterDefaultOrganizationProvider(DbTester dbTester) { this.dbTester = dbTester; } diff --git a/server/sonar-web/src/main/js/api/quality-profiles.ts b/server/sonar-web/src/main/js/api/quality-profiles.ts index c49ae261a20..5131add5f74 100644 --- a/server/sonar-web/src/main/js/api/quality-profiles.ts +++ b/server/sonar-web/src/main/js/api/quality-profiles.ts @@ -340,7 +340,6 @@ export function bulkDeactivateRules(data: BulkActivateParameters) { export function activateRule(data: { key: string; - organization: string | undefined; params?: T.Dict; reset?: boolean; rule: string; @@ -351,10 +350,6 @@ export function activateRule(data: { return post('/api/qualityprofiles/activate_rule', { ...data, params }).catch(throwGlobalError); } -export function deactivateRule(data: { - key: string; - organization: string | undefined; - rule: string; -}) { +export function deactivateRule(data: { key: string; rule: string }) { return post('/api/qualityprofiles/deactivate_rule', data).catch(throwGlobalError); } diff --git a/server/sonar-web/src/main/js/api/rules.ts b/server/sonar-web/src/main/js/api/rules.ts index bc14cb5be5e..97f244e2728 100644 --- a/server/sonar-web/src/main/js/api/rules.ts +++ b/server/sonar-web/src/main/js/api/rules.ts @@ -39,7 +39,7 @@ export interface SearchRulesResponse { } export function searchRules(data: { - organization: string | undefined; + organization?: string; [x: string]: any; }): Promise { return getJSON('/api/rules/search', data).catch(throwGlobalError); @@ -53,13 +53,13 @@ export function takeFacet(response: any, property: string) { export function getRuleDetails(parameters: { actives?: boolean; key: string; - organization: string | undefined; + organization?: string; }): Promise<{ actives?: T.RuleActivation[]; rule: T.RuleDetails }> { return getJSON('/api/rules/show', parameters).catch(throwGlobalError); } export function getRuleTags(parameters: { - organization: string | undefined; + organization?: string; ps?: number; q: string; }): Promise { @@ -70,7 +70,7 @@ export function createRule(data: { custom_key: string; markdown_description: string; name: string; - organization: string | undefined; + organization?: string; params?: string; prevent_reactivation?: boolean; severity?: string; @@ -92,7 +92,7 @@ export function createRule(data: { ); } -export function deleteRule(parameters: { key: string; organization: string | undefined }) { +export function deleteRule(parameters: { key: string; organization?: string }) { return post('/api/rules/delete', parameters).catch(throwGlobalError); } @@ -101,7 +101,7 @@ export function updateRule(data: { markdown_description?: string; markdown_note?: string; name?: string; - organization: string | undefined; + organization?: string; params?: string; remediation_fn_base_effort?: string; remediation_fn_type?: string; diff --git a/server/sonar-web/src/main/js/app/components/nav/component/projectInformation/meta/MetaQualityProfiles.tsx b/server/sonar-web/src/main/js/app/components/nav/component/projectInformation/meta/MetaQualityProfiles.tsx index 1b454485007..2201aee0b6c 100644 --- a/server/sonar-web/src/main/js/app/components/nav/component/projectInformation/meta/MetaQualityProfiles.tsx +++ b/server/sonar-web/src/main/js/app/components/nav/component/projectInformation/meta/MetaQualityProfiles.tsx @@ -75,7 +75,6 @@ export class MetaQualityProfiles extends React.PureComponent {
- +
diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutStandards.tsx b/server/sonar-web/src/main/js/apps/about/components/AboutStandards.tsx index 6b4dc1aaf83..46c242df828 100644 --- a/server/sonar-web/src/main/js/apps/about/components/AboutStandards.tsx +++ b/server/sonar-web/src/main/js/apps/about/components/AboutStandards.tsx @@ -30,13 +30,7 @@ const owaspTags = 'owasp-a1,owasp-a2,owasp-a3,owasp-a4,owasp-a5,owasp-a6,owasp-a7,owasp-a8,owasp-a9,owasp-a10'; const sans25Tags = 'sans-top25-porous,sans-top25-risky,sans-top25-insecure'; -interface Props { - appState: Pick; -} - -export default function AboutStandards({ appState }: Props) { - const organization = appState.organizationsEnabled ? appState.defaultOrganization : undefined; - +export default function AboutStandards() { return (

{translate('about_page.standards')}

@@ -46,31 +40,31 @@ export default function AboutStandards({ appState }: Props) {
  • - + MISRA
  • - + CERT
  • - + CWE
  • - + OWASP Top 10
  • - + SANS Top 25 diff --git a/server/sonar-web/src/main/js/apps/about/components/__tests__/__snapshots__/AboutApp-test.tsx.snap b/server/sonar-web/src/main/js/apps/about/components/__tests__/__snapshots__/AboutApp-test.tsx.snap index 292d1393e56..4ca36d39504 100644 --- a/server/sonar-web/src/main/js/apps/about/components/__tests__/__snapshots__/AboutApp-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/about/components/__tests__/__snapshots__/AboutApp-test.tsx.snap @@ -99,20 +99,7 @@ exports[`should render correctly 1`] = `
    - +
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/ActivationButton.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/ActivationButton.tsx index 1970109708d..641fb74f6dc 100644 --- a/server/sonar-web/src/main/js/apps/coding-rules/components/ActivationButton.tsx +++ b/server/sonar-web/src/main/js/apps/coding-rules/components/ActivationButton.tsx @@ -28,7 +28,6 @@ interface Props { className?: string; modalHeader: string; onDone: (severity: string) => Promise; - organization: string | undefined; profiles: BaseProfile[]; rule: T.Rule | T.RuleDetails; } @@ -64,7 +63,6 @@ export default class ActivationButton extends React.PureComponent modalHeader={this.props.modalHeader} onClose={this.handleCloseModal} onDone={this.props.onDone} - organization={this.props.organization} profiles={this.props.profiles} rule={this.props.rule} /> diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/ActivationFormModal.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/ActivationFormModal.tsx index 32c9d1c9c2a..09eb9f0ec4e 100644 --- a/server/sonar-web/src/main/js/apps/coding-rules/components/ActivationFormModal.tsx +++ b/server/sonar-web/src/main/js/apps/coding-rules/components/ActivationFormModal.tsx @@ -35,7 +35,6 @@ interface Props { modalHeader: string; onClose: () => void; onDone: (severity: string) => Promise; - organization: string | undefined; profiles: Profile[]; rule: T.Rule | T.RuleDetails; } @@ -106,7 +105,6 @@ export default class ActivationFormModal extends React.PureComponent { const { canWrite, paging, query, referencedProfiles } = this.state; const organization = this.props.organization && this.props.organization.key; - if (!isLoggedIn(currentUser) || (isSonarCloud() && !organization) || !canWrite) { + if (!isLoggedIn(currentUser) || !canWrite) { return null; } @@ -664,7 +663,6 @@ export class App extends React.PureComponent { onDeactivate={this.handleRuleDeactivate} onDelete={this.handleRuleDelete} onFilterChange={this.handleFilterChange} - organization={organization} referencedProfiles={this.state.referencedProfiles} referencedRepositories={this.state.referencedRepositories} ruleKey={this.state.openRule.key} diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleButton.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleButton.tsx index dbbb61de782..3c91fe61523 100644 --- a/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleButton.tsx +++ b/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleButton.tsx @@ -24,7 +24,6 @@ interface Props { children: (props: { onClick: () => void }) => React.ReactNode; customRule?: T.RuleDetails; onDone: (newRuleDetails: T.RuleDetails) => void; - organization: string | undefined; templateRule: T.RuleDetails; } @@ -68,7 +67,6 @@ export default class CustomRuleButton extends React.PureComponent customRule={this.props.customRule} onClose={this.handleModalClose} onDone={this.handleDone} - organization={this.props.organization} templateRule={this.props.templateRule} /> )} diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleFormModal.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleFormModal.tsx index 40d85d3e191..d0d03f69fca 100644 --- a/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleFormModal.tsx +++ b/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleFormModal.tsx @@ -36,7 +36,6 @@ interface Props { customRule?: T.RuleDetails; onClose: () => void; onDone: (newRuleDetails: T.RuleDetails) => void; - organization: string | undefined; templateRule: T.RuleDetails; } @@ -87,14 +86,13 @@ export default class CustomRuleFormModal extends React.PureComponent { - const { customRule, organization, templateRule } = this.props; + const { customRule, templateRule } = this.props; const params = Object.keys(this.state.params) .map(key => `${key}=${csvEscape(this.state.params[key])}`) .join(';'); const ruleData = { markdown_description: this.state.description, name: this.state.name, - organization, params, severity: this.state.severity, status: this.state.status diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetails.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetails.tsx index fecab52d5ee..bafd6364610 100644 --- a/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetails.tsx +++ b/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetails.tsx @@ -42,7 +42,6 @@ interface Props { onDeactivate: (profile: string, rule: string) => void; onDelete: (rule: string) => void; onFilterChange: (changes: Partial) => void; - organization: string | undefined; referencedProfiles: T.Dict; referencedRepositories: T.Dict<{ key: string; language: string; name: string }>; ruleKey: string; @@ -79,8 +78,7 @@ export default class RuleDetails extends React.PureComponent { fetchRuleDetails = () => { return getRuleDetails({ actives: true, - key: this.props.ruleKey, - organization: this.props.organization + key: this.props.ruleKey }).then( ({ actives, rule }) => { if (this.mounted) { @@ -109,7 +107,6 @@ export default class RuleDetails extends React.PureComponent { ); updateRule({ key: this.props.ruleKey, - organization: this.props.organization, tags: tags.join() }).catch(() => { if (this.mounted) { @@ -146,7 +143,7 @@ export default class RuleDetails extends React.PureComponent { }; handleDelete = () => { - return deleteRule({ key: this.props.ruleKey, organization: this.props.organization }).then(() => + return deleteRule({ key: this.props.ruleKey }).then(() => this.props.onDelete(this.props.ruleKey) ); }; @@ -158,13 +155,7 @@ export default class RuleDetails extends React.PureComponent { return
; } - const { - allowCustomRules, - canWrite, - hideQualityProfiles, - organization, - referencedProfiles - } = this.props; + const { allowCustomRules, canWrite, hideQualityProfiles, referencedProfiles } = this.props; const { params = [] } = ruleDetails; const isCustom = !!ruleDetails.templateKey; @@ -177,7 +168,6 @@ export default class RuleDetails extends React.PureComponent { canWrite={canWrite} onFilterChange={this.props.onFilterChange} onTagsChange={this.handleTagsChange} - organization={organization} referencedRepositories={this.props.referencedRepositories} ruleDetails={ruleDetails} /> @@ -185,7 +175,6 @@ export default class RuleDetails extends React.PureComponent { @@ -198,7 +187,6 @@ export default class RuleDetails extends React.PureComponent { {({ onClick }) => (
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsCustomRules.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsCustomRules.tsx index ae72cf22cf7..c1045673e02 100644 --- a/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsCustomRules.tsx +++ b/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsCustomRules.tsx @@ -31,7 +31,6 @@ import CustomRuleButton from './CustomRuleButton'; interface Props { canChange?: boolean; - organization: string | undefined; ruleDetails: T.RuleDetails; } @@ -63,7 +62,6 @@ export default class RuleDetailsCustomRules extends React.PureComponent { @@ -88,7 +86,7 @@ export default class RuleDetailsCustomRules extends React.PureComponent { - return deleteRule({ key: ruleKey, organization: this.props.organization }).then(() => { + return deleteRule({ key: ruleKey }).then(() => { if (this.mounted) { this.setState(({ rules = [] }) => ({ rules: rules.filter(rule => rule.key !== ruleKey) @@ -100,7 +98,7 @@ export default class RuleDetailsCustomRules extends React.PureComponent ( - {rule.name} + {rule.name} @@ -153,10 +151,7 @@ export default class RuleDetailsCustomRules extends React.PureComponent{translate('coding_rules.custom_rules')} {this.props.canChange && ( - + {({ onClick }) => (
diff --git a/server/sonar-web/src/main/js/apps/quality-gates/components/CopyQualityGateForm.tsx b/server/sonar-web/src/main/js/apps/quality-gates/components/CopyQualityGateForm.tsx index 10012f17770..dd727b4a490 100644 --- a/server/sonar-web/src/main/js/apps/quality-gates/components/CopyQualityGateForm.tsx +++ b/server/sonar-web/src/main/js/apps/quality-gates/components/CopyQualityGateForm.tsx @@ -56,7 +56,7 @@ class CopyQualityGateForm extends React.PureComponent { return copyQualityGate({ id: qualityGate.id, name, organization }).then(qualityGate => { this.props.onCopy(); - this.props.router.push(getQualityGateUrl(String(qualityGate.id), this.props.organization)); + this.props.router.push(getQualityGateUrl(String(qualityGate.id))); }); }; diff --git a/server/sonar-web/src/main/js/apps/quality-gates/components/CreateQualityGateForm.tsx b/server/sonar-web/src/main/js/apps/quality-gates/components/CreateQualityGateForm.tsx index cbad8a41aa1..53f964ee74c 100644 --- a/server/sonar-web/src/main/js/apps/quality-gates/components/CreateQualityGateForm.tsx +++ b/server/sonar-web/src/main/js/apps/quality-gates/components/CreateQualityGateForm.tsx @@ -55,7 +55,7 @@ class CreateQualityGateForm extends React.PureComponent { return this.props.onCreate().then(() => qualityGate); }) .then(qualityGate => { - this.props.router.push(getQualityGateUrl(String(qualityGate.id), organization)); + this.props.router.push(getQualityGateUrl(String(qualityGate.id))); }); }; diff --git a/server/sonar-web/src/main/js/apps/quality-gates/components/DeleteQualityGateForm.tsx b/server/sonar-web/src/main/js/apps/quality-gates/components/DeleteQualityGateForm.tsx index a25f3c7c049..0bfaaaf6668 100644 --- a/server/sonar-web/src/main/js/apps/quality-gates/components/DeleteQualityGateForm.tsx +++ b/server/sonar-web/src/main/js/apps/quality-gates/components/DeleteQualityGateForm.tsx @@ -38,7 +38,7 @@ class DeleteQualityGateForm extends React.PureComponent { return deleteQualityGate({ id: qualityGate.id, organization }) .then(this.props.onDelete) .then(() => { - this.props.router.push(getQualityGatesUrl(organization)); + this.props.router.push(getQualityGatesUrl()); }); }; diff --git a/server/sonar-web/src/main/js/apps/quality-gates/components/List.tsx b/server/sonar-web/src/main/js/apps/quality-gates/components/List.tsx index 89f751c79dd..8f035870e9d 100644 --- a/server/sonar-web/src/main/js/apps/quality-gates/components/List.tsx +++ b/server/sonar-web/src/main/js/apps/quality-gates/components/List.tsx @@ -24,11 +24,10 @@ import { getQualityGateUrl } from '../../../helpers/urls'; import BuiltInQualityGateBadge from './BuiltInQualityGateBadge'; interface Props { - organization?: string; qualityGates: T.QualityGate[]; } -export default function List({ organization, qualityGates }: Props) { +export default function List({ qualityGates }: Props) { return (
{qualityGates.map(qualityGate => ( @@ -37,7 +36,7 @@ export default function List({ organization, qualityGates }: Props) { className="list-group-item display-flex-center" data-id={qualityGate.id} key={qualityGate.id} - to={getQualityGateUrl(String(qualityGate.id), organization)}> + to={getQualityGateUrl(String(qualityGate.id))}> {qualityGate.name} {qualityGate.isDefault && ( {translate('default')} diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx index c91891da0cf..46ad79220e9 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx @@ -75,9 +75,7 @@ export default function Changelog(props: Props) { - - {event.ruleName} - + {event.ruleName} {event.params && } diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ChangelogContainer.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ChangelogContainer.tsx index 541d876d245..add7cd632a0 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ChangelogContainer.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/changelog/ChangelogContainer.tsx @@ -114,24 +114,15 @@ export class ChangelogContainer extends React.PureComponent { } handleDateRangeChange = ({ from, to }: { from?: Date; to?: Date }) => { - const path = getProfileChangelogPath( - this.props.profile.name, - this.props.profile.language, - this.props.organization, - { - since: from && toShortNotSoISOString(from), - to: to && toShortNotSoISOString(to) - } - ); + const path = getProfileChangelogPath(this.props.profile.name, this.props.profile.language, { + since: from && toShortNotSoISOString(from), + to: to && toShortNotSoISOString(to) + }); this.props.router.push(path); }; handleReset = () => { - const path = getProfileChangelogPath( - this.props.profile.name, - this.props.profile.language, - this.props.organization - ); + const path = getProfileChangelogPath(this.props.profile.name, this.props.profile.language); this.props.router.push(path); }; diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonContainer.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonContainer.tsx index b2d430da6ba..bb0f4f290bc 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonContainer.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonContainer.tsx @@ -79,7 +79,6 @@ class ComparisonContainer extends React.PureComponent { const path = getProfileComparePath( this.props.profile.name, this.props.profile.language, - this.props.organization, withKey ); this.props.router.push(path); diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResultActivation.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResultActivation.tsx index 00eba49aa2c..372feb8805f 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResultActivation.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResultActivation.tsx @@ -97,7 +97,6 @@ export default class ComparisonResultActivation extends React.PureComponent diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx index 1285c574fce..40fc7548ab3 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx @@ -42,9 +42,7 @@ export default class ComparisonResults extends React.PureComponent { return (
{' '} - - {rule.name} - + {rule.name}
); } diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileActions.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileActions.tsx index aa960dad0a9..97cc0ce6048 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileActions.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileActions.tsx @@ -28,7 +28,7 @@ import { Router, withRouter } from '../../../components/hoc/withRouter'; import { getBaseUrl } from '../../../helpers/system'; import { getRulesUrl } from '../../../helpers/urls'; import { Profile } from '../types'; -import { getProfileComparePath, getProfilePath, getProfilesPath } from '../utils'; +import { getProfileComparePath, getProfilePath, PROFILE_PATH } from '../utils'; import CopyProfileForm from './CopyProfileForm'; import DeleteProfileForm from './DeleteProfileForm'; import ExtendProfileForm from './ExtendProfileForm'; @@ -96,7 +96,7 @@ export class ProfileActions extends React.PureComponent { }; handleProfileDelete = () => { - this.props.router.replace(getProfilesPath(this.props.organization)); + this.props.router.replace(PROFILE_PATH); this.props.updateProfiles(); }; @@ -110,9 +110,7 @@ export class ProfileActions extends React.PureComponent { this.props.updateProfiles().then( () => { if (!this.props.fromList) { - this.props.router.replace( - getProfilePath(name, this.props.profile.language, this.props.organization) - ); + this.props.router.replace(getProfilePath(name, this.props.profile.language)); } }, () => {} @@ -126,9 +124,7 @@ export class ProfileActions extends React.PureComponent { navigateToNewProfile = (name: string) => { this.props.updateProfiles().then( () => { - this.props.router.push( - getProfilePath(name, this.props.profile.language, this.props.organization) - ); + this.props.router.push(getProfilePath(name, this.props.profile.language)); }, () => {} ); @@ -140,13 +136,10 @@ export class ProfileActions extends React.PureComponent { const backupUrl = `${getBaseUrl()}${getQualityProfileBackupUrl(profile)}`; - const activateMoreUrl = getRulesUrl( - { - qprofile: profile.key, - activation: 'false' - }, - this.props.organization - ); + const activateMoreUrl = getRulesUrl({ + qprofile: profile.key, + activation: 'false' + }); return ( <> @@ -165,8 +158,7 @@ export class ProfileActions extends React.PureComponent { )} - + {translate('compare')} diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileContainer.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileContainer.tsx index c0d7e479073..0d5c32e155b 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileContainer.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileContainer.tsx @@ -62,7 +62,7 @@ export default class ProfileContainer extends React.PureComponent profile.key === location.query.key); - return profile ? null : ; + return profile ? null : ; } const profile = profiles.find( @@ -70,7 +70,7 @@ export default class ProfileContainer extends React.PureComponent; + return ; } const child = React.cloneElement(this.props.children, { diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileLink.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileLink.tsx index 8bcc84d3607..83d300ace8b 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileLink.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileLink.tsx @@ -26,15 +26,11 @@ interface Props { children?: React.ReactElement | string; language: string; name: string; - organization: string | null; } -export default function ProfileLink({ name, language, organization, children, ...other }: Props) { +export default function ProfileLink({ name, language, children, ...other }: Props) { return ( - + {children} ); diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileNotFound.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileNotFound.tsx index 33294f46bcf..b3260e0b551 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileNotFound.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/components/ProfileNotFound.tsx @@ -20,17 +20,13 @@ import * as React from 'react'; import { IndexLink } from 'react-router'; import { translate } from 'sonar-ui-common/helpers/l10n'; -import { getProfilesPath } from '../utils'; +import { PROFILE_PATH } from '../utils'; -interface Props { - organization: string | null; -} - -export default function ProfileNotFound(props: Props) { +export default function ProfileNotFound() { return (
- + {translate('quality_profiles.page')}
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/components/__tests__/ProfileActions-test.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/components/__tests__/ProfileActions-test.tsx index d7743549ecb..c809cba18c3 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/components/__tests__/ProfileActions-test.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/components/__tests__/ProfileActions-test.tsx @@ -36,7 +36,6 @@ const PROFILE = mockQualityProfile({ activeDeprecatedRuleCount: 0, depth: 0, language: 'js', - organization: 'org', rulesUpdatedAt: '2017-06-28T12:58:44+0000' }); @@ -83,7 +82,7 @@ it('should copy profile', async () => { await waitAndUpdate(wrapper); expect(push).toBeCalledWith({ - pathname: '/organizations/org/quality_profiles/show', + pathname: '/profiles/show', query: { language: 'js', name } }); expect(wrapper.find('CopyProfileForm').exists()).toBe(false); @@ -107,7 +106,7 @@ it('should extend profile', async () => { await waitAndUpdate(wrapper); expect(push).toBeCalledWith({ - pathname: '/organizations/org/quality_profiles/show', + pathname: '/profiles/show', query: { language: 'js', name } }); expect(wrapper.find('ExtendProfileForm').exists()).toBe(false); diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/components/__tests__/__snapshots__/ProfileActions-test.tsx.snap b/server/sonar-web/src/main/js/apps/quality-profiles/components/__tests__/__snapshots__/ProfileActions-test.tsx.snap index d630932363d..91ce05a8387 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/components/__tests__/__snapshots__/ProfileActions-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/quality-profiles/components/__tests__/__snapshots__/ProfileActions-test.tsx.snap @@ -6,7 +6,7 @@ exports[`renders with all permissions 1`] = ` { return (
- + {translate('quality_profiles.page')} {' / '} - + {profile.languageName}

- + {profile.name} {profile.isBuiltIn && ( @@ -73,9 +67,7 @@ export default class ProfileHeader extends React.PureComponent { {translate('quality_profiles.used_')}
  • - + {translate('changelog')}
  • diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileInheritanceBox.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileInheritanceBox.tsx index 19a4fd83285..5e0286d83ce 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileInheritanceBox.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileInheritanceBox.tsx @@ -40,7 +40,6 @@ export default function ProfileInheritanceBox(props: Props) { depth, extendsBuiltIn, language, - organization, profile, displayLink = true, type = 'current' @@ -52,11 +51,7 @@ export default function ProfileInheritanceBox(props: Props) {
    {displayLink ? ( - + {profile.name} ) : ( diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRules.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRules.tsx index 5119f24816d..be27679c109 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRules.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRules.tsx @@ -145,10 +145,7 @@ export default class ProfileRules extends React.PureComponent { render() { const { organization, profile } = this.props; const { compareToSonarWay } = this.state; - const activateMoreUrl = getRulesUrl( - { qprofile: profile.key, activation: 'false' }, - organization - ); + const activateMoreUrl = getRulesUrl({ qprofile: profile.key, activation: 'false' }); const { actions = {} } = profile; return ( diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesDeprecatedWarning.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesDeprecatedWarning.tsx index 84a7bec9255..abb61aef348 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesDeprecatedWarning.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesDeprecatedWarning.tsx @@ -39,9 +39,7 @@ export default function ProfileRulesDeprecatedWarning(props: Props) { overlay={translate('quality_profiles.deprecated_rules_description')} /> - + {props.activeDeprecatedRules}
    diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesRowOfType.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesRowOfType.tsx index 8b61d2c2fd1..29d56d4352e 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesRowOfType.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesRowOfType.tsx @@ -33,14 +33,16 @@ interface Props { } export default function ProfileRulesRowOfType(props: Props) { - const activeRulesUrl = getRulesUrl( - { qprofile: props.qprofile, activation: 'true', types: props.type }, - props.organization - ); - const inactiveRulesUrl = getRulesUrl( - { qprofile: props.qprofile, activation: 'false', types: props.type }, - props.organization - ); + const activeRulesUrl = getRulesUrl({ + qprofile: props.qprofile, + activation: 'true', + types: props.type + }); + const inactiveRulesUrl = getRulesUrl({ + qprofile: props.qprofile, + activation: 'false', + types: props.type + }); let inactiveCount = null; if (props.count != null && props.total != null) { inactiveCount = props.total - props.count; diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesRowTotal.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesRowTotal.tsx index 137174d10b2..545657afa81 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesRowTotal.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesRowTotal.tsx @@ -31,14 +31,8 @@ interface Props { } export default function ProfileRulesRowTotal(props: Props) { - const activeRulesUrl = getRulesUrl( - { qprofile: props.qprofile, activation: 'true' }, - props.organization - ); - const inactiveRulesUrl = getRulesUrl( - { qprofile: props.qprofile, activation: 'false' }, - props.organization - ); + const activeRulesUrl = getRulesUrl({ qprofile: props.qprofile, activation: 'true' }); + const inactiveRulesUrl = getRulesUrl({ qprofile: props.qprofile, activation: 'false' }); let inactiveCount = null; if (props.count != null && props.total != null) { inactiveCount = props.total - props.count; diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesSonarWayComparison.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesSonarWayComparison.tsx index 25c09916a6f..451bd52c559 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesSonarWayComparison.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileRulesSonarWayComparison.tsx @@ -32,15 +32,12 @@ interface Props { } export default function ProfileRulesSonarWayComparison(props: Props) { - const url = getRulesUrl( - { - qprofile: props.profile, - activation: 'false', - compareToProfile: props.sonarway, - languages: props.language - }, - props.organization - ); + const url = getRulesUrl({ + qprofile: props.profile, + activation: 'false', + compareToProfile: props.sonarway, + languages: props.language + }); return (
    diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileHeader-test.tsx.snap b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileHeader-test.tsx.snap index 12132420745..98639139637 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileHeader-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileHeader-test.tsx.snap @@ -9,7 +9,7 @@ exports[`should render correctly 1`] = ` > quality_profiles.page @@ -20,7 +20,7 @@ exports[`should render correctly 1`] = ` style={Object {}} to={ Object { - "pathname": "/organizations/foo/quality_profiles", + "pathname": "/profiles", "query": Object { "language": "js", }, @@ -37,7 +37,6 @@ exports[`should render correctly 1`] = ` className="link-base-color" language="js" name="name" - organization="foo" > name @@ -76,7 +75,7 @@ exports[`should render correctly 1`] = ` style={Object {}} to={ Object { - "pathname": "/organizations/foo/quality_profiles/changelog", + "pathname": "/profiles/changelog", "query": Object { "language": "js", "name": "name", diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileInheritanceBox-test.tsx.snap b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileInheritanceBox-test.tsx.snap index 934da5e4adb..c42184e6a85 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileInheritanceBox-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileInheritanceBox-test.tsx.snap @@ -16,7 +16,6 @@ exports[`should render correctly 1`] = ` className="text-middle" language="foo" name="Foo" - organization={null} > Foo @@ -49,7 +48,6 @@ exports[`should render correctly 2`] = ` className="text-middle" language="foo" name="Foo" - organization={null} > Foo @@ -85,7 +83,6 @@ exports[`should render correctly 3`] = ` className="text-middle" language="foo" name="Foo" - organization={null} > Foo @@ -122,7 +119,6 @@ exports[`should render correctly 4`] = ` className="text-middle" language="foo" name="Foo" - organization={null} > Foo diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRules-test.tsx.snap b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRules-test.tsx.snap index 9f3047b1321..640d9cecb70 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRules-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRules-test.tsx.snap @@ -84,7 +84,7 @@ exports[`should show a button to activate more rules for admins 1`] = ` style={Object {}} to={ Object { - "pathname": "/organizations/foo/rules", + "pathname": "/coding_rules", "query": Object { "activation": "false", "qprofile": "key", diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesDeprecatedWarning-test.tsx.snap b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesDeprecatedWarning-test.tsx.snap index 308c513f84f..4a03b4e8a41 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesDeprecatedWarning-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesDeprecatedWarning-test.tsx.snap @@ -23,7 +23,7 @@ exports[`should render correctly 1`] = ` style={Object {}} to={ Object { - "pathname": "/organizations/foo/rules", + "pathname": "/coding_rules", "query": Object { "activation": "true", "qprofile": "bar", diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesRowOfType-test.tsx.snap b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesRowOfType-test.tsx.snap index 1a879d91adf..c9bbffe4449 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesRowOfType-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesRowOfType-test.tsx.snap @@ -19,7 +19,7 @@ exports[`should render correctly 1`] = ` style={Object {}} to={ Object { - "pathname": "/organizations/foo/rules", + "pathname": "/coding_rules", "query": Object { "activation": "true", "qprofile": "bar", @@ -40,7 +40,7 @@ exports[`should render correctly 1`] = ` style={Object {}} to={ Object { - "pathname": "/organizations/foo/rules", + "pathname": "/coding_rules", "query": Object { "activation": "false", "qprofile": "bar", diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesRowTotal-test.tsx.snap b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesRowTotal-test.tsx.snap index 05ad9a31580..226dd57670d 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesRowTotal-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesRowTotal-test.tsx.snap @@ -15,7 +15,7 @@ exports[`should render correctly 1`] = ` style={Object {}} to={ Object { - "pathname": "/organizations/foo/rules", + "pathname": "/coding_rules", "query": Object { "activation": "true", "qprofile": "bar", @@ -37,7 +37,7 @@ exports[`should render correctly 1`] = ` style={Object {}} to={ Object { - "pathname": "/organizations/foo/rules", + "pathname": "/coding_rules", "query": Object { "activation": "false", "qprofile": "bar", diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesSonarWayComparison-test.tsx.snap b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesSonarWayComparison-test.tsx.snap index 69d5092c589..6567a60b75e 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesSonarWayComparison-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/__tests__/__snapshots__/ProfileRulesSonarWayComparison-test.tsx.snap @@ -24,7 +24,7 @@ exports[`should render correctly 1`] = ` style={Object {}} to={ Object { - "pathname": "/organizations/foo/rules", + "pathname": "/coding_rules", "query": Object { "activation": "false", "compareToProfile": "baz", diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionDeprecated.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionDeprecated.tsx index 6360bcca0d7..03bbae3a26c 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionDeprecated.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionDeprecated.tsx @@ -124,8 +124,7 @@ export default class EvolutionDeprecated extends React.PureComponent { + name={profile.name}> {profile.name}
    @@ -134,10 +133,7 @@ export default class EvolutionDeprecated extends React.PureComponent { {', '} + to={getDeprecatedActiveRulesUrl({ qprofile: profile.key })}> {translateWithParameters( 'quality_profile.x_rules', profile.activeDeprecatedRuleCount diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionRules.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionRules.tsx index 546633be6ae..8e5cf98a4ad 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionRules.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionRules.tsx @@ -97,10 +97,7 @@ export default class EvolutionRules extends React.PureComponent { return null; } - const newRulesUrl = getRulesUrl( - { available_since: this.periodStartDate }, - this.props.organization - ); + const newRulesUrl = getRulesUrl({ available_since: this.periodStartDate }); return (
    @@ -111,9 +108,7 @@ export default class EvolutionRules extends React.PureComponent { {this.state.latestRules.map(rule => (
  • - + {' '} {rule.name} diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionStagnant.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionStagnant.tsx index fa76b87d003..b474f52b6d8 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionStagnant.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionStagnant.tsx @@ -51,8 +51,7 @@ export default function EvolutionStagnant(props: Props) { + name={profile.name}> {profile.name}
    diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/PageHeader.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/home/PageHeader.tsx index a4726522c1c..f1fce30d314 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/home/PageHeader.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/PageHeader.tsx @@ -57,9 +57,7 @@ export class PageHeader extends React.PureComponent { handleCreate = (profile: Profile) => { this.props.updateProfiles().then( () => { - this.props.router.push( - getProfilePath(profile.name, profile.language, this.props.organization) - ); + this.props.router.push(getProfilePath(profile.name, profile.language)); }, () => {} ); diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesList.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesList.tsx index f6f39ea33f9..02958c6ce28 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesList.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesList.tsx @@ -113,11 +113,7 @@ export default class ProfilesList extends React.PureComponent { return (
    - + {Object.keys(profilesToShow).length === 0 && ( diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesListHeader.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesListHeader.tsx index 1704b24d590..c9d91383ba2 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesListHeader.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesListHeader.tsx @@ -21,24 +21,19 @@ import * as React from 'react'; import Select from 'sonar-ui-common/components/controls/Select'; import { translate } from 'sonar-ui-common/helpers/l10n'; import { Router, withRouter } from '../../../components/hoc/withRouter'; -import { getProfilesForLanguagePath, getProfilesPath } from '../utils'; +import { getProfilesForLanguagePath, PROFILE_PATH } from '../utils'; interface Props { currentFilter?: string; languages: Array<{ key: string; name: string }>; - organization: string | null; router: Pick; } export class ProfilesListHeader extends React.PureComponent { handleChange = (option: { value: string } | null) => { - const { organization, router } = this.props; + const { router } = this.props; - router.replace( - !option - ? getProfilesPath(organization) - : getProfilesForLanguagePath(option.value, organization) - ); + router.replace(!option ? PROFILE_PATH : getProfilesForLanguagePath(option.value)); }; render() { diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesListRow.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesListRow.tsx index 3ea27dcec1f..4d4776efbc9 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesListRow.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesListRow.tsx @@ -38,21 +38,15 @@ export function ProfilesListRow(props: ProfilesListRowProps) { const { organization, profile } = props; const offset = 25 * (profile.depth - 1); - const activeRulesUrl = getRulesUrl( - { - qprofile: profile.key, - activation: 'true' - }, - organization - ); - const deprecatedRulesUrl = getRulesUrl( - { - qprofile: profile.key, - activation: 'true', - statuses: 'DEPRECATED' - }, - organization - ); + const activeRulesUrl = getRulesUrl({ + qprofile: profile.key, + activation: 'true' + }); + const deprecatedRulesUrl = getRulesUrl({ + qprofile: profile.key, + activation: 'true', + statuses: 'DEPRECATED' + }); return (
    - + {profile.name}
    diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/__tests__/ProfilesListHeader-test.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/home/__tests__/ProfilesListHeader-test.tsx index 51be4be6abc..5f70c331b2f 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/home/__tests__/ProfilesListHeader-test.tsx +++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/__tests__/ProfilesListHeader-test.tsx @@ -34,7 +34,6 @@ function shallowRender(props: Partial = {}) { { key: 'js', name: 'JavaScript' }, { key: 'java', name: 'Java' } ]} - organization="foo" router={mockRouter()} {...props} /> diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/__tests__/__snapshots__/EvolutionDeprecated-test.tsx.snap b/server/sonar-web/src/main/js/apps/quality-profiles/home/__tests__/__snapshots__/EvolutionDeprecated-test.tsx.snap index 9c1ab50b7e8..62a80256ecb 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/home/__tests__/__snapshots__/EvolutionDeprecated-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/__tests__/__snapshots__/EvolutionDeprecated-test.tsx.snap @@ -28,7 +28,6 @@ exports[`should render correctly 1`] = ` className="link-no-underline" language="js" name="Quality Profile 5" - organization="foo" > Quality Profile 5 @@ -44,7 +43,7 @@ exports[`should render correctly 1`] = ` style={Object {}} to={ Object { - "pathname": "/organizations/foo/rules", + "pathname": "/coding_rules", "query": Object { "activation": "true", "qprofile": "qp-5", @@ -82,7 +81,6 @@ exports[`should render correctly 1`] = ` className="link-no-underline" language="js" name="Quality Profile 4" - organization="foo" > Quality Profile 4 @@ -98,7 +96,7 @@ exports[`should render correctly 1`] = ` style={Object {}} to={ Object { - "pathname": "/organizations/foo/rules", + "pathname": "/coding_rules", "query": Object { "activation": "true", "qprofile": "qp-4", @@ -129,7 +127,6 @@ exports[`should render correctly 1`] = ` className="link-no-underline" language="js" name="Quality Profile 2" - organization="foo" > Quality Profile 2 @@ -145,7 +142,7 @@ exports[`should render correctly 1`] = ` style={Object {}} to={ Object { - "pathname": "/organizations/foo/rules", + "pathname": "/coding_rules", "query": Object { "activation": "true", "qprofile": "qp-2", @@ -169,7 +166,6 @@ exports[`should render correctly 1`] = ` className="link-no-underline" language="js" name="Quality Profile 3" - organization="foo" > Quality Profile 3 @@ -185,7 +181,7 @@ exports[`should render correctly 1`] = ` style={Object {}} to={ Object { - "pathname": "/organizations/foo/rules", + "pathname": "/coding_rules", "query": Object { "activation": "true", "qprofile": "qp-3", diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/__tests__/__snapshots__/ProfilesList-test.tsx.snap b/server/sonar-web/src/main/js/apps/quality-profiles/home/__tests__/__snapshots__/ProfilesList-test.tsx.snap index e374ba8697e..c1462384945 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/home/__tests__/__snapshots__/ProfilesList-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/__tests__/__snapshots__/ProfilesList-test.tsx.snap @@ -15,7 +15,6 @@ exports[`should render correctly 1`] = ` }, ] } - organization="foo" />
    name @@ -144,7 +143,6 @@ exports[`should render correctly: default 1`] = ` name @@ -239,7 +237,6 @@ exports[`should render correctly: default profile 1`] = ` name @@ -365,7 +362,6 @@ exports[`should render correctly: with deprecated rules 1`] = ` name diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/utils.ts b/server/sonar-web/src/main/js/apps/quality-profiles/utils.ts index f428c13b594..a8e43c37c2e 100644 --- a/server/sonar-web/src/main/js/apps/quality-profiles/utils.ts +++ b/server/sonar-web/src/main/js/apps/quality-profiles/utils.ts @@ -62,38 +62,25 @@ export function isStagnant(profile: Profile): boolean { return false; } -export const getProfilesPath = (organization: string | null | undefined) => - organization ? `/organizations/${organization}/quality_profiles` : '/profiles'; +export const PROFILE_PATH = '/profiles'; -export const getProfilesForLanguagePath = ( - language: string, - organization: string | null | undefined -) => ({ - pathname: getProfilesPath(organization), +export const getProfilesForLanguagePath = (language: string) => ({ + pathname: PROFILE_PATH, query: { language } }); -export const getProfilePath = ( - name: string, - language: string, - organization: string | null | undefined -) => ({ - pathname: getProfilesPath(organization) + '/show', +export const getProfilePath = (name: string, language: string) => ({ + pathname: `${PROFILE_PATH}/show`, query: { name, language } }); -export const getProfileComparePath = ( - name: string, - language: string, - organization: string | null | undefined, - withKey?: string -) => { +export const getProfileComparePath = (name: string, language: string, withKey?: string) => { const query = { language, name }; if (withKey) { Object.assign(query, { withKey }); } return { - pathname: getProfilesPath(organization) + '/compare', + pathname: `${PROFILE_PATH}/compare`, query }; }; @@ -101,7 +88,6 @@ export const getProfileComparePath = ( export const getProfileChangelogPath = ( name: string, language: string, - organization: string | null | undefined, filter?: { since?: string; to?: string } ) => { const query = { language, name }; @@ -114,7 +100,7 @@ export const getProfileChangelogPath = ( } } return { - pathname: getProfilesPath(organization) + '/changelog', + pathname: `${PROFILE_PATH}/changelog`, query }; }; diff --git a/server/sonar-web/src/main/js/apps/users/components/GroupsForm.tsx b/server/sonar-web/src/main/js/apps/users/components/GroupsForm.tsx index 69eaa6172db..587c17e939c 100644 --- a/server/sonar-web/src/main/js/apps/users/components/GroupsForm.tsx +++ b/server/sonar-web/src/main/js/apps/users/components/GroupsForm.tsx @@ -66,7 +66,6 @@ export default class GroupsForm extends React.PureComponent { fetchUsers = (searchParams: SelectListSearchParams) => getUserGroups({ login: this.props.user.login, - organization: undefined, p: searchParams.page, ps: searchParams.pageSize, q: searchParams.query !== '' ? searchParams.query : undefined, diff --git a/server/sonar-web/src/main/js/apps/users/components/__tests__/GroupsForm-test.tsx b/server/sonar-web/src/main/js/apps/users/components/__tests__/GroupsForm-test.tsx index e2341abf6dc..83f51bfae22 100644 --- a/server/sonar-web/src/main/js/apps/users/components/__tests__/GroupsForm-test.tsx +++ b/server/sonar-web/src/main/js/apps/users/components/__tests__/GroupsForm-test.tsx @@ -84,7 +84,6 @@ it('should render correctly', async () => { expect(getUserGroups).toHaveBeenCalledWith( expect.objectContaining({ login: user.login, - organization: undefined, p: 1, ps: 100, q: undefined, diff --git a/server/sonar-web/src/main/js/components/workspace/WorkspaceRuleDetails.tsx b/server/sonar-web/src/main/js/components/workspace/WorkspaceRuleDetails.tsx index 91118cb41a0..8bd3a96484d 100644 --- a/server/sonar-web/src/main/js/components/workspace/WorkspaceRuleDetails.tsx +++ b/server/sonar-web/src/main/js/components/workspace/WorkspaceRuleDetails.tsx @@ -24,12 +24,9 @@ import { getRuleDetails, getRulesApp } from '../../api/rules'; import RuleDetailsDescription from '../../apps/coding-rules/components/RuleDetailsDescription'; import RuleDetailsMeta from '../../apps/coding-rules/components/RuleDetailsMeta'; import '../../apps/coding-rules/styles.css'; -import { withAppState } from '../hoc/withAppState'; interface Props { - appState: Pick; onLoad: (details: { name: string }) => void; - organizationKey: string | undefined; ruleKey: string; } @@ -39,7 +36,7 @@ interface State { ruleDetails?: T.RuleDetails; } -export class WorkspaceRuleDetails extends React.PureComponent { +export default class WorkspaceRuleDetails extends React.PureComponent { mounted = false; state: State = { loading: true, referencedRepositories: {} }; @@ -49,10 +46,7 @@ export class WorkspaceRuleDetails extends React.PureComponent { } componentDidUpdate(prevProps: Props) { - if ( - prevProps.ruleKey !== this.props.ruleKey || - prevProps.organizationKey !== this.props.organizationKey - ) { + if (prevProps.ruleKey !== this.props.ruleKey) { this.fetchRuleDetails(); } } @@ -63,10 +57,7 @@ export class WorkspaceRuleDetails extends React.PureComponent { fetchRuleDetails = () => { this.setState({ loading: true }); - Promise.all([ - getRulesApp(this.props.organizationKey), - getRuleDetails({ key: this.props.ruleKey, organization: this.props.organizationKey }) - ]).then( + Promise.all([getRulesApp(), getRuleDetails({ key: this.props.ruleKey })]).then( ([{ repositories }, { rule }]) => { if (this.mounted) { this.setState({ @@ -88,10 +79,6 @@ export class WorkspaceRuleDetails extends React.PureComponent { noOp = () => {}; render() { - const { organizationKey } = this.props; - const { organizationsEnabled } = this.props.appState; - const organization = organizationsEnabled ? organizationKey : undefined; - return ( {this.state.ruleDetails && ( @@ -101,14 +88,12 @@ export class WorkspaceRuleDetails extends React.PureComponent { hideSimilarRulesFilter={true} onFilterChange={this.noOp} onTagsChange={this.noOp} - organization={organization} referencedRepositories={this.state.referencedRepositories} ruleDetails={this.state.ruleDetails} /> @@ -117,5 +102,3 @@ export class WorkspaceRuleDetails extends React.PureComponent { ); } } - -export default withAppState(WorkspaceRuleDetails); diff --git a/server/sonar-web/src/main/js/components/workspace/WorkspaceRuleViewer.tsx b/server/sonar-web/src/main/js/components/workspace/WorkspaceRuleViewer.tsx index 6f2b4a9b551..e5177c79f74 100644 --- a/server/sonar-web/src/main/js/components/workspace/WorkspaceRuleViewer.tsx +++ b/server/sonar-web/src/main/js/components/workspace/WorkspaceRuleViewer.tsx @@ -76,11 +76,7 @@ export default class WorkspaceRuleViewer extends React.PureComponent { aria-live="polite" className="workspace-viewer-container" style={{ height: this.props.height }}> - +
    ); diff --git a/server/sonar-web/src/main/js/components/workspace/__tests__/WorkspaceRuleDetails-test.tsx b/server/sonar-web/src/main/js/components/workspace/__tests__/WorkspaceRuleDetails-test.tsx index 6cca808d764..2a2ce45c6d1 100644 --- a/server/sonar-web/src/main/js/components/workspace/__tests__/WorkspaceRuleDetails-test.tsx +++ b/server/sonar-web/src/main/js/components/workspace/__tests__/WorkspaceRuleDetails-test.tsx @@ -20,7 +20,7 @@ import { shallow } from 'enzyme'; import * as React from 'react'; import { waitAndUpdate } from 'sonar-ui-common/helpers/testUtils'; -import { WorkspaceRuleDetails } from '../WorkspaceRuleDetails'; +import WorkspaceRuleDetails from '../WorkspaceRuleDetails'; jest.mock('../../../api/rules', () => ({ getRulesApp: jest.fn(() => @@ -30,14 +30,7 @@ jest.mock('../../../api/rules', () => ({ })); it('should render', async () => { - const wrapper = shallow( - - ); + const wrapper = shallowRender(); expect(wrapper).toMatchSnapshot(); await waitAndUpdate(wrapper); @@ -46,14 +39,13 @@ it('should render', async () => { it('should call back on load', async () => { const onLoad = jest.fn(); - const wrapper = shallow( - - ); + const wrapper = shallowRender({ onLoad }); await waitAndUpdate(wrapper); expect(onLoad).toBeCalledWith({ name: 'Foo' }); }); + +function shallowRender(props?: Partial) { + return shallow( + + ); +} diff --git a/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceRuleViewer-test.tsx.snap b/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceRuleViewer-test.tsx.snap index f2515a8cfca..d7d1534c539 100644 --- a/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceRuleViewer-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceRuleViewer-test.tsx.snap @@ -31,9 +31,8 @@ exports[`should render 1`] = ` } } > -
    diff --git a/server/sonar-web/src/main/js/helpers/__tests__/urls-test.ts b/server/sonar-web/src/main/js/helpers/__tests__/urls-test.ts index cd229908f90..4e48d39c13a 100644 --- a/server/sonar-web/src/main/js/helpers/__tests__/urls-test.ts +++ b/server/sonar-web/src/main/js/helpers/__tests__/urls-test.ts @@ -29,7 +29,6 @@ import { const SIMPLE_COMPONENT_KEY = 'sonarqube'; const COMPLEX_COMPONENT_KEY = 'org.sonarsource.sonarqube:sonarqube'; -const COMPLEX_COMPONENT_KEY_ENCODED = encodeURIComponent(COMPLEX_COMPONENT_KEY); const METRIC = 'coverage'; describe('#getComponentIssuesUrl', () => { @@ -119,19 +118,6 @@ describe('#getComponentDrilldownUrl', () => { describe('#getQualityGate(s)Url', () => { it('should take organization key into account', () => { expect(getQualityGatesUrl()).toEqual({ pathname: '/quality_gates' }); - expect(getQualityGatesUrl('foo')).toEqual({ pathname: '/organizations/foo/quality_gates' }); expect(getQualityGateUrl('bar')).toEqual({ pathname: '/quality_gates/show/bar' }); - expect(getQualityGateUrl('bar', 'foo')).toEqual({ - pathname: '/organizations/foo/quality_gates/show/bar' - }); - }); - - it('should encode keys', () => { - expect(getQualityGatesUrl(COMPLEX_COMPONENT_KEY)).toEqual({ - pathname: '/organizations/' + COMPLEX_COMPONENT_KEY_ENCODED + '/quality_gates' - }); - expect(getQualityGateUrl(COMPLEX_COMPONENT_KEY)).toEqual({ - pathname: '/quality_gates/show/' + COMPLEX_COMPONENT_KEY_ENCODED - }); }); }); diff --git a/server/sonar-web/src/main/js/helpers/urls.ts b/server/sonar-web/src/main/js/helpers/urls.ts index 6678ccad309..ca06577c46d 100644 --- a/server/sonar-web/src/main/js/helpers/urls.ts +++ b/server/sonar-web/src/main/js/helpers/urls.ts @@ -178,48 +178,39 @@ export function getComponentPermissionsUrl(componentKey: string): Location { /** * Generate URL for a quality profile */ -export function getQualityProfileUrl( - name: string, - language: string, - organization?: string | null -): Location { - return getProfilePath(name, language, organization); +export function getQualityProfileUrl(name: string, language: string): Location { + return getProfilePath(name, language); } -export function getQualityGateUrl(key: string, organization?: string | null): Location { +export function getQualityGateUrl(key: string): Location { return { - pathname: getQualityGatesUrl(organization).pathname + '/show/' + encodeURIComponent(key) + pathname: '/quality_gates/show/' + encodeURIComponent(key) }; } -export function getQualityGatesUrl(organization?: string | null): Location { +export function getQualityGatesUrl(): Location { return { - pathname: - (organization ? '/organizations/' + encodeURIComponent(organization) : '') + '/quality_gates' + pathname: '/quality_gates' }; } /** * Generate URL for the rules page */ -export function getRulesUrl(query: Query, organization: string | null | undefined): Location { - const pathname = organization ? `/organizations/${organization}/rules` : '/coding_rules'; - return { pathname, query }; +export function getRulesUrl(query: Query): Location { + return { pathname: '/coding_rules', query }; } /** * Generate URL for the rules page filtering only active deprecated rules */ -export function getDeprecatedActiveRulesUrl( - query: Query = {}, - organization: string | null | undefined -): Location { +export function getDeprecatedActiveRulesUrl(query: Query = {}): Location { const baseQuery = { activation: 'true', statuses: 'DEPRECATED' }; - return getRulesUrl({ ...query, ...baseQuery }, organization); + return getRulesUrl({ ...query, ...baseQuery }); } -export function getRuleUrl(rule: string, organization: string | undefined) { - return getRulesUrl({ open: rule, rule_key: rule }, organization); +export function getRuleUrl(rule: string) { + return getRulesUrl({ open: rule, rule_key: rule }); } export function getMarkdownHelpUrl(): string { diff --git a/server/sonar-webserver-auth/src/main/java/org/sonar/server/organization/MemberUpdater.java b/server/sonar-webserver-auth/src/main/java/org/sonar/server/organization/MemberUpdater.java index 35532d1aafd..6abfa5f6505 100644 --- a/server/sonar-webserver-auth/src/main/java/org/sonar/server/organization/MemberUpdater.java +++ b/server/sonar-webserver-auth/src/main/java/org/sonar/server/organization/MemberUpdater.java @@ -137,7 +137,6 @@ public class MemberUpdater { String organizationUuid = organization.getUuid(); dbClient.userPermissionDao().deleteOrganizationMemberPermissions(dbSession, organizationUuid, userUuid); dbClient.permissionTemplateDao().deleteUserPermissionsByOrganization(dbSession, organizationUuid, userUuid); - dbClient.qProfileEditUsersDao().deleteByOrganizationAndUser(dbSession, organization, user); dbClient.userGroupDao().deleteByOrganizationAndUser(dbSession, organizationUuid, userUuid); dbClient.propertiesDao().deleteByOrganizationAndUser(dbSession, organizationUuid, userUuid); dbClient.propertiesDao().deleteByOrganizationAndMatchingLogin(dbSession, organizationUuid, user.getLogin(), singletonList(DEFAULT_ISSUE_ASSIGNEE)); diff --git a/server/sonar-webserver-auth/src/main/java/org/sonar/server/organization/OrganizationUpdaterImpl.java b/server/sonar-webserver-auth/src/main/java/org/sonar/server/organization/OrganizationUpdaterImpl.java index d3e41a8bf14..3b1688861e0 100644 --- a/server/sonar-webserver-auth/src/main/java/org/sonar/server/organization/OrganizationUpdaterImpl.java +++ b/server/sonar-webserver-auth/src/main/java/org/sonar/server/organization/OrganizationUpdaterImpl.java @@ -104,7 +104,7 @@ public class OrganizationUpdaterImpl implements OrganizationUpdater { addCurrentUserToGroup(dbSession, ownerGroup, userCreator.getUuid()); addCurrentUserToGroup(dbSession, defaultGroup, userCreator.getUuid()); try (DbSession batchDbSession = dbClient.openSession(true)) { - insertQualityProfiles(dbSession, batchDbSession, organization); + insertQualityProfiles(dbSession, batchDbSession); batchDbSession.commit(); // Elasticsearch is updated when DB session is committed @@ -186,14 +186,13 @@ public class OrganizationUpdaterImpl implements OrganizationUpdater { dbClient.permissionTemplateDao().insertGroupPermission(dbSession, template.getUuid(), group == null ? null : group.getUuid(), permission); } - private void insertQualityProfiles(DbSession dbSession, DbSession batchDbSession, OrganizationDto organization) { + private void insertQualityProfiles(DbSession dbSession, DbSession batchDbSession) { Map builtInsPerName = builtInQProfileRepository.get().stream() .collect(uniqueIndex(BuiltInQProfile::getQProfileName)); List defaults = new ArrayList<>(); dbClient.qualityProfileDao().selectBuiltInRuleProfiles(dbSession).forEach(rulesProfile -> { OrgQProfileDto dto = new OrgQProfileDto() - .setOrganizationUuid(organization.getUuid()) .setRulesProfileUuid(rulesProfile.getUuid()) .setUuid(uuidFactory.create()); @@ -205,7 +204,6 @@ public class OrganizationUpdaterImpl implements OrganizationUpdater { // in order to benefit from batch SQL inserts defaults.add(new DefaultQProfileDto() .setQProfileUuid(dto.getUuid()) - .setOrganizationUuid(organization.getUuid()) .setLanguage(rulesProfile.getLanguage())); } diff --git a/server/sonar-webserver-auth/src/main/java/org/sonar/server/qualityprofile/BuiltInQProfileInsert.java b/server/sonar-webserver-auth/src/main/java/org/sonar/server/qualityprofile/BuiltInQProfileInsert.java index f0e7d54cb21..654fdb29c3d 100644 --- a/server/sonar-webserver-auth/src/main/java/org/sonar/server/qualityprofile/BuiltInQProfileInsert.java +++ b/server/sonar-webserver-auth/src/main/java/org/sonar/server/qualityprofile/BuiltInQProfileInsert.java @@ -23,7 +23,7 @@ import org.sonar.db.DbSession; public interface BuiltInQProfileInsert { /** - * Persist a new built-in profile and associate it to all existing organizations. + * Persist a new built-in profile * Db sessions are committed and Elasticsearch indices are updated.. */ void create(DbSession session, DbSession batchSession, BuiltInQProfile builtInQProfile); diff --git a/server/sonar-webserver-auth/src/main/java/org/sonar/server/qualityprofile/BuiltInQProfileInsertImpl.java b/server/sonar-webserver-auth/src/main/java/org/sonar/server/qualityprofile/BuiltInQProfileInsertImpl.java index ceebfeff22e..8c3b290b79e 100644 --- a/server/sonar-webserver-auth/src/main/java/org/sonar/server/qualityprofile/BuiltInQProfileInsertImpl.java +++ b/server/sonar-webserver-auth/src/main/java/org/sonar/server/qualityprofile/BuiltInQProfileInsertImpl.java @@ -22,7 +22,6 @@ package org.sonar.server.qualityprofile; import com.google.common.base.Splitter; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; -import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; @@ -88,7 +87,7 @@ public class BuiltInQProfileInsertImpl implements BuiltInQProfileInsert { changes.forEach(change -> dbClient.qProfileChangeDao().insert(batchDbSession, change.toDto(null))); - associateToOrganizations(dbSession, batchDbSession, builtInQProfile, ruleProfile); + createDefaultAndOrgQProfiles(dbSession, batchDbSession, builtInQProfile, ruleProfile); // TODO batch statements should be executed through dbSession batchDbSession.commit(); @@ -96,30 +95,21 @@ public class BuiltInQProfileInsertImpl implements BuiltInQProfileInsert { activeRuleIndexer.commitAndIndex(dbSession, changes); } - private void associateToOrganizations(DbSession dbSession, DbSession batchDbSession, BuiltInQProfile builtIn, RulesProfileDto rulesProfileDto) { - List orgUuids = dbClient.organizationDao().selectAllUuids(dbSession); - Set orgUuidsWithoutDefault = dbClient.defaultQProfileDao().selectUuidsOfOrganizationsWithoutDefaultProfile(dbSession, builtIn.getLanguage()); - - List defaults = new ArrayList<>(); - orgUuids.forEach(orgUuid -> { - OrgQProfileDto dto = new OrgQProfileDto() - .setOrganizationUuid(orgUuid) - .setRulesProfileUuid(rulesProfileDto.getUuid()) - .setUuid(uuidFactory.create()); - - if (builtIn.isDefault() && orgUuidsWithoutDefault.contains(orgUuid)) { - // rows of table default_qprofiles must be inserted after - // in order to benefit from batch SQL inserts - defaults.add(new DefaultQProfileDto() - .setQProfileUuid(dto.getUuid()) - .setOrganizationUuid(orgUuid) - .setLanguage(builtIn.getLanguage())); - } - - dbClient.qualityProfileDao().insert(batchDbSession, dto); - }); - - defaults.forEach(defaultQProfileDto -> dbClient.defaultQProfileDao().insertOrUpdate(dbSession, defaultQProfileDto)); + private void createDefaultAndOrgQProfiles(DbSession dbSession, DbSession batchDbSession, BuiltInQProfile builtIn, RulesProfileDto rulesProfileDto) { + Optional qProfileUuid = dbClient.defaultQProfileDao().selectDefaultQProfileUuid(dbSession, builtIn.getLanguage()); + + OrgQProfileDto dto = new OrgQProfileDto() + .setRulesProfileUuid(rulesProfileDto.getUuid()) + .setUuid(uuidFactory.create()); + + if (builtIn.isDefault() && !qProfileUuid.isPresent()) { + DefaultQProfileDto defaultQProfileDto = new DefaultQProfileDto() + .setQProfileUuid(dto.getUuid()) + .setLanguage(builtIn.getLanguage()); + dbClient.defaultQProfileDao().insertOrUpdate(dbSession, defaultQProfileDto); + } + + dbClient.qualityProfileDao().insert(batchDbSession, dto); } private void initRuleRepository(DbSession dbSession) { diff --git a/server/sonar-webserver-auth/src/test/java/org/sonar/server/organization/MemberUpdaterTest.java b/server/sonar-webserver-auth/src/test/java/org/sonar/server/organization/MemberUpdaterTest.java index 44c288ff061..9e3a8eb2fce 100644 --- a/server/sonar-webserver-auth/src/test/java/org/sonar/server/organization/MemberUpdaterTest.java +++ b/server/sonar-webserver-auth/src/test/java/org/sonar/server/organization/MemberUpdaterTest.java @@ -38,7 +38,6 @@ import org.sonar.db.permission.template.PermissionTemplateDto; import org.sonar.db.permission.template.PermissionTemplateUserDto; import org.sonar.db.property.PropertyDto; import org.sonar.db.property.PropertyQuery; -import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.user.GroupDto; import org.sonar.db.user.UserDto; import org.sonar.server.es.EsTester; @@ -260,29 +259,6 @@ public class MemberUpdaterTest { .containsOnly(user.getUuid()); } - @Test - public void remove_member_removes_qprofiles_user_permission() { - OrganizationDto organization = db.organizations().insert(); - GroupDto defaultGroup = db.users().insertDefaultGroup(organization, "Members"); - UserDto user = db.users().insertUser(); - UserDto adminUser = db.users().insertAdminByUserPermission(organization); - db.organizations().addMember(organization, user, adminUser); - db.users().insertMember(defaultGroup, user); - userIndexer.indexOnStartup(new HashSet<>()); - - OrganizationDto anotherOrganization = db.organizations().insert(); - db.organizations().addMember(anotherOrganization, user); - QProfileDto profile = db.qualityProfiles().insert(organization); - QProfileDto anotherProfile = db.qualityProfiles().insert(anotherOrganization); - db.qualityProfiles().addUserPermission(profile, user); - db.qualityProfiles().addUserPermission(anotherProfile, user); - - underTest.removeMember(db.getSession(), organization, user); - - assertThat(db.getDbClient().qProfileEditUsersDao().exists(db.getSession(), profile, user)).isFalse(); - assertThat(db.getDbClient().qProfileEditUsersDao().exists(db.getSession(), anotherProfile, user)).isTrue(); - } - @Test public void remove_member_removes_user_from_organization_groups() { OrganizationDto organization = db.organizations().insert(); diff --git a/server/sonar-webserver-auth/src/test/java/org/sonar/server/organization/OrganizationUpdaterImplTest.java b/server/sonar-webserver-auth/src/test/java/org/sonar/server/organization/OrganizationUpdaterImplTest.java index ba5dee147ca..4042fb3724f 100644 --- a/server/sonar-webserver-auth/src/test/java/org/sonar/server/organization/OrganizationUpdaterImplTest.java +++ b/server/sonar-webserver-auth/src/test/java/org/sonar/server/organization/OrganizationUpdaterImplTest.java @@ -226,10 +226,10 @@ public class OrganizationUpdaterImplTest { underTest.create(dbSession, user, FULL_POPULATED_NEW_ORGANIZATION, EMPTY_ORGANIZATION_CONSUMER); OrganizationDto organization = dbClient.organizationDao().selectByKey(dbSession, FULL_POPULATED_NEW_ORGANIZATION.getKey()).get(); - List profiles = dbClient.qualityProfileDao().selectOrderedByOrganizationUuid(dbSession, organization); + List profiles = dbClient.qualityProfileDao().selectAll(dbSession); assertThat(profiles).extracting(p -> new QProfileName(p.getLanguage(), p.getName())).containsExactlyInAnyOrder( builtIn1.getQProfileName(), builtIn2.getQProfileName()); - assertThat(dbClient.qualityProfileDao().selectDefaultProfile(dbSession, organization, "foo").getName()) + assertThat(dbClient.qualityProfileDao().selectDefaultProfile(dbSession, "foo").getName()) .isEqualTo("qp1"); } diff --git a/server/sonar-webserver-auth/src/test/java/org/sonar/server/qualityprofile/BuiltInQProfileInsertImplTest.java b/server/sonar-webserver-auth/src/test/java/org/sonar/server/qualityprofile/BuiltInQProfileInsertImplTest.java index 1d49048f134..dd6abc61954 100644 --- a/server/sonar-webserver-auth/src/test/java/org/sonar/server/qualityprofile/BuiltInQProfileInsertImplTest.java +++ b/server/sonar-webserver-auth/src/test/java/org/sonar/server/qualityprofile/BuiltInQProfileInsertImplTest.java @@ -33,7 +33,6 @@ import org.sonar.core.util.SequenceUuidFactory; import org.sonar.core.util.UuidFactory; import org.sonar.db.DbSession; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.ActiveRuleDto; import org.sonar.db.qualityprofile.ActiveRuleKey; import org.sonar.db.qualityprofile.ActiveRuleParamDto; @@ -41,7 +40,6 @@ import org.sonar.db.qualityprofile.QProfileChangeDto; import org.sonar.db.qualityprofile.QProfileChangeQuery; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.rule.RuleDefinitionDto; -import org.sonar.server.language.LanguageTesting; import org.sonar.server.qualityprofile.index.ActiveRuleIndexer; import org.sonar.server.util.TypeValidations; @@ -54,7 +52,7 @@ public class BuiltInQProfileInsertImplTest { @Rule public BuiltInQProfileRepositoryRule builtInQProfileRepository = new BuiltInQProfileRepositoryRule(); @Rule - public DbTester db = DbTester.create().setDisableDefaultOrganization(true); + public DbTester db = DbTester.create(); @Rule public ExpectedException expectedException = ExpectedException.none(); @@ -71,32 +69,8 @@ public class BuiltInQProfileInsertImplTest { batchDbSession.close(); } - @Test - public void insert_single_row_in_RULES_PROFILES_and_reference_it_in_ORG_QPROFILES() { - OrganizationDto org1 = db.organizations().insert(); - OrganizationDto org2 = db.organizations().insert(); - BuiltInQProfile builtIn = builtInQProfileRepository.create(LanguageTesting.newLanguage("xoo"), "the name", false); - - call(builtIn); - - verifyTableSize("org_qprofiles", 2); - verifyTableSize("rules_profiles", 1); - verifyTableSize("active_rules", 0); - verifyTableSize("active_rule_parameters", 0); - verifyTableSize("qprofile_changes", 0); - verifyTableSize("project_qprofiles", 0); - - QProfileDto profileOnOrg1 = verifyProfileInDb(org1, builtIn); - QProfileDto profileOnOrg2 = verifyProfileInDb(org2, builtIn); - - // same row in table rules_profiles is used - assertThat(profileOnOrg1.getKee()).isNotEqualTo(profileOnOrg2.getKee()); - assertThat(profileOnOrg1.getRulesProfileUuid()).isEqualTo(profileOnOrg2.getRulesProfileUuid()); - } - @Test public void insert_active_rules_and_changelog() { - OrganizationDto org = db.organizations().insert(); RuleDefinitionDto rule1 = db.rules().insert(r -> r.setLanguage("xoo")); RuleDefinitionDto rule2 = db.rules().insert(r -> r.setLanguage("xoo")); @@ -115,14 +89,13 @@ public class BuiltInQProfileInsertImplTest { verifyTableSize("active_rule_parameters", 0); verifyTableSize("qprofile_changes", 2); - QProfileDto profile = verifyProfileInDb(org, builtIn); + QProfileDto profile = verifyProfileInDb(builtIn); verifyActiveRuleInDb(profile, rule1, Severity.CRITICAL); verifyActiveRuleInDb(profile, rule2, Severity.MAJOR); } @Test - public void flag_profile_as_default_on_organization_if_declared_as_default_by_api() { - OrganizationDto org = db.organizations().insert(); + public void flag_profile_as_default_if_declared_as_default_by_api() { BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile("the name", "xoo").setDefault(true); newQp.done(); @@ -131,31 +104,29 @@ public class BuiltInQProfileInsertImplTest { call(builtIn); - QProfileDto profile = verifyProfileInDb(org, builtIn); - QProfileDto defaultProfile = db.getDbClient().qualityProfileDao().selectDefaultProfile(dbSession, org, "xoo"); + QProfileDto profile = verifyProfileInDb(builtIn); + QProfileDto defaultProfile = db.getDbClient().qualityProfileDao().selectDefaultProfile(dbSession, "xoo"); assertThat(defaultProfile.getKee()).isEqualTo(profile.getKee()); } @Test - public void existing_default_profile_in_organization_must_not_be_changed() { + public void existing_default_profile_must_not_be_changed() { BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile("the name", "xoo").setDefault(true); newQp.done(); BuiltInQProfile builtIn = builtInQProfileRepository.create(context.profile("xoo", "the name")); - OrganizationDto org = db.organizations().insert(); - QProfileDto currentDefault = db.qualityProfiles().insert(org, p -> p.setLanguage("xoo")); + QProfileDto currentDefault = db.qualityProfiles().insert(p -> p.setLanguage("xoo")); db.qualityProfiles().setAsDefault(currentDefault); call(builtIn); - QProfileDto defaultProfile = db.getDbClient().qualityProfileDao().selectDefaultProfile(dbSession, org, "xoo"); + QProfileDto defaultProfile = db.getDbClient().qualityProfileDao().selectDefaultProfile(dbSession, "xoo"); assertThat(defaultProfile.getKee()).isEqualTo(currentDefault.getKee()); } @Test - public void dont_flag_profile_as_default_on_organization_if_not_declared_as_default_by_api() { - OrganizationDto org = db.organizations().insert(); + public void dont_flag_profile_as_default_if_not_declared_as_default_by_api() { BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile("the name", "xoo").setDefault(false); newQp.done(); @@ -163,7 +134,7 @@ public class BuiltInQProfileInsertImplTest { call(builtIn); - QProfileDto defaultProfile = db.getDbClient().qualityProfileDao().selectDefaultProfile(dbSession, org, "xoo"); + QProfileDto defaultProfile = db.getDbClient().qualityProfileDao().selectDefaultProfile(dbSession, "xoo"); assertThat(defaultProfile).isNull(); } @@ -197,11 +168,10 @@ public class BuiltInQProfileInsertImplTest { assertThat(change.getDataAsMap().get("severity")).isEqualTo(expectedSeverity); } - private QProfileDto verifyProfileInDb(OrganizationDto organization, BuiltInQProfile builtIn) { - QProfileDto profileOnOrg1 = db.getDbClient().qualityProfileDao().selectByNameAndLanguage(dbSession, organization, builtIn.getName(), builtIn.getLanguage()); + private QProfileDto verifyProfileInDb(BuiltInQProfile builtIn) { + QProfileDto profileOnOrg1 = db.getDbClient().qualityProfileDao().selectByNameAndLanguage(dbSession, builtIn.getName(), builtIn.getLanguage()); assertThat(profileOnOrg1.getLanguage()).isEqualTo(builtIn.getLanguage()); assertThat(profileOnOrg1.getName()).isEqualTo(builtIn.getName()); - assertThat(profileOnOrg1.getOrganizationUuid()).isEqualTo(organization.getUuid()); assertThat(profileOnOrg1.getParentKee()).isNull(); assertThat(profileOnOrg1.getLastUsed()).isNull(); assertThat(profileOnOrg1.getUserUpdatedAt()).isNull(); diff --git a/server/sonar-webserver-auth/src/test/java/org/sonar/server/qualityprofile/BuiltInQProfileUpdateImplTest.java b/server/sonar-webserver-auth/src/test/java/org/sonar/server/qualityprofile/BuiltInQProfileUpdateImplTest.java index 09741edd18c..4d64f56da08 100644 --- a/server/sonar-webserver-auth/src/test/java/org/sonar/server/qualityprofile/BuiltInQProfileUpdateImplTest.java +++ b/server/sonar-webserver-auth/src/test/java/org/sonar/server/qualityprofile/BuiltInQProfileUpdateImplTest.java @@ -255,8 +255,7 @@ public class BuiltInQProfileUpdateImplTest { public void propagate_activation_to_descendant_profiles() { RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("xoo")); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), - p -> p.setLanguage(rule.getLanguage()).setIsBuiltIn(true)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(rule.getLanguage()).setIsBuiltIn(true)); QProfileDto childProfile = createChildProfile(profile); QProfileDto grandchildProfile = createChildProfile(childProfile); @@ -277,8 +276,7 @@ public class BuiltInQProfileUpdateImplTest { public void do_not_load_descendants_if_no_changes() { RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("xoo")); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), - p -> p.setLanguage(rule.getLanguage()).setIsBuiltIn(true)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(rule.getLanguage()).setIsBuiltIn(true)); QProfileDto childProfile = createChildProfile(profile); BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); @@ -308,8 +306,7 @@ public class BuiltInQProfileUpdateImplTest { public void propagate_deactivation_to_descendant_profiles() { RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("xoo")); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), - p -> p.setLanguage(rule.getLanguage()).setIsBuiltIn(true)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(rule.getLanguage()).setIsBuiltIn(true)); QProfileDto childProfile = createChildProfile(profile); QProfileDto grandChildProfile = createChildProfile(childProfile); @@ -337,7 +334,7 @@ public class BuiltInQProfileUpdateImplTest { } private QProfileDto createChildProfile(QProfileDto parent) { - return db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p + return db.qualityProfiles().insert(p -> p .setLanguage(parent.getLanguage()) .setParentKee(parent.getKee()) .setName("Child of " + parent.getName())) diff --git a/server/sonar-webserver-core/src/main/java/org/sonar/server/rule/RegisterRules.java b/server/sonar-webserver-core/src/main/java/org/sonar/server/rule/RegisterRules.java index 01229777861..ee46d43b149 100644 --- a/server/sonar-webserver-core/src/main/java/org/sonar/server/rule/RegisterRules.java +++ b/server/sonar-webserver-core/src/main/java/org/sonar/server/rule/RegisterRules.java @@ -62,7 +62,6 @@ import org.sonar.db.rule.RuleDto.Scope; import org.sonar.db.rule.RuleParamDto; import org.sonar.db.rule.RuleRepositoryDto; import org.sonar.server.es.metadata.MetadataIndex; -import org.sonar.server.organization.OrganizationFlags; import org.sonar.server.qualityprofile.ActiveRuleChange; import org.sonar.server.qualityprofile.QProfileRules; import org.sonar.server.qualityprofile.index.ActiveRuleIndexer; @@ -92,13 +91,12 @@ public class RegisterRules implements Startable { private final ActiveRuleIndexer activeRuleIndexer; private final Languages languages; private final System2 system2; - private final OrganizationFlags organizationFlags; private final WebServerRuleFinder webServerRuleFinder; private final UuidFactory uuidFactory; private final MetadataIndex metadataIndex; public RegisterRules(RuleDefinitionsLoader defLoader, QProfileRules qProfileRules, DbClient dbClient, RuleIndexer ruleIndexer, - ActiveRuleIndexer activeRuleIndexer, Languages languages, System2 system2, OrganizationFlags organizationFlags, + ActiveRuleIndexer activeRuleIndexer, Languages languages, System2 system2, WebServerRuleFinder webServerRuleFinder, UuidFactory uuidFactory, MetadataIndex metadataIndex) { this.defLoader = defLoader; this.qProfileRules = qProfileRules; @@ -107,7 +105,6 @@ public class RegisterRules implements Startable { this.activeRuleIndexer = activeRuleIndexer; this.languages = languages; this.system2 = system2; - this.organizationFlags = organizationFlags; this.webServerRuleFinder = webServerRuleFinder; this.uuidFactory = uuidFactory; this.metadataIndex = metadataIndex; @@ -123,13 +120,9 @@ public class RegisterRules implements Startable { verifyRuleKeyConsistency(repositories, registerRulesContext); - boolean orgsEnabled = organizationFlags.isEnabled(dbSession); for (RulesDefinition.ExtendedRepository repoDef : repositories) { if (languages.get(repoDef.language()) != null) { for (RulesDefinition.Rule ruleDef : repoDef.rules()) { - if (noTemplateRuleWithOrganizationsEnabled(registerRulesContext, orgsEnabled, ruleDef)) { - continue; - } registerRule(registerRulesContext, ruleDef, dbSession); } dbSession.commit(); @@ -181,22 +174,6 @@ public class RegisterRules implements Startable { .collect(Collectors.groupingBy(SingleDeprecatedRuleKey::getRuleUuid, Collectors.toSet())); } - private static boolean noTemplateRuleWithOrganizationsEnabled(RegisterRulesContext registerRulesContext, boolean orgsEnabled, RulesDefinition.Rule ruleDef) { - if (!ruleDef.template() || !orgsEnabled) { - return false; - } - - Optional dbRule = registerRulesContext.getDbRuleFor(ruleDef); - if (dbRule.isPresent() && dbRule.get().getStatus() == RuleStatus.REMOVED) { - RuleDefinitionDto dto = dbRule.get(); - LOG.debug("Template rule {} kept removed, because organizations are enabled.", dto.getKey()); - registerRulesContext.removed(dto); - } else { - LOG.info("Template rule {} will not be imported, because organizations are enabled.", RuleKey.of(ruleDef.repository().key(), ruleDef.key())); - } - return true; - } - private static class RegisterRulesContext { // initial immutable data private final Map dbRules; @@ -553,7 +530,7 @@ public class RegisterRules implements Startable { RulesDefinition.Param paramDef = ruleDef.param(paramDto.getName()); if (paramDef == null) { profiler.start(); - dbClient.activeRuleDao().deleteParamsByRuleParamOfAllOrganizations(session, paramDto); + dbClient.activeRuleDao().deleteParamsByRuleParam(session, paramDto); profiler.stopDebug(format("Propagate deleted param with name %s to active rules of rule %s", paramDto.getName(), rule.getKey())); dbClient.ruleDao().deleteRuleParam(session, paramDto.getUuid()); } else { @@ -581,7 +558,7 @@ public class RegisterRules implements Startable { } // Propagate the default value to existing active rule parameters profiler.start(); - for (ActiveRuleDto activeRule : dbClient.activeRuleDao().selectByRuleUuidOfAllOrganizations(session, rule.getUuid())) { + for (ActiveRuleDto activeRule : dbClient.activeRuleDao().selectByRuleUuid(session, rule.getUuid())) { ActiveRuleParamDto activeParam = ActiveRuleParamDto.createFor(paramDto).setValue(param.defaultValue()); dbClient.activeRuleDao().insertParam(session, activeRule, activeParam); } diff --git a/server/sonar-webserver-core/src/main/java/org/sonar/server/rule/WebServerRuleFinderImpl.java b/server/sonar-webserver-core/src/main/java/org/sonar/server/rule/WebServerRuleFinderImpl.java index 448222ad30d..4a8a64bd44f 100644 --- a/server/sonar-webserver-core/src/main/java/org/sonar/server/rule/WebServerRuleFinderImpl.java +++ b/server/sonar-webserver-core/src/main/java/org/sonar/server/rule/WebServerRuleFinderImpl.java @@ -36,9 +36,9 @@ public class WebServerRuleFinderImpl implements WebServerRuleFinder { @VisibleForTesting ServerRuleFinder delegate; - public WebServerRuleFinderImpl(DbClient dbClient, DefaultOrganizationProvider defaultOrganizationProvider) { + public WebServerRuleFinderImpl(DbClient dbClient) { this.dbClient = dbClient; - this.defaultFinder = new DefaultRuleFinder(dbClient, defaultOrganizationProvider); + this.defaultFinder = new DefaultRuleFinder(dbClient); this.delegate = this.defaultFinder; } diff --git a/server/sonar-webserver-core/src/test/java/org/sonar/server/rule/RegisterRulesTest.java b/server/sonar-webserver-core/src/test/java/org/sonar/server/rule/RegisterRulesTest.java index 8ebc31b8e36..4425cb5ae79 100644 --- a/server/sonar-webserver-core/src/test/java/org/sonar/server/rule/RegisterRulesTest.java +++ b/server/sonar-webserver-core/src/test/java/org/sonar/server/rule/RegisterRulesTest.java @@ -43,7 +43,6 @@ import org.sonar.api.server.rule.RulesDefinition; import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.System2; import org.sonar.api.utils.log.LogTester; -import org.sonar.api.utils.log.LoggerLevel; import org.sonar.core.util.UuidFactory; import org.sonar.core.util.UuidFactoryFast; import org.sonar.db.DbClient; @@ -60,8 +59,6 @@ import org.sonar.server.es.EsTester; import org.sonar.server.es.SearchIdResult; import org.sonar.server.es.SearchOptions; import org.sonar.server.es.metadata.MetadataIndex; -import org.sonar.server.organization.OrganizationFlags; -import org.sonar.server.organization.TestOrganizationFlags; import org.sonar.server.plugins.ServerPluginRepository; import org.sonar.server.qualityprofile.QProfileRules; import org.sonar.server.qualityprofile.index.ActiveRuleIndexer; @@ -124,8 +121,6 @@ public class RegisterRulesTest { private ActiveRuleIndexer activeRuleIndexer; private RuleIndex ruleIndex; private MetadataIndex metadataIndex = mock(MetadataIndex.class); - private OrganizationDto defaultOrganization; - private OrganizationFlags organizationFlags = TestOrganizationFlags.standalone(); private UuidFactory uuidFactory = UuidFactoryFast.getInstance(); @Before @@ -134,7 +129,6 @@ public class RegisterRulesTest { ruleIndexer = new RuleIndexer(es.client(), dbClient); ruleIndex = new RuleIndex(es.client(), system); activeRuleIndexer = new ActiveRuleIndexer(dbClient, es.client()); - defaultOrganization = db.getDefaultOrganization(); } @Test @@ -143,7 +137,7 @@ public class RegisterRulesTest { // verify db assertThat(dbClient.ruleDao().selectAllDefinitions(db.getSession())).hasSize(3); - RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), db.getDefaultOrganization(), RULE_KEY1); + RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY1); assertThat(rule1.getName()).isEqualTo("One"); assertThat(rule1.getDescription()).isEqualTo("Description of One"); assertThat(rule1.getSeverityString()).isEqualTo(BLOCKER); @@ -162,7 +156,7 @@ public class RegisterRulesTest { assertThat(rule1.isExternal()).isFalse(); assertThat(rule1.isAdHoc()).isFalse(); - RuleDto hotspotRule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), db.getDefaultOrganization(), HOTSPOT_RULE_KEY); + RuleDto hotspotRule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), HOTSPOT_RULE_KEY); assertThat(hotspotRule.getName()).isEqualTo("Hotspot"); assertThat(hotspotRule.getDescription()).isEqualTo("Minimal hotspot"); assertThat(hotspotRule.getCreatedAt()).isEqualTo(DATE1.getTime()); @@ -177,7 +171,7 @@ public class RegisterRulesTest { assertThat(param.getDefaultValue()).isEqualTo("default1"); // verify index - RuleDto rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), db.getDefaultOrganization(), RULE_KEY2); + RuleDto rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY2); assertThat(ruleIndex.search(new RuleQuery(), new SearchOptions()).getUuids()).containsOnly(rule1.getUuid(), rule2.getUuid(), hotspotRule.getUuid()); verifyIndicesMarkedAsInitialized(); @@ -191,7 +185,7 @@ public class RegisterRulesTest { // verify db assertThat(dbClient.ruleDao().selectAllDefinitions(db.getSession())).hasSize(2); - RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), db.getDefaultOrganization(), EXTERNAL_RULE_KEY1); + RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), EXTERNAL_RULE_KEY1); assertThat(rule1.getName()).isEqualTo("One"); assertThat(rule1.getDescription()).isEqualTo("Description of One"); assertThat(rule1.getSeverityString()).isEqualTo(BLOCKER); @@ -210,7 +204,7 @@ public class RegisterRulesTest { assertThat(rule1.isExternal()).isTrue(); assertThat(rule1.isAdHoc()).isFalse(); - RuleDto hotspotRule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), db.getDefaultOrganization(), EXTERNAL_HOTSPOT_RULE_KEY); + RuleDto hotspotRule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), EXTERNAL_HOTSPOT_RULE_KEY); assertThat(hotspotRule.getName()).isEqualTo("Hotspot"); assertThat(hotspotRule.getDescription()).isEqualTo("Minimal hotspot"); assertThat(hotspotRule.getCreatedAt()).isEqualTo(DATE1.getTime()); @@ -320,9 +314,9 @@ public class RegisterRulesTest { public void update_and_remove_rules_on_changes() { execute(new FakeRepositoryV1()); assertThat(dbClient.ruleDao().selectAllDefinitions(db.getSession())).hasSize(3); - RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY1); - RuleDto rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY2); - RuleDto hotspotRule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, HOTSPOT_RULE_KEY); + RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY1); + RuleDto rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY2); + RuleDto hotspotRule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), HOTSPOT_RULE_KEY); assertThat(es.getIds(RuleIndexDefinition.TYPE_RULE)).containsOnly(valueOf(rule1.getUuid()), valueOf(rule2.getUuid()), valueOf(hotspotRule.getUuid())); verifyIndicesMarkedAsInitialized(); @@ -338,7 +332,7 @@ public class RegisterRulesTest { verifyIndicesNotMarkedAsInitialized(); // rule1 has been updated - rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY1); + rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY1); assertThat(rule1.getName()).isEqualTo("One v2"); assertThat(rule1.getDescription()).isEqualTo("Description of One v2"); assertThat(rule1.getSeverityString()).isEqualTo(INFO); @@ -359,12 +353,12 @@ public class RegisterRulesTest { assertThat(param.getDefaultValue()).isEqualTo("default1 v2"); // rule2 has been removed -> status set to REMOVED but db row is not deleted - rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY2); + rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY2); assertThat(rule2.getStatus()).isEqualTo(REMOVED); assertThat(rule2.getUpdatedAt()).isEqualTo(DATE2.getTime()); // rule3 has been created - RuleDto rule3 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY3); + RuleDto rule3 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY3); assertThat(rule3).isNotNull(); assertThat(rule3.getStatus()).isEqualTo(READY); @@ -387,7 +381,7 @@ public class RegisterRulesTest { }); OrganizationDto defaultOrganization = db.getDefaultOrganization(); - RuleDto rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY1); + RuleDto rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY1); assertThat(rule.getSystemTags()).containsOnly("tag1"); execute(context -> { @@ -399,7 +393,7 @@ public class RegisterRulesTest { repo.done(); }); - rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY1); + rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY1); assertThat(rule.getSystemTags()).containsOnly("tag1", "tag2"); } @@ -416,7 +410,7 @@ public class RegisterRulesTest { }); OrganizationDto defaultOrganization = db.getDefaultOrganization(); - RuleDto rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY1); + RuleDto rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY1); assertThat(rule.getSecurityStandards()).containsOnly("cwe:123", "owaspTop10:a1"); execute(context -> { @@ -429,7 +423,7 @@ public class RegisterRulesTest { repo.done(); }); - rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY1); + rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY1); assertThat(rule.getSecurityStandards()).containsOnly("cwe:1", "cwe:123", "cwe:863", "owaspTop10:a1", "owaspTop10:a3"); } @@ -454,7 +448,7 @@ public class RegisterRulesTest { }); // rule1 has been updated - RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of("fake", "rule")); + RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RuleKey.of("fake", "rule")); assertThat(rule1.getName()).isEqualTo("Name2"); assertThat(rule1.getDescription()).isEqualTo("Description"); @@ -474,7 +468,7 @@ public class RegisterRulesTest { repo.done(); }); - RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of("squid", "rule")); + RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RuleKey.of("squid", "rule")); // insert custom rule db.rules().insert(new RuleDefinitionDto() @@ -497,8 +491,8 @@ public class RegisterRulesTest { }); // template rule and custom rule have been updated - rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of("java", "rule")); - RuleDto custom = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of("java", "custom")); + rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RuleKey.of("java", "rule")); + RuleDto custom = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RuleKey.of("java", "custom")); } @Test @@ -516,7 +510,7 @@ public class RegisterRulesTest { repo.done(); }); - RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of(repository, ruleKey1)); + RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RuleKey.of(repository, ruleKey1)); SearchIdResult searchRule1 = ruleIndex.search(new RuleQuery().setQueryText("Name1"), new SearchOptions()); assertThat(searchRule1.getUuids()).containsOnly(rule1.getUuid()); assertThat(searchRule1.getTotal()).isEqualTo(1); @@ -532,7 +526,7 @@ public class RegisterRulesTest { }); // rule2 is actually rule1 - RuleDto rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of(repository, ruleKey2)); + RuleDto rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RuleKey.of(repository, ruleKey2)); assertThat(rule2.getUuid()).isEqualTo(rule1.getUuid()); assertThat(rule2.getName()).isEqualTo("Name2"); assertThat(rule2.getDescription()).isEqualTo(rule1.getDescription()); @@ -558,7 +552,7 @@ public class RegisterRulesTest { repo.done(); }); - RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of(repository1, ruleKey)); + RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RuleKey.of(repository1, ruleKey)); SearchIdResult searchRule1 = ruleIndex.search(new RuleQuery().setQueryText("Name1"), new SearchOptions()); assertThat(searchRule1.getUuids()).containsOnly(rule1.getUuid()); assertThat(searchRule1.getTotal()).isEqualTo(1); @@ -574,7 +568,7 @@ public class RegisterRulesTest { }); // rule2 is actually rule1 - RuleDto rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of(repository2, ruleKey)); + RuleDto rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RuleKey.of(repository2, ruleKey)); assertThat(rule2.getUuid()).isEqualTo(rule1.getUuid()); assertThat(rule2.getName()).isEqualTo("Name2"); assertThat(rule2.getDescription()).isEqualTo(rule1.getDescription()); @@ -599,7 +593,7 @@ public class RegisterRulesTest { repo.done(); }); - RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of(repo1, ruleKey1)); + RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RuleKey.of(repo1, ruleKey1)); assertThat(ruleIndex.search(new RuleQuery().setQueryText(name), new SearchOptions()).getUuids()) .containsOnly(rule1.getUuid()); @@ -614,7 +608,7 @@ public class RegisterRulesTest { }); // rule2 is actually rule1 - RuleDto rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of(repo2, ruleKey2)); + RuleDto rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RuleKey.of(repo2, ruleKey2)); assertThat(rule2.getUuid()).isEqualTo(rule1.getUuid()); assertThat(rule2.getName()).isEqualTo(rule1.getName()); assertThat(rule2.getDescription()).isEqualTo(rule1.getDescription()); @@ -648,7 +642,7 @@ public class RegisterRulesTest { repo.done(); }); - RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of(repository1, ruleKey1)); + RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RuleKey.of(repository1, ruleKey1)); assertThat(ruleIndex.search(new RuleQuery().setQueryText("Name1"), new SearchOptions()).getUuids()) .containsOnly(rule1.getUuid()); @@ -665,7 +659,7 @@ public class RegisterRulesTest { }); // rule2 is actually rule1 - RuleDto rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of(repository2, ruleKey2)); + RuleDto rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RuleKey.of(repository2, ruleKey2)); assertThat(rule2.getUuid()).isEqualTo(rule1.getUuid()); assertThat(ruleIndex.search(new RuleQuery().setQueryText("Name2"), new SearchOptions()).getUuids()) @@ -693,7 +687,7 @@ public class RegisterRulesTest { }); // rule1 has been updated - RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RuleKey.of("fake", "rule")); + RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RuleKey.of("fake", "rule")); assertThat(rule1.getName()).isEqualTo("Name"); assertThat(rule1.getDescription()).isEqualTo("Desc2"); @@ -713,7 +707,7 @@ public class RegisterRulesTest { repo.done(); }); - RuleDto reloaded = dbClient.ruleDao().selectByKey(db.getSession(), defaultOrganization.getUuid(), rule.getKey()).get(); + RuleDto reloaded = dbClient.ruleDao().selectByKey(db.getSession(), rule.getKey()).get(); assertThat(reloaded.isAdHoc()).isFalse(); } @@ -726,7 +720,7 @@ public class RegisterRulesTest { execute(); - RuleDto reloaded = dbClient.ruleDao().selectByKey(db.getSession(), defaultOrganization.getUuid(), rule.getKey()).get(); + RuleDto reloaded = dbClient.ruleDao().selectByKey(db.getSession(), rule.getKey()).get(); assertThat(reloaded.getStatus()).isEqualTo(REMOVED); } @@ -739,7 +733,7 @@ public class RegisterRulesTest { execute(); - RuleDto reloaded = dbClient.ruleDao().selectByKey(db.getSession(), defaultOrganization.getUuid(), rule.getKey()).get(); + RuleDto reloaded = dbClient.ruleDao().selectByKey(db.getSession(), rule.getKey()).get(); assertThat(reloaded.getStatus()).isEqualTo(READY); } @@ -753,7 +747,7 @@ public class RegisterRulesTest { when(system.now()).thenReturn(DATE2.getTime()); execute(); - RuleDto rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY1); + RuleDto rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY1); assertThat(rule.getStatus()).isEqualTo(REMOVED); assertThat(ruleIndex.search(new RuleQuery().setKey(RULE_KEY1.toString()), new SearchOptions()).getTotal()).isEqualTo(0); @@ -761,7 +755,7 @@ public class RegisterRulesTest { when(system.now()).thenReturn(DATE3.getTime()); execute(new FakeRepositoryV1()); - rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY1); + rule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY1); assertThat(rule.getStatus()).isEqualTo(RuleStatus.BETA); assertThat(ruleIndex.search(new RuleQuery().setKey(RULE_KEY1.toString()), new SearchOptions()).getTotal()).isEqualTo(1); } @@ -774,7 +768,7 @@ public class RegisterRulesTest { when(system.now()).thenReturn(DATE2.getTime()); execute(new FakeRepositoryV1()); - RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY1); + RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY1); assertThat(rule1.getCreatedAt()).isEqualTo(DATE1.getTime()); assertThat(rule1.getUpdatedAt()).isEqualTo(DATE1.getTime()); } @@ -784,9 +778,9 @@ public class RegisterRulesTest { execute(new FakeRepositoryV1()); assertThat(dbClient.ruleDao().selectAllDefinitions(db.getSession())).hasSize(3); - RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY1); - RuleDto rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY2); - RuleDto hotspotRule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, HOTSPOT_RULE_KEY); + RuleDto rule1 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY1); + RuleDto rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY2); + RuleDto hotspotRule = dbClient.ruleDao().selectOrFailByKey(db.getSession(), HOTSPOT_RULE_KEY); assertThat(es.getIds(RuleIndexDefinition.TYPE_RULE)).containsOnly(valueOf(rule1.getUuid()), valueOf(rule2.getUuid()), valueOf(hotspotRule.getUuid())); assertThat(rule2.getStatus()).isEqualTo(READY); @@ -799,8 +793,8 @@ public class RegisterRulesTest { db.getSession().commit(); // rule2 is removed - rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY2); - RuleDto rule3 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY3); + rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY2); + RuleDto rule3 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY3); assertThat(rule2.getStatus()).isEqualTo(REMOVED); assertThat(ruleIndex.search(new RuleQuery(), new SearchOptions()).getUuids()).containsOnly(rule1.getUuid(), rule3.getUuid()); @@ -810,7 +804,7 @@ public class RegisterRulesTest { db.getSession().commit(); // -> rule2 is still removed, but not update at DATE3 - rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), defaultOrganization, RULE_KEY2); + rule2 = dbClient.ruleDao().selectOrFailByKey(db.getSession(), RULE_KEY2); assertThat(rule2.getStatus()).isEqualTo(REMOVED); assertThat(rule2.getUpdatedAt()).isEqualTo(DATE2.getTime()); @@ -856,23 +850,6 @@ public class RegisterRulesTest { .containsOnly(tuple(RuleKey.of("findbugs", "rule1"), emptySet())); } - @Test - public void ignore_template_rules_if_organizations_are_enabled() { - organizationFlags.enable(db.getSession()); - execute(new RepositoryWithOneTemplateRule()); - - List rules = dbClient.ruleDao().selectAllDefinitions(db.getSession()); - assertThat(rules).hasSize(0); - } - - @Test - public void log_ignored_template_rules_if_organizations_are_enabled() { - organizationFlags.enable(db.getSession()); - execute(new RepositoryWithOneTemplateRule()); - - assertThat(logTester.logs(LoggerLevel.INFO)).contains("Template rule test:rule1 will not be imported, because organizations are enabled."); - } - @Test public void rules_that_deprecate_previous_rule_must_be_recorded() { execute(context -> { @@ -998,14 +975,12 @@ public class RegisterRulesTest { private void execute(RulesDefinition... defs) { ServerPluginRepository pluginRepository = mock(ServerPluginRepository.class); when(pluginRepository.getPluginKey(any(RulesDefinition.class))).thenReturn(FAKE_PLUGIN_KEY); - RuleDefinitionsLoader loader = new RuleDefinitionsLoader(mock(CommonRuleDefinitionsImpl.class), pluginRepository, - defs); + RuleDefinitionsLoader loader = new RuleDefinitionsLoader(mock(CommonRuleDefinitionsImpl.class), pluginRepository, defs); Languages languages = mock(Languages.class); when(languages.get(any())).thenReturn(mock(Language.class)); reset(webServerRuleFinder); - RegisterRules task = new RegisterRules(loader, qProfileRules, dbClient, ruleIndexer, activeRuleIndexer, - languages, system, organizationFlags, webServerRuleFinder, uuidFactory, metadataIndex); + RegisterRules task = new RegisterRules(loader, qProfileRules, dbClient, ruleIndexer, activeRuleIndexer, languages, system, webServerRuleFinder, uuidFactory, metadataIndex); task.start(); // Execute a commit to refresh session state as the task is using its own session db.getSession().commit(); @@ -1040,7 +1015,6 @@ public class RegisterRulesTest { private void verifyIndicesMarkedAsInitialized() { verify(metadataIndex).setInitialized(RuleIndexDefinition.TYPE_RULE, true); - verify(metadataIndex).setInitialized(RuleIndexDefinition.TYPE_RULE_EXTENSION, true); verify(metadataIndex).setInitialized(RuleIndexDefinition.TYPE_ACTIVE_RULE, true); reset(metadataIndex); } @@ -1188,16 +1162,4 @@ public class RegisterRulesTest { repo.done(); } } - - static class RepositoryWithOneTemplateRule implements RulesDefinition { - @Override - public void define(Context context) { - NewRepository repo = context.createRepository("test", "java"); - repo.createRule("rule1") - .setName("Rule One") - .setHtmlDescription("Description of Rule One") - .setTemplate(true); - repo.done(); - } - } } diff --git a/server/sonar-webserver-core/src/test/java/org/sonar/server/rule/WebServerRuleFinderImplTest.java b/server/sonar-webserver-core/src/test/java/org/sonar/server/rule/WebServerRuleFinderImplTest.java index 1d25804880b..59204f1333a 100644 --- a/server/sonar-webserver-core/src/test/java/org/sonar/server/rule/WebServerRuleFinderImplTest.java +++ b/server/sonar-webserver-core/src/test/java/org/sonar/server/rule/WebServerRuleFinderImplTest.java @@ -33,8 +33,7 @@ import static org.mockito.Mockito.when; public class WebServerRuleFinderImplTest { private DbClient dbClient = mock(DbClient.class); - private TestDefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.fromUuid("1111"); - private WebServerRuleFinderImpl underTest = new WebServerRuleFinderImpl(dbClient, defaultOrganizationProvider); + private WebServerRuleFinderImpl underTest = new WebServerRuleFinderImpl(dbClient); @Before public void setUp() { diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/organization/ws/OrganizationDeleter.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/organization/ws/OrganizationDeleter.java index 48e91c1acd5..f7e9d51a780 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/organization/ws/OrganizationDeleter.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/organization/ws/OrganizationDeleter.java @@ -73,7 +73,6 @@ public class OrganizationDeleter { deleteProjects(dbSession, organization); deletePermissions(dbSession, organization); deleteGroups(dbSession, organization); - deleteQualityProfiles(dbSession, organization); deleteQualityGates(dbSession, organization); deleteOrganizationAlmBinding(dbSession, organization); deleteOrganization(dbSession, organization); @@ -102,11 +101,6 @@ public class OrganizationDeleter { dbClient.groupDao().deleteByOrganization(dbSession, organization.getUuid()); } - private void deleteQualityProfiles(DbSession dbSession, OrganizationDto organization) { - List profiles = dbClient.qualityProfileDao().selectOrderedByOrganizationUuid(dbSession, organization); - qProfileFactory.delete(dbSession, profiles); - } - private void deleteQualityGates(DbSession dbSession, OrganizationDto organization) { Collection qualityGates = dbClient.qualityGateDao().selectAll(dbSession, organization); dbClient.qualityGateDao().deleteByUuids(dbSession, qualityGates.stream() diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileBackuper.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileBackuper.java index 177d244f5f3..c4df4689d2d 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileBackuper.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileBackuper.java @@ -23,7 +23,6 @@ import java.io.Reader; import java.io.Writer; import javax.annotation.Nullable; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; /** @@ -34,11 +33,11 @@ public interface QProfileBackuper { void backup(DbSession dbSession, QProfileDto profile, Writer backupWriter); /** - * Restore backup on a profile in the specified organization. The parameter {@code overriddenProfileName} + * Restore backup on a profile. The parameter {@code overriddenProfileName} * is the name of the profile to be used. If the parameter is null, then the name is loaded from the backup. * The profile is created if it does not exist. */ - QProfileRestoreSummary restore(DbSession dbSession, Reader backup, OrganizationDto organization, @Nullable String overriddenProfileName); + QProfileRestoreSummary restore(DbSession dbSession, Reader backup, @Nullable String overriddenProfileName); /** * Restore backup on an existing profile. diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileBackuperImpl.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileBackuperImpl.java index b9c41abecd6..4eace5d6d91 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileBackuperImpl.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileBackuperImpl.java @@ -103,13 +103,13 @@ public class QProfileBackuperImpl implements QProfileBackuper { } @Override - public QProfileRestoreSummary restore(DbSession dbSession, Reader backup, OrganizationDto organization, @Nullable String overriddenProfileName) { + public QProfileRestoreSummary restore(DbSession dbSession, Reader backup, @Nullable String overriddenProfileName) { return restore(dbSession, backup, nameInBackup -> { QProfileName targetName = nameInBackup; if (overriddenProfileName != null) { targetName = new QProfileName(nameInBackup.getLanguage(), overriddenProfileName); } - return profileFactory.getOrCreateCustom(dbSession, organization, targetName); + return profileFactory.getOrCreateCustom(dbSession, targetName); }); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileCopier.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileCopier.java index 984280a68ef..b2e3f2a818d 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileCopier.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileCopier.java @@ -22,7 +22,6 @@ package org.sonar.server.qualityprofile; import org.sonar.api.server.ServerSide; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; @ServerSide @@ -38,19 +37,17 @@ public class QProfileCopier { } public QProfileDto copyToName(DbSession dbSession, QProfileDto sourceProfile, String toName) { - OrganizationDto organization = db.organizationDao().selectByUuid(dbSession, sourceProfile.getOrganizationUuid()) - .orElseThrow(() -> new IllegalStateException("Organization with UUID [" + sourceProfile.getOrganizationUuid() + "] does not exist")); - QProfileDto to = prepareTarget(dbSession, organization, sourceProfile, toName); + QProfileDto to = prepareTarget(dbSession, sourceProfile, toName); backuper.copy(dbSession, sourceProfile, to); return to; } - private QProfileDto prepareTarget(DbSession dbSession, OrganizationDto organization, QProfileDto sourceProfile, String toName) { + private QProfileDto prepareTarget(DbSession dbSession, QProfileDto sourceProfile, String toName) { verify(sourceProfile.getName(), toName); QProfileName toProfileName = new QProfileName(sourceProfile.getLanguage(), toName); - QProfileDto toProfile = db.qualityProfileDao().selectByNameAndLanguage(dbSession, organization, toProfileName.getName(), toProfileName.getLanguage()); + QProfileDto toProfile = db.qualityProfileDao().selectByNameAndLanguage(dbSession, toProfileName.getName(), toProfileName.getLanguage()); if (toProfile == null) { - toProfile = factory.createCustom(dbSession, organization, toProfileName, sourceProfile.getParentKee()); + toProfile = factory.createCustom(dbSession, toProfileName, sourceProfile.getParentKee()); dbSession.commit(); } return toProfile; diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileFactory.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileFactory.java index 6084db8e347..954d465eda9 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileFactory.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileFactory.java @@ -22,7 +22,6 @@ package org.sonar.server.qualityprofile; import java.util.Collection; import javax.annotation.Nullable; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.exceptions.BadRequestException; @@ -31,16 +30,16 @@ import org.sonar.server.exceptions.BadRequestException; */ public interface QProfileFactory { - QProfileDto getOrCreateCustom(DbSession dbSession, OrganizationDto organization, QProfileName name); + QProfileDto getOrCreateCustom(DbSession dbSession, QProfileName name); /** * Create the quality profile in DB with the specified name. * * @throws BadRequestException if a quality profile with the specified name already exists */ - QProfileDto checkAndCreateCustom(DbSession dbSession, OrganizationDto organization, QProfileName name); + QProfileDto checkAndCreateCustom(DbSession dbSession, QProfileName name); - QProfileDto createCustom(DbSession dbSession, OrganizationDto organization, QProfileName name, @Nullable String parentKey); + QProfileDto createCustom(DbSession dbSession, QProfileName name, @Nullable String parentKey); /** * Deletes the specified profiles from database and Elasticsearch. diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileFactoryImpl.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileFactoryImpl.java index 6c01b8e7737..2e4ad898271 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileFactoryImpl.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileFactoryImpl.java @@ -61,11 +61,10 @@ public class QProfileFactoryImpl implements QProfileFactory { } @Override - public QProfileDto getOrCreateCustom(DbSession dbSession, OrganizationDto organization, QProfileName name) { - requireNonNull(organization); - QProfileDto profile = db.qualityProfileDao().selectByNameAndLanguage(dbSession, organization, name.getName(), name.getLanguage()); + public QProfileDto getOrCreateCustom(DbSession dbSession, QProfileName name) { + QProfileDto profile = db.qualityProfileDao().selectByNameAndLanguage(dbSession, name.getName(), name.getLanguage()); if (profile == null) { - profile = doCreate(dbSession, organization, name, null, false, false); + profile = doCreate(dbSession, name, null, false, false); } else { checkArgument(!profile.isBuiltIn(), "Operation forbidden for built-in Quality Profile '%s' with language '%s'", profile.getName(), profile.getLanguage()); } @@ -74,20 +73,18 @@ public class QProfileFactoryImpl implements QProfileFactory { } @Override - public QProfileDto checkAndCreateCustom(DbSession dbSession, OrganizationDto organization, QProfileName name) { - requireNonNull(organization); - QProfileDto dto = db.qualityProfileDao().selectByNameAndLanguage(dbSession, organization, name.getName(), name.getLanguage()); + public QProfileDto checkAndCreateCustom(DbSession dbSession, QProfileName name) { + QProfileDto dto = db.qualityProfileDao().selectByNameAndLanguage(dbSession, name.getName(), name.getLanguage()); checkRequest(dto == null, "Quality profile already exists: %s", name); - return doCreate(dbSession, organization, name, null,false, false); + return doCreate(dbSession, name, null, false, false); } @Override - public QProfileDto createCustom(DbSession dbSession, OrganizationDto organization, QProfileName name, @Nullable String parentKey) { - requireNonNull(organization); - return doCreate(dbSession, organization, name, parentKey,false, false); + public QProfileDto createCustom(DbSession dbSession, QProfileName name, @Nullable String parentKey) { + return doCreate(dbSession, name, parentKey, false, false); } - private QProfileDto doCreate(DbSession dbSession, OrganizationDto organization, QProfileName name, @Nullable String parentKey, boolean isDefault, boolean isBuiltIn) { + private QProfileDto doCreate(DbSession dbSession, QProfileName name, @Nullable String parentKey, boolean isDefault, boolean isBuiltIn) { if (StringUtils.isEmpty(name.getName())) { throw BadRequestException.create("quality_profiles.profile_name_cant_be_blank"); } @@ -96,7 +93,6 @@ public class QProfileFactoryImpl implements QProfileFactory { .setKee(uuidFactory.create()) .setRulesProfileUuid(uuidFactory.create()) .setName(name.getName()) - .setOrganizationUuid(organization.getUuid()) .setLanguage(name.getLanguage()) .setIsBuiltIn(isBuiltIn) .setParentKee(parentKey) diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileRulesImpl.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileRulesImpl.java index b08efa0d4da..8aa01fc5255 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileRulesImpl.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileRulesImpl.java @@ -99,7 +99,7 @@ public class QProfileRulesImpl implements QProfileRules { public List deleteRule(DbSession dbSession, RuleDefinitionDto rule) { List changes = new ArrayList<>(); List activeRuleUuids = new ArrayList<>(); - db.activeRuleDao().selectByRuleUuidOfAllOrganizations(dbSession, rule.getUuid()).forEach(ar -> { + db.activeRuleDao().selectByRuleUuid(dbSession, rule.getUuid()).forEach(ar -> { activeRuleUuids.add(ar.getUuid()); changes.add(new ActiveRuleChange(ActiveRuleChange.Type.DEACTIVATED, ar, rule)); }); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java index c5e9b8bf8d1..ce2e26e3f95 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/RegisterQualityProfiles.java @@ -79,7 +79,7 @@ public class RegisterQualityProfiles implements Startable { Profiler profiler = Profiler.create(Loggers.get(getClass())).startInfo("Register quality profiles"); try (DbSession dbSession = dbClient.openSession(false); - DbSession batchDbSession = dbClient.openSession(true)) { + DbSession batchDbSession = dbClient.openSession(true)) { long startDate = system2.now(); Map persistedRuleProfiles = loadPersistedProfiles(dbSession); @@ -148,7 +148,7 @@ public class RegisterQualityProfiles implements Startable { } Profiler profiler = Profiler.createIfDebug(Loggers.get(getClass())).start(); String newName = profile.getName() + " (outdated copy)"; - LOGGER.info("Rename Quality profiles [{}/{}] to [{}] in {} organizations", profile.getLanguage(), profile.getName(), newName, uuids.size()); + LOGGER.info("Rename Quality profiles [{}/{}] to [{}]", profile.getLanguage(), profile.getName(), newName); dbClient.qualityProfileDao().renameRulesProfilesAndCommit(dbSession, uuids, newName); profiler.stopDebug(format("%d Quality profiles renamed to [%s]", uuids.size(), newName)); } @@ -170,17 +170,16 @@ public class RegisterQualityProfiles implements Startable { return; } - QProfileDto qualityProfile = dbClient.qualityProfileDao().selectByRuleProfileUuid(dbSession, qp.getOrganizationUuid(), rulesProfile.getUuid()); + QProfileDto qualityProfile = dbClient.qualityProfileDao().selectByRuleProfileUuid(dbSession, rulesProfile.getUuid()); if (qualityProfile == null) { return; } - Set uuids = dbClient.defaultQProfileDao().selectExistingQProfileUuids(dbSession, qp.getOrganizationUuid(), Collections.singleton(qp.getKee())); + Set uuids = dbClient.defaultQProfileDao().selectExistingQProfileUuids(dbSession, Collections.singleton(qp.getKee())); dbClient.defaultQProfileDao().deleteByQProfileUuids(dbSession, uuids); dbClient.defaultQProfileDao().insertOrUpdate(dbSession, new DefaultQProfileDto() .setQProfileUuid(qualityProfile.getKee()) .setLanguage(qp.getLanguage()) - .setOrganizationUuid(qp.getOrganizationUuid()) ); LOGGER.info("Default built-in quality profile for language [{}] has been updated from [{}] to [{}] since previous default does not have active rules.", diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRuleAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRuleAction.java index 51ced557419..f831730cbf4 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRuleAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRuleAction.java @@ -28,7 +28,6 @@ import org.sonar.api.server.ws.WebService; import org.sonar.api.utils.KeyValueFormat; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.server.qualityprofile.QProfileRules; @@ -101,8 +100,7 @@ public class ActivateRuleAction implements QProfileWsAction { try (DbSession dbSession = dbClient.openSession(false)) { String profileKey = request.mandatoryParam(PARAM_KEY); QProfileDto profile = wsSupport.getProfile(dbSession, QProfileReference.fromKey(profileKey)); - OrganizationDto organization = wsSupport.getOrganization(dbSession, profile); - wsSupport.checkCanEdit(dbSession, organization, profile); + wsSupport.checkCanEdit(dbSession, profile); RuleActivation activation = readActivation(dbSession, request); ruleActivator.activateAndCommit(dbSession, profile, singletonList(activation)); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRulesAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRulesAction.java index e69305f76a7..e6b900cd0c4 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRulesAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ActivateRulesAction.java @@ -25,7 +25,6 @@ import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.qualityprofile.BulkChangeResult; import org.sonar.server.qualityprofile.QProfileRules; @@ -89,8 +88,7 @@ public class ActivateRulesAction implements QProfileWsAction { BulkChangeResult result; try (DbSession dbSession = dbClient.openSession(false)) { QProfileDto profile = wsSupport.getProfile(dbSession, fromKey(qualityProfileKey)); - OrganizationDto organization = wsSupport.getOrganization(dbSession, profile); - wsSupport.checkCanEdit(dbSession, organization, profile); + wsSupport.checkCanEdit(dbSession, profile); wsSupport.checkNotBuiltIn(profile); RuleQuery ruleQuery = ruleQueryFactory.createRuleQuery(dbSession, request); ruleQuery.setIncludeExternal(false); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/AddGroupAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/AddGroupAction.java index 07c4f3a469f..54b627d6a56 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/AddGroupAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/AddGroupAction.java @@ -28,17 +28,14 @@ import org.sonar.api.server.ws.WebService; import org.sonar.core.util.UuidFactory; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.qualityprofile.QProfileEditGroupsDto; import org.sonar.db.user.GroupDto; import static org.sonar.core.util.stream.MoreCollectors.toSet; -import static org.sonar.server.qualityprofile.ws.QProfileWsSupport.createOrganizationParam; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_ADD_GROUP; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_GROUP; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class AddGroupAction implements QProfileWsAction { @@ -85,17 +82,14 @@ public class AddGroupAction implements QProfileWsAction { .setDescription("Group name") .setRequired(true) .setExampleValue("sonar-administrators"); - - createOrganizationParam(action); } @Override public void handle(Request request, Response response) throws Exception { try (DbSession dbSession = dbClient.openSession(false)) { - OrganizationDto organization = wsSupport.getOrganizationByKey(dbSession, request.param(PARAM_ORGANIZATION)); - QProfileDto profile = wsSupport.getProfile(dbSession, organization, request.mandatoryParam(PARAM_QUALITY_PROFILE), request.mandatoryParam(PARAM_LANGUAGE)); - wsSupport.checkCanEdit(dbSession, organization, profile); - GroupDto user = wsSupport.getGroup(dbSession, organization, request.mandatoryParam(PARAM_GROUP)); + QProfileDto profile = wsSupport.getProfile(dbSession, request.mandatoryParam(PARAM_QUALITY_PROFILE), request.mandatoryParam(PARAM_LANGUAGE)); + wsSupport.checkCanEdit(dbSession, profile); + GroupDto user = wsSupport.getGroup(dbSession, request.mandatoryParam(PARAM_GROUP)); addGroup(dbSession, profile, user); } response.noContent(); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/AddProjectAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/AddProjectAction.java index d102b399db0..034cc8464e3 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/AddProjectAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/AddProjectAction.java @@ -27,7 +27,6 @@ import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.api.web.UserRole; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.project.ProjectDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.component.ComponentFinder; @@ -69,8 +68,6 @@ public class AddProjectAction implements QProfileWsAction { .setHandler(this); QProfileReference.defineParams(action, languages); - QProfileWsSupport.createOrganizationParam(action) - .setSince("6.4"); action.createParam(PARAM_PROJECT) .setDescription("Project key") @@ -85,12 +82,7 @@ public class AddProjectAction implements QProfileWsAction { try (DbSession dbSession = dbClient.openSession(false)) { ProjectDto project = loadProject(dbSession, request); QProfileDto profile = wsSupport.getProfile(dbSession, QProfileReference.fromName(request)); - OrganizationDto organization = wsSupport.getOrganization(dbSession, profile); - checkPermissions(dbSession, organization, profile, project); - - if (!profile.getOrganizationUuid().equals(project.getOrganizationUuid())) { - throw new IllegalArgumentException("Project and quality profile must have the same organization"); - } + checkPermissions(dbSession, profile, project); QProfileDto currentProfile = dbClient.qualityProfileDao().selectAssociatedToProjectAndLanguage(dbSession, project, profile.getLanguage()); if (currentProfile == null) { @@ -111,8 +103,8 @@ public class AddProjectAction implements QProfileWsAction { return componentFinder.getProjectByKey(dbSession, projectKey); } - private void checkPermissions(DbSession dbSession, OrganizationDto organization, QProfileDto profile, ProjectDto project) { - if (wsSupport.canEdit(dbSession, organization, profile) + private void checkPermissions(DbSession dbSession, QProfileDto profile, ProjectDto project) { + if (wsSupport.canEdit(dbSession, profile) || userSession.hasProjectPermission(UserRole.ADMIN, project)) { return; } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/AddUserAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/AddUserAction.java index 1c8c2fec8fc..efb4cec8783 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/AddUserAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/AddUserAction.java @@ -28,17 +28,14 @@ import org.sonar.api.server.ws.WebService; import org.sonar.core.util.UuidFactory; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.qualityprofile.QProfileEditUsersDto; import org.sonar.db.user.UserDto; import static org.sonar.core.util.stream.MoreCollectors.toSet; -import static org.sonar.server.qualityprofile.ws.QProfileWsSupport.createOrganizationParam; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_ADD_USER; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LOGIN; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class AddUserAction implements QProfileWsAction { @@ -86,16 +83,14 @@ public class AddUserAction implements QProfileWsAction { .setRequired(true) .setExampleValue("john.doe"); - createOrganizationParam(action); } @Override public void handle(Request request, Response response) throws Exception { try (DbSession dbSession = dbClient.openSession(false)) { - OrganizationDto organization = wsSupport.getOrganizationByKey(dbSession, request.param(PARAM_ORGANIZATION)); - QProfileDto profile = wsSupport.getProfile(dbSession, organization, request.mandatoryParam(PARAM_QUALITY_PROFILE), request.mandatoryParam(PARAM_LANGUAGE)); - wsSupport.checkCanEdit(dbSession, organization, profile); - UserDto user = wsSupport.getUser(dbSession, organization, request.mandatoryParam(PARAM_LOGIN)); + QProfileDto profile = wsSupport.getProfile(dbSession, request.mandatoryParam(PARAM_QUALITY_PROFILE), request.mandatoryParam(PARAM_LANGUAGE)); + wsSupport.checkCanEdit(dbSession, profile); + UserDto user = wsSupport.getUser(dbSession, request.mandatoryParam(PARAM_LOGIN)); addUser(dbSession, profile, user); } response.noContent(); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/BackupAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/BackupAction.java index b0f21afbb84..8bbf0bf2664 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/BackupAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/BackupAction.java @@ -57,8 +57,6 @@ public class BackupAction implements QProfileWsAction { .setHandler(this); QProfileReference.defineParams(action, languages); - - QProfileWsSupport.createOrganizationParam(action).setSince("6.4"); } @Override diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ChangeParentAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ChangeParentAction.java index f6997d7c6cb..a10eca05d16 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ChangeParentAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ChangeParentAction.java @@ -26,7 +26,6 @@ import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.api.server.ws.WebService.NewController; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.qualityprofile.QProfileTree; import org.sonar.server.user.UserSession; @@ -65,14 +64,12 @@ public class ChangeParentAction implements QProfileWsAction { "") .setHandler(this); - QProfileWsSupport.createOrganizationParam(inheritance) - .setSince("6.4"); QProfileReference.defineParams(inheritance, languages); inheritance.createParam(QualityProfileWsParameters.PARAM_PARENT_QUALITY_PROFILE) .setDescription("New parent profile name.
    " + "If no profile is provided, the inheritance link with current parent profile (if any) is broken, which deactivates all rules " + - "which come from the parent and are not overridden.") + "which come from the parent and are not overridden.") .setExampleValue("Sonar way"); } @@ -83,15 +80,14 @@ public class ChangeParentAction implements QProfileWsAction { try (DbSession dbSession = dbClient.openSession(false)) { QProfileDto profile = wsSupport.getProfile(dbSession, reference); - OrganizationDto organization = wsSupport.getOrganization(dbSession, profile); - wsSupport.checkCanEdit(dbSession, organization, profile); + wsSupport.checkCanEdit(dbSession, profile); String parentName = request.param(QualityProfileWsParameters.PARAM_PARENT_QUALITY_PROFILE); if (isEmpty(parentName)) { ruleActivator.removeParentAndCommit(dbSession, profile); } else { String parentLanguage = request.mandatoryParam(PARAM_LANGUAGE); - QProfileReference parentRef = QProfileReference.fromName(organization.getKey(), parentLanguage, parentName); + QProfileReference parentRef = QProfileReference.fromName(parentLanguage, parentName); QProfileDto parent = wsSupport.getProfile(dbSession, parentRef); ruleActivator.setParentAndCommit(dbSession, profile, parent); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ChangelogAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ChangelogAction.java index c95c8ff77e9..f4933c2a9d2 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ChangelogAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ChangelogAction.java @@ -73,9 +73,6 @@ public class ChangelogAction implements QProfileWsAction { .setHandler(this) .setResponseExample(getClass().getResource("changelog-example.json")); - QProfileWsSupport.createOrganizationParam(wsAction) - .setSince("6.4"); - QProfileReference.defineParams(wsAction, languages); wsAction.addPagingParams(50, MAX_PAGE_SIZE); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/CompareAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/CompareAction.java index 83a6126f8d8..9aae725d919 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/CompareAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/CompareAction.java @@ -25,7 +25,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Objects; import javax.annotation.Nullable; import org.sonar.api.resources.Language; import org.sonar.api.resources.Languages; @@ -112,12 +111,6 @@ public class CompareAction implements QProfileWsAction { QProfileDto right = dbClient.qualityProfileDao().selectByUuid(dbSession, rightKey); checkArgument(right != null, "Could not find right profile '%s'", rightKey); - checkArgument(Objects.equals(left.getOrganizationUuid(), right.getOrganizationUuid()), - "Cannot compare quality profiles of different organizations. Quality profile left with key '%s' belongs to organization '%s', " + - "quality profile right with key '%s' belongs to organization '%s'.", - leftKey, left.getOrganizationUuid(), rightKey, right.getOrganizationUuid()); - wsSupport.getOrganization(dbSession, left); - QProfileComparisonResult result = comparator.compare(dbSession, left, right); List referencedRules = dbClient.ruleDao().selectDefinitionByKeys(dbSession, new ArrayList<>(result.collectRuleKeys())); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/CopyAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/CopyAction.java index 841a791400b..d26d9ff519f 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/CopyAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/CopyAction.java @@ -87,10 +87,10 @@ public class CopyAction implements QProfileWsAction { try (DbSession dbSession = dbClient.openSession(false)) { QProfileDto sourceProfile = wsSupport.getProfile(dbSession, QProfileReference.fromKey(profileKey)); - userSession.checkPermission(ADMINISTER_QUALITY_PROFILES, sourceProfile.getOrganizationUuid()); + userSession.checkPermission(ADMINISTER_QUALITY_PROFILES, wsSupport.getDefaultOrganization(dbSession)); QProfileDto copiedProfile = profileCopier.copyToName(dbSession, sourceProfile, newName); - boolean isDefault = dbClient.defaultQProfileDao().isDefault(dbSession, copiedProfile.getOrganizationUuid(), copiedProfile.getKee()); + boolean isDefault = dbClient.defaultQProfileDao().isDefault(dbSession, copiedProfile.getKee()); CopyWsResponse wsResponse = buildResponse(copiedProfile, isDefault); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/CreateAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/CreateAction.java index 6805c7c01da..6dae9ff38df 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/CreateAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/CreateAction.java @@ -42,12 +42,10 @@ import org.sonarqube.ws.Qualityprofiles.CreateWsResponse; import static com.google.common.base.Preconditions.checkArgument; import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES; import static org.sonar.server.language.LanguageParamUtils.getOrderedLanguageKeys; -import static org.sonar.server.qualityprofile.ws.QProfileWsSupport.createOrganizationParam; import static org.sonar.server.ws.WsUtils.writeProtobuf; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_CREATE; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_NAME; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; public class CreateAction implements QProfileWsAction { @@ -90,9 +88,6 @@ public class CreateAction implements QProfileWsAction { .setSince("5.2") .setHandler(this); - createOrganizationParam(create) - .setSince("6.4"); - create.createParam(PARAM_NAME) .setRequired(true) .setMaximumLength(NAME_MAXIMUM_LENGTH) @@ -115,17 +110,16 @@ public class CreateAction implements QProfileWsAction { public void handle(Request request, Response response) throws Exception { userSession.checkLoggedIn(); try (DbSession dbSession = dbClient.openSession(false)) { - OrganizationDto organization = qProfileWsSupport.getOrganizationByKey(dbSession, request.param(PARAM_ORGANIZATION)); + OrganizationDto organization = qProfileWsSupport.getDefaultOrganization(dbSession); userSession.checkPermission(ADMINISTER_QUALITY_PROFILES, organization); - CreateRequest createRequest = toRequest(request, organization); - writeProtobuf(doHandle(dbSession, createRequest, request, organization), request, response); + CreateRequest createRequest = toRequest(request); + writeProtobuf(doHandle(dbSession, createRequest, request), request, response); } } - private CreateWsResponse doHandle(DbSession dbSession, CreateRequest createRequest, Request request, OrganizationDto organization) { + private CreateWsResponse doHandle(DbSession dbSession, CreateRequest createRequest, Request request) { QProfileResult result = new QProfileResult(); - QProfileDto profile = profileFactory.checkAndCreateCustom(dbSession, organization, - QProfileName.createFor(createRequest.getLanguage(), createRequest.getName())); + QProfileDto profile = profileFactory.checkAndCreateCustom(dbSession, QProfileName.createFor(createRequest.getLanguage(), createRequest.getName())); result.setProfile(profile); for (ProfileImporter importer : importers) { String importerKey = importer.getKey(); @@ -135,21 +129,19 @@ public class CreateAction implements QProfileWsAction { } } activeRuleIndexer.commitAndIndex(dbSession, result.getChanges()); - return buildResponse(result, organization); + return buildResponse(result); } - private static CreateRequest toRequest(Request request, OrganizationDto organization) { + private static CreateRequest toRequest(Request request) { Builder builder = CreateRequest.builder() - .setOrganizationKey(organization.getKey()) .setLanguage(request.mandatoryParam(PARAM_LANGUAGE)) .setName(request.mandatoryParam(PARAM_NAME)); return builder.build(); } - private CreateWsResponse buildResponse(QProfileResult result, OrganizationDto organization) { + private CreateWsResponse buildResponse(QProfileResult result) { String language = result.profile().getLanguage(); CreateWsResponse.QualityProfile.Builder builder = CreateWsResponse.QualityProfile.newBuilder() - .setOrganization(organization.getKey()) .setKey(result.profile().getKee()) .setName(result.profile().getName()) .setLanguage(language) @@ -170,15 +162,12 @@ public class CreateAction implements QProfileWsAction { } private static class CreateRequest { - private final String name; private final String language; - private final String organizationKey; private CreateRequest(Builder builder) { this.name = builder.name; this.language = builder.language; - this.organizationKey = builder.organizationKey; } public String getLanguage() { @@ -189,10 +178,6 @@ public class CreateAction implements QProfileWsAction { return name; } - public String getOrganizationKey() { - return organizationKey; - } - public static Builder builder() { return new Builder(); } @@ -201,7 +186,6 @@ public class CreateAction implements QProfileWsAction { private static class Builder { private String language; private String name; - private String organizationKey; private Builder() { // enforce factory method use @@ -217,15 +201,9 @@ public class CreateAction implements QProfileWsAction { return this; } - public Builder setOrganizationKey(@Nullable String organizationKey) { - this.organizationKey = organizationKey; - return this; - } - public CreateRequest build() { checkArgument(language != null && !language.isEmpty(), "Language is mandatory and must not be empty."); checkArgument(name != null && !name.isEmpty(), "Profile name is mandatory and must not be empty."); - checkArgument(organizationKey == null || !organizationKey.isEmpty(), "Organization key may be either null or not empty. Empty organization key is invalid."); return new CreateRequest(this); } } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRuleAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRuleAction.java index f1d0587bbd4..24a85ea1320 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRuleAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRuleAction.java @@ -25,7 +25,6 @@ import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.server.qualityprofile.QProfileRules; @@ -83,8 +82,7 @@ public class DeactivateRuleAction implements QProfileWsAction { try (DbSession dbSession = dbClient.openSession(false)) { RuleDefinitionDto rule = wsSupport.getRule(dbSession, ruleKey); QProfileDto profile = wsSupport.getProfile(dbSession, QProfileReference.fromKey(qualityProfileKey)); - OrganizationDto organization = wsSupport.getOrganization(dbSession, profile); - wsSupport.checkCanEdit(dbSession, organization, profile); + wsSupport.checkCanEdit(dbSession, profile); ruleActivator.deactivateAndCommit(dbSession, profile, singletonList(rule.getUuid())); } response.noContent(); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRulesAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRulesAction.java index 3929b96a404..8f69ad43184 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRulesAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/DeactivateRulesAction.java @@ -24,7 +24,6 @@ import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.qualityprofile.BulkChangeResult; import org.sonar.server.qualityprofile.QProfileRules; @@ -82,8 +81,7 @@ public class DeactivateRulesAction implements QProfileWsAction { BulkChangeResult result; try (DbSession dbSession = dbClient.openSession(false)) { QProfileDto profile = wsSupport.getProfile(dbSession, QProfileReference.fromKey(qualityProfileKey)); - OrganizationDto organization = wsSupport.getOrganization(dbSession, profile); - wsSupport.checkCanEdit(dbSession, organization, profile); + wsSupport.checkCanEdit(dbSession, profile); RuleQuery ruleQuery = ruleQueryFactory.createRuleQuery(dbSession, request); ruleQuery.setIncludeExternal(false); result = ruleActivator.bulkDeactivateAndCommit(dbSession, profile, ruleQuery); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/DeleteAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/DeleteAction.java index adb9a74be64..a64419ab72d 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/DeleteAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/DeleteAction.java @@ -32,14 +32,12 @@ import org.sonar.api.server.ws.WebService.NewController; import org.sonar.core.util.stream.MoreCollectors; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.qualityprofile.QProfileFactory; import org.sonar.server.user.UserSession; import static com.google.common.base.Preconditions.checkArgument; import static java.util.Collections.singleton; -import static org.sonar.server.qualityprofile.ws.QProfileWsSupport.createOrganizationParam; public class DeleteAction implements QProfileWsAction { @@ -71,8 +69,6 @@ public class DeleteAction implements QProfileWsAction { .setHandler(this); QProfileReference.defineParams(action, languages); - createOrganizationParam(action) - .setSince("6.4"); } @Override @@ -81,8 +77,7 @@ public class DeleteAction implements QProfileWsAction { try (DbSession dbSession = dbClient.openSession(false)) { QProfileDto profile = wsSupport.getProfile(dbSession, QProfileReference.fromName(request)); - OrganizationDto organization = wsSupport.getOrganization(dbSession, profile); - wsSupport.checkCanEdit(dbSession, organization, profile); + wsSupport.checkCanEdit(dbSession, profile); Collection descendants = selectDescendants(dbSession, profile); ensureNoneIsMarkedAsDefault(dbSession, profile, descendants); @@ -102,7 +97,7 @@ public class DeleteAction implements QProfileWsAction { allUuids.add(profile.getKee()); descendants.forEach(p -> allUuids.add(p.getKee())); - Set uuidsOfDefaultProfiles = dbClient.defaultQProfileDao().selectExistingQProfileUuids(dbSession, profile.getOrganizationUuid(), allUuids); + Set uuidsOfDefaultProfiles = dbClient.defaultQProfileDao().selectExistingQProfileUuids(dbSession, allUuids); checkArgument(!uuidsOfDefaultProfiles.contains(profile.getKee()), "Profile '%s' cannot be deleted because it is marked as default", profile.getName()); descendants.stream() diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ExportAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ExportAction.java index 509364253bb..e60d07f49d1 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ExportAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ExportAction.java @@ -39,7 +39,6 @@ import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.core.util.stream.MoreCollectors; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.language.LanguageParamUtils; import org.sonar.server.qualityprofile.QProfileBackuper; @@ -48,8 +47,6 @@ import org.sonarqube.ws.MediaTypes; import static java.nio.charset.StandardCharsets.UTF_8; import static org.sonar.server.exceptions.NotFoundException.checkFound; -import static org.sonar.server.qualityprofile.ws.QProfileWsSupport.createOrganizationParam; -import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; @@ -61,14 +58,12 @@ public class ExportAction implements QProfileWsAction { private final QProfileBackuper backuper; private final QProfileExporters exporters; private final Languages languages; - private final QProfileWsSupport wsSupport; - public ExportAction(DbClient dbClient, QProfileBackuper backuper, QProfileExporters exporters, Languages languages, QProfileWsSupport wsSupport) { + public ExportAction(DbClient dbClient, QProfileBackuper backuper, QProfileExporters exporters, Languages languages) { this.dbClient = dbClient; this.backuper = backuper; this.exporters = exporters; this.languages = languages; - this.wsSupport = wsSupport; } @Override @@ -89,9 +84,6 @@ public class ExportAction implements QProfileWsAction { .setExampleValue(LanguageParamUtils.getExampleValue(languages)) .setPossibleValues(LanguageParamUtils.getOrderedLanguageKeys(languages)); - createOrganizationParam(action) - .setSince("6.4"); - Set exporterKeys = Arrays.stream(languages.all()) .map(language -> exporters.exportersForLanguage(language.getKey())) .flatMap(Collection::stream) @@ -113,8 +105,7 @@ public class ExportAction implements QProfileWsAction { String language = request.mandatoryParam(PARAM_LANGUAGE); try (DbSession dbSession = dbClient.openSession(false)) { - OrganizationDto organization = wsSupport.getOrganizationByKey(dbSession, request.param(PARAM_ORGANIZATION)); - QProfileDto profile = loadProfile(dbSession, organization, language, name); + QProfileDto profile = loadProfile(dbSession, language, name); String exporterKey = exporters.exportersForLanguage(profile.getLanguage()).isEmpty() ? null : request.param(PARAM_EXPORTER_KEY); writeResponse(dbSession, profile, exporterKey, response); } @@ -137,14 +128,14 @@ public class ExportAction implements QProfileWsAction { IOUtils.write(bufferStream.toByteArray(), output); } - private QProfileDto loadProfile(DbSession dbSession, OrganizationDto organization, String language, @Nullable String name) { + private QProfileDto loadProfile(DbSession dbSession, String language, @Nullable String name) { QProfileDto profile; if (name == null) { // return the default profile - profile = dbClient.qualityProfileDao().selectDefaultProfile(dbSession, organization, language); + profile = dbClient.qualityProfileDao().selectDefaultProfile(dbSession, language); } else { - profile = dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, organization, name, language); + profile = dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, name, language); } return checkFound(profile, "Could not find profile with name '%s' for language '%s'", name, language); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/InheritanceAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/InheritanceAction.java index 1d4f0fa6e6c..c3ae6a4a978 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/InheritanceAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/InheritanceAction.java @@ -30,7 +30,6 @@ import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.api.server.ws.WebService.NewController; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.ActiveRuleCountQuery; import org.sonar.db.qualityprofile.ActiveRuleDao; import org.sonar.db.qualityprofile.QProfileDto; @@ -40,7 +39,6 @@ import org.sonarqube.ws.Qualityprofiles.InheritanceWsResponse.QualityProfile; import static java.util.Collections.singleton; import static java.util.Optional.ofNullable; import static org.sonar.db.qualityprofile.ActiveRuleDto.OVERRIDES; -import static org.sonar.server.qualityprofile.ws.QProfileWsSupport.createOrganizationParam; import static org.sonar.server.ws.WsUtils.writeProtobuf; public class InheritanceAction implements QProfileWsAction { @@ -63,8 +61,6 @@ public class InheritanceAction implements QProfileWsAction { .setHandler(this) .setResponseExample(getClass().getResource("inheritance-example.json")); - createOrganizationParam(inheritance) - .setSince("6.4"); QProfileReference.defineParams(inheritance, languages); } @@ -73,14 +69,13 @@ public class InheritanceAction implements QProfileWsAction { QProfileReference reference = QProfileReference.fromName(request); try (DbSession dbSession = dbClient.openSession(false)) { QProfileDto profile = wsSupport.getProfile(dbSession, reference); - OrganizationDto organization = wsSupport.getOrganization(dbSession, profile); List ancestors = ancestors(profile, dbSession); List children = dbClient.qualityProfileDao().selectChildren(dbSession, singleton(profile)); List allProfiles = new ArrayList<>(); allProfiles.add(profile); allProfiles.addAll(ancestors); allProfiles.addAll(children); - Statistics statistics = new Statistics(dbSession, organization, allProfiles); + Statistics statistics = new Statistics(dbSession, allProfiles); writeProtobuf(buildResponse(profile, ancestors, children, statistics), request, response); } @@ -146,9 +141,9 @@ public class InheritanceAction implements QProfileWsAction { private final Map countRulesByProfileKey; private final Map countOverridingRulesByProfileKey; - private Statistics(DbSession dbSession, OrganizationDto organization, List profiles) { + private Statistics(DbSession dbSession, List profiles) { ActiveRuleDao dao = dbClient.activeRuleDao(); - ActiveRuleCountQuery.Builder builder = ActiveRuleCountQuery.builder().setOrganization(organization); + ActiveRuleCountQuery.Builder builder = ActiveRuleCountQuery.builder(); countRulesByProfileKey = dao.countActiveRulesByQuery(dbSession, builder.setProfiles(profiles).build()); countOverridingRulesByProfileKey = dao.countActiveRulesByQuery(dbSession, builder.setProfiles(profiles).setInheritance(OVERRIDES).build()); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ProjectsAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ProjectsAction.java index 1ad0f1691a6..767fec81c8e 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ProjectsAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ProjectsAction.java @@ -35,7 +35,6 @@ import org.sonar.api.web.UserRole; import org.sonar.core.util.stream.MoreCollectors; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.ProjectQprofileAssociationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.exceptions.NotFoundException; @@ -52,12 +51,10 @@ public class ProjectsAction implements QProfileWsAction { private final DbClient dbClient; private final UserSession userSession; - private final QProfileWsSupport wsSupport; - public ProjectsAction(DbClient dbClient, UserSession userSession, QProfileWsSupport wsSupport) { + public ProjectsAction(DbClient dbClient, UserSession userSession) { this.dbClient = dbClient; this.userSession = userSession; - this.wsSupport = wsSupport; } @Override @@ -93,7 +90,6 @@ public class ProjectsAction implements QProfileWsAction { String profileKey = request.mandatoryParam(PARAM_KEY); try (DbSession session = dbClient.openSession(false)) { - checkProfileExists(profileKey, session); String selected = request.param(Param.SELECTED); String query = request.param(Param.TEXT_QUERY); int page = request.mandatoryParamAsInt(Param.PAGE); @@ -121,24 +117,20 @@ public class ProjectsAction implements QProfileWsAction { } } - private void checkProfileExists(String profileKey, DbSession session) { - if (dbClient.qualityProfileDao().selectByUuid(session, profileKey) == null) { - throw new NotFoundException(String.format("Could not find a quality profile with key '%s'", profileKey)); - } - } - private List loadAllProjects(String profileKey, DbSession session, String selected, String query) { QProfileDto profile = dbClient.qualityProfileDao().selectByUuid(session, profileKey); - OrganizationDto organization = wsSupport.getOrganization(session, profile); + if (profile == null) { + throw new NotFoundException("Quality profile not found: " + profileKey); + } List projects; SelectionMode selectionMode = SelectionMode.fromParam(selected); if (SelectionMode.SELECTED == selectionMode) { - projects = dbClient.qualityProfileDao().selectSelectedProjects(session, organization, profile, query); + projects = dbClient.qualityProfileDao().selectSelectedProjects(session, profile, query); } else if (SelectionMode.DESELECTED == selectionMode) { - projects = dbClient.qualityProfileDao().selectDeselectedProjects(session, organization, profile, query); + projects = dbClient.qualityProfileDao().selectDeselectedProjects(session, profile, query); } else { - projects = dbClient.qualityProfileDao().selectProjectAssociations(session, organization, profile, query); + projects = dbClient.qualityProfileDao().selectProjectAssociations(session, profile, query); } return projects; diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/QProfileReference.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/QProfileReference.java index cb2872861d7..001576115b0 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/QProfileReference.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/QProfileReference.java @@ -20,7 +20,7 @@ package org.sonar.server.qualityprofile.ws; import java.util.Arrays; -import java.util.Optional; +import java.util.Objects; import javax.annotation.Nullable; import org.sonar.api.resources.Language; import org.sonar.api.resources.Languages; @@ -30,7 +30,6 @@ import org.sonar.core.util.stream.MoreCollectors; import static com.google.common.base.Preconditions.checkState; import static java.util.Objects.requireNonNull; -import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; @@ -50,20 +49,17 @@ public class QProfileReference { private final Type type; private final String key; - private final String organizationKey; private final String language; private final String name; - private QProfileReference(Type type, @Nullable String key, @Nullable String organizationKey, @Nullable String language, @Nullable String name) { + private QProfileReference(Type type, @Nullable String key, @Nullable String language, @Nullable String name) { this.type = type; if (type == Type.KEY) { this.key = requireNonNull(key); - this.organizationKey = null; this.language = null; this.name = null; } else { this.key = null; - this.organizationKey = organizationKey; this.language = requireNonNull(language); this.name = requireNonNull(name); } @@ -87,15 +83,6 @@ public class QProfileReference { return key; } - /** - * @return key of organization. It is empty when {@link #hasKey()} is {@code true} or if {@link #hasKey()} is - * {@code false} and the default organization must be used. - */ - public Optional getOrganizationKey() { - checkState(type == Type.NAME, "Organization is not defined. Please call hasKey()."); - return Optional.ofNullable(organizationKey); - } - /** * @return non-null language * @throws IllegalStateException if {@link #hasKey()} does not return {@code false} @@ -123,41 +110,26 @@ public class QProfileReference { return false; } QProfileReference that = (QProfileReference) o; - if (key != null ? !key.equals(that.key) : (that.key != null)) { - return false; - } - if (organizationKey != null ? !organizationKey.equals(that.organizationKey) : (that.organizationKey != null)) { - return false; - } - if (language != null ? !language.equals(that.language) : (that.language != null)) { - return false; - } - return name != null ? name.equals(that.name) : (that.name == null); - + return Objects.equals(key, that.key) && Objects.equals(language, that.language) && Objects.equals(name, that.name); } @Override public int hashCode() { - int result = key != null ? key.hashCode() : 0; - result = 31 * result + (organizationKey != null ? organizationKey.hashCode() : 0); - result = 31 * result + (language != null ? language.hashCode() : 0); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; + return Objects.hash(key, language, name); } public static QProfileReference fromName(Request request) { - String organizationKey = request.param(PARAM_ORGANIZATION); String lang = request.mandatoryParam(PARAM_LANGUAGE); String name = request.mandatoryParam(PARAM_QUALITY_PROFILE); - return fromName(organizationKey, lang, name); + return fromName(lang, name); } public static QProfileReference fromKey(String key) { - return new QProfileReference(Type.KEY, key, null, null, null); + return new QProfileReference(Type.KEY, key, null, null); } - public static QProfileReference fromName(@Nullable String organizationKey, String lang, String name) { - return new QProfileReference(Type.NAME, null, organizationKey, requireNonNull(lang), requireNonNull(name)); + public static QProfileReference fromName(String lang, String name) { + return new QProfileReference(Type.NAME, null, requireNonNull(lang), requireNonNull(name)); } public static void defineParams(WebService.NewAction action, Languages languages) { diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/QProfileWsSupport.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/QProfileWsSupport.java index 3a7251a388a..2066a4ed7a1 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/QProfileWsSupport.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/QProfileWsSupport.java @@ -20,11 +20,8 @@ package org.sonar.server.qualityprofile.ws; import java.util.Optional; -import javax.annotation.Nullable; import org.sonar.api.rule.RuleKey; import org.sonar.api.server.ServerSide; -import org.sonar.api.server.ws.WebService.NewAction; -import org.sonar.api.server.ws.WebService.NewParam; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.organization.OrganizationDto; @@ -38,13 +35,10 @@ import org.sonar.server.user.UserSession; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; -import static java.util.Objects.requireNonNull; -import static org.sonar.db.organization.OrganizationDto.Subscription.PAID; import static org.sonar.server.exceptions.BadRequestException.checkRequest; import static org.sonar.server.exceptions.NotFoundException.checkFound; import static org.sonar.server.exceptions.NotFoundException.checkFoundWithOptional; import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesException; -import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_ORGANIZATION; @ServerSide public class QProfileWsSupport { @@ -59,32 +53,10 @@ public class QProfileWsSupport { this.defaultOrganizationProvider = defaultOrganizationProvider; } - public static NewParam createOrganizationParam(NewAction action) { - return action - .createParam(PARAM_ORGANIZATION) - .setDescription("Organization key. If no organization is provided, the default organization is used.") - .setRequired(false) - .setInternal(true) - .setExampleValue("my-org"); - } - - public OrganizationDto getOrganization(DbSession dbSession, QProfileDto profile) { - requireNonNull(profile); - String organizationUuid = profile.getOrganizationUuid(); - OrganizationDto organization = dbClient.organizationDao().selectByUuid(dbSession, organizationUuid) - .orElseThrow(() -> new IllegalStateException("Cannot load organization with uuid=" + organizationUuid)); - checkMembershipOnPaidOrganization(organization); - return organization; - } - - public OrganizationDto getOrganizationByKey(DbSession dbSession, @Nullable String organizationKey) { - String organizationOrDefaultKey = Optional.ofNullable(organizationKey) - .orElseGet(defaultOrganizationProvider.get()::getKey); - OrganizationDto organization = checkFoundWithOptional( - dbClient.organizationDao().selectByKey(dbSession, organizationOrDefaultKey), + public OrganizationDto getDefaultOrganization(DbSession dbSession) { + String organizationOrDefaultKey = defaultOrganizationProvider.get().getKey(); + return checkFoundWithOptional(dbClient.organizationDao().selectByKey(dbSession, organizationOrDefaultKey), "No organization with key '%s'", organizationOrDefaultKey); - checkMembershipOnPaidOrganization(organization); - return organization; } public RuleDefinitionDto getRule(DbSession dbSession, RuleKey ruleKey) { @@ -104,46 +76,43 @@ public class QProfileWsSupport { if (ref.hasKey()) { profile = dbClient.qualityProfileDao().selectByUuid(dbSession, ref.getKey()); checkFound(profile, "Quality Profile with key '%s' does not exist", ref.getKey()); - // Load organization to execute various checks (existence, membership if paid organization, etc.) - getOrganization(dbSession, profile); } else { - OrganizationDto org = getOrganizationByKey(dbSession, ref.getOrganizationKey().orElse(null)); - profile = dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, org, ref.getName(), ref.getLanguage()); - checkFound(profile, "Quality Profile for language '%s' and name '%s' does not exist%s", ref.getLanguage(), ref.getName(), - ref.getOrganizationKey().map(o -> " in organization '" + o + "'").orElse("")); + profile = dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, ref.getName(), ref.getLanguage()); + checkFound(profile, "Quality Profile for language '%s' and name '%s' does not exist", ref.getLanguage(), ref.getName()); } return profile; } - public QProfileDto getProfile(DbSession dbSession, OrganizationDto organization, String name, String language) { - QProfileDto profile = dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, organization, name, language); - checkFound(profile, "Quality Profile for language '%s' and name '%s' does not exist in organization '%s'", language, name, organization.getKey()); + public QProfileDto getProfile(DbSession dbSession, String name, String language) { + QProfileDto profile = dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, name, language); + checkFound(profile, "Quality Profile for language '%s' and name '%s' does not exist", language, name); return profile; } - public UserDto getUser(DbSession dbSession, OrganizationDto organization, String login) { + public UserDto getUser(DbSession dbSession, String login) { UserDto user = dbClient.userDao().selectActiveUserByLogin(dbSession, login); checkFound(user, "User with login '%s' is not found'", login); - checkMembership(dbSession, organization, user); + checkMembership(dbSession, getDefaultOrganization(dbSession), user); return user; } - GroupDto getGroup(DbSession dbSession, OrganizationDto organization, String groupName) { + GroupDto getGroup(DbSession dbSession, String groupName) { + OrganizationDto organization = getDefaultOrganization(dbSession); Optional group = dbClient.groupDao().selectByName(dbSession, organization.getUuid(), groupName); checkFoundWithOptional(group, "No group with name '%s' in organization '%s'", groupName, organization.getKey()); return group.get(); } - public void checkPermission(DbSession dbSession, QProfileDto profile) { - OrganizationDto organization = getOrganization(dbSession, profile); + public void checkPermission(DbSession dbSession) { + OrganizationDto organization = getDefaultOrganization(dbSession); userSession.checkPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); } - boolean canEdit(DbSession dbSession, OrganizationDto organization, QProfileDto profile) { + boolean canEdit(DbSession dbSession, QProfileDto profile) { if (profile.isBuiltIn() || !userSession.isLoggedIn()) { return false; } - if (userSession.hasPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization)) { + if (userSession.hasPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganizationProvider.get().getUuid())) { return true; } @@ -153,9 +122,9 @@ public class QProfileWsSupport { || dbClient.qProfileEditGroupsDao().exists(dbSession, profile, userSession.getGroups()); } - public void checkCanEdit(DbSession dbSession, OrganizationDto organization, QProfileDto profile) { + public void checkCanEdit(DbSession dbSession, QProfileDto profile) { checkNotBuiltIn(profile); - if (!canEdit(dbSession, organization, profile)) { + if (!canEdit(dbSession, profile)) { throw insufficientPrivilegesException(); } } @@ -165,19 +134,10 @@ public class QProfileWsSupport { } private void checkMembership(DbSession dbSession, OrganizationDto organization, UserDto user) { - checkArgument(isMember(dbSession, organization, user.getUuid()), - "User '%s' is not member of organization '%s'", user.getLogin(), organization.getKey()); + checkArgument(isMember(dbSession, organization, user.getUuid()), "User '%s' is not member of organization '%s'", user.getLogin(), organization.getKey()); } private boolean isMember(DbSession dbSession, OrganizationDto organization, String userUuid) { return dbClient.organizationMemberDao().select(dbSession, organization.getUuid(), userUuid).isPresent(); } - - private void checkMembershipOnPaidOrganization(OrganizationDto organization) { - if (!organization.getSubscription().equals(PAID)) { - return; - } - userSession.checkMembership(organization); - } - } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RemoveGroupAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RemoveGroupAction.java index bc204732ee8..e7d7742cdb8 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RemoveGroupAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RemoveGroupAction.java @@ -27,16 +27,13 @@ import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.user.GroupDto; import static org.sonar.core.util.stream.MoreCollectors.toSet; -import static org.sonar.server.qualityprofile.ws.QProfileWsSupport.createOrganizationParam; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_REMOVE_GROUP; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_GROUP; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class RemoveGroupAction implements QProfileWsAction { @@ -81,17 +78,14 @@ public class RemoveGroupAction implements QProfileWsAction { .setDescription("Group name") .setRequired(true) .setExampleValue("sonar-administrators"); - - createOrganizationParam(action); } @Override public void handle(Request request, Response response) throws Exception { try (DbSession dbSession = dbClient.openSession(false)) { - OrganizationDto organization = wsSupport.getOrganizationByKey(dbSession, request.param(PARAM_ORGANIZATION)); - QProfileDto profile = wsSupport.getProfile(dbSession, organization, request.mandatoryParam(PARAM_QUALITY_PROFILE), request.mandatoryParam(PARAM_LANGUAGE)); - wsSupport.checkCanEdit(dbSession, organization, profile); - GroupDto group = wsSupport.getGroup(dbSession, organization, request.mandatoryParam(PARAM_GROUP)); + QProfileDto profile = wsSupport.getProfile(dbSession, request.mandatoryParam(PARAM_QUALITY_PROFILE), request.mandatoryParam(PARAM_LANGUAGE)); + wsSupport.checkCanEdit(dbSession, profile); + GroupDto group = wsSupport.getGroup(dbSession, request.mandatoryParam(PARAM_GROUP)); removeGroup(dbSession, profile, group); } response.noContent(); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RemoveProjectAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RemoveProjectAction.java index 2d20549b46f..b0a0df56b62 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RemoveProjectAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RemoveProjectAction.java @@ -27,7 +27,6 @@ import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.api.web.UserRole; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.project.ProjectDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.component.ComponentFinder; @@ -68,7 +67,6 @@ public class RemoveProjectAction implements QProfileWsAction { .setPost(true) .setHandler(this); QProfileReference.defineParams(action, languages); - QProfileWsSupport.createOrganizationParam(action).setSince("6.4"); action.createParam(PARAM_PROJECT) .setDescription("Project key") @@ -83,11 +81,7 @@ public class RemoveProjectAction implements QProfileWsAction { try (DbSession dbSession = dbClient.openSession(false)) { ProjectDto project = loadProject(dbSession, request); QProfileDto profile = wsSupport.getProfile(dbSession, QProfileReference.fromName(request)); - OrganizationDto organization = wsSupport.getOrganization(dbSession, profile); - checkPermissions(dbSession, organization, profile, project); - if (!profile.getOrganizationUuid().equals(project.getOrganizationUuid())) { - throw new IllegalArgumentException("Project and Quality profile must have the same organization"); - } + checkPermissions(dbSession, profile, project); dbClient.qualityProfileDao().deleteProjectProfileAssociation(dbSession, project, profile); dbSession.commit(); @@ -101,8 +95,8 @@ public class RemoveProjectAction implements QProfileWsAction { return componentFinder.getProjectByKey(dbSession, projectKey); } - private void checkPermissions(DbSession dbSession, OrganizationDto organization, QProfileDto profile, ProjectDto project) { - if (wsSupport.canEdit(dbSession, organization, profile) || userSession.hasProjectPermission(UserRole.ADMIN, project)) { + private void checkPermissions(DbSession dbSession, QProfileDto profile, ProjectDto project) { + if (wsSupport.canEdit(dbSession, profile) || userSession.hasProjectPermission(UserRole.ADMIN, project)) { return; } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RemoveUserAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RemoveUserAction.java index 44a35498cb4..e0096ff8fd3 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RemoveUserAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RemoveUserAction.java @@ -27,16 +27,13 @@ import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.user.UserDto; import static org.sonar.core.util.stream.MoreCollectors.toSet; -import static org.sonar.server.qualityprofile.ws.QProfileWsSupport.createOrganizationParam; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_REMOVE_USER; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LOGIN; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class RemoveUserAction implements QProfileWsAction { @@ -81,17 +78,14 @@ public class RemoveUserAction implements QProfileWsAction { .setDescription("User login") .setRequired(true) .setExampleValue("john.doe"); - - createOrganizationParam(action); } @Override public void handle(Request request, Response response) throws Exception { try (DbSession dbSession = dbClient.openSession(false)) { - OrganizationDto organization = wsSupport.getOrganizationByKey(dbSession, request.param(PARAM_ORGANIZATION)); - QProfileDto profile = wsSupport.getProfile(dbSession, organization, request.mandatoryParam(PARAM_QUALITY_PROFILE), request.mandatoryParam(PARAM_LANGUAGE)); - wsSupport.checkCanEdit(dbSession, organization, profile); - UserDto user = wsSupport.getUser(dbSession, organization, request.mandatoryParam(PARAM_LOGIN)); + QProfileDto profile = wsSupport.getProfile(dbSession, request.mandatoryParam(PARAM_QUALITY_PROFILE), request.mandatoryParam(PARAM_LANGUAGE)); + wsSupport.checkCanEdit(dbSession, profile); + UserDto user = wsSupport.getUser(dbSession, request.mandatoryParam(PARAM_LOGIN)); removeUser(dbSession, profile, user); } response.noContent(); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RenameAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RenameAction.java index 19342e47ee2..7d249f3e81c 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RenameAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RenameAction.java @@ -25,7 +25,6 @@ import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.user.UserSession; @@ -33,8 +32,8 @@ import org.sonar.server.user.UserSession; import static java.lang.String.format; import static java.util.Optional.ofNullable; import static org.sonar.core.util.Uuids.UUID_EXAMPLE_01; -import static org.sonar.server.qualityprofile.ws.CreateAction.NAME_MAXIMUM_LENGTH; import static org.sonar.server.exceptions.BadRequestException.checkRequest; +import static org.sonar.server.qualityprofile.ws.CreateAction.NAME_MAXIMUM_LENGTH; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_KEY; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_NAME; @@ -92,15 +91,14 @@ public class RenameAction implements QProfileWsAction { try (DbSession dbSession = dbClient.openSession(false)) { QProfileDto qualityProfile = wsSupport.getProfile(dbSession, QProfileReference.fromKey(profileKey)); - OrganizationDto organization = wsSupport.getOrganization(dbSession, qualityProfile); - wsSupport.checkCanEdit(dbSession, organization, qualityProfile); + wsSupport.checkCanEdit(dbSession, qualityProfile); if (newName.equals(qualityProfile.getName())) { return; } String language = qualityProfile.getLanguage(); - ofNullable(dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, organization, newName, language)) + ofNullable(dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, newName, language)) .ifPresent(found -> { throw BadRequestException.create(format("Quality profile already exists: %s", newName)); }); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RestoreAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RestoreAction.java index f62571fdf9d..c8a0534fc4a 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RestoreAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/RestoreAction.java @@ -40,7 +40,6 @@ import org.sonar.server.user.UserSession; import static com.google.common.base.Preconditions.checkArgument; import static java.nio.charset.StandardCharsets.UTF_8; import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES; -import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.RestoreActionParameters.PARAM_BACKUP; public class RestoreAction implements QProfileWsAction { @@ -73,8 +72,6 @@ public class RestoreAction implements QProfileWsAction { .setDescription("A profile backup file in XML format, as generated by api/qualityprofiles/backup " + "or the former api/profiles/backup.") .setRequired(true); - - QProfileWsSupport.createOrganizationParam(action).setSince("6.4"); } @Override @@ -83,31 +80,29 @@ public class RestoreAction implements QProfileWsAction { InputStream backup = request.paramAsInputStream(PARAM_BACKUP); checkArgument(backup != null, "A backup file must be provided"); - String organizationKey = request.param(PARAM_ORGANIZATION); InputStreamReader reader = null; try (DbSession dbSession = dbClient.openSession(false)) { reader = new InputStreamReader(backup, UTF_8); - OrganizationDto organization = wsSupport.getOrganizationByKey(dbSession, organizationKey); + OrganizationDto organization = wsSupport.getDefaultOrganization(dbSession); userSession.checkPermission(ADMINISTER_QUALITY_PROFILES, organization); - QProfileRestoreSummary summary = backuper.restore(dbSession, reader, organization, null); - writeResponse(response.newJsonWriter(), organization, summary); + QProfileRestoreSummary summary = backuper.restore(dbSession, reader, (String) null); + writeResponse(response.newJsonWriter(), summary); } finally { IOUtils.closeQuietly(reader); IOUtils.closeQuietly(backup); } } - private void writeResponse(JsonWriter json, OrganizationDto organization, QProfileRestoreSummary summary) { + private void writeResponse(JsonWriter json, QProfileRestoreSummary summary) { QProfileDto profile = summary.getProfile(); String languageKey = profile.getLanguage(); Language language = languages.get(languageKey); JsonWriter jsonProfile = json.beginObject().name("profile").beginObject(); jsonProfile - .prop("organization", organization.getKey()) .prop("key", profile.getKee()) .prop("name", profile.getName()) .prop("language", languageKey) diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchAction.java index f5f8c87c613..7054b4d435e 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchAction.java @@ -41,13 +41,11 @@ import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.core.util.stream.MoreCollectors; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.project.ProjectDto; import org.sonar.db.qualityprofile.ActiveRuleCountQuery; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.user.UserDto; import org.sonar.server.component.ComponentFinder; -import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.language.LanguageParamUtils; import org.sonar.server.user.UserSession; import org.sonarqube.ws.Qualityprofiles.SearchWsResponse; @@ -67,7 +65,6 @@ import static org.sonar.server.ws.WsUtils.writeProtobuf; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_SEARCH; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_DEFAULTS; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_PROJECT; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_PROJECT_KEY; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; @@ -100,13 +97,9 @@ public class SearchAction implements QProfileWsAction { .setChangelog( new Change("6.5", format("The parameters '%s', '%s' and '%s' can be combined without any constraint", PARAM_DEFAULTS, PARAM_PROJECT, PARAM_LANGUAGE)), new Change("6.6", "Add available actions 'edit', 'copy' and 'setAsDefault' and global action 'create'"), - new Change("7.0", "Add available actions 'delete' and 'associateProjects'") - ) + new Change("7.0", "Add available actions 'delete' and 'associateProjects'")) .setResponseExample(getClass().getResource("search-example.json")); - QProfileWsSupport.createOrganizationParam(action) - .setSince("6.4"); - action .createParam(PARAM_DEFAULTS) .setDescription("If set to true, return only the quality profiles marked as default for each language") @@ -137,7 +130,6 @@ public class SearchAction implements QProfileWsAction { private static SearchRequest toSearchWsRequest(Request request) { return new SearchRequest() - .setOrganizationKey(request.param(PARAM_ORGANIZATION)) .setProjectKey(request.param(PARAM_PROJECT)) .setQualityProfile(request.param(PARAM_QUALITY_PROFILE)) .setDefaults(request.paramAsBoolean(PARAM_DEFAULTS)) @@ -145,49 +137,40 @@ public class SearchAction implements QProfileWsAction { } private SearchWsResponse doHandle(SearchRequest request) { - SearchData data = load(request); - return buildResponse(data); - } - - private SearchData load(SearchRequest request) { try (DbSession dbSession = dbClient.openSession(false)) { - - OrganizationDto organization = wsSupport.getOrganizationByKey(dbSession, request.getOrganizationKey()); - ProjectDto project = findProject(dbSession, organization, request); - - List defaultProfiles = dbClient.qualityProfileDao().selectDefaultProfiles(dbSession, organization, getLanguageKeys()); - List editableProfiles = searchEditableProfiles(dbSession, organization); - List profiles = searchProfiles(dbSession, request, organization, defaultProfiles, project); - - ActiveRuleCountQuery.Builder builder = ActiveRuleCountQuery.builder().setOrganization(organization); - return new SearchData() - .setOrganization(organization) - .setProfiles(profiles) - .setActiveRuleCountByProfileKey( - dbClient.activeRuleDao().countActiveRulesByQuery(dbSession, builder.setProfiles(profiles).build())) - .setActiveDeprecatedRuleCountByProfileKey( - dbClient.activeRuleDao().countActiveRulesByQuery(dbSession, builder.setProfiles(profiles).setRuleStatus(DEPRECATED).build())) - .setProjectCountByProfileKey(dbClient.qualityProfileDao().countProjectsByOrganizationAndProfiles(dbSession, organization, profiles)) - .setDefaultProfileKeys(defaultProfiles) - .setEditableProfileKeys(editableProfiles); + SearchData data = load(dbSession, request); + return buildResponse(dbSession, data); } } + private SearchData load(DbSession dbSession, SearchRequest request) { + ProjectDto project = findProject(dbSession, request); + List defaultProfiles = dbClient.qualityProfileDao().selectDefaultProfiles(dbSession, getLanguageKeys()); + List editableProfiles = searchEditableProfiles(dbSession); + List profiles = searchProfiles(dbSession, request, defaultProfiles, project); + + ActiveRuleCountQuery.Builder builder = ActiveRuleCountQuery.builder(); + return new SearchData() + .setProfiles(profiles) + .setActiveRuleCountByProfileKey( + dbClient.activeRuleDao().countActiveRulesByQuery(dbSession, builder.setProfiles(profiles).build())) + .setActiveDeprecatedRuleCountByProfileKey( + dbClient.activeRuleDao().countActiveRulesByQuery(dbSession, builder.setProfiles(profiles).setRuleStatus(DEPRECATED).build())) + .setProjectCountByProfileKey(dbClient.qualityProfileDao().countProjectsByProfiles(dbSession, profiles)) + .setDefaultProfileKeys(defaultProfiles) + .setEditableProfileKeys(editableProfiles); + } + @CheckForNull - private ProjectDto findProject(DbSession dbSession, OrganizationDto organization, SearchRequest request) { + private ProjectDto findProject(DbSession dbSession, SearchRequest request) { if (request.getProjectKey() == null) { return null; } - ProjectDto project = componentFinder.getProjectByKey(dbSession, request.getProjectKey()); - if (!project.getOrganizationUuid().equals(organization.getUuid())) { - throw new NotFoundException(format("Project '%s' not found", project.getKey())); - } - - return project; + return componentFinder.getProjectByKey(dbSession, request.getProjectKey()); } - private List searchEditableProfiles(DbSession dbSession, OrganizationDto organization) { + private List searchEditableProfiles(DbSession dbSession) { if (!userSession.isLoggedIn()) { return emptyList(); } @@ -197,14 +180,13 @@ public class SearchAction implements QProfileWsAction { checkState(user != null, "User with login '%s' is not found'", login); return Stream.concat( - dbClient.qProfileEditUsersDao().selectQProfileUuidsByOrganizationAndUser(dbSession, organization, user).stream(), - dbClient.qProfileEditGroupsDao().selectQProfileUuidsByOrganizationAndGroups(dbSession, organization, userSession.getGroups()).stream()) + dbClient.qProfileEditUsersDao().selectQProfileUuidsByUser(dbSession, user).stream(), + dbClient.qProfileEditGroupsDao().selectQProfileUuidsByGroups(dbSession, userSession.getGroups()).stream()) .collect(toList()); } - private List searchProfiles(DbSession dbSession, SearchRequest request, OrganizationDto organization, List defaultProfiles, - @Nullable ProjectDto project) { - Collection profiles = selectAllProfiles(dbSession, organization); + private List searchProfiles(DbSession dbSession, SearchRequest request, List defaultProfiles, @Nullable ProjectDto project) { + Collection profiles = selectAllProfiles(dbSession); return profiles.stream() .filter(hasLanguagePlugin()) @@ -243,18 +225,18 @@ public class SearchAction implements QProfileWsAction { return p -> Objects.equals(p.getKee(), effectiveProfiles.get(p.getLanguage()).getKee()); } - private Collection selectAllProfiles(DbSession dbSession, OrganizationDto organization) { - return dbClient.qualityProfileDao().selectOrderedByOrganizationUuid(dbSession, organization); + private Collection selectAllProfiles(DbSession dbSession) { + return dbClient.qualityProfileDao().selectAll(dbSession); } private Set getLanguageKeys() { return Arrays.stream(languages.all()).map(Language::getKey).collect(MoreCollectors.toSet()); } - private SearchWsResponse buildResponse(SearchData data) { + private SearchWsResponse buildResponse(DbSession dbSession, SearchData data) { List profiles = data.getProfiles(); Map profilesByKey = profiles.stream().collect(Collectors.toMap(QProfileDto::getKee, identity())); - boolean isGlobalQProfileAdmin = userSession.hasPermission(ADMINISTER_QUALITY_PROFILES, data.getOrganization()); + boolean isGlobalQProfileAdmin = userSession.hasPermission(ADMINISTER_QUALITY_PROFILES, wsSupport.getDefaultOrganization(dbSession)); SearchWsResponse.Builder response = SearchWsResponse.newBuilder(); response.setActions(SearchWsResponse.Actions.newBuilder().setCreate(isGlobalQProfileAdmin)); @@ -262,7 +244,6 @@ public class SearchAction implements QProfileWsAction { QualityProfile.Builder profileBuilder = response.addProfilesBuilder(); String profileKey = profile.getKee(); - ofNullable(profile.getOrganizationUuid()).ifPresent(o -> profileBuilder.setOrganization(data.getOrganization().getKey())); profileBuilder.setKey(profileKey); ofNullable(profile.getName()).ifPresent(profileBuilder::setName); ofNullable(profile.getRulesUpdatedAt()).ifPresent(profileBuilder::setRulesUpdatedAt); @@ -318,21 +299,11 @@ public class SearchAction implements QProfileWsAction { } private static class SearchRequest { - private String organizationKey; private boolean defaults; private String language; private String qualityProfile; private String projectKey; - public String getOrganizationKey() { - return organizationKey; - } - - public SearchRequest setOrganizationKey(@Nullable String organizationKey) { - this.organizationKey = organizationKey; - return this; - } - public boolean getDefaults() { return defaults; } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchData.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchData.java index 70278644ef4..f766cd28f13 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchData.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchData.java @@ -24,7 +24,6 @@ import java.util.List; import java.util.Map; import java.util.Set; import org.sonar.core.util.stream.MoreCollectors; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import static com.google.common.base.MoreObjects.firstNonNull; @@ -32,7 +31,6 @@ import static com.google.common.collect.ImmutableList.copyOf; import static com.google.common.collect.ImmutableMap.copyOf; class SearchData { - private OrganizationDto organization; private List profiles; private Map activeRuleCountByProfileKey; private Map activeDeprecatedRuleCountByProfileKey; @@ -40,15 +38,6 @@ class SearchData { private Set defaultProfileKeys; private Set editableProfileKeys; - SearchData setOrganization(OrganizationDto organization) { - this.organization = organization; - return this; - } - - OrganizationDto getOrganization() { - return organization; - } - List getProfiles() { return profiles; } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchGroupsAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchGroupsAction.java index 8b5c3f1164b..6b848b407d6 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchGroupsAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchGroupsAction.java @@ -31,7 +31,6 @@ import org.sonar.api.server.ws.WebService; import org.sonar.core.util.stream.MoreCollectors; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.GroupMembershipDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.qualityprofile.SearchGroupsQuery; @@ -54,11 +53,9 @@ import static org.sonar.db.qualityprofile.SearchGroupsQuery.ANY; import static org.sonar.db.qualityprofile.SearchGroupsQuery.IN; import static org.sonar.db.qualityprofile.SearchGroupsQuery.OUT; import static org.sonar.db.qualityprofile.SearchGroupsQuery.builder; -import static org.sonar.server.qualityprofile.ws.QProfileWsSupport.createOrganizationParam; import static org.sonar.server.ws.WsUtils.writeProtobuf; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_SEARCH_GROUPS; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class SearchGroupsAction implements QProfileWsAction { @@ -103,20 +100,16 @@ public class SearchGroupsAction implements QProfileWsAction { .setDescription("Quality profile language") .setRequired(true) .setPossibleValues(Arrays.stream(languages.all()).map(Language::getKey).collect(toSet())); - - createOrganizationParam(action); } @Override public void handle(Request request, Response response) throws Exception { SearchUsersRequest wsRequest = buildRequest(request); try (DbSession dbSession = dbClient.openSession(false)) { - OrganizationDto organization = wsSupport.getOrganizationByKey(dbSession, wsRequest.getOrganization()); - QProfileDto profile = wsSupport.getProfile(dbSession, organization, wsRequest.getQualityProfile(), wsRequest.getLanguage()); - wsSupport.checkCanEdit(dbSession, organization, profile); + QProfileDto profile = wsSupport.getProfile(dbSession, wsRequest.getQualityProfile(), wsRequest.getLanguage()); + wsSupport.checkCanEdit(dbSession, profile); SearchGroupsQuery query = builder() - .setOrganization(organization) .setProfile(profile) .setQuery(wsRequest.getQuery()) .setMembership(MEMBERSHIP.get(fromParam(wsRequest.getSelected()))) @@ -140,7 +133,6 @@ public class SearchGroupsAction implements QProfileWsAction { private static SearchUsersRequest buildRequest(Request request) { return SearchUsersRequest.builder() - .setOrganization(request.param(PARAM_ORGANIZATION)) .setQualityProfile(request.mandatoryParam(PARAM_QUALITY_PROFILE)) .setLanguage(request.mandatoryParam(PARAM_LANGUAGE)) .setQuery(request.param(TEXT_QUERY)) diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchUsersAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchUsersAction.java index 1c531af098a..a0f2bdb4083 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchUsersAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchUsersAction.java @@ -31,7 +31,6 @@ import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService.SelectionMode; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.qualityprofile.SearchUsersQuery; import org.sonar.db.qualityprofile.UserMembershipDto; @@ -57,11 +56,9 @@ import static org.sonar.db.qualityprofile.SearchUsersQuery.ANY; import static org.sonar.db.qualityprofile.SearchUsersQuery.IN; import static org.sonar.db.qualityprofile.SearchUsersQuery.OUT; import static org.sonar.db.qualityprofile.SearchUsersQuery.builder; -import static org.sonar.server.qualityprofile.ws.QProfileWsSupport.createOrganizationParam; import static org.sonar.server.ws.WsUtils.writeProtobuf; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_SEARCH_USERS; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class SearchUsersAction implements QProfileWsAction { @@ -108,20 +105,16 @@ public class SearchUsersAction implements QProfileWsAction { .setDescription("Quality profile language") .setRequired(true) .setPossibleValues(Arrays.stream(languages.all()).map(Language::getKey).collect(toSet())); - - createOrganizationParam(action); } @Override public void handle(Request request, Response response) throws Exception { SearchUsersRequest wsRequest = buildRequest(request); try (DbSession dbSession = dbClient.openSession(false)) { - OrganizationDto organization = wsSupport.getOrganizationByKey(dbSession, wsRequest.getOrganization()); - QProfileDto profile = wsSupport.getProfile(dbSession, organization, wsRequest.getQualityProfile(), wsRequest.getLanguage()); - wsSupport.checkCanEdit(dbSession, organization, profile); + QProfileDto profile = wsSupport.getProfile(dbSession, wsRequest.getQualityProfile(), wsRequest.getLanguage()); + wsSupport.checkCanEdit(dbSession, profile); SearchUsersQuery query = builder() - .setOrganization(organization) .setProfile(profile) .setQuery(wsRequest.getQuery()) .setMembership(MEMBERSHIP.get(fromParam(wsRequest.getSelected()))) @@ -143,7 +136,6 @@ public class SearchUsersAction implements QProfileWsAction { private static SearchUsersRequest buildRequest(Request request) { return SearchUsersRequest.builder() - .setOrganization(request.param(PARAM_ORGANIZATION)) .setQualityProfile(request.mandatoryParam(PARAM_QUALITY_PROFILE)) .setLanguage(request.mandatoryParam(PARAM_LANGUAGE)) .setQuery(request.param(TEXT_QUERY)) diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchUsersRequest.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchUsersRequest.java index 512555ca776..364ea5552ef 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchUsersRequest.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SearchUsersRequest.java @@ -23,8 +23,6 @@ import javax.annotation.CheckForNull; import javax.annotation.Nullable; class SearchUsersRequest { - - private String organization; private String qualityProfile; private String language; private String selected; @@ -33,7 +31,6 @@ class SearchUsersRequest { private Integer pageSize; private SearchUsersRequest(Builder builder) { - this.organization = builder.organization; this.qualityProfile = builder.qualityProfile; this.language = builder.language; this.selected = builder.selected; @@ -42,11 +39,6 @@ class SearchUsersRequest { this.pageSize = builder.pageSize; } - @CheckForNull - public String getOrganization() { - return organization; - } - public String getQualityProfile() { return qualityProfile; } @@ -77,7 +69,6 @@ class SearchUsersRequest { } public static class Builder { - private String organization; private String qualityProfile; private String language; private String selected; @@ -85,11 +76,6 @@ class SearchUsersRequest { private Integer page; private Integer pageSize; - public Builder setOrganization(@Nullable String organization) { - this.organization = organization; - return this; - } - public Builder setQualityProfile(String qualityProfile) { this.qualityProfile = qualityProfile; return this; diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SetDefaultAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SetDefaultAction.java index 8f48d57c5b6..a6726932aaf 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SetDefaultAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/SetDefaultAction.java @@ -26,11 +26,11 @@ import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.db.DbClient; import org.sonar.db.DbSession; +import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.DefaultQProfileDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.user.UserSession; -import static java.lang.String.format; import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_SET_DEFAULT; @@ -57,7 +57,6 @@ public class SetDefaultAction implements QProfileWsAction { .setPost(true) .setHandler(this); - QProfileWsSupport.createOrganizationParam(setDefault).setSince("6.4"); QProfileReference.defineParams(setDefault, languages); } @@ -66,18 +65,13 @@ public class SetDefaultAction implements QProfileWsAction { userSession.checkLoggedIn(); QProfileReference reference = QProfileReference.fromName(request); try (DbSession dbSession = dbClient.openSession(false)) { + OrganizationDto defaultOrganization = qProfileWsSupport.getDefaultOrganization(dbSession); QProfileDto qualityProfile = qProfileWsSupport.getProfile(dbSession, reference); - dbClient.organizationDao().selectByUuid(dbSession, qualityProfile.getOrganizationUuid()) - .orElseThrow(() -> new IllegalStateException( - format("Cannot find organization '%s' for quality profile '%s'", qualityProfile.getOrganizationUuid(), qualityProfile.getKee()))); - userSession.checkPermission(ADMINISTER_QUALITY_PROFILES, qualityProfile.getOrganizationUuid()); - setDefault(dbSession, qualityProfile); + userSession.checkPermission(ADMINISTER_QUALITY_PROFILES, defaultOrganization); + dbClient.defaultQProfileDao().insertOrUpdate(dbSession, DefaultQProfileDto.from(qualityProfile)); dbSession.commit(); } response.noContent(); } - public void setDefault(DbSession dbSession, QProfileDto profile) { - dbClient.defaultQProfileDao().insertOrUpdate(dbSession, DefaultQProfileDto.from(profile)); - } } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ShowAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ShowAction.java index 930c82da66e..e2267b40993 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ShowAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ws/ShowAction.java @@ -32,7 +32,6 @@ import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.ActiveRuleCountQuery; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.es.SearchOptions; @@ -96,13 +95,12 @@ public class ShowAction implements QProfileWsAction { public void handle(Request request, Response response) throws Exception { try (DbSession dbSession = dbClient.openSession(false)) { QProfileDto profile = qProfileWsSupport.getProfile(dbSession, QProfileReference.fromKey(request.mandatoryParam(PARAM_KEY))); - OrganizationDto organization = qProfileWsSupport.getOrganization(dbSession, profile); - boolean isDefault = dbClient.defaultQProfileDao().isDefault(dbSession, profile.getOrganizationUuid(), profile.getKee()); - ActiveRuleCountQuery.Builder builder = ActiveRuleCountQuery.builder().setOrganization(organization); + boolean isDefault = dbClient.defaultQProfileDao().isDefault(dbSession, profile.getKee()); + ActiveRuleCountQuery.Builder builder = ActiveRuleCountQuery.builder(); long activeRuleCount = countActiveRulesByQuery(dbSession, profile, builder); long deprecatedActiveRuleCount = countActiveRulesByQuery(dbSession, profile, builder.setRuleStatus(DEPRECATED)); - long projectCount = countProjectsByOrganizationAndProfiles(dbSession, organization, profile); - CompareToSonarWay compareToSonarWay = getSonarWay(request, dbSession, organization, profile); + long projectCount = countProjectsByProfiles(dbSession, profile); + CompareToSonarWay compareToSonarWay = getSonarWay(request, dbSession, profile); writeProtobuf(buildResponse(profile, isDefault, getLanguage(profile), activeRuleCount, deprecatedActiveRuleCount, projectCount, compareToSonarWay), request, response); } } @@ -112,8 +110,8 @@ public class ShowAction implements QProfileWsAction { return result.getOrDefault(profile.getKee(), 0L); } - private long countProjectsByOrganizationAndProfiles(DbSession dbSession, OrganizationDto organization, QProfileDto profile) { - Map projects = dbClient.qualityProfileDao().countProjectsByOrganizationAndProfiles(dbSession, organization, singletonList(profile)); + private long countProjectsByProfiles(DbSession dbSession, QProfileDto profile) { + Map projects = dbClient.qualityProfileDao().countProjectsByProfiles(dbSession, singletonList(profile)); return projects.getOrDefault(profile.getKee(), 0L); } @@ -124,12 +122,12 @@ public class ShowAction implements QProfileWsAction { } @CheckForNull - public CompareToSonarWay getSonarWay(Request request, DbSession dbSession, OrganizationDto organization, QProfileDto profile) { + public CompareToSonarWay getSonarWay(Request request, DbSession dbSession, QProfileDto profile) { if (!request.mandatoryParamAsBoolean(PARAM_COMPARE_TO_SONAR_WAY) || profile.isBuiltIn()) { return null; } QProfileDto sonarWay = Stream.of(SONAR_WAY, SONARQUBE_WAY) - .map(name -> dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, organization, name, profile.getLanguage())) + .map(name -> dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, name, profile.getLanguage())) .filter(Objects::nonNull) .filter(QProfileDto::isBuiltIn) .findFirst() diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/RuleCreator.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/RuleCreator.java index 39eca8c454a..bfee79e317b 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/RuleCreator.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/RuleCreator.java @@ -38,14 +38,12 @@ import org.sonar.api.utils.System2; import org.sonar.core.util.UuidFactory; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleDto.Format; import org.sonar.db.rule.RuleMetadataDto; import org.sonar.db.rule.RuleParamDto; import org.sonar.server.exceptions.BadRequestException; -import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.rule.index.RuleIndexer; import org.sonar.server.util.TypeValidations; @@ -62,26 +60,20 @@ public class RuleCreator { private final RuleIndexer ruleIndexer; private final DbClient dbClient; private final TypeValidations typeValidations; - private final DefaultOrganizationProvider defaultOrganizationProvider; private final UuidFactory uuidFactory; - public RuleCreator(System2 system2, RuleIndexer ruleIndexer, DbClient dbClient, TypeValidations typeValidations, - DefaultOrganizationProvider defaultOrganizationProvider, UuidFactory uuidFactory) { + public RuleCreator(System2 system2, RuleIndexer ruleIndexer, DbClient dbClient, TypeValidations typeValidations, UuidFactory uuidFactory) { this.system2 = system2; this.ruleIndexer = ruleIndexer; this.dbClient = dbClient; this.typeValidations = typeValidations; - this.defaultOrganizationProvider = defaultOrganizationProvider; this.uuidFactory = uuidFactory; } public RuleKey create(DbSession dbSession, NewCustomRule newRule) { RuleKey templateKey = newRule.templateKey(); checkArgument(templateKey != null, "Rule template key should not be null"); - String defaultOrganizationUuid = defaultOrganizationProvider.get().getUuid(); - OrganizationDto defaultOrganization = dbClient.organizationDao().selectByUuid(dbSession, defaultOrganizationUuid) - .orElseThrow(() -> new IllegalStateException(format("Could not find default organization for uuid '%s'", defaultOrganizationUuid))); - RuleDto templateRule = dbClient.ruleDao().selectByKey(dbSession, defaultOrganization.getUuid(), templateKey) + RuleDto templateRule = dbClient.ruleDao().selectByKey(dbSession, templateKey) .orElseThrow(() -> new IllegalArgumentException(format(TEMPLATE_KEY_NOT_EXIST_FORMAT, templateKey))); checkArgument(templateRule.isTemplate(), "This rule is not a template rule: %s", templateKey.toString()); checkArgument(templateRule.getStatus() != RuleStatus.REMOVED, TEMPLATE_KEY_NOT_EXIST_FORMAT, templateKey.toString()); @@ -97,12 +89,8 @@ public class RuleCreator { } public List create(DbSession dbSession, List newRules) { - String defaultOrganizationUuid = defaultOrganizationProvider.get().getUuid(); - OrganizationDto defaultOrganization = dbClient.organizationDao().selectByUuid(dbSession, defaultOrganizationUuid) - .orElseThrow(() -> new IllegalStateException(format("Could not find default organization for uuid '%s'", defaultOrganizationUuid))); - Set templateKeys = newRules.stream().map(NewCustomRule::templateKey).collect(Collectors.toSet()); - Map templateRules = dbClient.ruleDao().selectByKeys(dbSession, defaultOrganization.getUuid(), templateKeys) + Map templateRules = dbClient.ruleDao().selectByKeys(dbSession, templateKeys) .stream() .collect(Collectors.toMap( RuleDto::getKey, @@ -223,7 +211,6 @@ public class RuleCreator { Set tags = templateRuleDto.getTags(); if (!tags.isEmpty()) { RuleMetadataDto ruleMetadata = new RuleMetadataDto() - .setOrganizationUuid(defaultOrganizationProvider.get().getUuid()) .setRuleUuid(ruleDefinition.getUuid()) .setTags(tags) .setCreatedAt(system2.now()) diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/RuleUpdate.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/RuleUpdate.java index cabfd2993ba..678f3cfae85 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/RuleUpdate.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/RuleUpdate.java @@ -28,7 +28,6 @@ import org.apache.commons.lang.StringUtils; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; import org.sonar.api.server.debt.DebtRemediationFunction; -import org.sonar.db.organization.OrganizationDto; import static com.google.common.base.Preconditions.checkArgument; import static org.sonar.server.rule.RuleUpdate.RuleUpdateUseCase.CUSTOM_RULE; @@ -56,7 +55,6 @@ public class RuleUpdate { private String severity; private RuleStatus status; private final Map parameters = new HashMap<>(); - private OrganizationDto organization; private RuleUpdate(RuleKey ruleKey, RuleUpdateUseCase useCase) { this.ruleKey = ruleKey; @@ -165,11 +163,6 @@ public class RuleUpdate { return this; } - public RuleUpdate setOrganization(OrganizationDto organization) { - this.organization = organization; - return this; - } - public Map getParameters() { return parameters; } @@ -227,10 +220,6 @@ public class RuleUpdate { checkArgument(useCase == CUSTOM_RULE, "Not a custom rule"); } - public OrganizationDto getOrganization() { - return organization; - } - /** * Use to update a rule provided by a plugin (name, description, severity, status and parameters cannot by changed) */ diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/RuleUpdater.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/RuleUpdater.java index 5f4ef2d59be..ed3cd3c93aa 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/RuleUpdater.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/RuleUpdater.java @@ -39,7 +39,6 @@ import org.sonar.api.server.debt.DebtRemediationFunction; import org.sonar.api.utils.System2; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.ActiveRuleDto; import org.sonar.db.qualityprofile.ActiveRuleParamDto; import org.sonar.db.qualityprofile.OrgActiveRuleDto; @@ -71,7 +70,7 @@ public class RuleUpdater { /** * Update manual rules and custom rules (rules instantiated from templates) */ - public boolean update(DbSession dbSession, RuleUpdate update, OrganizationDto organization, UserSession userSession) { + public boolean update(DbSession dbSession, RuleUpdate update, UserSession userSession) { if (update.isEmpty()) { return false; } @@ -80,8 +79,8 @@ public class RuleUpdater { // validate only the changes, not all the rule fields apply(update, rule, userSession); update(dbSession, rule); - updateParameters(dbSession, organization, update, rule); - ruleIndexer.commitAndIndex(dbSession, rule.getUuid(), organization); + updateParameters(dbSession, update, rule); + ruleIndexer.commitAndIndex(dbSession, rule.getUuid()); return true; } @@ -91,7 +90,7 @@ public class RuleUpdater { */ private RuleDto getRuleDto(RuleUpdate change) { try (DbSession dbSession = dbClient.openSession(false)) { - RuleDto rule = dbClient.ruleDao().selectOrFailByKey(dbSession, change.getOrganization(), change.getRuleKey()); + RuleDto rule = dbClient.ruleDao().selectOrFailByKey(dbSession, change.getRuleKey()); if (RuleStatus.REMOVED == rule.getStatus()) { throw new IllegalArgumentException("Rule with REMOVED status cannot be updated: " + change.getRuleKey()); } @@ -209,7 +208,7 @@ public class RuleUpdater { .isEquals(); } - private void updateParameters(DbSession dbSession, OrganizationDto organization, RuleUpdate update, RuleDto rule) { + private void updateParameters(DbSession dbSession, RuleUpdate update, RuleDto rule) { if (update.isChangeParameters() && update.isCustomRule()) { RuleDto customRule = rule; String templateUuid = customRule.getTemplateUuid(); @@ -222,14 +221,14 @@ public class RuleUpdater { List paramKeys = newArrayList(); // Load active rules and its parameters in cache - Multimap activeRuleParamsByActiveRule = getActiveRuleParamsByActiveRule(dbSession, organization, customRule); + Multimap activeRuleParamsByActiveRule = getActiveRuleParamsByActiveRule(dbSession, customRule); // Browse custom rule parameters to create, update or delete them deleteOrUpdateParameters(dbSession, update, customRule, paramKeys, activeRuleParamsByActiveRule); } } - private Multimap getActiveRuleParamsByActiveRule(DbSession dbSession, OrganizationDto organization, RuleDto customRule) { - List activeRuleDtos = dbClient.activeRuleDao().selectByRuleUuid(dbSession, organization, customRule.getUuid()); + private Multimap getActiveRuleParamsByActiveRule(DbSession dbSession, RuleDto customRule) { + List activeRuleDtos = dbClient.activeRuleDao().selectByOrgRuleUuid(dbSession, customRule.getUuid()); Map activeRuleByUuid = from(activeRuleDtos).uniqueIndex(ActiveRuleDto::getUuid); List activeRuleUuids = Lists.transform(activeRuleDtos, ActiveRuleDto::getUuid); List activeRuleParamDtos = dbClient.activeRuleDao().selectParamsByActiveRuleUuids(dbSession, activeRuleUuids); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java index 993f80031b4..02a1bd980eb 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/ActiveRuleCompleter.java @@ -41,7 +41,6 @@ import org.sonar.api.utils.DateUtils; import org.sonar.core.util.stream.MoreCollectors; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.ActiveRuleDto; import org.sonar.db.qualityprofile.ActiveRuleKey; import org.sonar.db.qualityprofile.ActiveRuleParamDto; @@ -100,7 +99,7 @@ public class ActiveRuleCompleter { } else { // Load details of all active rules List ruleUuids = Lists.transform(rules, RuleDto::getUuid); - List activeRules = dbClient.activeRuleDao().selectByRuleUuids(dbSession, query.getOrganization(), ruleUuids); + List activeRules = dbClient.activeRuleDao().selectByRuleUuids(dbSession, ruleUuids); Multimap activeRulesByRuleKey = activeRules.stream() .collect(MoreCollectors.index(OrgActiveRuleDto::getRuleKey)); ListMultimap activeRuleParamsByActiveRuleKey = loadParams(dbSession, activeRules); @@ -140,8 +139,8 @@ public class ActiveRuleCompleter { return activeRuleParamsByActiveRuleKey; } - List completeShow(DbSession dbSession, OrganizationDto organization, RuleDefinitionDto rule) { - List activeRules = dbClient.activeRuleDao().selectByRuleUuid(dbSession, organization, rule.getUuid()); + List completeShow(DbSession dbSession, RuleDefinitionDto rule) { + List activeRules = dbClient.activeRuleDao().selectByOrgRuleUuid(dbSession, rule.getUuid()); Map activeRuleUuidsByKey = new HashMap<>(); for (OrgActiveRuleDto activeRuleDto : activeRules) { activeRuleUuidsByKey.put(activeRuleDto.getUuid(), activeRuleDto.getKey()); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/AppAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/AppAction.java index 53cb6f63028..f2d01a6f71b 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/AppAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/AppAction.java @@ -27,24 +27,22 @@ import org.sonar.api.server.ws.WebService; import org.sonar.api.utils.text.JsonWriter; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.permission.OrganizationPermission; +import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.user.UserSession; -import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_ORGANIZATION; - public class AppAction implements RulesWsAction { private final Languages languages; private final DbClient dbClient; private final UserSession userSession; - private final RuleWsSupport wsSupport; + private final DefaultOrganizationProvider defaultOrganizationProvider; - public AppAction(Languages languages, DbClient dbClient, UserSession userSession, RuleWsSupport wsSupport) { + public AppAction(Languages languages, DbClient dbClient, UserSession userSession, DefaultOrganizationProvider defaultOrganizationProvider) { this.languages = languages; this.dbClient = dbClient; this.userSession = userSession; - this.wsSupport = wsSupport; + this.defaultOrganizationProvider = defaultOrganizationProvider; } @Override @@ -55,31 +53,22 @@ public class AppAction implements RulesWsAction { .setSince("4.5") .setInternal(true) .setHandler(this); - - action.createParam(PARAM_ORGANIZATION) - .setDescription("Organization key") - .setRequired(false) - .setInternal(true) - .setSince("6.4") - .setExampleValue("my-org"); } @Override public void handle(Request request, Response response) throws Exception { try (DbSession dbSession = dbClient.openSession(false)) { - OrganizationDto organization = wsSupport.getOrganizationByKey(dbSession, request.param(PARAM_ORGANIZATION)); - JsonWriter json = response.newJsonWriter(); json.beginObject(); - addPermissions(organization, json); + addPermissions(json); addLanguages(json); addRuleRepositories(json, dbSession); json.endObject().close(); } } - private void addPermissions(OrganizationDto organization, JsonWriter json) { - boolean canWrite = userSession.hasPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); + private void addPermissions(JsonWriter json) { + boolean canWrite = userSession.hasPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganizationProvider.get().getUuid()); json.prop("canWrite", canWrite); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RuleQueryFactory.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RuleQueryFactory.java index f4aeccc3faa..e5fcd96b955 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RuleQueryFactory.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RuleQueryFactory.java @@ -28,12 +28,10 @@ import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.WebService; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.rule.index.RuleQuery; -import static com.google.common.base.Preconditions.checkArgument; -import static java.lang.String.format; +import static org.sonar.server.exceptions.NotFoundException.checkFound; import static org.sonar.server.rule.ws.EnumUtils.toEnums; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVATION; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVE_SEVERITIES; @@ -44,7 +42,6 @@ import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INCLUDE_EXTERNAL; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INHERITANCE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_TEMPLATE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_LANGUAGES; -import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ORGANIZATION; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_OWASP_TOP_10; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_QPROFILE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_REPOSITORIES; @@ -56,18 +53,14 @@ import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_STATUSES; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_TAGS; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_TEMPLATE_KEY; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_TYPES; -import static org.sonar.server.exceptions.NotFoundException.checkFound; -import static org.sonar.server.exceptions.NotFoundException.checkFoundWithOptional; @ServerSide public class RuleQueryFactory { private final DbClient dbClient; - private final RuleWsSupport wsSupport; - public RuleQueryFactory(DbClient dbClient, RuleWsSupport wsSupport) { + public RuleQueryFactory(DbClient dbClient) { this.dbClient = dbClient; - this.wsSupport = wsSupport; } /** @@ -93,15 +86,12 @@ public class RuleQueryFactory { query.setAvailableSince(availableSince != null ? availableSince.getTime() : null); query.setStatuses(toEnums(request.paramAsStrings(PARAM_STATUSES), RuleStatus.class)); - // Order is important : 1. Load profile, 2. Load organization either from parameter or from profile, 3. Load compare to profile + // Order is important : 1. Load profile, 2. Load compare to profile setProfile(dbSession, query, request); - setOrganization(dbSession, query, request); setCompareToProfile(dbSession, query, request); QProfileDto profile = query.getQProfile(); query.setLanguages(profile == null ? request.paramAsStrings(PARAM_LANGUAGES) : ImmutableList.of(profile.getLanguage())); - if (wsSupport.areActiveRulesVisible(query.getOrganization())) { - query.setActivation(request.paramAsBoolean(PARAM_ACTIVATION)); - } + query.setActivation(request.paramAsBoolean(PARAM_ACTIVATION)); query.setTags(request.paramAsStrings(PARAM_TAGS)); query.setInheritance(request.paramAsStrings(PARAM_INHERITANCE)); query.setActiveSeverities(request.paramAsStrings(PARAM_ACTIVE_SEVERITIES)); @@ -132,24 +122,6 @@ public class RuleQueryFactory { query.setQProfile(profile); } - private void setOrganization(DbSession dbSession, RuleQuery query, Request request) { - String organizationKey = request.param(PARAM_ORGANIZATION); - QProfileDto profile = query.getQProfile(); - if (profile == null) { - query.setOrganization(wsSupport.getOrganizationByKey(dbSession, organizationKey)); - return; - } - OrganizationDto organization = checkFoundWithOptional(dbClient.organizationDao().selectByUuid(dbSession, profile.getOrganizationUuid()), "No organization with UUID %s", - profile.getOrganizationUuid()); - if (organizationKey != null) { - OrganizationDto inputOrganization = checkFoundWithOptional(dbClient.organizationDao().selectByKey(dbSession, organizationKey), "No organization with key '%s'", - organizationKey); - checkArgument(organization.getUuid().equals(inputOrganization.getUuid()), - format("The specified quality profile '%s' is not part of the specified organization '%s'", profile.getKee(), organizationKey)); - } - query.setOrganization(organization); - } - private void setCompareToProfile(DbSession dbSession, RuleQuery query, Request request) { String compareToProfileUuid = request.param(PARAM_COMPARE_TO_PROFILE); if (compareToProfileUuid == null) { @@ -158,9 +130,6 @@ public class RuleQueryFactory { QProfileDto profileOptional = dbClient.qualityProfileDao().selectByUuid(dbSession, compareToProfileUuid); QProfileDto profile = checkFound(profileOptional, "The specified qualityProfile '%s' does not exist", compareToProfileUuid); - checkArgument(query.getOrganization().getUuid().equals(profile.getOrganizationUuid()), - format("The specified quality profile '%s' is not part of the specified organization '%s'", profile.getKee(), query.getOrganization().getKey())); - query.setCompareToQProfile(profile); } } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RuleWsSupport.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RuleWsSupport.java index ff67fbccd16..5303e71f94a 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RuleWsSupport.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RuleWsSupport.java @@ -23,10 +23,8 @@ import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import javax.annotation.Nullable; import org.sonar.api.rule.RuleStatus; import org.sonar.api.rule.Severity; import org.sonar.api.rules.RuleType; @@ -34,7 +32,6 @@ import org.sonar.api.server.ServerSide; import org.sonar.api.server.ws.WebService; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDto; import org.sonar.db.user.UserDto; import org.sonar.server.organization.DefaultOrganizationProvider; @@ -51,9 +48,7 @@ import static org.sonar.core.util.Uuids.UUID_EXAMPLE_01; import static org.sonar.core.util.Uuids.UUID_EXAMPLE_02; import static org.sonar.core.util.stream.MoreCollectors.toSet; import static org.sonar.core.util.stream.MoreCollectors.uniqueIndex; -import static org.sonar.db.organization.OrganizationDto.Subscription.PAID; import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES; -import static org.sonar.server.exceptions.NotFoundException.checkFoundWithOptional; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVATION; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVE_SEVERITIES; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_AVAILABLE_SINCE; @@ -63,7 +58,6 @@ import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INCLUDE_EXTERNAL; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INHERITANCE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_TEMPLATE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_LANGUAGES; -import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ORGANIZATION; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_OWASP_TOP_10; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_QPROFILE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_REPOSITORIES; @@ -95,26 +89,11 @@ public class RuleWsSupport { .checkPermission(ADMINISTER_QUALITY_PROFILES, defaultOrganizationProvider.get().getUuid()); } - public OrganizationDto getOrganizationByKey(DbSession dbSession, @Nullable String organizationKey) { - String organizationOrDefaultKey = Optional.ofNullable(organizationKey) - .orElseGet(defaultOrganizationProvider.get()::getKey); - return checkFoundWithOptional( - dbClient.organizationDao().selectByKey(dbSession, organizationOrDefaultKey), - "No organization with key '%s'", organizationOrDefaultKey); - } - Map getUsersByUuid(DbSession dbSession, List rules) { Set userUuids = rules.stream().map(RuleDto::getNoteUserUuid).filter(Objects::nonNull).collect(toSet()); return dbClient.userDao().selectByUuids(dbSession, userUuids).stream().collect(uniqueIndex(UserDto::getUuid)); } - boolean areActiveRulesVisible(OrganizationDto organization) { - if (!organization.getSubscription().equals(PAID)) { - return true; - } - return userSession.hasMembership(organization); - } - public static void defineGenericRuleSearchParameters(WebService.NewAction action) { action .createParam(TEXT_QUERY) @@ -244,13 +223,6 @@ public class RuleWsSupport { .setDescription("Ascending sort") .setBooleanPossibleValues() .setDefaultValue(true); - - action.createParam(PARAM_ORGANIZATION) - .setDescription("Organization key") - .setRequired(false) - .setInternal(true) - .setExampleValue("my-org") - .setSince("6.4"); } static void defineIsExternalParam(WebService.NewAction action) { diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/SearchAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/SearchAction.java index cca26501e20..624e29c78eb 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/SearchAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/SearchAction.java @@ -236,7 +236,7 @@ public class SearchAction implements RulesWsAction { private SearchResult doSearch(DbSession dbSession, RuleQuery query, SearchOptions context) { SearchIdResult result = ruleIndex.search(query, context); - List rules = dbClient.ruleDao().selectByUuids(dbSession, query.getOrganization().getUuid(), result.getUuids()); + List rules = dbClient.ruleDao().selectByUuids(dbSession, result.getUuids()); List ruleUuids = rules.stream().map(RuleDto::getUuid).collect(Collectors.toList()); List templateRuleUuids = rules.stream() .map(RuleDto::getTemplateUuid) @@ -255,7 +255,7 @@ public class SearchAction implements RulesWsAction { private void doContextResponse(DbSession dbSession, SearchRequest request, SearchResult result, SearchResponse.Builder response, RuleQuery query) { SearchOptions contextForResponse = loadCommonContext(request); writeRules(dbSession, response, result, contextForResponse); - if (contextForResponse.getFields().contains("actives") && ruleWsSupport.areActiveRulesVisible(query.getOrganization())) { + if (contextForResponse.getFields().contains("actives")) { activeRuleCompleter.completeSearch(dbSession, query, result.rules, response); } } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/ShowAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/ShowAction.java index 731ce4b4810..6ea78b91675 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/ShowAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/ShowAction.java @@ -28,13 +28,13 @@ import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleParamDto; import org.sonar.server.exceptions.NotFoundException; import org.sonarqube.ws.Rules.ShowResponse; +import static java.lang.String.format; import static java.util.Collections.singletonList; import static java.util.Optional.ofNullable; import static org.sonar.server.ws.WsUtils.writeProtobuf; @@ -90,29 +90,21 @@ public class ShowAction implements RulesWsAction { .setDescription("Show rule's activations for all profiles (\"active rules\")") .setBooleanPossibleValues() .setDefaultValue(false); - - action.createParam(PARAM_ORGANIZATION) - .setDescription("Organization key") - .setRequired(false) - .setInternal(true) - .setExampleValue("my-org") - .setSince("6.4"); } @Override public void handle(Request request, Response response) throws Exception { RuleKey key = RuleKey.parse(request.mandatoryParam(PARAM_KEY)); try (DbSession dbSession = dbClient.openSession(false)) { - OrganizationDto organization = ruleWsSupport.getOrganizationByKey(dbSession, request.param(PARAM_ORGANIZATION)); - RuleDto rule = dbClient.ruleDao().selectByKey(dbSession, organization.getUuid(), key) - .orElseThrow(() -> new NotFoundException(String.format("Rule not found: %s", key))); + RuleDto rule = dbClient.ruleDao().selectByKey(dbSession, key) + .orElseThrow(() -> new NotFoundException(format("Rule not found: %s", key))); List templateRules = ofNullable(rule.getTemplateUuid()) .flatMap(templateUuid -> dbClient.ruleDao().selectDefinitionByUuid(rule.getTemplateUuid(), dbSession)) .map(Collections::singletonList).orElseGet(Collections::emptyList); List ruleParameters = dbClient.ruleDao().selectRuleParamsByRuleUuids(dbSession, singletonList(rule.getUuid())); - ShowResponse showResponse = buildResponse(dbSession, organization, request, + ShowResponse showResponse = buildResponse(dbSession, request, new SearchAction.SearchResult() .setRules(singletonList(rule)) .setTemplateRules(templateRules) @@ -122,13 +114,13 @@ public class ShowAction implements RulesWsAction { } } - private ShowResponse buildResponse(DbSession dbSession, OrganizationDto organization, Request request, SearchAction.SearchResult searchResult) { + private ShowResponse buildResponse(DbSession dbSession, Request request, SearchAction.SearchResult searchResult) { ShowResponse.Builder responseBuilder = ShowResponse.newBuilder(); RuleDto rule = searchResult.getRules().get(0); responseBuilder.setRule(mapper.toWsRule(rule.getDefinition(), searchResult, Collections.emptySet(), rule.getMetadata(), ruleWsSupport.getUsersByUuid(dbSession, searchResult.getRules()))); - if (request.mandatoryParamAsBoolean(PARAM_ACTIVES) && ruleWsSupport.areActiveRulesVisible(organization)) { - activeRuleCompleter.completeShow(dbSession, organization, rule.getDefinition()).forEach(responseBuilder::addActives); + if (request.mandatoryParamAsBoolean(PARAM_ACTIVES)) { + activeRuleCompleter.completeShow(dbSession, rule.getDefinition()).forEach(responseBuilder::addActives); } return responseBuilder.build(); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/TagsAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/TagsAction.java index a3a64511246..b9f1746e49c 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/TagsAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/TagsAction.java @@ -21,33 +21,20 @@ package org.sonar.server.rule.ws; import com.google.common.io.Resources; import java.util.List; -import java.util.Optional; -import javax.annotation.Nullable; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService.NewAction; import org.sonar.api.server.ws.WebService.Param; import org.sonar.api.utils.text.JsonWriter; -import org.sonar.db.DbClient; -import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; -import org.sonar.server.exceptions.NotFoundException; -import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.rule.index.RuleIndex; -import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_ORGANIZATION; - public class TagsAction implements RulesWsAction { private final RuleIndex ruleIndex; - private final DbClient dbClient; - private final DefaultOrganizationProvider defaultOrganizationProvider; - public TagsAction(RuleIndex ruleIndex, DbClient dbClient, DefaultOrganizationProvider defaultOrganizationProvider) { + public TagsAction(RuleIndex ruleIndex) { this.ruleIndex = ruleIndex; - this.dbClient = dbClient; - this.defaultOrganizationProvider = defaultOrganizationProvider; } @Override @@ -61,36 +48,17 @@ public class TagsAction implements RulesWsAction { action.createSearchQuery("misra", "tags"); action.createPageSize(10, 100); - - action.createParam(PARAM_ORGANIZATION) - .setDescription("Organization key") - .setRequired(false) - .setInternal(true) - .setExampleValue("my-org") - .setSince("6.4"); } @Override public void handle(Request request, Response response) { - OrganizationDto organization = getOrganization(request.param(PARAM_ORGANIZATION)); String query = request.param(Param.TEXT_QUERY); int pageSize = request.mandatoryParamAsInt("ps"); - List tags = ruleIndex.listTags(organization, query, pageSize == 0 ? Integer.MAX_VALUE : pageSize); - + List tags = ruleIndex.listTags(query, pageSize == 0 ? Integer.MAX_VALUE : pageSize); writeResponse(response, tags); } - private OrganizationDto getOrganization(@Nullable String organizationKey) { - try (DbSession dbSession = dbClient.openSession(false)) { - String organizationOrDefaultKey = Optional.ofNullable(organizationKey) - .orElseGet(defaultOrganizationProvider.get()::getKey); - return NotFoundException.checkFoundWithOptional( - dbClient.organizationDao().selectByKey(dbSession, organizationOrDefaultKey), - "No organization with key '%s'", organizationOrDefaultKey); - } - } - private static void writeResponse(Response response, List tags) { try (JsonWriter json = response.newJsonWriter()) { json.beginObject().name("tags").beginArray(); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/UpdateAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/UpdateAction.java index 8278393a945..2e75b497f73 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/UpdateAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/UpdateAction.java @@ -36,7 +36,6 @@ import org.sonar.api.server.ws.WebService; import org.sonar.api.utils.KeyValueFormat; import org.sonar.db.DbClient; import org.sonar.db.DbSession; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleParamDto; @@ -50,7 +49,6 @@ import static com.google.common.collect.Sets.newHashSet; import static java.lang.String.format; import static java.util.Collections.singletonList; import static java.util.Optional.ofNullable; -import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES; import static org.sonar.server.rule.ws.CreateAction.KEY_MAXIMUM_LENGTH; import static org.sonar.server.rule.ws.CreateAction.NAME_MAXIMUM_LENGTH; import static org.sonar.server.ws.WsUtils.writeProtobuf; @@ -67,7 +65,6 @@ public class UpdateAction implements RulesWsAction { public static final String PARAM_DESCRIPTION = "markdown_description"; public static final String PARAM_SEVERITY = "severity"; public static final String PARAM_STATUS = "status"; - public static final String PARAM_ORGANIZATION = "organization"; public static final String PARAMS = "params"; private final DbClient dbClient; @@ -151,13 +148,6 @@ public class UpdateAction implements RulesWsAction { .setPossibleValues(RuleStatus.values()) .setDescription("Rule status (Only when updating a custom rule)"); - action.createParam(PARAM_ORGANIZATION) - .setRequired(false) - .setInternal(true) - .setDescription("Organization key") - .setExampleValue("my-org") - .setSince("6.4"); - action.createParam(PARAMS) .setDescription("Parameters as semi-colon list of =, for example 'params=key1=v1;key2=v2' (Only when updating a custom rule)"); } @@ -166,19 +156,18 @@ public class UpdateAction implements RulesWsAction { public void handle(Request request, Response response) throws Exception { userSession.checkLoggedIn(); try (DbSession dbSession = dbClient.openSession(false)) { - OrganizationDto organization = ruleWsSupport.getOrganizationByKey(dbSession, request.param(PARAM_ORGANIZATION)); - userSession.checkPermission(ADMINISTER_QUALITY_PROFILES, organization); - RuleUpdate update = readRequest(dbSession, request, organization); - ruleUpdater.update(dbSession, update, organization, userSession); - UpdateResponse updateResponse = buildResponse(dbSession, update.getRuleKey(), organization); + ruleWsSupport.checkQProfileAdminPermissionOnDefaultOrganization(); + RuleUpdate update = readRequest(dbSession, request); + ruleUpdater.update(dbSession, update, userSession); + UpdateResponse updateResponse = buildResponse(dbSession, update.getRuleKey()); writeProtobuf(updateResponse, request, response); } } - private RuleUpdate readRequest(DbSession dbSession, Request request, OrganizationDto organization) { + private RuleUpdate readRequest(DbSession dbSession, Request request) { RuleKey key = RuleKey.parse(request.mandatoryParam(PARAM_KEY)); - RuleUpdate update = createRuleUpdate(dbSession, key, organization); + RuleUpdate update = createRuleUpdate(dbSession, key); readTags(request, update); readMarkdownNote(request, update); readDebt(request, update); @@ -206,13 +195,12 @@ public class UpdateAction implements RulesWsAction { return update; } - private RuleUpdate createRuleUpdate(DbSession dbSession, RuleKey key, OrganizationDto organization) { - RuleDto rule = dbClient.ruleDao().selectByKey(dbSession, organization.getUuid(), key) + private RuleUpdate createRuleUpdate(DbSession dbSession, RuleKey key) { + RuleDto rule = dbClient.ruleDao().selectByKey(dbSession, key) .orElseThrow(() -> new NotFoundException(format("This rule does not exist: %s", key))); RuleUpdate ruleUpdate = ofNullable(rule.getTemplateUuid()) .map(x -> RuleUpdate.createForCustomRule(key)) .orElseGet(() -> RuleUpdate.createForPluginRule(key)); - ruleUpdate.setOrganization(organization); return ruleUpdate; } @@ -251,8 +239,8 @@ public class UpdateAction implements RulesWsAction { } } - private UpdateResponse buildResponse(DbSession dbSession, RuleKey key, OrganizationDto organization) { - RuleDto rule = dbClient.ruleDao().selectByKey(dbSession, organization.getUuid(), key) + private UpdateResponse buildResponse(DbSession dbSession, RuleKey key) { + RuleDto rule = dbClient.ruleDao().selectByKey(dbSession, key) .orElseThrow(() -> new NotFoundException(format("Rule not found: %s", key))); List templateRules = new ArrayList<>(1); if (rule.getDefinition().isCustomRule()) { diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/branch/pr/ws/ListActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/branch/pr/ws/ListActionTest.java index 4d123a46de4..b8bed1b7044 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/branch/pr/ws/ListActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/branch/pr/ws/ListActionTest.java @@ -55,7 +55,6 @@ import org.sonarqube.ws.ProjectPullRequests.ListWsResponse; import org.sonarqube.ws.ProjectPullRequests.PullRequest; import static java.lang.String.format; -import static java.util.Collections.emptySet; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import static org.sonar.api.issue.Issue.RESOLUTION_FALSE_POSITIVE; diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/branch/ws/ListActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/branch/ws/ListActionTest.java index 33c45ca1e61..b630da11b5b 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/branch/ws/ListActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/branch/ws/ListActionTest.java @@ -47,7 +47,6 @@ import org.sonarqube.ws.ProjectBranches.Branch; import org.sonarqube.ws.ProjectBranches.ListWsResponse; import static java.lang.String.format; -import static java.util.Collections.emptySet; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import static org.sonar.api.measures.CoreMetrics.ALERT_STATUS_KEY; diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/ce/ws/ActivityActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/ce/ws/ActivityActionTest.java index 4b61f8968f5..a8faae732fc 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/ce/ws/ActivityActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/ce/ws/ActivityActionTest.java @@ -29,8 +29,6 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.sonar.api.server.ws.WebService.Param; import org.sonar.api.utils.System2; -import org.sonar.api.utils.log.LogTester; -import org.sonar.api.utils.log.LoggerLevel; import org.sonar.api.web.UserRole; import org.sonar.ce.task.taskprocessor.CeTaskProcessor; import org.sonar.core.util.Uuids; diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/WebIssueStorageTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/WebIssueStorageTest.java index 60b54d7aec1..3882011f0ef 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/WebIssueStorageTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/WebIssueStorageTest.java @@ -60,10 +60,8 @@ public class WebIssueStorageTest { private DbClient dbClient = db.getDbClient(); - private TestDefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); - private IssueIndexer issueIndexer = mock(IssueIndexer.class); - private WebIssueStorage underTest = new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(db.getDbClient(), defaultOrganizationProvider), issueIndexer, + private WebIssueStorage underTest = new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(db.getDbClient()), issueIndexer, new SequenceUuidFactory()); @Test diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/AddCommentActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/AddCommentActionTest.java index 2a13b1572e3..82401c7c01f 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/AddCommentActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/AddCommentActionTest.java @@ -90,12 +90,11 @@ public class AddCommentActionTest { private System2 system2 = mock(System2.class); private DbClient dbClient = dbTester.getDbClient(); - private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester); private IssueDbTester issueDbTester = new IssueDbTester(dbTester); private IssueIndexer issueIndexer = new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient), null); - private WebIssueStorage serverIssueStorage = new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), issueIndexer, + private WebIssueStorage serverIssueStorage = new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient), issueIndexer, new SequenceUuidFactory()); private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor(); private IssueUpdater issueUpdater = new IssueUpdater(dbClient, serverIssueStorage, mock(NotificationManager.class), issueChangePostProcessor, diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/AssignActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/AssignActionTest.java index 15d0099fbc0..21e4c55f65f 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/AssignActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/AssignActionTest.java @@ -85,14 +85,13 @@ public class AssignActionTest { private DbSession session = db.getSession(); private NotificationManager notificationManager = mock(NotificationManager.class); - private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); private IssueIndexer issueIndexer = new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient), null); private OperationResponseWriter responseWriter = mock(OperationResponseWriter.class); private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor(); private IssuesChangesNotificationSerializer issuesChangesSerializer = new IssuesChangesNotificationSerializer(); private AssignAction underTest = new AssignAction(system2, userSession, dbClient, new IssueFinder(dbClient, userSession), new IssueFieldsSetter(), new IssueUpdater(dbClient, - new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), issueIndexer, new SequenceUuidFactory()), + new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient), issueIndexer, new SequenceUuidFactory()), notificationManager, issueChangePostProcessor, issuesChangesSerializer), responseWriter); private WsActionTester ws = new WsActionTester(underTest); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java index 6517d62db71..12ad5307efb 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java @@ -119,7 +119,7 @@ public class BulkChangeActionTest { private IssueFieldsSetter issueFieldsSetter = new IssueFieldsSetter(); private IssueWorkflow issueWorkflow = new IssueWorkflow(new FunctionExecutor(issueFieldsSetter), issueFieldsSetter); private WebIssueStorage issueStorage = new WebIssueStorage(system2, dbClient, - new DefaultRuleFinder(dbClient, TestDefaultOrganizationProvider.from(db)), + new DefaultRuleFinder(dbClient), new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient), null), new SequenceUuidFactory()); private NotificationManager notificationManager = mock(NotificationManager.class); private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor(); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/DoTransitionActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/DoTransitionActionTest.java index 0cb1839f63d..6c8b5e83b7a 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/DoTransitionActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/DoTransitionActionTest.java @@ -92,7 +92,6 @@ public class DoTransitionActionTest { public UserSessionRule userSession = UserSessionRule.standalone(); private DbClient dbClient = db.getDbClient(); - private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); private IssueFieldsSetter updater = new IssueFieldsSetter(); private IssueWorkflow workflow = new IssueWorkflow(new FunctionExecutor(updater), updater); @@ -102,7 +101,7 @@ public class DoTransitionActionTest { private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor(); private IssuesChangesNotificationSerializer issuesChangesSerializer = new IssuesChangesNotificationSerializer(); private IssueUpdater issueUpdater = new IssueUpdater(dbClient, - new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), issueIndexer, new SequenceUuidFactory()), + new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient), issueIndexer, new SequenceUuidFactory()), mock(NotificationManager.class), issueChangePostProcessor, issuesChangesSerializer); private ArgumentCaptor preloadedSearchResponseDataCaptor = ArgumentCaptor.forClass(SearchResponseData.class); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/IssueUpdaterTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/IssueUpdaterTest.java index 3b7a1b32384..3fb4f2dd57f 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/IssueUpdaterTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/IssueUpdaterTest.java @@ -80,7 +80,6 @@ public class IssueUpdaterTest { public EsTester es = EsTester.create(); private DbClient dbClient = db.getDbClient(); - private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); private IssueFieldsSetter issueFieldsSetter = new IssueFieldsSetter(); private NotificationManager notificationManager = mock(NotificationManager.class); @@ -90,7 +89,7 @@ public class IssueUpdaterTest { private TestIssueChangePostProcessor issueChangePostProcessor = new TestIssueChangePostProcessor(); private IssuesChangesNotificationSerializer issuesChangesSerializer = new IssuesChangesNotificationSerializer(); private IssueUpdater underTest = new IssueUpdater(dbClient, - new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), issueIndexer, new SequenceUuidFactory()), notificationManager, + new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient), issueIndexer, new SequenceUuidFactory()), notificationManager, issueChangePostProcessor, issuesChangesSerializer); @Test diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetSeverityActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetSeverityActionTest.java index bfea798a895..ed97ae7ae08 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetSeverityActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetSeverityActionTest.java @@ -84,7 +84,6 @@ public class SetSeverityActionTest { private System2 system2 = mock(System2.class); private DbClient dbClient = dbTester.getDbClient(); - private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester); private IssueDbTester issueDbTester = new IssueDbTester(dbTester); private OperationResponseWriter responseWriter = mock(OperationResponseWriter.class); private ArgumentCaptor preloadedSearchResponseDataCaptor = ArgumentCaptor.forClass(SearchResponseData.class); @@ -94,7 +93,7 @@ public class SetSeverityActionTest { private IssuesChangesNotificationSerializer issuesChangesSerializer = new IssuesChangesNotificationSerializer(); private WsActionTester tester = new WsActionTester(new SetSeverityAction(userSession, dbClient, new IssueFinder(dbClient, userSession), new IssueFieldsSetter(), new IssueUpdater(dbClient, - new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), issueIndexer, new SequenceUuidFactory()), + new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient), issueIndexer, new SequenceUuidFactory()), mock(NotificationManager.class), issueChangePostProcessor, issuesChangesSerializer), responseWriter)); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetTagsActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetTagsActionTest.java index 0b4248eb5e7..a635cb52e93 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetTagsActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetTagsActionTest.java @@ -86,7 +86,6 @@ public class SetTagsActionTest { private System2 system2 = mock(System2.class); private DbClient dbClient = db.getDbClient(); - private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); private OperationResponseWriter responseWriter = mock(OperationResponseWriter.class); private IssueIndexer issueIndexer = new IssueIndexer(es.client(), dbClient, new IssueIteratorFactory(dbClient), null); private ArgumentCaptor preloadedSearchResponseDataCaptor = ArgumentCaptor.forClass(SearchResponseData.class); @@ -95,7 +94,7 @@ public class SetTagsActionTest { private WsActionTester ws = new WsActionTester(new SetTagsAction(userSession, dbClient, new IssueFinder(dbClient, userSession), new IssueFieldsSetter(), new IssueUpdater(dbClient, - new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), issueIndexer, new SequenceUuidFactory()), + new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient), issueIndexer, new SequenceUuidFactory()), mock(NotificationManager.class), issueChangePostProcessor, issuesChangesSerializer), responseWriter)); @Test diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetTypeActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetTypeActionTest.java index 0831387d7f5..68d6beeb565 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetTypeActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/issue/ws/SetTypeActionTest.java @@ -98,7 +98,6 @@ public class SetTypeActionTest { private DbClient dbClient = dbTester.getDbClient(); private IssueDbTester issueDbTester = new IssueDbTester(dbTester); - private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester); private OperationResponseWriter responseWriter = mock(OperationResponseWriter.class); private ArgumentCaptor preloadedSearchResponseDataCaptor = ArgumentCaptor.forClass(SearchResponseData.class); @@ -107,7 +106,7 @@ public class SetTypeActionTest { private IssuesChangesNotificationSerializer issuesChangesSerializer = new IssuesChangesNotificationSerializer(); private WsActionTester tester = new WsActionTester(new SetTypeAction(userSession, dbClient, new IssueFinder(dbClient, userSession), new IssueFieldsSetter(), new IssueUpdater(dbClient, - new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient, defaultOrganizationProvider), issueIndexer, new SequenceUuidFactory()), + new WebIssueStorage(system2, dbClient, new DefaultRuleFinder(dbClient), issueIndexer, new SequenceUuidFactory()), mock(NotificationManager.class), issueChangePostProcessor, issuesChangesSerializer), responseWriter, system2)); @Test diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/organization/ws/DeleteActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/organization/ws/DeleteActionTest.java index 92ea98c3a9f..bbf183aab1a 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/organization/ws/DeleteActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/organization/ws/DeleteActionTest.java @@ -45,7 +45,6 @@ import org.sonar.db.permission.template.PermissionTemplateDto; import org.sonar.db.project.ProjectDto; import org.sonar.db.qualitygate.QGateWithOrgDto; import org.sonar.db.qualitygate.QualityGateDto; -import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.user.GroupDto; import org.sonar.db.user.UserDto; import org.sonar.db.webhook.WebhookDto; @@ -163,7 +162,7 @@ public class DeleteActionTest { .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); - UserDto userReloaded = dbClient.userDao().selectByUuid(dbSession, user.getUuid()); + UserDto userReloaded = dbClient.userDao().selectByUuid(dbSession, user.getUuid()); assertThat(userReloaded.getHomepageType()).isNull(); assertThat(userReloaded.getHomepageParameter()).isNull(); } @@ -182,7 +181,7 @@ public class DeleteActionTest { .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); - UserDto userReloaded = dbClient.userDao().selectByUuid(dbSession, user.getUuid()); + UserDto userReloaded = dbClient.userDao().selectByUuid(dbSession, user.getUuid()); assertThat(userReloaded.getHomepageType()).isNull(); assertThat(userReloaded.getHomepageParameter()).isNull(); verify(projectLifeCycleListeners).onProjectsDeleted(ImmutableSet.of(Project.from(project))); @@ -446,23 +445,6 @@ public class DeleteActionTest { verify(projectLifeCycleListeners).onProjectsDeleted(emptySet()); } - @Test - public void delete_quality_profiles_of_specified_organization() { - OrganizationDto org = db.organizations().insert(); - OrganizationDto otherOrg = db.organizations().insert(); - QProfileDto profileInOrg = db.qualityProfiles().insert(org); - QProfileDto profileInOtherOrg = db.qualityProfiles().insert(otherOrg); - - logInAsAdministrator(org); - - sendRequest(org); - - verifyOrganizationDoesNotExist(org); - assertThat(db.select("select uuid as \"profileKey\" from org_qprofiles")) - .extracting(row -> (String) row.get("profileKey")) - .containsOnly(profileInOtherOrg.getKee()); - } - @Test public void delete_quality_gates() { QualityGateDto builtInQualityGate = db.qualityGates().insertBuiltInQualityGate(); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/organization/ws/OrganizationDeleterTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/organization/ws/OrganizationDeleterTest.java index ba75c70ec75..84cbd808736 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/organization/ws/OrganizationDeleterTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/organization/ws/OrganizationDeleterTest.java @@ -48,7 +48,6 @@ import org.sonar.db.permission.template.PermissionTemplateDto; import org.sonar.db.project.ProjectDto; import org.sonar.db.qualitygate.QGateWithOrgDto; import org.sonar.db.qualitygate.QualityGateDto; -import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.user.GroupDto; import org.sonar.db.user.UserDto; import org.sonar.db.webhook.WebhookDto; @@ -104,9 +103,7 @@ public class OrganizationDeleterTest { private final BillingValidationsProxy billingValidations = mock(BillingValidationsProxy.class); private final OrganizationDeleter underTest = new OrganizationDeleter(dbClient, componentCleanerService, userIndexer, - new QProfileFactoryImpl(dbClient, UuidFactoryFast.getInstance(), new System2(), new ActiveRuleIndexer(dbClient, esClient)), - projectLifeCycleListeners, - billingValidations); + new QProfileFactoryImpl(dbClient, UuidFactoryFast.getInstance(), new System2(), new ActiveRuleIndexer(dbClient, esClient)), projectLifeCycleListeners, billingValidations); @Test public void delete_specified_organization() { @@ -277,21 +274,6 @@ public class OrganizationDeleterTest { verify(projectLifeCycleListeners).onProjectsDeleted(emptySet()); } - @Test - public void delete_quality_profiles() { - OrganizationDto org = db.organizations().insert(); - OrganizationDto otherOrg = db.organizations().insert(); - QProfileDto profileInOrg = db.qualityProfiles().insert(org); - QProfileDto profileInOtherOrg = db.qualityProfiles().insert(otherOrg); - - underTest.delete(dbSession, org); - - verifyOrganizationDoesNotExist(org); - assertThat(db.select("select uuid as \"profileKey\" from org_qprofiles")) - .extracting(row -> (String) row.get("profileKey")) - .containsOnly(profileInOtherOrg.getKee()); - } - @Test public void delete_quality_gates() { QualityGateDto builtInQualityGate = db.qualityGates().insertBuiltInQualityGate(); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileBackuperImplTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileBackuperImplTest.java index 3dfb2835c2a..da9b72c4f17 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileBackuperImplTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileBackuperImplTest.java @@ -176,10 +176,9 @@ public class QProfileBackuperImplTest { @Test public void restore_backup_on_the_profile_specified_in_backup() { - OrganizationDto organization = db.organizations().insert(); Reader backup = new StringReader(EMPTY_BACKUP); - QProfileRestoreSummary summary = underTest.restore(db.getSession(), backup, organization, null); + QProfileRestoreSummary summary = underTest.restore(db.getSession(), backup, (String) null); assertThat(summary.getProfile().getName()).isEqualTo("foo"); assertThat(summary.getProfile().getLanguage()).isEqualTo("js"); @@ -190,10 +189,9 @@ public class QProfileBackuperImplTest { @Test public void restore_backup_on_profile_having_different_name() { - OrganizationDto organization = db.organizations().insert(); Reader backup = new StringReader(EMPTY_BACKUP); - QProfileRestoreSummary summary = underTest.restore(db.getSession(), backup, organization, "bar"); + QProfileRestoreSummary summary = underTest.restore(db.getSession(), backup, "bar"); assertThat(summary.getProfile().getName()).isEqualTo("bar"); assertThat(summary.getProfile().getLanguage()).isEqualTo("js"); @@ -205,7 +203,6 @@ public class QProfileBackuperImplTest { @Test public void restore_resets_the_activated_rules() { String ruleUuid = db.rules().insert(RuleKey.of("sonarjs", "s001")).getUuid(); - OrganizationDto organization = db.organizations().insert(); Reader backup = new StringReader("" + "foo" + "js" + @@ -221,7 +218,7 @@ public class QProfileBackuperImplTest { "" + ""); - underTest.restore(db.getSession(), backup, organization, null); + underTest.restore(db.getSession(), backup, (String) null); assertThat(reset.calledActivations).hasSize(1); RuleActivation activation = reset.calledActivations.get(0); @@ -234,7 +231,6 @@ public class QProfileBackuperImplTest { public void restore_custom_rule() { when(ruleCreator.create(any(), anyList())).then(invocation -> Collections.singletonList(db.rules().insert(RuleKey.of("sonarjs", "s001")).getKey())); - OrganizationDto organization = db.organizations().insert(); Reader backup = new StringReader("" + "" + "custom rule" + @@ -254,7 +250,7 @@ public class QProfileBackuperImplTest { "" + ""); - underTest.restore(db.getSession(), backup, organization, null); + underTest.restore(db.getSession(), backup, (String) null); assertThat(reset.calledActivations).hasSize(1); RuleActivation activation = reset.calledActivations.get(0); @@ -265,7 +261,6 @@ public class QProfileBackuperImplTest { @Test public void restore_skips_rule_without_template_key_and_db_definition() { String ruleUuid = db.rules().insert(RuleKey.of("sonarjs", "s001")).getUuid(); - OrganizationDto organization = db.organizations().insert(); Reader backup = new StringReader("" + "foo" + "js" + @@ -286,7 +281,7 @@ public class QProfileBackuperImplTest { "" + ""); - underTest.restore(db.getSession(), backup, organization, null); + underTest.restore(db.getSession(), backup, (String) null); assertThat(reset.calledActivations).hasSize(1); RuleActivation activation = reset.calledActivations.get(0); @@ -312,9 +307,8 @@ public class QProfileBackuperImplTest { @Test public void fail_to_restore_if_bad_xml_format() { - OrganizationDto organization = db.organizations().insert(); try { - underTest.restore(db.getSession(), new StringReader(""), organization, null); + underTest.restore(db.getSession(), new StringReader(""), (String) null); fail(); } catch (IllegalArgumentException e) { assertThat(e).hasMessage("Backup XML is not valid. Root element must be ."); @@ -324,9 +318,8 @@ public class QProfileBackuperImplTest { @Test public void fail_to_restore_if_not_xml_backup() { - OrganizationDto organization = db.organizations().insert(); try { - underTest.restore(db.getSession(), new StringReader("foo"), organization, null); + underTest.restore(db.getSession(), new StringReader("foo"), (String) null); fail(); } catch (IllegalArgumentException e) { assertThat(reset.calledProfile).isNull(); @@ -337,18 +330,16 @@ public class QProfileBackuperImplTest { public void fail_to_restore_if_xml_is_not_well_formed() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Fail to restore Quality profile backup, XML document is not well formed"); - OrganizationDto organization = db.organizations().insert(); String notWellFormedXml = "\"profil\"\"language\" r.setIsExternal(true)); - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); Reader backup = new StringReader("" + "foo" + "js" + @@ -377,7 +368,7 @@ public class QProfileBackuperImplTest { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("The quality profile cannot be restored as it contains rules from external rule engines: sonarjs:s001"); - underTest.restore(db.getSession(), backup, organization, null); + underTest.restore(db.getSession(), backup, (String) null); } private RuleDefinitionDto createRule() { @@ -385,7 +376,7 @@ public class QProfileBackuperImplTest { } private QProfileDto createProfile(String language) { - return db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(language)); + return db.qualityProfiles().insert(p -> p.setLanguage(language)); } private ActiveRuleDto activate(QProfileDto profile, RuleDefinitionDto rule) { @@ -415,20 +406,19 @@ public class QProfileBackuperImplTest { private static class DummyProfileFactory implements QProfileFactory { @Override - public QProfileDto getOrCreateCustom(DbSession dbSession, OrganizationDto organization, QProfileName key) { + public QProfileDto getOrCreateCustom(DbSession dbSession, QProfileName key) { return QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organization.getUuid()) .setLanguage(key.getLanguage()) .setName(key.getName()); } @Override - public QProfileDto checkAndCreateCustom(DbSession dbSession, OrganizationDto organization, QProfileName name) { + public QProfileDto checkAndCreateCustom(DbSession dbSession, QProfileName name) { throw new UnsupportedOperationException(); } @Override - public QProfileDto createCustom(DbSession dbSession, OrganizationDto organization, QProfileName name, @Nullable String parentKey) { + public QProfileDto createCustom(DbSession dbSession, QProfileName name, @Nullable String parentKey) { throw new UnsupportedOperationException(); } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileComparisonTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileComparisonTest.java index 2426ee15662..22be30aa93e 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileComparisonTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileComparisonTest.java @@ -86,8 +86,8 @@ public class QProfileComparisonTest { db.ruleDao().insertRuleParam(dbSession, xooRule1, RuleParamDto.createFor(xooRule1) .setName("min").setType(RuleParamType.INTEGER.type())); - left = QProfileTesting.newXooP1("org-123"); - right = QProfileTesting.newXooP2("org-123"); + left = QProfileTesting.newXooP1(); + right = QProfileTesting.newXooP2(); db.qualityProfileDao().insert(dbSession, left, right); dbSession.commit(); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileCopierTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileCopierTest.java index 067b8a2d797..8289f7ec088 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileCopierTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileCopierTest.java @@ -59,8 +59,7 @@ public class QProfileCopierTest { @Test public void create_target_profile_and_copy_rules() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto source = db.qualityProfiles().insert(organization); + QProfileDto source = db.qualityProfiles().insert(); QProfileDto target = underTest.copyToName(db.getSession(), source, "foo"); @@ -73,9 +72,8 @@ public class QProfileCopierTest { @Test public void create_target_profile_with_same_parent_than_source_profile() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto parent = db.qualityProfiles().insert(organization); - QProfileDto source = db.qualityProfiles().insert(organization, p -> p.setParentKee(parent.getKee())); + QProfileDto parent = db.qualityProfiles().insert(); + QProfileDto source = db.qualityProfiles().insert(p -> p.setParentKee(parent.getKee())); QProfileDto target = underTest.copyToName(db.getSession(), source, "foo"); @@ -88,8 +86,7 @@ public class QProfileCopierTest { @Test public void fail_to_copy_on_self() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto source = db.qualityProfiles().insert(organization); + QProfileDto source = db.qualityProfiles().insert(); try { underTest.copyToName(db.getSession(), source, source.getName()); @@ -102,9 +99,9 @@ public class QProfileCopierTest { @Test public void copy_to_existing_profile() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile1 = db.qualityProfiles().insert(organization); - QProfileDto profile2 = db.qualityProfiles().insert(organization, p -> p.setLanguage(profile1.getLanguage())); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile1 = db.qualityProfiles().insert(); + QProfileDto profile2 = db.qualityProfiles().insert(p -> p.setLanguage(profile1.getLanguage())); QProfileDto target = underTest.copyToName(db.getSession(), profile1, profile2.getName()); @@ -119,18 +116,17 @@ public class QProfileCopierTest { private QProfileDto createdProfile; @Override - public QProfileDto getOrCreateCustom(DbSession dbSession, OrganizationDto organization, QProfileName key) { + public QProfileDto getOrCreateCustom(DbSession dbSession, QProfileName key) { throw new UnsupportedOperationException(); } @Override - public QProfileDto checkAndCreateCustom(DbSession dbSession, OrganizationDto organization, QProfileName key) { + public QProfileDto checkAndCreateCustom(DbSession dbSession, QProfileName key) { throw new UnsupportedOperationException(); } - @Override public QProfileDto createCustom(DbSession dbSession, OrganizationDto organization, QProfileName key, @Nullable String parentKey) { + @Override public QProfileDto createCustom(DbSession dbSession, QProfileName key, @Nullable String parentKey) { createdProfile = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organization.getUuid()) .setLanguage(key.getLanguage()) .setParentKee(parentKey) .setName(key.getName()); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileExportersTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileExportersTest.java index f2363c41624..cfd30e45881 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileExportersTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileExportersTest.java @@ -68,8 +68,7 @@ public class QProfileExportersTest { @org.junit.Rule public DbTester db = DbTester.create(system2); - public DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); - private RuleFinder ruleFinder = new DefaultRuleFinder(db.getDbClient(), defaultOrganizationProvider); + private RuleFinder ruleFinder = new DefaultRuleFinder(db.getDbClient()); private ProfileExporter[] exporters = new ProfileExporter[] { new StandardExporter(), new XooExporter()}; private ProfileImporter[] importers = new ProfileImporter[] { @@ -131,7 +130,7 @@ public class QProfileExportersTest { @Test public void fail_to_import_xml_when_error_in_importer() { try { - underTest.importXml(QProfileTesting.newXooP1("org-123"), "XooProfileImporterWithError", toInputStream("", UTF_8), db.getSession()); + underTest.importXml(QProfileTesting.newXooP1(), "XooProfileImporterWithError", toInputStream("", UTF_8), db.getSession()); fail(); } catch (BadRequestException e) { assertThat(e).hasMessage("error!"); @@ -141,7 +140,7 @@ public class QProfileExportersTest { @Test public void fail_to_import_xml_on_unknown_importer() { try { - underTest.importXml(QProfileTesting.newXooP1("org-123"), "Unknown", toInputStream("", UTF_8), db.getSession()); + underTest.importXml(QProfileTesting.newXooP1(), "Unknown", toInputStream("", UTF_8), db.getSession()); fail(); } catch (BadRequestException e) { assertThat(e).hasMessage("No such importer : Unknown"); @@ -187,7 +186,7 @@ public class QProfileExportersTest { } private QProfileDto createProfile() { - return db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(rule.getLanguage())); + return db.qualityProfiles().insert(p -> p.setLanguage(rule.getLanguage())); } public static class XooExporter extends ProfileExporter { diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileFactoryImplTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileFactoryImplTest.java index 516df5641ad..e0da7a31952 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileFactoryImplTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileFactoryImplTest.java @@ -34,7 +34,6 @@ import org.sonar.core.util.SequenceUuidFactory; import org.sonar.core.util.Uuids; import org.sonar.db.DbSession; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.project.ProjectDto; import org.sonar.db.qualityprofile.ActiveRuleDto; import org.sonar.db.qualityprofile.ActiveRuleParamDto; @@ -81,61 +80,54 @@ public class QProfileFactoryImplTest { @Test public void checkAndCreateCustom() { - OrganizationDto organization = db.organizations().insert(); + QProfileDto profile = underTest.checkAndCreateCustom(dbSession, new QProfileName("xoo", "P1")); - QProfileDto profile = underTest.checkAndCreateCustom(dbSession, organization, new QProfileName("xoo", "P1")); - - assertThat(profile.getOrganizationUuid()).isEqualTo(organization.getUuid()); assertThat(profile.getKee()).isNotEmpty(); assertThat(profile.getName()).isEqualTo("P1"); assertThat(profile.getLanguage()).isEqualTo("xoo"); assertThat(profile.getRulesProfileUuid()).isNotNull(); assertThat(profile.isBuiltIn()).isFalse(); - QProfileDto reloaded = db.getDbClient().qualityProfileDao().selectByNameAndLanguage(dbSession, organization, profile.getName(), profile.getLanguage()); + QProfileDto reloaded = db.getDbClient().qualityProfileDao().selectByNameAndLanguage(dbSession, profile.getName(), profile.getLanguage()); assertEqual(profile, reloaded); - assertThat(db.getDbClient().qualityProfileDao().selectOrderedByOrganizationUuid(dbSession, organization)).extracting(QProfileDto::getKee).containsExactly(profile.getKee()); + assertThat(db.getDbClient().qualityProfileDao().selectAll(dbSession)).extracting(QProfileDto::getKee).containsExactly(profile.getKee()); } @Test public void checkAndCreateCustom_throws_BadRequestException_if_name_null() { QProfileName name = new QProfileName("xoo", null); - OrganizationDto organization = db.organizations().insert(); expectBadRequestException("quality_profiles.profile_name_cant_be_blank"); - underTest.checkAndCreateCustom(dbSession, organization, name); + underTest.checkAndCreateCustom(dbSession, name); } @Test public void checkAndCreateCustom_throws_BadRequestException_if_name_empty() { QProfileName name = new QProfileName("xoo", ""); - OrganizationDto organization = db.organizations().insert(); expectBadRequestException("quality_profiles.profile_name_cant_be_blank"); - underTest.checkAndCreateCustom(dbSession, organization, name); + underTest.checkAndCreateCustom(dbSession, name); } @Test public void checkAndCreateCustom_throws_BadRequestException_if_already_exists() { QProfileName name = new QProfileName("xoo", "P1"); - OrganizationDto organization = db.organizations().insert(); - underTest.checkAndCreateCustom(dbSession, organization, name); + underTest.checkAndCreateCustom(dbSession, name); dbSession.commit(); expectBadRequestException("Quality profile already exists: xoo/P1"); - underTest.checkAndCreateCustom(dbSession, organization, name); + underTest.checkAndCreateCustom(dbSession, name); } @Test public void delete_custom_profiles() { - OrganizationDto org = db.organizations().insert(); - QProfileDto profile1 = createCustomProfile(org); - QProfileDto profile2 = createCustomProfile(org); - QProfileDto profile3 = createCustomProfile(org); + QProfileDto profile1 = createCustomProfile(); + QProfileDto profile2 = createCustomProfile(); + QProfileDto profile3 = createCustomProfile(); underTest.delete(dbSession, asList(profile1, profile2)); @@ -147,8 +139,7 @@ public class QProfileFactoryImplTest { @Test public void delete_removes_custom_profile_marked_as_default() { - OrganizationDto org = db.organizations().insert(); - QProfileDto profile = createCustomProfile(org); + QProfileDto profile = createCustomProfile(); db.qualityProfiles().setAsDefault(profile); underTest.delete(dbSession, asList(profile)); @@ -158,9 +149,8 @@ public class QProfileFactoryImplTest { @Test public void delete_removes_custom_profile_from_project_associations() { - OrganizationDto org = db.organizations().insert(); - QProfileDto profile = createCustomProfile(org); - ProjectDto project = db.components().insertPrivateProjectDto(org); + QProfileDto profile = createCustomProfile(); + ProjectDto project = db.components().insertPrivateProjectDto(); db.qualityProfiles().associateWithProject(project, profile); underTest.delete(dbSession, asList(profile)); @@ -171,15 +161,14 @@ public class QProfileFactoryImplTest { @Test public void delete_builtin_profile() { RulesProfileDto builtInProfile = createBuiltInProfile(); - OrganizationDto org = db.organizations().insert(); - QProfileDto profile = associateBuiltInProfileToOrganization(builtInProfile, org); + QProfileDto profile = associateBuiltInProfile(builtInProfile); underTest.delete(dbSession, asList(profile)); verifyNoCallsActiveRuleIndexerDelete(); // remove only from org_qprofiles - assertThat(db.getDbClient().qualityProfileDao().selectOrderedByOrganizationUuid(dbSession, org)).isEmpty(); + assertThat(db.getDbClient().qualityProfileDao().selectAll(dbSession)).isEmpty(); assertThatRulesProfileExists(builtInProfile); } @@ -187,9 +176,8 @@ public class QProfileFactoryImplTest { @Test public void delete_builtin_profile_associated_to_project() { RulesProfileDto builtInProfile = createBuiltInProfile(); - OrganizationDto org = db.organizations().insert(); - ProjectDto project = db.components().insertPrivateProjectDto(org); - QProfileDto profile = associateBuiltInProfileToOrganization(builtInProfile, org); + ProjectDto project = db.components().insertPrivateProjectDto(); + QProfileDto profile = associateBuiltInProfile(builtInProfile); db.qualityProfiles().associateWithProject(project, profile); assertThat(db.getDbClient().qualityProfileDao().selectAssociatedToProjectAndLanguage(dbSession, project, profile.getLanguage())).isNotNull(); @@ -198,16 +186,15 @@ public class QProfileFactoryImplTest { verifyNoCallsActiveRuleIndexerDelete(); // remove only from org_qprofiles and project_qprofiles - assertThat(db.getDbClient().qualityProfileDao().selectOrderedByOrganizationUuid(dbSession, org)).isEmpty(); + assertThat(db.getDbClient().qualityProfileDao().selectAll(dbSession)).isEmpty(); assertThat(db.getDbClient().qualityProfileDao().selectAssociatedToProjectAndLanguage(dbSession, project, profile.getLanguage())).isNull(); assertThatRulesProfileExists(builtInProfile); } @Test - public void delete_builtin_profile_marked_as_default_on_organization() { + public void delete_builtin_profile_marked_as_default() { RulesProfileDto builtInProfile = createBuiltInProfile(); - OrganizationDto org = db.organizations().insert(); - QProfileDto profile = associateBuiltInProfileToOrganization(builtInProfile, org); + QProfileDto profile = associateBuiltInProfile(builtInProfile); db.qualityProfiles().setAsDefault(profile); underTest.delete(dbSession, asList(profile)); @@ -215,15 +202,14 @@ public class QProfileFactoryImplTest { verifyNoCallsActiveRuleIndexerDelete(); // remove only from org_qprofiles and default_qprofiles - assertThat(db.getDbClient().qualityProfileDao().selectOrderedByOrganizationUuid(dbSession, org)).isEmpty(); - assertThat(db.getDbClient().qualityProfileDao().selectDefaultProfile(dbSession, org, profile.getLanguage())).isNull(); + assertThat(db.getDbClient().qualityProfileDao().selectAll(dbSession)).isEmpty(); + assertThat(db.getDbClient().qualityProfileDao().selectDefaultProfile(dbSession, profile.getLanguage())).isNull(); assertThatRulesProfileExists(builtInProfile); } @Test public void delete_accepts_empty_list_of_keys() { - OrganizationDto org = db.organizations().insert(); - QProfileDto profile = createCustomProfile(org); + QProfileDto profile = createCustomProfile(); underTest.delete(dbSession, Collections.emptyList()); @@ -233,11 +219,10 @@ public class QProfileFactoryImplTest { @Test public void delete_removes_qprofile_edit_permissions() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); + QProfileDto profile = db.qualityProfiles().insert(); UserDto user = db.users().insertUser(); db.qualityProfiles().addUserPermission(profile, user); - GroupDto group = db.users().insertGroup(organization); + GroupDto group = db.users().insertGroup(); db.qualityProfiles().addGroupPermission(profile, group); underTest.delete(dbSession, asList(profile)); @@ -246,8 +231,8 @@ public class QProfileFactoryImplTest { assertThat(db.countRowsOfTable(dbSession, "qprofile_edit_groups")).isZero(); } - private QProfileDto createCustomProfile(OrganizationDto org) { - QProfileDto profile = db.qualityProfiles().insert(org, p -> p.setLanguage("xoo").setIsBuiltIn(false)); + private QProfileDto createCustomProfile() { + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage("xoo").setIsBuiltIn(false)); ActiveRuleDto activeRuleDto = db.qualityProfiles().activateRule(profile, rule); ActiveRuleParamDto activeRuleParam = new ActiveRuleParamDto() @@ -290,11 +275,11 @@ public class QProfileFactoryImplTest { return rulesProfileDto; } - private QProfileDto associateBuiltInProfileToOrganization(RulesProfileDto rulesProfile, OrganizationDto organization) { + private QProfileDto associateBuiltInProfile(RulesProfileDto rulesProfile) { OrgQProfileDto orgQProfileDto = new OrgQProfileDto() .setUuid(Uuids.createFast()) - .setRulesProfileUuid(rulesProfile.getUuid()) - .setOrganizationUuid(organization.getUuid()); + .setRulesProfileUuid(rulesProfile.getUuid()); + db.getDbClient().qualityProfileDao().insert(dbSession, orgQProfileDto); db.commit(); return QProfileDto.from(orgQProfileDto, rulesProfile); @@ -350,7 +335,6 @@ public class QProfileFactoryImplTest { } private static void assertEqual(QProfileDto p1, QProfileDto p2) { - assertThat(p2.getOrganizationUuid()).isEqualTo(p1.getOrganizationUuid()); assertThat(p2.getName()).isEqualTo(p1.getName()); assertThat(p2.getKee()).startsWith(p1.getKee()); assertThat(p2.getLanguage()).isEqualTo(p1.getLanguage()); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileResetImplTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileResetImplTest.java index b93f42d95e8..7254c4e7789 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileResetImplTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileResetImplTest.java @@ -65,7 +65,7 @@ public class QProfileResetImplTest { @Test public void reset() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(LANGUAGE)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(LANGUAGE)); RuleDefinitionDto existingRule = db.rules().insert(r -> r.setLanguage(LANGUAGE)); qProfileRules.activateAndCommit(db.getSession(), profile, singleton(RuleActivation.create(existingRule.getUuid()))); RuleDefinitionDto newRule = db.rules().insert(r -> r.setLanguage(LANGUAGE)); @@ -83,8 +83,8 @@ public class QProfileResetImplTest { @Test public void inherited_rules_are_not_disabled() { - QProfileDto parentProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(LANGUAGE)); - QProfileDto childProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(LANGUAGE)); + QProfileDto parentProfile = db.qualityProfiles().insert(p -> p.setLanguage(LANGUAGE)); + QProfileDto childProfile = db.qualityProfiles().insert(p -> p.setLanguage(LANGUAGE)); qProfileTree.setParentAndCommit(db.getSession(), childProfile, parentProfile); RuleDefinitionDto existingRule = db.rules().insert(r -> r.setLanguage(LANGUAGE)); qProfileRules.activateAndCommit(db.getSession(), parentProfile, singleton(RuleActivation.create(existingRule.getUuid()))); @@ -100,7 +100,7 @@ public class QProfileResetImplTest { @Test public void fail_when_profile_is_built_in() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(LANGUAGE).setIsBuiltIn(true)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(LANGUAGE).setIsBuiltIn(true)); RuleDefinitionDto defaultRule = db.rules().insert(r -> r.setLanguage(LANGUAGE)); expectedException.expect(IllegalArgumentException.class); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileRuleImplTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileRuleImplTest.java index 46b540966b0..8afc5b9adff 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileRuleImplTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileRuleImplTest.java @@ -327,7 +327,7 @@ public class QProfileRuleImplTest { @Test public void fail_to_activate_rule_if_profile_is_on_different_languages() { RuleDefinitionDto rule = createJavaRule(); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage("js")); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage("js")); RuleActivation activation = RuleActivation.create(rule.getUuid()); expectFailure("java rule " + rule.getKey() + " cannot be activated on js profile " + profile.getKee(), () -> activate(profile, activation)); @@ -710,7 +710,7 @@ public class QProfileRuleImplTest { int bulkSize = SearchOptions.MAX_PAGE_SIZE + 10 + new Random().nextInt(100); String language = randomAlphanumeric(10); String repositoryKey = randomAlphanumeric(10); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(language)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(language)); List rules = new ArrayList<>(); IntStream.rangeClosed(1, bulkSize).forEach( @@ -737,7 +737,7 @@ public class QProfileRuleImplTest { int bulkSize = SearchOptions.MAX_PAGE_SIZE + 10 + new Random().nextInt(100); String language = randomAlphanumeric(10); String repositoryKey = randomAlphanumeric(10); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(language)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(language)); List rules = new ArrayList<>(); IntStream.rangeClosed(1, bulkSize).forEach( @@ -851,7 +851,7 @@ public class QProfileRuleImplTest { @Test public void activation_fails_when_profile_is_built_in() { RuleDefinitionDto rule = createRule(); - QProfileDto builtInProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(rule.getLanguage()).setIsBuiltIn(true)); + QProfileDto builtInProfile = db.qualityProfiles().insert(p -> p.setLanguage(rule.getLanguage()).setIsBuiltIn(true)); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("The built-in profile " + builtInProfile.getName() + " is read-only and can't be updated"); @@ -873,11 +873,11 @@ public class QProfileRuleImplTest { } private QProfileDto createProfile(RuleDefinitionDto rule) { - return db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(rule.getLanguage())); + return db.qualityProfiles().insert(p -> p.setLanguage(rule.getLanguage())); } private QProfileDto createChildProfile(QProfileDto parent) { - return db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p + return db.qualityProfiles().insert(p -> p .setLanguage(parent.getLanguage()) .setParentKee(parent.getKee()) .setName("Child of " + parent.getName())); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileRulesImplTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileRulesImplTest.java index abfc7d442f9..6a5074a8827 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileRulesImplTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileRulesImplTest.java @@ -26,7 +26,6 @@ import org.junit.Test; import org.sonar.api.rule.Severity; import org.sonar.api.utils.System2; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.ActiveRuleDto; import org.sonar.db.qualityprofile.QProfileChangeDto; import org.sonar.db.qualityprofile.QProfileChangeQuery; @@ -62,8 +61,7 @@ public class QProfileRulesImplTest { @Test public void activate_one_rule() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto qProfile = db.qualityProfiles().insert(organization); + QProfileDto qProfile = db.qualityProfiles().insert(); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage(qProfile.getLanguage())); RuleActivation ruleActivation = RuleActivation.create(rule.getUuid(), Severity.CRITICAL, Collections.emptyMap()); @@ -78,8 +76,7 @@ public class QProfileRulesImplTest { public void active_rule_change() { UserDto user = db.users().insertUser(); userSession.logIn(user); - OrganizationDto organization = db.organizations().insert(); - QProfileDto qProfile = db.qualityProfiles().insert(organization); + QProfileDto qProfile = db.qualityProfiles().insert(); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage(qProfile.getLanguage())); RuleActivation ruleActivation = RuleActivation.create(rule.getUuid(), Severity.CRITICAL, Collections.emptyMap()); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileTesting.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileTesting.java index 4ad6d8c9109..3c2da445191 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileTesting.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileTesting.java @@ -19,7 +19,6 @@ */ package org.sonar.server.qualityprofile; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; /** @@ -40,11 +39,10 @@ public class QProfileTesting { * @deprecated provide organization as dto */ @Deprecated - public static QProfileDto newQProfileDto(String organizationUuid, QProfileName name, String key) { + public static QProfileDto newQProfileDto(QProfileName name, String key) { return new QProfileDto() .setKee(key) .setRulesProfileUuid("rp-" + key) - .setOrganizationUuid(organizationUuid) .setName(name.getName()) .setLanguage(name.getLanguage()); } @@ -53,44 +51,23 @@ public class QProfileTesting { * @deprecated provide organization as dto */ @Deprecated - public static QProfileDto newXooP1(String organizationUuid) { - return newQProfileDto(organizationUuid, XOO_P1_NAME, XOO_P1_KEY); + public static QProfileDto newXooP1() { + return newQProfileDto(XOO_P1_NAME, XOO_P1_KEY); } /** * @deprecated provide organization as dto */ @Deprecated - public static QProfileDto newXooP2(String organizationUuid) { - return newQProfileDto(organizationUuid, XOO_P2_NAME, XOO_P2_KEY); + public static QProfileDto newXooP2() { + return newQProfileDto(XOO_P2_NAME, XOO_P2_KEY); } /** * @deprecated provide organization as dto */ @Deprecated - public static QProfileDto newXooP3(String organizationUuid) { - return newQProfileDto(organizationUuid, XOO_P3_NAME, XOO_P3_KEY); - } - - public static QProfileDto newQProfileDto(OrganizationDto organization, QProfileName name, String uuid) { - return new QProfileDto() - .setKee(uuid) - .setRulesProfileUuid("rp-" + uuid) - .setOrganizationUuid(organization.getUuid()) - .setName(name.getName()) - .setLanguage(name.getLanguage()); - } - - public static QProfileDto newXooP1(OrganizationDto organization) { - return newQProfileDto(organization, XOO_P1_NAME, XOO_P1_KEY); - } - - public static QProfileDto newXooP2(OrganizationDto organization) { - return newQProfileDto(organization, XOO_P2_NAME, XOO_P2_KEY); - } - - public static QProfileDto newXooP3(OrganizationDto organization) { - return newQProfileDto(organization, XOO_P3_NAME, XOO_P3_KEY); + public static QProfileDto newXooP3() { + return newQProfileDto(XOO_P3_NAME, XOO_P3_KEY); } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileTreeImplTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileTreeImplTest.java index cae00247fe4..4b307e6d7d6 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileTreeImplTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/QProfileTreeImplTest.java @@ -198,11 +198,11 @@ public class QProfileTreeImplTest { } private QProfileDto createProfile(RuleDefinitionDto rule) { - return db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(rule.getLanguage())); + return db.qualityProfiles().insert(p -> p.setLanguage(rule.getLanguage())); } private QProfileDto createChildProfile(QProfileDto parent) { - return db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p + return db.qualityProfiles().insert(p -> p .setLanguage(parent.getLanguage()) .setParentKee(parent.getKee()) .setName("Child of " + parent.getName())); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesNotificationTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesNotificationTest.java index 570d404d63d..6887743b9ad 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesNotificationTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesNotificationTest.java @@ -42,7 +42,6 @@ import org.sonar.core.util.UuidFactoryFast; import org.sonar.core.util.stream.MoreCollectors; import org.sonar.db.DbClient; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.ActiveRuleDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.qualityprofile.RulesProfileDto; @@ -207,10 +206,9 @@ public class RegisterQualityProfilesNotificationTest { public void notification_does_not_include_inherited_profiles_when_rule_is_added() { String language = newLanguageKey(); RuleDefinitionDto newRule = db.rules().insert(r -> r.setLanguage(language)); - OrganizationDto organization = db.organizations().insert(); - QProfileDto builtInQProfileDto = insertProfile(organization, orgQProfile -> orgQProfile.setIsBuiltIn(true).setLanguage(language)); - QProfileDto childQProfileDto = insertProfile(organization, orgQProfile -> orgQProfile.setIsBuiltIn(false).setLanguage(language).setParentKee(builtInQProfileDto.getKee())); + QProfileDto builtInQProfileDto = insertProfile(orgQProfile -> orgQProfile.setIsBuiltIn(true).setLanguage(language)); + QProfileDto childQProfileDto = insertProfile(orgQProfile -> orgQProfile.setIsBuiltIn(false).setLanguage(language).setParentKee(builtInQProfileDto.getKee())); addPluginProfile(builtInQProfileDto, newRule); builtInQProfileRepositoryRule.initialize(); @@ -231,11 +229,10 @@ public class RegisterQualityProfilesNotificationTest { public void notification_does_not_include_inherited_profiled_when_rule_is_changed() { String language = newLanguageKey(); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage(language).setSeverity(Severity.MINOR)); - OrganizationDto organization = db.organizations().insert(); - QProfileDto builtInProfile = insertProfile(organization, orgQProfile -> orgQProfile.setIsBuiltIn(true).setLanguage(language)); + QProfileDto builtInProfile = insertProfile(orgQProfile -> orgQProfile.setIsBuiltIn(true).setLanguage(language)); db.qualityProfiles().activateRule(builtInProfile, rule, ar -> ar.setSeverity(Severity.MINOR)); - QProfileDto childProfile = insertProfile(organization, orgQProfile -> orgQProfile.setIsBuiltIn(false).setLanguage(language).setParentKee(builtInProfile.getKee())); + QProfileDto childProfile = insertProfile(orgQProfile -> orgQProfile.setIsBuiltIn(false).setLanguage(language).setParentKee(builtInProfile.getKee())); db.qualityProfiles().activateRule(childProfile, rule, ar -> ar.setInheritance(ActiveRuleDto.INHERITED).setSeverity(Severity.MINOR)); addPluginProfile(builtInProfile, rule); builtInQProfileRepositoryRule.initialize(); @@ -258,13 +255,10 @@ public class RegisterQualityProfilesNotificationTest { public void notification_does_not_include_inherited_profiles_when_rule_is_deactivated() { String language = newLanguageKey(); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage(language).setSeverity(Severity.MINOR)); - OrganizationDto organization = db.organizations().insert(); - QProfileDto builtInQProfileDto = insertProfile(organization, - orgQProfile -> orgQProfile.setIsBuiltIn(true).setLanguage(language)); + QProfileDto builtInQProfileDto = insertProfile(orgQProfile -> orgQProfile.setIsBuiltIn(true).setLanguage(language)); db.qualityProfiles().activateRule(builtInQProfileDto, rule); - QProfileDto childQProfileDto = insertProfile(organization, - orgQProfile -> orgQProfile.setIsBuiltIn(false).setLanguage(language).setParentKee(builtInQProfileDto.getKee())); + QProfileDto childQProfileDto = insertProfile(orgQProfile -> orgQProfile.setIsBuiltIn(false).setLanguage(language).setParentKee(builtInQProfileDto.getKee())); qProfileRules.activateAndCommit(db.getSession(), childQProfileDto, singleton(RuleActivation.create(rule.getUuid()))); db.commit(); @@ -353,8 +347,8 @@ public class RegisterQualityProfilesNotificationTest { db.commit(); } - private QProfileDto insertProfile(OrganizationDto organization, Consumer consumer) { - QProfileDto builtInQProfileDto = db.qualityProfiles().insert(organization, consumer); + private QProfileDto insertProfile(Consumer consumer) { + QProfileDto builtInQProfileDto = db.qualityProfiles().insert(consumer); db.commit(); return builtInQProfileDto; } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesTest.java index 6292b61fce3..043ccc73108 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/RegisterQualityProfilesTest.java @@ -31,11 +31,9 @@ import org.sonar.api.resources.Language; import org.sonar.api.utils.System2; import org.sonar.api.utils.log.LogTester; import org.sonar.api.utils.log.LoggerLevel; -import org.sonar.core.util.UuidFactoryFast; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.qualityprofile.RulesProfileDto; import org.sonar.db.rule.RuleDefinitionDto; @@ -67,7 +65,8 @@ public class RegisterQualityProfilesTest { private DbClient dbClient = db.getDbClient(); private DummyBuiltInQProfileInsert insert = new DummyBuiltInQProfileInsert(); private DummyBuiltInQProfileUpdate update = new DummyBuiltInQProfileUpdate(); - private RegisterQualityProfiles underTest = new RegisterQualityProfiles(builtInQProfileRepositoryRule, dbClient, insert, update, mock(BuiltInQualityProfilesUpdateListener.class), system2); + private RegisterQualityProfiles underTest = new RegisterQualityProfiles(builtInQProfileRepositoryRule, dbClient, insert, update, + mock(BuiltInQualityProfilesUpdateListener.class), system2); @Test public void start_fails_if_BuiltInQProfileRepository_has_not_been_initialized() { @@ -106,21 +105,15 @@ public class RegisterQualityProfilesTest { @Test public void rename_custom_outdated_profiles_if_same_name_than_built_in_profile() { - OrganizationDto org1 = db.organizations().insert(org -> org.setKey("org1")); - OrganizationDto org2 = db.organizations().insert(org -> org.setKey("org2")); - - QProfileDto outdatedProfileInOrg1 = db.qualityProfiles().insert(org1, p -> p.setIsBuiltIn(false) - .setLanguage(FOO_LANGUAGE.getKey()).setName("Sonar way")); - QProfileDto outdatedProfileInOrg2 = db.qualityProfiles().insert(org2, p -> p.setIsBuiltIn(false) + QProfileDto outdatedProfile = db.qualityProfiles().insert(p -> p.setIsBuiltIn(false) .setLanguage(FOO_LANGUAGE.getKey()).setName("Sonar way")); builtInQProfileRepositoryRule.add(FOO_LANGUAGE, "Sonar way", false); builtInQProfileRepositoryRule.initialize(); underTest.start(); - assertThat(selectPersistedName(outdatedProfileInOrg1)).isEqualTo("Sonar way (outdated copy)"); - assertThat(selectPersistedName(outdatedProfileInOrg2)).isEqualTo("Sonar way (outdated copy)"); - assertThat(logTester.logs(LoggerLevel.INFO)).contains("Rename Quality profiles [foo/Sonar way] to [Sonar way (outdated copy)] in 2 organizations"); + assertThat(selectPersistedName(outdatedProfile)).isEqualTo("Sonar way (outdated copy)"); + assertThat(logTester.logs(LoggerLevel.INFO)).contains("Rename Quality profiles [foo/Sonar way] to [Sonar way (outdated copy)]"); } @Test @@ -141,20 +134,16 @@ public class RegisterQualityProfilesTest { @Test public void update_default_built_in_quality_profile() { - String orgUuid = UuidFactoryFast.getInstance().create(); - RulesProfileDto ruleProfileWithoutRule = newRuleProfileDto(rp -> rp.setIsBuiltIn(true).setName("Sonar way").setLanguage(FOO_LANGUAGE.getKey())); RulesProfileDto ruleProfileWithOneRule = newRuleProfileDto(rp -> rp.setIsBuiltIn(true).setName("Sonar way 2").setLanguage(FOO_LANGUAGE.getKey())); QProfileDto qProfileWithoutRule = newQualityProfileDto() .setIsBuiltIn(true) .setLanguage(FOO_LANGUAGE.getKey()) - .setOrganizationUuid(orgUuid) .setRulesProfileUuid(ruleProfileWithoutRule.getUuid()); QProfileDto qProfileWithOneRule = newQualityProfileDto() .setIsBuiltIn(true) .setLanguage(FOO_LANGUAGE.getKey()) - .setOrganizationUuid(orgUuid) .setRulesProfileUuid(ruleProfileWithOneRule.getUuid()); db.qualityProfiles().insert(qProfileWithoutRule, qProfileWithOneRule); @@ -201,8 +190,6 @@ public class RegisterQualityProfilesTest { db.commit(); } - - private static class DummyBuiltInQProfileInsert implements BuiltInQProfileInsert { private final List callLogs = new ArrayList<>(); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ActivateRuleActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ActivateRuleActionTest.java index 87aa992a286..d329c1dcfed 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ActivateRuleActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ActivateRuleActionTest.java @@ -77,13 +77,11 @@ public class ActivateRuleActionTest { private WsActionTester ws = new WsActionTester(new ActivateRuleAction(dbClient, qProfileRules, userSession, wsSupport)); private OrganizationDto defaultOrganization; - private OrganizationDto organization; @Before public void before() { MockitoAnnotations.initMocks(this); defaultOrganization = db.getDefaultOrganization(); - organization = db.organizations().insert(); } @Test @@ -109,7 +107,7 @@ public class ActivateRuleActionTest { @Test public void fail_if_not_organization_quality_profile_administrator() { userSession.logIn(db.users().insertUser()); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); TestRequest request = ws.newRequest() .setMethod("POST") .setParam(PARAM_RULE, RuleTesting.newRule().getKey().toString()) @@ -124,7 +122,7 @@ public class ActivateRuleActionTest { public void fail_activate_if_built_in_profile() { userSession.logIn(db.users().insertUser()).addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganization); - QProfileDto qualityProfile = db.qualityProfiles().insert(defaultOrganization, profile -> profile.setIsBuiltIn(true).setName("Xoo profile").setLanguage("xoo")); + QProfileDto qualityProfile = db.qualityProfiles().insert(profile -> profile.setIsBuiltIn(true).setName("Xoo profile").setLanguage("xoo")); TestRequest request = ws.newRequest() .setMethod("POST") .setParam(PARAM_RULE, RuleTesting.newRule().getKey().toString()) @@ -139,7 +137,7 @@ public class ActivateRuleActionTest { @Test public void fail_activate_external_rule() { userSession.logIn(db.users().insertUser()).addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganization); - QProfileDto qualityProfile = db.qualityProfiles().insert(defaultOrganization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); RuleDefinitionDto rule = db.rules().insert(r -> r.setIsExternal(true)); TestRequest request = ws.newRequest() @@ -154,9 +152,9 @@ public class ActivateRuleActionTest { } @Test - public void activate_rule_in_default_organization() { + public void activate_rule() { userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganization); - QProfileDto qualityProfile = db.qualityProfiles().insert(defaultOrganization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); RuleDefinitionDto rule = db.rules().insert(RuleTesting.randomRuleKey()); TestRequest request = ws.newRequest() .setMethod("POST") @@ -180,37 +178,10 @@ public class ActivateRuleActionTest { assertThat(activation.isReset()).isFalse(); } - @Test - public void activate_rule_in_specific_organization() { - userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - RuleKey ruleKey = RuleTesting.randomRuleKey(); - String ruleUuid = db.rules().insert(ruleKey).getUuid(); - TestRequest request = ws.newRequest() - .setMethod("POST") - .setParam(PARAM_RULE, ruleKey.toString()) - .setParam(PARAM_KEY, qualityProfile.getKee()) - .setParam("severity", "BLOCKER") - .setParam("params", "key1=v1;key2=v2") - .setParam("reset", "false"); - - TestResponse response = request.execute(); - - assertThat(response.getStatus()).isEqualTo(HttpURLConnection.HTTP_NO_CONTENT); - verify(qProfileRules).activateAndCommit(any(DbSession.class), any(QProfileDto.class), ruleActivationCaptor.capture()); - - Collection activations = ruleActivationCaptor.getValue(); - assertThat(activations).hasSize(1); - RuleActivation activation = activations.iterator().next(); - assertThat(activation.getRuleUuid()).isEqualTo(ruleUuid); - assertThat(activation.getSeverity()).isEqualTo(Severity.BLOCKER); - assertThat(activation.isReset()).isFalse(); - } - @Test public void as_qprofile_editor() { UserDto user = db.users().insertUser(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); db.qualityProfiles().addUserPermission(qualityProfile, user); userSession.logIn(user); RuleKey ruleKey = RuleTesting.randomRuleKey(); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ActivateRulesActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ActivateRulesActionTest.java index 124ed1496d3..acf5ded08fb 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ActivateRulesActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ActivateRulesActionTest.java @@ -48,7 +48,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES; import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.UUID_SIZE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_TARGET_KEY; public class ActivateRulesActionTest { @@ -68,12 +67,10 @@ public class ActivateRulesActionTest { private WsActionTester ws = new WsActionTester(new ActivateRulesAction(ruleQueryFactory, userSession, qProfileRules, wsSupport, dbClient)); private OrganizationDto defaultOrganization; - private OrganizationDto organization; @Before public void before() { defaultOrganization = db.getDefaultOrganization(); - organization = db.organizations().insert(); } @Test @@ -102,7 +99,6 @@ public class ActivateRulesActionTest { "available_since", "activation", "severities", - "organization", "cwe", "owaspTop10", "sansTop25", @@ -111,12 +107,11 @@ public class ActivateRulesActionTest { @Test public void as_global_qprofile_admin() { - userSession.logIn(db.users().insertUser()).addPermission(ADMINISTER_QUALITY_PROFILES, organization); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + userSession.logIn(db.users().insertUser()).addPermission(ADMINISTER_QUALITY_PROFILES, defaultOrganization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_TARGET_KEY, qualityProfile.getKee()) .execute(); @@ -126,15 +121,14 @@ public class ActivateRulesActionTest { @Test public void as_qprofile_editor() { UserDto user = db.users().insertUser(); - GroupDto group = db.users().insertGroup(organization); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - db.organizations().addMember(organization, user); + GroupDto group = db.users().insertGroup(defaultOrganization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); + db.organizations().addMember(defaultOrganization, user); db.qualityProfiles().addGroupPermission(qualityProfile, group); userSession.logIn(user).setGroups(group); ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_TARGET_KEY, qualityProfile.getKee()) .execute(); @@ -155,7 +149,7 @@ public class ActivateRulesActionTest { @Test public void fail_if_built_in_profile() { userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, defaultOrganization); - QProfileDto qualityProfile = db.qualityProfiles().insert(defaultOrganization, p -> p.setIsBuiltIn(true)); + QProfileDto qualityProfile = db.qualityProfiles().insert(p -> p.setIsBuiltIn(true)); TestRequest request = ws.newRequest() .setMethod("POST") .setParam(PARAM_TARGET_KEY, qualityProfile.getKee()); @@ -168,7 +162,7 @@ public class ActivateRulesActionTest { @Test public void fail_if_not_enough_permission() { userSession.logIn(db.users().insertUser()); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); expectedException.expect(ForbiddenException.class); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/AddGroupActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/AddGroupActionTest.java index ad73a8f2b61..7693cb69701 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/AddGroupActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/AddGroupActionTest.java @@ -45,7 +45,6 @@ import static java.lang.String.format; import static org.assertj.core.api.Assertions.assertThat; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_GROUP; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class AddGroupActionTest { @@ -71,13 +70,13 @@ public class AddGroupActionTest { assertThat(def.key()).isEqualTo("add_group"); assertThat(def.isPost()).isTrue(); assertThat(def.isInternal()).isTrue(); - assertThat(def.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("organization", "qualityProfile", "language", "group"); + assertThat(def.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("qualityProfile", "language", "group"); } @Test public void add_group() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); @@ -85,7 +84,6 @@ public class AddGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(response.getStatus()).isEqualTo(204); @@ -94,8 +92,8 @@ public class AddGroupActionTest { @Test public void does_nothing_when_group_can_already_edit_profile() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); db.qualityProfiles().addGroupPermission(profile, group); assertThat(db.getDbClient().qProfileEditGroupsDao().exists(db.getSession(), profile, group)).isTrue(); @@ -105,7 +103,6 @@ public class AddGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(db.getDbClient().qProfileEditGroupsDao().exists(db.getSession(), profile, group)).isTrue(); @@ -113,8 +110,8 @@ public class AddGroupActionTest { @Test public void qp_administers_can_add_group() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); @@ -122,7 +119,6 @@ public class AddGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(db.getDbClient().qProfileEditGroupsDao().exists(db.getSession(), profile, group)).isTrue(); @@ -130,8 +126,8 @@ public class AddGroupActionTest { @Test public void can_add_group_with_user_edit_permission() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); UserDto userAllowedToEditProfile = db.users().insertUser(); db.qualityProfiles().addUserPermission(profile, userAllowedToEditProfile); @@ -141,7 +137,6 @@ public class AddGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(db.getDbClient().qProfileEditGroupsDao().exists(db.getSession(), profile, group)).isTrue(); @@ -149,8 +144,8 @@ public class AddGroupActionTest { @Test public void can_add_group_with_group_edit_permission() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); UserDto userAllowedToEditProfile = db.users().insertUser(); db.qualityProfiles().addGroupPermission(profile, group); @@ -160,7 +155,6 @@ public class AddGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(db.getDbClient().qProfileEditGroupsDao().exists(db.getSession(), profile, group)).isTrue(); @@ -169,7 +163,7 @@ public class AddGroupActionTest { @Test public void uses_default_organization_when_no_organization() { OrganizationDto organization = db.getDefaultOrganization(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); @@ -184,8 +178,8 @@ public class AddGroupActionTest { @Test public void fail_when_group_does_not_exist() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); @@ -195,90 +189,49 @@ public class AddGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, "unknown") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_qprofile_does_not_exist() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.getDefaultOrganization(); GroupDto group = db.users().insertGroup(organization); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name 'unknown' does not exist in organization '%s'", organization.getKey())); + expectedException.expectMessage("Quality Profile for language 'xoo' and name 'unknown' does not exist"); ws.newRequest() .setParam(PARAM_QUALITY_PROFILE, "unknown") .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .execute(); - } - - @Test - public void fail_when_qprofile_does_not_belong_to_organization() { - OrganizationDto organization = db.organizations().insert(); - GroupDto group = db.users().insertGroup(organization); - OrganizationDto anotherOrganization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(anotherOrganization, p -> p.setLanguage(XOO)); - userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); - - expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name '%s' does not exist in organization '%s'", profile.getName(), organization.getKey())); - - ws.newRequest() - .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .execute(); - } - - @Test - public void fail_when_group_does_not_belong_to_organization() { - OrganizationDto organization = db.organizations().insert(); - OrganizationDto anotherOrganization = db.organizations().insert(); - GroupDto group = db.users().insertGroup(anotherOrganization); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); - userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); - - expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("No group with name '%s' in organization '%s'", group.getName(), organization.getKey())); - - ws.newRequest() - .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_wrong_language() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("unknown")); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage("unknown")); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name '%s' does not exist in organization '%s'", profile.getName(), organization.getKey())); + expectedException.expectMessage(format("Quality Profile for language 'xoo' and name '%s' does not exist", profile.getName())); ws.newRequest() .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_qp_is_built_in() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.getDefaultOrganization(); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO).setIsBuiltIn(true)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO).setIsBuiltIn(true)); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(BadRequestException.class); @@ -288,14 +241,13 @@ public class AddGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_not_enough_permission() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn(db.users().insertUser()).addPermission(OrganizationPermission.ADMINISTER_QUALITY_GATES, organization); @@ -306,7 +258,6 @@ public class AddGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/AddProjectActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/AddProjectActionTest.java index aad58423dff..0856726284d 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/AddProjectActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/AddProjectActionTest.java @@ -74,22 +74,19 @@ public class AddProjectActionTest { // parameters assertThat(definition.params()).extracting(WebService.Param::key) - .containsExactlyInAnyOrder("qualityProfile", "project", "language", "organization"); + .containsExactlyInAnyOrder("qualityProfile", "project", "language"); WebService.Param project = definition.param("project"); assertThat(project.isRequired()).isTrue(); WebService.Param languageParam = definition.param("language"); assertThat(languageParam.possibleValues()).containsOnly(LANGUAGE_1, LANGUAGE_2); assertThat(languageParam.exampleValue()).isNull(); - WebService.Param organizationParam = definition.param("organization"); - assertThat(organizationParam.since()).isEqualTo("6.4"); - assertThat(organizationParam.isInternal()).isTrue(); } @Test - public void add_project_on_profile_of_default_organization() { - logInAsProfileAdmin(db.getDefaultOrganization()); + public void add_project_on_profile() { + logInAsProfileAdmin(); ProjectDto project = db.components().insertPrivateProjectDto(db.getDefaultOrganization()); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setLanguage("xoo")); + QProfileDto profile = db.qualityProfiles().insert(qp -> qp.setLanguage("xoo")); TestResponse response = call(project, profile); assertThat(response.getStatus()).isEqualTo(HttpURLConnection.HTTP_NO_CONTENT); @@ -97,70 +94,27 @@ public class AddProjectActionTest { assertProjectIsAssociatedToProfile(project, profile); } - @Test - public void add_project_on_profile_of_specified_organization() { - OrganizationDto org1 = db.organizations().insert(); - logInAsProfileAdmin(org1); - ProjectDto project = db.components().insertPrivateProjectDto(org1); - QProfileDto profile = db.qualityProfiles().insert(org1, p -> p.setLanguage(LANGUAGE_1)); - - TestResponse response = call(org1, project, profile); - assertThat(response.getStatus()).isEqualTo(HttpURLConnection.HTTP_NO_CONTENT); - - assertProjectIsAssociatedToProfile(project, profile); - } - @Test public void as_qprofile_editor() { - OrganizationDto organization = db.organizations().insert(); UserDto user = db.users().insertUser(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization, qp -> qp.setLanguage(LANGUAGE_1)); + QProfileDto qualityProfile = db.qualityProfiles().insert(qp -> qp.setLanguage(LANGUAGE_1)); db.qualityProfiles().addUserPermission(qualityProfile, user); - ProjectDto project = db.components().insertPrivateProjectDto(organization); + ProjectDto project = db.components().insertPrivateProjectDto(); userSession.logIn(user); - call(organization, project, qualityProfile); + call(project, qualityProfile); assertProjectIsAssociatedToProfile(project, qualityProfile); } - @Test - public void fail_if_profile_and_project_are_in_different_organizations() { - OrganizationDto org1 = db.organizations().insert(); - OrganizationDto org2 = db.organizations().insert(); - logInAsProfileAdmin(org2); - ProjectDto project = db.components().insertPrivateProjectDto(org1); - QProfileDto profileInOrg2 = db.qualityProfiles().insert(org2, p -> p.setLanguage(LANGUAGE_1)); - - expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage("Project and quality profile must have the same organization"); - - call(org2, project, profileInOrg2); - } - - @Test - public void fail_if_profile_is_not_found_in_specified_organization() { - OrganizationDto org1 = db.organizations().insert(); - OrganizationDto org2 = db.organizations().insert(); - logInAsProfileAdmin(org1); - ProjectDto project = db.components().insertPrivateProjectDto(org1); - QProfileDto profileInOrg2 = db.qualityProfiles().insert(org2, p -> p.setLanguage(LANGUAGE_1)); - - expectedException.expect(NotFoundException.class); - expectedException - .expectMessage("Quality Profile for language '" + LANGUAGE_1 + "' and name '" + profileInOrg2.getName() + "' does not exist in organization '" + org1.getKey() + "'"); - - call(org1, project, profileInOrg2); - } - @Test public void change_association_in_default_organization() { - logInAsProfileAdmin(db.getDefaultOrganization()); + logInAsProfileAdmin(); ProjectDto project = db.components().insertPrivateProjectDto(db.getDefaultOrganization()); // two profiles on same language - QProfileDto profile1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(LANGUAGE_1)); - QProfileDto profile2 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(LANGUAGE_1)); + QProfileDto profile1 = db.qualityProfiles().insert(p -> p.setLanguage(LANGUAGE_1)); + QProfileDto profile2 = db.qualityProfiles().insert(p -> p.setLanguage(LANGUAGE_1)); db.qualityProfiles().associateWithProject(project, profile1); call(project, profile2); @@ -171,11 +125,11 @@ public class AddProjectActionTest { @Test public void changing_association_does_not_change_other_language_associations() { - logInAsProfileAdmin(db.getDefaultOrganization()); + logInAsProfileAdmin(); ProjectDto project = db.components().insertPrivateProjectDto(db.getDefaultOrganization()); - QProfileDto profile1Language1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(LANGUAGE_1)); - QProfileDto profile2Language2 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(LANGUAGE_2)); - QProfileDto profile3Language1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(LANGUAGE_1)); + QProfileDto profile1Language1 = db.qualityProfiles().insert(p -> p.setLanguage(LANGUAGE_1)); + QProfileDto profile2Language2 = db.qualityProfiles().insert(p -> p.setLanguage(LANGUAGE_2)); + QProfileDto profile3Language1 = db.qualityProfiles().insert(p -> p.setLanguage(LANGUAGE_1)); db.qualityProfiles().associateWithProject(project, profile1Language1, profile2Language2); call(project, profile3Language1); @@ -187,7 +141,7 @@ public class AddProjectActionTest { @Test public void project_administrator_can_change_profile() { ProjectDto project = db.components().insertPrivateProjectDto(db.getDefaultOrganization()); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setLanguage("xoo")); + QProfileDto profile = db.qualityProfiles().insert(qp -> qp.setLanguage("xoo")); userSession.logIn(db.users().insertUser()).addProjectPermission(UserRole.ADMIN, project); call(project, profile); @@ -199,7 +153,7 @@ public class AddProjectActionTest { public void throw_ForbiddenException_if_not_project_nor_organization_administrator() { userSession.logIn(db.users().insertUser()); ProjectDto project = db.components().insertPrivateProjectDto(db.getDefaultOrganization()); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setLanguage("xoo")); + QProfileDto profile = db.qualityProfiles().insert(qp -> qp.setLanguage("xoo")); expectedException.expect(ForbiddenException.class); expectedException.expectMessage("Insufficient privileges"); @@ -211,7 +165,7 @@ public class AddProjectActionTest { public void throw_UnauthorizedException_if_not_logged_in() { userSession.anonymous(); ProjectDto project = db.components().insertPrivateProjectDto(db.getDefaultOrganization()); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto profile = db.qualityProfiles().insert(); expectedException.expect(UnauthorizedException.class); expectedException.expectMessage("Authentication is required"); @@ -221,8 +175,8 @@ public class AddProjectActionTest { @Test public void throw_NotFoundException_if_project_does_not_exist() { - logInAsProfileAdmin(db.getDefaultOrganization()); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization()); + logInAsProfileAdmin(); + QProfileDto profile = db.qualityProfiles().insert(); expectedException.expect(NotFoundException.class); expectedException.expectMessage("Project 'unknown' not found"); @@ -235,7 +189,7 @@ public class AddProjectActionTest { @Test public void throw_NotFoundException_if_profile_does_not_exist() { - logInAsProfileAdmin(db.getDefaultOrganization()); + logInAsProfileAdmin(); ComponentDto project = db.components().insertPrivateProject(db.getDefaultOrganization()); expectedException.expect(NotFoundException.class); @@ -250,11 +204,10 @@ public class AddProjectActionTest { @Test public void fail_when_using_branch_db_key() { - OrganizationDto organization = db.organizations().insert(); - ComponentDto project = db.components().insertPublicProject(organization); + ComponentDto project = db.components().insertPublicProject(); userSession.logIn(db.users().insertUser()).addProjectPermission(UserRole.ADMIN, project); ComponentDto branch = db.components().insertProjectBranch(project); - QProfileDto profile = db.qualityProfiles().insert(organization); + QProfileDto profile = db.qualityProfiles().insert(); expectedException.expect(NotFoundException.class); expectedException.expectMessage(format("Project '%s' not found", branch.getDbKey())); @@ -275,8 +228,8 @@ public class AddProjectActionTest { assertThat(loaded == null || !loaded.getKee().equals(profile.getKee())).isTrue(); } - private void logInAsProfileAdmin(OrganizationDto organization) { - userSession.logIn(db.users().insertUser()).addPermission(ADMINISTER_QUALITY_PROFILES, organization); + private void logInAsProfileAdmin() { + userSession.logIn(db.users().insertUser()).addPermission(ADMINISTER_QUALITY_PROFILES, db.getDefaultOrganization()); } private TestResponse call(ProjectDto project, QProfileDto qualityProfile) { diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/AddUserActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/AddUserActionTest.java index 13f75724031..be683637f66 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/AddUserActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/AddUserActionTest.java @@ -45,7 +45,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LOGIN; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class AddUserActionTest { @@ -71,13 +70,13 @@ public class AddUserActionTest { assertThat(def.key()).isEqualTo("add_user"); assertThat(def.isPost()).isTrue(); assertThat(def.isInternal()).isTrue(); - assertThat(def.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("organization", "qualityProfile", "language", "login"); + assertThat(def.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("qualityProfile", "language", "login"); } @Test public void add_user() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); @@ -86,7 +85,6 @@ public class AddUserActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(response.getStatus()).isEqualTo(204); @@ -95,8 +93,8 @@ public class AddUserActionTest { @Test public void does_nothing_when_user_can_already_edit_profile() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); db.qualityProfiles().addUserPermission(profile, user); @@ -107,7 +105,6 @@ public class AddUserActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(db.getDbClient().qProfileEditUsersDao().exists(db.getSession(), profile, user)).isTrue(); @@ -115,8 +112,8 @@ public class AddUserActionTest { @Test public void qp_administers_can_add_user() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); @@ -125,7 +122,6 @@ public class AddUserActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(db.getDbClient().qProfileEditUsersDao().exists(db.getSession(), profile, user)).isTrue(); @@ -133,8 +129,8 @@ public class AddUserActionTest { @Test public void qp_editors_can_add_user() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); UserDto userAllowedToEditProfile = db.users().insertUser(); @@ -145,7 +141,6 @@ public class AddUserActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(db.getDbClient().qProfileEditUsersDao().exists(db.getSession(), profile, user)).isTrue(); @@ -154,7 +149,7 @@ public class AddUserActionTest { @Test public void uses_default_organization_when_no_organization() { OrganizationDto organization = db.getDefaultOrganization(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); @@ -162,7 +157,7 @@ public class AddUserActionTest { ws.newRequest() .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_LOGIN, user.getLogin() ) + .setParam(PARAM_LOGIN, user.getLogin()) .execute(); assertThat(db.getDbClient().qProfileEditUsersDao().exists(db.getSession(), profile, user)).isTrue(); @@ -170,8 +165,8 @@ public class AddUserActionTest { @Test public void fail_when_user_does_not_exist() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); @@ -181,93 +176,50 @@ public class AddUserActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, "unknown") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_qprofile_does_not_exist() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name 'unknown' does not exist in organization '%s'", organization.getKey())); + expectedException.expectMessage("Quality Profile for language 'xoo' and name 'unknown' does not exist"); ws.newRequest() .setParam(PARAM_QUALITY_PROFILE, "unknown") .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .execute(); - } - - @Test - public void fail_when_qprofile_does_not_belong_to_organization() { - OrganizationDto organization = db.organizations().insert(); - UserDto user = db.users().insertUser(); - db.organizations().addMember(organization, user); - OrganizationDto anotherOrganization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(anotherOrganization, p -> p.setLanguage(XOO)); - userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); - - expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name '%s' does not exist in organization '%s'", profile.getName(), organization.getKey())); - - ws.newRequest() - .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_wrong_language() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("unknown")); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage("unknown")); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name '%s' does not exist in organization '%s'", profile.getName(), organization.getKey())); - - ws.newRequest() - .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .execute(); - } - - @Test - public void fail_when_user_is_not_member_of_organization() { - OrganizationDto organization = db.organizations().insert(); - OrganizationDto anotherOrganization = db.organizations().insert(); - UserDto user = db.users().insertUser(); - db.organizations().addMember(anotherOrganization, user); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); - userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); - - expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage(format("User '%s' is not member of organization '%s'", user.getLogin(), organization.getKey())); + expectedException.expectMessage(format("Quality Profile for language 'xoo' and name '%s' does not exist", profile.getName())); ws.newRequest() .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_qp_is_built_in() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO).setIsBuiltIn(true)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO).setIsBuiltIn(true)); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(BadRequestException.class); @@ -277,14 +229,13 @@ public class AddUserActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_not_enough_permission() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn(db.users().insertUser()).addPermission(OrganizationPermission.ADMINISTER_QUALITY_GATES, organization); @@ -295,7 +246,6 @@ public class AddUserActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/BackupActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/BackupActionTest.java index bbcd4447d9b..ff66282af44 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/BackupActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/BackupActionTest.java @@ -25,11 +25,7 @@ import org.sonar.api.resources.Languages; import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService.Param; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; -import org.sonar.db.user.UserDto; -import org.sonar.server.exceptions.ForbiddenException; -import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.language.LanguageTesting; import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.organization.TestDefaultOrganizationProvider; @@ -41,11 +37,8 @@ import org.sonar.server.ws.TestRequest; import org.sonar.server.ws.TestResponse; import org.sonar.server.ws.WsActionTester; -import static java.lang.String.format; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.sonar.db.organization.OrganizationDto.Subscription.FREE; -import static org.sonar.db.organization.OrganizationDto.Subscription.PAID; public class BackupActionTest { @@ -64,7 +57,7 @@ public class BackupActionTest { @Test public void returns_backup_of_profile_with_specified_key() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setLanguage("xoo")); + QProfileDto profile = db.qualityProfiles().insert(qp -> qp.setLanguage("xoo")); TestResponse response = tester.newRequest() .setParam("language", profile.getLanguage()) @@ -77,7 +70,7 @@ public class BackupActionTest { @Test public void returns_backup_of_profile_with_specified_name_on_default_organization() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(A_LANGUAGE)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(A_LANGUAGE)); TestResponse response = tester.newRequest() .setParam("language", profile.getLanguage()) @@ -86,78 +79,6 @@ public class BackupActionTest { assertThat(response.getInput()).isXmlEqualTo(xmlForProfileWithoutRules(profile)); } - @Test - public void returns_backup_of_profile_with_specified_name_and_organization() { - OrganizationDto org = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(org, p -> p.setLanguage(A_LANGUAGE)); - - TestResponse response = tester.newRequest() - .setParam("organization", org.getKey()) - .setParam("language", profile.getLanguage()) - .setParam("qualityProfile", profile.getName()) - .execute(); - assertThat(response.getInput()).isXmlEqualTo(xmlForProfileWithoutRules(profile)); - } - - @Test - public void returns_backup_of_profile_on_free_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(FREE)); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(A_LANGUAGE)); - - TestResponse response = tester.newRequest() - .setParam("organization", organization.getKey()) - .setParam("language", profile.getLanguage()) - .setParam("qualityProfile", profile.getName()) - .execute(); - - assertThat(response.getInput()).isXmlEqualTo(xmlForProfileWithoutRules(profile)); - } - - @Test - public void returns_backup_of_profile_on_paid_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(A_LANGUAGE)); - UserDto user = db.users().insertUser(); - userSession.logIn(user).addMembership(organization); - - TestResponse response = tester.newRequest() - .setParam("organization", organization.getKey()) - .setParam("language", profile.getLanguage()) - .setParam("qualityProfile", profile.getName()) - .execute(); - - assertThat(response.getInput()).isXmlEqualTo(xmlForProfileWithoutRules(profile)); - } - - @Test - public void throws_NotFoundException_if_specified_organization_does_not_exist() { - TestRequest request = tester.newRequest() - .setParam("organization", "the-missing-org") - .setParam("language", A_LANGUAGE) - .setParam("qualityProfile", "the-name"); - - assertThatThrownBy(request::execute) - .isInstanceOf(NotFoundException.class) - .hasMessage("No organization with key 'the-missing-org'"); - } - - @Test - public void throws_NotFoundException_if_profile_name_exists_but_in_another_organization() { - OrganizationDto org1 = db.organizations().insert(); - QProfileDto profileInOrg1 = db.qualityProfiles().insert(org1, p -> p.setLanguage(A_LANGUAGE)); - OrganizationDto org2 = db.organizations().insert(); - QProfileDto profileInOrg2 = db.qualityProfiles().insert(org2, p -> p.setLanguage(A_LANGUAGE)); - - TestRequest request = tester.newRequest() - .setParam("organization", org2.getKey()) - .setParam("language", profileInOrg1.getLanguage()) - .setParam("qualityProfile", profileInOrg1.getName()); - - assertThatThrownBy(request::execute) - .isInstanceOf(NotFoundException.class) - .hasMessage("Quality Profile for language 'xoo' and name '" + profileInOrg1.getName() + "' does not exist in organization '" + org2.getKey() + "'"); - } - @Test public void throws_IAE_if_profile_reference_is_not_set() { TestRequest request = tester.newRequest(); @@ -166,22 +87,6 @@ public class BackupActionTest { .isInstanceOf(IllegalArgumentException.class); } - @Test - public void fail_on_paid_organization_when_not_member() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(A_LANGUAGE)); - userSession.logIn(); - - TestRequest request = tester.newRequest() - .setParam("organization", organization.getKey()) - .setParam("language", profile.getLanguage()) - .setParam("qualityProfile", profile.getName()); - - assertThatThrownBy(request::execute) - .isInstanceOf(ForbiddenException.class) - .hasMessage(format("You're not member of organization '%s'", organization.getKey())); - } - @Test public void test_definition() { WebService.Action definition = tester.getDef(); @@ -192,11 +97,9 @@ public class BackupActionTest { assertThat(definition.isPost()).isFalse(); // parameters - assertThat(definition.params()).extracting(Param::key).containsExactlyInAnyOrder("organization", "qualityProfile", "language"); + assertThat(definition.params()).extracting(Param::key).containsExactlyInAnyOrder("qualityProfile", "language"); Param language = definition.param("language"); assertThat(language.deprecatedSince()).isNullOrEmpty(); - Param orgParam = definition.param("organization"); - assertThat(orgParam.since()).isEqualTo("6.4"); } private static String xmlForProfileWithoutRules(QProfileDto profile) { diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ChangeParentActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ChangeParentActionTest.java index 49e5e52cade..6521e78b8f7 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ChangeParentActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ChangeParentActionTest.java @@ -90,7 +90,7 @@ public class ChangeParentActionTest { private RuleIndexer ruleIndexer; private ActiveRuleIndexer activeRuleIndexer; private WsActionTester ws; - private OrganizationDto organization; + private OrganizationDto defaultOrganization; private Language language = LanguageTesting.newLanguage(randomAlphanumeric(20)); private String ruleRepository = randomAlphanumeric(5); private QProfileTreeImpl qProfileTree; @@ -117,8 +117,8 @@ public class ChangeParentActionTest { userSession); ws = new WsActionTester(underTest); - organization = db.organizations().insert(); - userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization.getUuid()); + defaultOrganization = db.getDefaultOrganization(); + userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, defaultOrganization.getUuid()); } @Test @@ -126,8 +126,7 @@ public class ChangeParentActionTest { WebService.Action definition = ws.getDef(); assertThat(definition.isPost()).isTrue(); assertThat(definition.params()).extracting(Param::key).containsExactlyInAnyOrder( - "organization", "qualityProfile", "language", "parentQualityProfile"); - assertThat(definition.param("organization").since()).isEqualTo("6.4"); + "qualityProfile", "language", "parentQualityProfile"); } @Test @@ -145,7 +144,7 @@ public class ChangeParentActionTest { // Set parent ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) + .setParam(PARAM_ORGANIZATION, defaultOrganization.getKey()) .setParam(PARAM_LANGUAGE, child.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, child.getName()) .setParam(PARAM_PARENT_QUALITY_PROFILE, parent1.getName()) @@ -178,7 +177,7 @@ public class ChangeParentActionTest { // Set parent 2 through WS ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) + .setParam(PARAM_ORGANIZATION, defaultOrganization.getKey()) .setParam(PARAM_LANGUAGE, child.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, child.getName()) .setParam(PARAM_PARENT_QUALITY_PROFILE, parent2.getName()) @@ -208,7 +207,7 @@ public class ChangeParentActionTest { // Remove parent through WS ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) + .setParam(PARAM_ORGANIZATION, defaultOrganization.getKey()) .setParam(PARAM_LANGUAGE, child.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, child.getName()) .execute(); @@ -234,15 +233,15 @@ public class ChangeParentActionTest { assertThat(dbClient.activeRuleDao().selectByProfileUuid(dbSession, child.getKee())).isEmpty(); - System.out.println("org uuid: " + organization.getUuid()); - System.out.println("org key: " + organization.getKey()); + System.out.println("org uuid: " + defaultOrganization.getUuid()); + System.out.println("org key: " + defaultOrganization.getKey()); // 1. Set parent 1 ws.newRequest() .setMethod("POST") .setParam(PARAM_LANGUAGE, child.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, child.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) + .setParam(PARAM_ORGANIZATION, defaultOrganization.getKey()) .setParam(PARAM_PARENT_QUALITY_PROFILE, parent1.getName()) .execute(); @@ -257,7 +256,7 @@ public class ChangeParentActionTest { .setMethod("POST") .setParam(PARAM_LANGUAGE, child.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, child.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) + .setParam(PARAM_ORGANIZATION, defaultOrganization.getKey()) .setParam(QualityProfileWsParameters.PARAM_PARENT_QUALITY_PROFILE, parent2.getName()) .execute(); @@ -271,7 +270,7 @@ public class ChangeParentActionTest { .setMethod("POST") .setParam(PARAM_LANGUAGE, child.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, child.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) + .setParam(PARAM_ORGANIZATION, defaultOrganization.getKey()) .setParam(QualityProfileWsParameters.PARAM_PARENT_QUALITY_PROFILE, "") .execute(); @@ -299,7 +298,7 @@ public class ChangeParentActionTest { // Remove parent ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) + .setParam(PARAM_ORGANIZATION, defaultOrganization.getKey()) .setParam(PARAM_LANGUAGE, child.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, child.getName()) .setParam(PARAM_PARENT_QUALITY_PROFILE, "") @@ -330,7 +329,7 @@ public class ChangeParentActionTest { ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) + .setParam(PARAM_ORGANIZATION, defaultOrganization.getKey()) .setParam(PARAM_LANGUAGE, child.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, child.getName()) .setParam(PARAM_PARENT_QUALITY_PROFILE, parent2.getName()) @@ -345,7 +344,7 @@ public class ChangeParentActionTest { @Test public void fail_if_built_in_profile() { - QProfileDto child = db.qualityProfiles().insert(organization, p -> p + QProfileDto child = db.qualityProfiles().insert(p -> p .setLanguage(language.getKey()) .setIsBuiltIn(true)); @@ -354,7 +353,7 @@ public class ChangeParentActionTest { TestRequest request = ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) + .setParam(PARAM_ORGANIZATION, defaultOrganization.getKey()) .setParam(PARAM_LANGUAGE, child.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, child.getName()) .setParam(PARAM_PARENT_QUALITY_PROFILE, "palap"); @@ -372,25 +371,7 @@ public class ChangeParentActionTest { TestRequest request = ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .setParam(PARAM_LANGUAGE, child.getLanguage()) - .setParam(PARAM_QUALITY_PROFILE, child.getName()); - - expectedException.expect(ForbiddenException.class); - expectedException.expectMessage("Insufficient privileges"); - request.execute(); - } - - @Test - public void fail_if_missing_permission_for_this_organization() { - OrganizationDto organization2 = db.organizations().insert(); - userSession.logIn(db.users().insertUser()).addPermission(ADMINISTER_QUALITY_PROFILES, organization2.getUuid()); - - QProfileDto child = createProfile(); - - TestRequest request = ws.newRequest() - .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) + .setParam(PARAM_ORGANIZATION, defaultOrganization.getKey()) .setParam(PARAM_LANGUAGE, child.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, child.getName()); @@ -401,7 +382,6 @@ public class ChangeParentActionTest { private QProfileDto createProfile() { QProfileDto profile = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organization.getUuid()) .setLanguage(language.getKey()); dbClient.qualityProfileDao().insert(dbSession, profile); dbSession.commit(); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ChangelogActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ChangelogActionTest.java index 8e0dba6bee0..3c38e5aeed5 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ChangelogActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ChangelogActionTest.java @@ -33,25 +33,19 @@ import org.sonar.api.rule.RuleKey; import org.sonar.api.server.ws.WebService; import org.sonar.api.utils.DateUtils; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileChangeDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.user.UserDto; -import org.sonar.server.exceptions.ForbiddenException; -import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.organization.TestDefaultOrganizationProvider; import org.sonar.server.qualityprofile.ActiveRuleChange; import org.sonar.server.qualityprofile.ActiveRuleInheritance; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsActionTester; -import static java.lang.String.format; import static org.assertj.core.api.Assertions.assertThat; -import static org.sonar.db.organization.OrganizationDto.Subscription.PAID; import static org.sonar.test.JsonAssert.assertJson; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_SINCE; @@ -69,13 +63,11 @@ public class ChangelogActionTest { public ExpectedException expectedException = ExpectedException.none(); private QProfileWsSupport wsSupport = new QProfileWsSupport(db.getDbClient(), userSession, TestDefaultOrganizationProvider.from(db)); - private WsActionTester ws = new WsActionTester( - new ChangelogAction(wsSupport, new Languages(), db.getDbClient())); + private WsActionTester ws = new WsActionTester(new ChangelogAction(wsSupport, new Languages(), db.getDbClient())); @Test public void return_change_with_all_fields() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); + QProfileDto profile = db.qualityProfiles().insert(); UserDto user = db.users().insertUser(); RuleDefinitionDto rule = db.rules().insert(RuleKey.of("java", "S001")); insertChange(profile, ActiveRuleChange.Type.ACTIVATED, user, ImmutableMap.of( @@ -88,7 +80,6 @@ public class ChangelogActionTest { String response = ws.newRequest() .setParam(PARAM_LANGUAGE, profile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute() .getInput(); @@ -116,8 +107,7 @@ public class ChangelogActionTest { @Test public void find_changelog_by_profile_key() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); + QProfileDto profile = db.qualityProfiles().insert(); RuleDefinitionDto rule = db.rules().insert(); UserDto user = db.users().insertUser(); insertChange(profile, ActiveRuleChange.Type.ACTIVATED, user, @@ -128,7 +118,6 @@ public class ChangelogActionTest { String response = ws.newRequest() .setParam(PARAM_LANGUAGE, profile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute() .getInput(); @@ -150,7 +139,7 @@ public class ChangelogActionTest { @Test public void find_changelog_by_language_and_name() { - QProfileDto qualityProfile = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto qualityProfile = db.qualityProfiles().insert(); RuleDefinitionDto rule = db.rules().insert(); UserDto user = db.users().insertUser(); insertChange(qualityProfile, ActiveRuleChange.Type.ACTIVATED, user, @@ -182,8 +171,7 @@ public class ChangelogActionTest { @Test public void find_changelog_by_organization_and_language_and_name() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); RuleDefinitionDto rule = db.rules().insert(); UserDto user = db.users().insertUser(); insertChange(qualityProfile, ActiveRuleChange.Type.ACTIVATED, user, @@ -194,7 +182,6 @@ public class ChangelogActionTest { String response = ws.newRequest() .setParam(PARAM_LANGUAGE, qualityProfile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, qualityProfile.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute() .getInput(); @@ -216,13 +203,11 @@ public class ChangelogActionTest { @Test public void changelog_empty() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); String response = ws.newRequest() .setParam(PARAM_LANGUAGE, qualityProfile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, qualityProfile.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute() .getInput(); @@ -231,8 +216,7 @@ public class ChangelogActionTest { @Test public void changelog_filter_by_since() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); system2.setNow(DateUtils.parseDateTime("2011-04-25T01:15:42+0100").getTime()); RuleDefinitionDto rule = db.rules().insert(); UserDto user = db.users().insertUser(); @@ -244,7 +228,6 @@ public class ChangelogActionTest { assertJson(ws.newRequest() .setParam(PARAM_LANGUAGE, qualityProfile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, qualityProfile.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_SINCE, "2011-04-25T01:15:42+0100") .execute() .getInput()).isSimilarTo("{\n" + @@ -262,7 +245,6 @@ public class ChangelogActionTest { assertJson(ws.newRequest() .setParam(PARAM_LANGUAGE, qualityProfile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, qualityProfile.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_SINCE, "2011-04-25T01:15:43+0100") .execute() .getInput()).isSimilarTo("{\n" + @@ -272,8 +254,7 @@ public class ChangelogActionTest { @Test public void sort_changelog_events_in_reverse_chronological_order() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); + QProfileDto profile = db.qualityProfiles().insert(); system2.setNow(DateUtils.parseDateTime("2011-04-25T01:15:42+0100").getTime()); RuleDefinitionDto rule1 = db.rules().insert(); insertChange(profile, ActiveRuleChange.Type.ACTIVATED, null, @@ -289,7 +270,6 @@ public class ChangelogActionTest { String response = ws.newRequest() .setParam(PARAM_LANGUAGE, profile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute() .getInput(); @@ -318,8 +298,7 @@ public class ChangelogActionTest { @Test public void changelog_on_no_more_existing_rule() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); UserDto user = db.users().insertUser(); insertChange(qualityProfile, ActiveRuleChange.Type.ACTIVATED, user, ImmutableMap.of("ruleUuid", "123")); @@ -327,7 +306,6 @@ public class ChangelogActionTest { String response = ws.newRequest() .setParam(PARAM_LANGUAGE, qualityProfile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, qualityProfile.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute() .getInput(); @@ -345,8 +323,7 @@ public class ChangelogActionTest { @Test public void changelog_on_no_more_existing_user() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); RuleDefinitionDto rule = db.rules().insert(); insertChange(c -> c.setRulesProfileUuid(qualityProfile.getRulesProfileUuid()) .setUserUuid("UNKNOWN") @@ -356,7 +333,6 @@ public class ChangelogActionTest { String response = ws.newRequest() .setParam(PARAM_LANGUAGE, qualityProfile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, qualityProfile.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute() .getInput(); @@ -374,74 +350,9 @@ public class ChangelogActionTest { assertThat(response).doesNotContain("authorLogin", "authorName"); } - @Test - public void changelog_on_paid_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - UserDto user = db.users().insertUser(); - userSession.logIn(user).addMembership(organization); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - RuleDefinitionDto rule = db.rules().insert(); - insertChange(qualityProfile, ActiveRuleChange.Type.ACTIVATED, db.users().insertUser(), - ImmutableMap.of( - "ruleUuid", rule.getUuid(), - "severity", "MINOR")); - - String response = ws.newRequest() - .setParam(PARAM_LANGUAGE, qualityProfile.getLanguage()) - .setParam(PARAM_QUALITY_PROFILE, qualityProfile.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .execute() - .getInput(); - - assertJson(response).isSimilarTo("{\n" + - " \"events\": [\n" + - " {\n" + - " \"ruleKey\": \"" + rule.getKey() + "\",\n" + - " }\n" + - " ]\n" + - "}"); - } - - @Test - public void do_not_find_changelog_by_wrong_organization_and_language_and_name() { - OrganizationDto organization1 = db.organizations().insert(); - OrganizationDto organization2 = db.organizations().insert(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization1); - RuleDefinitionDto rule = db.rules().insert(); - UserDto user = db.users().insertUser(); - insertChange(qualityProfile, ActiveRuleChange.Type.ACTIVATED, user, - ImmutableMap.of( - "ruleUuid", rule.getUuid(), - "severity", "MINOR")); - - expectedException.expect(NotFoundException.class); - - ws.newRequest() - .setParam(PARAM_LANGUAGE, qualityProfile.getLanguage()) - .setParam(PARAM_QUALITY_PROFILE, qualityProfile.getName()) - .setParam(PARAM_ORGANIZATION, organization2.getKey()) - .execute(); - } - - @Test - public void fail_on_paid_organization_when_not_member() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - - expectedException.expect(ForbiddenException.class); - expectedException.expectMessage(format("You're not member of organization '%s'", organization.getKey())); - - ws.newRequest() - .setParam(PARAM_LANGUAGE, qualityProfile.getLanguage()) - .setParam(PARAM_QUALITY_PROFILE, qualityProfile.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .execute(); - } - @Test public void example() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization); + QProfileDto profile = db.qualityProfiles().insert(); String profileUuid = profile.getRulesProfileUuid(); system2.setNow(DateUtils.parseDateTime("2015-02-23T17:58:39+0100").getTime()); @@ -472,7 +383,6 @@ public class ChangelogActionTest { .setMethod("GET") .setParam(PARAM_LANGUAGE, profile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam("ps", "10") .execute() .getInput(); @@ -487,7 +397,7 @@ public class ChangelogActionTest { assertThat(definition.isPost()).isFalse(); assertThat(definition.responseExampleAsString()).isNotEmpty(); assertThat(definition.params()).extracting(WebService.Param::key) - .containsExactlyInAnyOrder("qualityProfile", "language", "organization", "since", "to", "p", "ps"); + .containsExactlyInAnyOrder("qualityProfile", "language", "since", "to", "p", "ps"); WebService.Param profileName = definition.param("qualityProfile"); assertThat(profileName.deprecatedSince()).isNullOrEmpty(); WebService.Param language = definition.param("language"); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/CompareActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/CompareActionTest.java index 00f8baabc10..a9011d95c0c 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/CompareActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/CompareActionTest.java @@ -33,28 +33,22 @@ import org.sonar.core.util.Uuids; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.ActiveRuleDto; import org.sonar.db.qualityprofile.ActiveRuleParamDto; import org.sonar.db.qualityprofile.QProfileDto; -import org.sonar.db.qualityprofile.QualityProfileTesting; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleDto.Scope; import org.sonar.db.rule.RuleParamDto; import org.sonar.db.rule.RuleRepositoryDto; -import org.sonar.db.user.UserDto; -import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.language.LanguageTesting; import org.sonar.server.organization.TestDefaultOrganizationProvider; import org.sonar.server.qualityprofile.QProfileComparison; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsActionTester; -import static java.lang.String.format; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; -import static org.sonar.db.organization.OrganizationDto.Subscription.PAID; public class CompareActionTest { @@ -149,20 +143,6 @@ public class CompareActionTest { .execute().assertJson(this.getClass(), "compare_param_on_right.json"); } - @Test - public void do_not_fail_to_compare_on_paid_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto left = db.qualityProfiles().insert(organization); - QProfileDto right = db.qualityProfiles().insert(organization); - UserDto user = db.users().insertUser(); - userSession.logIn(user).addMembership(organization); - - ws.newRequest() - .setParam("leftKey", left.getKee()) - .setParam("rightKey", right.getKee()) - .execute(); - } - @Test(expected = IllegalArgumentException.class) public void fail_on_missing_left_param() { ws.newRequest() @@ -195,36 +175,6 @@ public class CompareActionTest { .execute(); } - @Test - public void fail_to_compare_quality_profiles_from_different_organizations() { - QProfileDto left = QualityProfileTesting.newQualityProfileDto(); - QProfileDto right = QualityProfileTesting.newQualityProfileDto(); - db.qualityProfiles().insert(left, right); - - expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage("Cannot compare quality profiles of different organizations."); - - ws.newRequest() - .setParam("leftKey", left.getKee()) - .setParam("rightKey", right.getKee()) - .execute(); - } - - @Test - public void fail_on_paid_organization_when_not_member() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto left = db.qualityProfiles().insert(organization); - QProfileDto right = db.qualityProfiles().insert(organization); - - expectedException.expect(ForbiddenException.class); - expectedException.expectMessage(format("You're not member of organization '%s'", organization.getKey())); - - ws.newRequest() - .setParam("leftKey", left.getKee()) - .setParam("rightKey", right.getKee()) - .execute(); - } - @Test public void definition() { WebService.Action definition = ws.getDef(); @@ -237,7 +187,7 @@ public class CompareActionTest { } private QProfileDto createProfile(String lang, String name, String key) { - return db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setKee(key).setName(name).setLanguage(lang)); + return db.qualityProfiles().insert(p -> p.setKee(key).setName(name).setLanguage(lang)); } private RuleDefinitionDto createRule(String lang, String id) { diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/CopyActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/CopyActionTest.java index da2a564e386..9b5849c2362 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/CopyActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/CopyActionTest.java @@ -68,10 +68,10 @@ public class CopyActionTest { @Rule public JUnitTempFolder tempDir = new JUnitTempFolder(); private ActiveRuleIndexer activeRuleIndexer = mock(ActiveRuleIndexer.class); - private QProfileFactory profileFactory = new QProfileFactoryImpl(db.getDbClient(), new SequenceUuidFactory(), System2.INSTANCE, activeRuleIndexer); private TestBackuper backuper = new TestBackuper(); - private QProfileCopier profileCopier = new QProfileCopier(db.getDbClient(), profileFactory, backuper); private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); + private QProfileFactory profileFactory = new QProfileFactoryImpl(db.getDbClient(), new SequenceUuidFactory(), System2.INSTANCE, activeRuleIndexer); + private QProfileCopier profileCopier = new QProfileCopier(db.getDbClient(), profileFactory, backuper); private Languages languages = LanguageTesting.newLanguages(A_LANGUAGE); private QProfileWsSupport wsSupport = new QProfileWsSupport(db.getDbClient(), userSession, defaultOrganizationProvider); private CopyAction underTest = new CopyAction(db.getDbClient(), profileCopier, languages, userSession, wsSupport); @@ -94,10 +94,10 @@ public class CopyActionTest { @Test public void example() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); logInAsQProfileAdministrator(organization); - QProfileDto parent = db.qualityProfiles().insert(organization, p -> p.setKee("AU-TpxcA-iU5OvuD2FL2")); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setKee("old") + QProfileDto parent = db.qualityProfiles().insert(p -> p.setKee("AU-TpxcA-iU5OvuD2FL2")); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setKee("old") .setLanguage("Java") .setParentKee(parent.getKee())); String profileUuid = profile.getRulesProfileUuid(); @@ -114,10 +114,10 @@ public class CopyActionTest { @Test public void create_profile_with_specified_name_and_copy_rules_from_source_profile() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); logInAsQProfileAdministrator(organization); - QProfileDto sourceProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(A_LANGUAGE)); + QProfileDto sourceProfile = db.qualityProfiles().insert(p -> p.setLanguage(A_LANGUAGE)); TestResponse response = tester.newRequest() .setMethod("POST") .setParam("fromKey", sourceProfile.getKee()) @@ -133,12 +133,11 @@ public class CopyActionTest { " \"isDefault\": false," + " \"isInherited\": false" + "}"); - QProfileDto loadedProfile = db.getDbClient().qualityProfileDao().selectByNameAndLanguage(db.getSession(), organization, "target-name", sourceProfile.getLanguage()); + QProfileDto loadedProfile = db.getDbClient().qualityProfileDao().selectByNameAndLanguage(db.getSession(), "target-name", sourceProfile.getLanguage()); assertThat(loadedProfile.getKee()).isEqualTo(generatedUuid); assertThat(loadedProfile.getParentKee()).isNull(); assertThat(backuper.copiedProfile.getKee()).isEqualTo(sourceProfile.getKee()); - assertThat(backuper.toProfile.getOrganizationUuid()).isEqualTo(sourceProfile.getOrganizationUuid()); assertThat(backuper.toProfile.getLanguage()).isEqualTo(sourceProfile.getLanguage()); assertThat(backuper.toProfile.getName()).isEqualTo("target-name"); assertThat(backuper.toProfile.getKee()).isEqualTo(generatedUuid); @@ -147,10 +146,10 @@ public class CopyActionTest { @Test public void copy_rules_on_existing_profile_in_default_organization() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); logInAsQProfileAdministrator(organization); - QProfileDto sourceProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(A_LANGUAGE)); - QProfileDto targetProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(A_LANGUAGE)); + QProfileDto sourceProfile = db.qualityProfiles().insert(p -> p.setLanguage(A_LANGUAGE)); + QProfileDto targetProfile = db.qualityProfiles().insert(p -> p.setLanguage(A_LANGUAGE)); TestResponse response = tester.newRequest() .setMethod("POST") @@ -175,11 +174,11 @@ public class CopyActionTest { @Test public void create_profile_with_same_parent_as_source_profile() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); logInAsQProfileAdministrator(organization); - QProfileDto parentProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(A_LANGUAGE)); - QProfileDto sourceProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(A_LANGUAGE).setParentKee(parentProfile.getKee())); + QProfileDto parentProfile = db.qualityProfiles().insert(p -> p.setLanguage(A_LANGUAGE)); + QProfileDto sourceProfile = db.qualityProfiles().insert(p -> p.setLanguage(A_LANGUAGE).setParentKee(parentProfile.getKee())); TestResponse response = tester.newRequest() .setMethod("POST") @@ -196,12 +195,11 @@ public class CopyActionTest { " \"isDefault\": false," + " \"isInherited\": true" + "}"); - QProfileDto loadedProfile = db.getDbClient().qualityProfileDao().selectByNameAndLanguage(db.getSession(), organization, "target-name", sourceProfile.getLanguage()); + QProfileDto loadedProfile = db.getDbClient().qualityProfileDao().selectByNameAndLanguage(db.getSession(), "target-name", sourceProfile.getLanguage()); assertThat(loadedProfile.getKee()).isEqualTo(generatedUuid); assertThat(loadedProfile.getParentKee()).isEqualTo(parentProfile.getKee()); assertThat(backuper.copiedProfile.getKee()).isEqualTo(sourceProfile.getKee()); - assertThat(backuper.toProfile.getOrganizationUuid()).isEqualTo(sourceProfile.getOrganizationUuid()); assertThat(backuper.toProfile.getLanguage()).isEqualTo(sourceProfile.getLanguage()); assertThat(backuper.toProfile.getName()).isEqualTo("target-name"); assertThat(backuper.toProfile.getKee()).isEqualTo(generatedUuid); @@ -224,8 +222,8 @@ public class CopyActionTest { @Test public void throw_ForbiddenException_if_not_profile_administrator_of_organization() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(A_LANGUAGE)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(A_LANGUAGE)); userSession.logIn().addPermission(OrganizationPermission.SCAN, organization); expectedException.expect(ForbiddenException.class); @@ -240,8 +238,8 @@ public class CopyActionTest { @Test public void throw_ForbiddenException_if_not_profile_administrator() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(A_LANGUAGE)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(A_LANGUAGE)); userSession.logIn().addPermission(OrganizationPermission.SCAN, organization); expectedException.expect(ForbiddenException.class); @@ -256,7 +254,7 @@ public class CopyActionTest { @Test public void fail_if_parameter_fromKey_is_missing() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); logInAsQProfileAdministrator(organization); expectedException.expect(IllegalArgumentException.class); @@ -269,7 +267,7 @@ public class CopyActionTest { @Test public void fail_if_parameter_toName_is_missing() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); logInAsQProfileAdministrator(organization); expectedException.expect(IllegalArgumentException.class); @@ -297,7 +295,7 @@ public class CopyActionTest { } @Override - public QProfileRestoreSummary restore(DbSession dbSession, Reader backup, OrganizationDto organization, @Nullable String overriddenProfileName) { + public QProfileRestoreSummary restore(DbSession dbSession, Reader backup, @Nullable String overriddenProfileName) { throw new UnsupportedOperationException(); } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/CreateActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/CreateActionTest.java index 5ae62daf598..15ef23dc823 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/CreateActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/CreateActionTest.java @@ -44,7 +44,6 @@ import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleTesting; import org.sonar.server.es.EsTester; import org.sonar.server.exceptions.BadRequestException; -import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.organization.TestDefaultOrganizationProvider; import org.sonar.server.qualityprofile.QProfileExporters; @@ -106,7 +105,7 @@ public class CreateActionTest { @Before public void setUp() { - organization = db.organizations().insert(); + organization = db.organizations().getDefaultOrganization(); } @Test @@ -116,7 +115,7 @@ public class CreateActionTest { assertThat(definition.responseExampleAsString()).isNotEmpty(); assertThat(definition.isPost()).isTrue(); assertThat(definition.params()).extracting(Param::key) - .containsExactlyInAnyOrder("language", "organization", "name", "backup_with_messages", "backup_with_errors", "backup_xoo_lint"); + .containsExactlyInAnyOrder("language", "name", "backup_with_messages", "backup_with_errors", "backup_xoo_lint"); } @Test @@ -125,7 +124,7 @@ public class CreateActionTest { CreateWsResponse response = executeRequest("New Profile", XOO_LANGUAGE); - QProfileDto dto = dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, organization, "New Profile", XOO_LANGUAGE); + QProfileDto dto = dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, "New Profile", XOO_LANGUAGE); assertThat(dto.getKee()).isNotNull(); assertThat(dto.getLanguage()).isEqualTo(XOO_LANGUAGE); assertThat(dto.getName()).isEqualTo("New Profile"); @@ -147,7 +146,7 @@ public class CreateActionTest { executeRequest("New Profile", XOO_LANGUAGE, ImmutableMap.of("xoo_lint", "")); - QProfileDto dto = dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, organization, "New Profile", XOO_LANGUAGE); + QProfileDto dto = dbClient.qualityProfileDao().selectByNameAndLanguage(dbSession, "New Profile", XOO_LANGUAGE); assertThat(dto.getKee()).isNotNull(); assertThat(dbClient.activeRuleDao().selectByProfileUuid(dbSession, dto.getKee())).hasSize(1); assertThat(ruleIndex.searchAll(new RuleQuery().setQProfile(dto).setActivation(true))).toIterable().hasSize(1); @@ -164,63 +163,6 @@ public class CreateActionTest { assertThat(profile.getWarnings().getWarningsList()).containsOnly("a warning"); } - @Test - public void create_profile_for_specific_organization() { - logInAsQProfileAdministrator(); - - String orgKey = organization.getKey(); - - TestRequest request = ws.newRequest() - .setParam("organization", orgKey) - .setParam("name", "Profile with messages") - .setParam("language", XOO_LANGUAGE) - .setParam("backup_with_messages", ""); - - assertThat(executeRequest(request).getProfile().getOrganization()) - .isEqualTo(orgKey); - } - - @Test - public void create_two_qprofiles_in_different_organizations_with_same_name_and_language() { - - // this name will be used twice - String profileName = "Profile123"; - - OrganizationDto organization1 = db.organizations().insert(); - logInAsQProfileAdministrator(organization1); - TestRequest request1 = ws.newRequest() - .setParam("organization", organization1.getKey()) - .setParam("name", profileName) - .setParam("language", XOO_LANGUAGE); - assertThat(executeRequest(request1).getProfile().getOrganization()) - .isEqualTo(organization1.getKey()); - - OrganizationDto organization2 = db.organizations().insert(); - logInAsQProfileAdministrator(organization2); - TestRequest request2 = ws.newRequest() - .setParam("organization", organization2.getKey()) - .setParam("name", profileName) - .setParam("language", XOO_LANGUAGE); - assertThat(executeRequest(request2).getProfile().getOrganization()) - .isEqualTo(organization2.getKey()); - } - - @Test - public void fail_if_unsufficient_privileges() { - OrganizationDto organizationX = db.organizations().insert(); - OrganizationDto organizationY = db.organizations().insert(); - - logInAsQProfileAdministrator(organizationX); - - expectedException.expect(ForbiddenException.class); - expectedException.expectMessage("Insufficient privileges"); - - executeRequest(ws.newRequest() - .setParam("organization", organizationY.getKey()) - .setParam("name", "some Name") - .setParam("language", XOO_LANGUAGE)); - } - @Test public void fail_if_import_generate_error() { logInAsQProfileAdministrator(); @@ -256,7 +198,6 @@ public class CreateActionTest { private CreateWsResponse executeRequest(String name, String language, Map xmls) { TestRequest request = ws.newRequest() - .setParam("organization", organization.getKey()) .setParam("name", name) .setParam("language", language); for (Map.Entry entry : xmls.entrySet()) { diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/DeactivateRuleActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/DeactivateRuleActionTest.java index a9ce0bf03bc..e7c25c7cd69 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/DeactivateRuleActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/DeactivateRuleActionTest.java @@ -39,7 +39,6 @@ import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleTesting; import org.sonar.db.user.UserDto; import org.sonar.server.exceptions.BadRequestException; -import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.server.organization.TestDefaultOrganizationProvider; import org.sonar.server.qualityprofile.QProfileRules; @@ -56,7 +55,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.UUID_SIZE; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_KEY; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_RULE; public class DeactivateRuleActionTest { @@ -74,13 +72,11 @@ public class DeactivateRuleActionTest { private DeactivateRuleAction underTest = new DeactivateRuleAction(dbClient, qProfileRules, userSession, wsSupport); private WsActionTester ws = new WsActionTester(underTest); private OrganizationDto defaultOrganization; - private OrganizationDto organization; @Before public void before() { MockitoAnnotations.initMocks(this); defaultOrganization = db.getDefaultOrganization(); - organization = db.organizations().insert(); } @Test @@ -94,7 +90,7 @@ public class DeactivateRuleActionTest { @Test public void deactivate_rule_in_default_organization() { userSession.logIn(db.users().insertUser()).addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganization); - QProfileDto qualityProfile = db.qualityProfiles().insert(defaultOrganization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); RuleDefinitionDto rule = db.rules().insert(RuleTesting.randomRuleKey()); TestRequest request = ws.newRequest() .setMethod("POST") @@ -110,30 +106,10 @@ public class DeactivateRuleActionTest { assertThat(qProfileDtoCaptor.getValue().getKee()).isEqualTo(qualityProfile.getKee()); } - @Test - public void deactivate_rule_in_specific_organization() { - userSession.logIn(db.users().insertUser()).addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - RuleDefinitionDto rule = db.rules().insert(RuleTesting.randomRuleKey()); - TestRequest request = ws.newRequest() - .setMethod("POST") - .setParam("organization", organization.getKey()) - .setParam(PARAM_RULE, rule.getKey().toString()) - .setParam(PARAM_KEY, qualityProfile.getKee()); - - TestResponse response = request.execute(); - - assertThat(response.getStatus()).isEqualTo(HttpURLConnection.HTTP_NO_CONTENT); - ArgumentCaptor qProfileDtoCaptor = ArgumentCaptor.forClass(QProfileDto.class); - verify(qProfileRules).deactivateAndCommit(any(DbSession.class), qProfileDtoCaptor.capture(), ruleUuidsCaptor.capture()); - assertThat(ruleUuidsCaptor.getValue()).containsExactly(rule.getUuid()); - assertThat(qProfileDtoCaptor.getValue().getKee()).isEqualTo(qualityProfile.getKee()); - } - @Test public void as_qprofile_editor() { UserDto user = db.users().insertUser(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); db.qualityProfiles().addUserPermission(qualityProfile, user); userSession.logIn(user); RuleKey ruleKey = RuleTesting.randomRuleKey(); @@ -141,7 +117,6 @@ public class DeactivateRuleActionTest { ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_RULE, ruleKey.toString()) .setParam(PARAM_KEY, qualityProfile.getKee()) .execute(); @@ -161,25 +136,10 @@ public class DeactivateRuleActionTest { request.execute(); } - @Test - public void fail_if_not_organization_quality_profile_administrator() { - RuleDefinitionDto rule = db.rules().insert(); - userSession.logIn(db.users().insertUser()).addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganization); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - TestRequest request = ws.newRequest() - .setMethod("POST") - .setParam(PARAM_RULE, rule.getKey().toString()) - .setParam(PARAM_KEY, qualityProfile.getKee()); - - expectedException.expect(ForbiddenException.class); - - request.execute(); - } - @Test public void fail_activate_external_rule() { userSession.logIn(db.users().insertUser()).addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganization); - QProfileDto qualityProfile = db.qualityProfiles().insert(defaultOrganization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); RuleDefinitionDto rule = db.rules().insert(r -> r.setIsExternal(true)); TestRequest request = ws.newRequest() @@ -198,7 +158,7 @@ public class DeactivateRuleActionTest { RuleDefinitionDto rule = db.rules().insert(); userSession.logIn(db.users().insertUser()).addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, defaultOrganization); - QProfileDto qualityProfile = db.qualityProfiles().insert(defaultOrganization, profile -> profile.setIsBuiltIn(true)); + QProfileDto qualityProfile = db.qualityProfiles().insert(profile -> profile.setIsBuiltIn(true)); TestRequest request = ws.newRequest() .setMethod("POST") .setParam(PARAM_RULE, rule.getKey().toString()) diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/DeactivateRulesActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/DeactivateRulesActionTest.java index fa2d2b2639a..815640359c0 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/DeactivateRulesActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/DeactivateRulesActionTest.java @@ -31,7 +31,6 @@ import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.user.GroupDto; import org.sonar.db.user.UserDto; import org.sonar.server.exceptions.BadRequestException; -import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.server.organization.TestDefaultOrganizationProvider; import org.sonar.server.qualityprofile.QProfileRules; @@ -48,7 +47,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES; import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.UUID_SIZE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_TARGET_KEY; public class DeactivateRulesActionTest { @@ -67,12 +65,10 @@ public class DeactivateRulesActionTest { private DeactivateRulesAction underTest = new DeactivateRulesAction(ruleQueryFactory, userSession, qProfileRules, wsSupport, dbClient); private WsActionTester ws = new WsActionTester(underTest); private OrganizationDto defaultOrganization; - private OrganizationDto organization; @Before public void before() { defaultOrganization = db.getDefaultOrganization(); - organization = db.organizations().insert(); } @Test @@ -100,7 +96,6 @@ public class DeactivateRulesActionTest { "available_since", "activation", "severities", - "organization", "cwe", "owaspTop10", "sansTop25", @@ -110,12 +105,11 @@ public class DeactivateRulesActionTest { @Test public void as_global_admin() { UserDto user = db.users().insertUser(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - userSession.logIn(user).addPermission(ADMINISTER_QUALITY_PROFILES, organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); + userSession.logIn(user).addPermission(ADMINISTER_QUALITY_PROFILES, defaultOrganization); ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_TARGET_KEY, qualityProfile.getKee()) .execute(); @@ -125,15 +119,14 @@ public class DeactivateRulesActionTest { @Test public void as_qprofile_editor() { UserDto user = db.users().insertUser(); - GroupDto group = db.users().insertGroup(organization); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - db.organizations().addMember(organization, user); + GroupDto group = db.users().insertGroup(defaultOrganization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); + db.organizations().addMember(defaultOrganization, user); db.qualityProfiles().addGroupPermission(qualityProfile, group); userSession.logIn(user).setGroups(group); ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_TARGET_KEY, qualityProfile.getKee()) .execute(); @@ -153,7 +146,7 @@ public class DeactivateRulesActionTest { @Test public void fail_if_built_in_profile() { userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, defaultOrganization); - QProfileDto qualityProfile = db.qualityProfiles().insert(defaultOrganization, p -> p.setIsBuiltIn(true)); + QProfileDto qualityProfile = db.qualityProfiles().insert(p -> p.setIsBuiltIn(true)); TestRequest request = ws.newRequest() .setMethod("POST") .setParam(PARAM_TARGET_KEY, qualityProfile.getKee()); @@ -162,16 +155,4 @@ public class DeactivateRulesActionTest { request.execute(); } - - @Test - public void fail_if_not_organization_quality_profile_administrator() { - userSession.logIn(db.users().insertUser()).addPermission(ADMINISTER_QUALITY_PROFILES, defaultOrganization); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - TestRequest request = ws.newRequest() - .setMethod("POST") - .setParam(PARAM_TARGET_KEY, qualityProfile.getKee()); - - thrown.expect(ForbiddenException.class); - request.execute(); - } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/DeleteActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/DeleteActionTest.java index b3b4ac5a834..ded6c99a934 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/DeleteActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/DeleteActionTest.java @@ -31,7 +31,6 @@ import org.sonar.core.util.UuidFactoryFast; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.project.ProjectDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.user.UserDto; @@ -52,7 +51,6 @@ import static org.mockito.Mockito.mock; import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_KEY; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class DeleteActionTest { @@ -78,13 +76,12 @@ public class DeleteActionTest { @Test public void delete_profile_by_language_and_name_in_default_organization() { - OrganizationDto organization = db.getDefaultOrganization(); - ProjectDto project = db.components().insertPrivateProjectDto(organization); - QProfileDto profile1 = createProfile(organization); - QProfileDto profile2 = createProfile(organization); + ProjectDto project = db.components().insertPrivateProjectDto(); + QProfileDto profile1 = createProfile(); + QProfileDto profile2 = createProfile(); db.qualityProfiles().associateWithProject(project, profile1); - logInAsQProfileAdministrator(organization); + logInAsQProfileAdministrator(); TestResponse response = ws.newRequest() .setMethod("POST") @@ -94,61 +91,55 @@ public class DeleteActionTest { assertThat(response.getStatus()).isEqualTo(HttpURLConnection.HTTP_NO_CONTENT); - verifyProfileDoesNotExist(profile1, organization); + verifyProfileDoesNotExist(profile1); verifyProfileExists(profile2); } @Test public void delete_profile_by_language_and_name_in_specified_organization() { - OrganizationDto organization = db.organizations().insert(); - ProjectDto project = db.components().insertPrivateProjectDto(organization); - QProfileDto profile1 = createProfile(organization); - QProfileDto profile2 = createProfile(organization); + ProjectDto project = db.components().insertPrivateProjectDto(); + QProfileDto profile1 = createProfile(); + QProfileDto profile2 = createProfile(); db.qualityProfiles().associateWithProject(project, profile1); - logInAsQProfileAdministrator(organization); + logInAsQProfileAdministrator(); TestResponse response = ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_LANGUAGE, profile1.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, profile1.getName()) .execute(); assertThat(response.getStatus()).isEqualTo(HttpURLConnection.HTTP_NO_CONTENT); - verifyProfileDoesNotExist(profile1, organization); + verifyProfileDoesNotExist(profile1); verifyProfileExists(profile2); } @Test public void as_qprofile_editor() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = createProfile(organization); + QProfileDto profile = createProfile(); UserDto user = db.users().insertUser(); db.qualityProfiles().addUserPermission(profile, user); userSession.logIn(user); TestResponse response = ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_LANGUAGE, profile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .execute(); assertThat(response.getStatus()).isEqualTo(HttpURLConnection.HTTP_NO_CONTENT); - verifyProfileDoesNotExist(profile, organization); + verifyProfileDoesNotExist(profile); } @Test public void fail_if_built_in_profile() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile1 = db.qualityProfiles().insert(organization, p -> p.setIsBuiltIn(true).setLanguage(A_LANGUAGE)); - logInAsQProfileAdministrator(organization); + QProfileDto profile1 = db.qualityProfiles().insert(p -> p.setIsBuiltIn(true).setLanguage(A_LANGUAGE)); + logInAsQProfileAdministrator(); expectedException.expect(BadRequestException.class); ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_LANGUAGE, profile1.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, profile1.getName()) .execute(); @@ -156,8 +147,7 @@ public class DeleteActionTest { @Test public void fail_if_not_profile_administrator() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto qprofile = createProfile(organization); + QProfileDto qprofile = createProfile(); userSession.logIn(db.users().insertUser()); expectedException.expect(ForbiddenException.class); @@ -165,7 +155,6 @@ public class DeleteActionTest { ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_LANGUAGE, qprofile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, qprofile.getName()) .execute(); @@ -173,7 +162,7 @@ public class DeleteActionTest { @Test public void fail_if_not_logged_in() { - QProfileDto profile = createProfile(db.getDefaultOrganization()); + QProfileDto profile = createProfile(); expectedException.expect(UnauthorizedException.class); @@ -197,32 +186,28 @@ public class DeleteActionTest { @Test public void fail_if_missing_language_parameter() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = createProfile(organization); - logInAsQProfileAdministrator(organization); + QProfileDto profile = createProfile(); + logInAsQProfileAdministrator(); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("The 'language' parameter is missing"); ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam("profileName", profile.getName()) .execute(); } @Test public void fail_if_missing_name_parameter() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = createProfile(organization); - logInAsQProfileAdministrator(organization); + QProfileDto profile = createProfile(); + logInAsQProfileAdministrator(); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("The 'qualityProfile' parameter is missing"); ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_LANGUAGE, profile.getLanguage()) .execute(); } @@ -243,17 +228,15 @@ public class DeleteActionTest { @Test public void fail_if_deleting_default_profile() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = createProfile(organization); + QProfileDto profile = createProfile(); db.qualityProfiles().setAsDefault(profile); - logInAsQProfileAdministrator(organization); + logInAsQProfileAdministrator(); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Profile '" + profile.getName() + "' cannot be deleted because it is marked as default"); ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_LANGUAGE, profile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .execute(); @@ -261,11 +244,10 @@ public class DeleteActionTest { @Test public void fail_if_a_descendant_is_marked_as_default() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto parentProfile = createProfile(organization); - QProfileDto childProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(A_LANGUAGE).setParentKee(parentProfile.getKee())); + QProfileDto parentProfile = createProfile(); + QProfileDto childProfile = db.qualityProfiles().insert(p -> p.setLanguage(A_LANGUAGE).setParentKee(parentProfile.getKee())); db.qualityProfiles().setAsDefault(childProfile); - logInAsQProfileAdministrator(organization); + logInAsQProfileAdministrator(); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Profile '" + parentProfile.getName() + "' cannot be deleted because its descendant named '" + childProfile.getName() + @@ -273,7 +255,6 @@ public class DeleteActionTest { ws.newRequest() .setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_LANGUAGE, parentProfile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, parentProfile.getName()) .execute(); @@ -284,25 +265,25 @@ public class DeleteActionTest { WebService.Action definition = ws.getDef(); assertThat(definition.isPost()).isTrue(); - assertThat(definition.params()).extracting(Param::key).containsExactlyInAnyOrder("language", "organization", "qualityProfile"); + assertThat(definition.params()).extracting(Param::key).containsExactlyInAnyOrder("language", "qualityProfile"); } - private void logInAsQProfileAdministrator(OrganizationDto organization) { + private void logInAsQProfileAdministrator() { userSession .logIn(db.users().insertUser()) - .addPermission(ADMINISTER_QUALITY_PROFILES, organization); + .addPermission(ADMINISTER_QUALITY_PROFILES, db.getDefaultOrganization()); } - private void verifyProfileDoesNotExist(QProfileDto profile, OrganizationDto organization) { + private void verifyProfileDoesNotExist(QProfileDto profile) { assertThat(dbClient.qualityProfileDao().selectByUuid(dbSession, profile.getKee())).isNull(); - assertThat(dbClient.qualityProfileDao().selectSelectedProjects(dbSession, organization, profile, null)).isEmpty(); + assertThat(dbClient.qualityProfileDao().selectSelectedProjects(dbSession, profile, null)).isEmpty(); } private void verifyProfileExists(QProfileDto profile) { assertThat(dbClient.qualityProfileDao().selectByUuid(dbSession, profile.getKee())).isNotNull(); } - private QProfileDto createProfile(OrganizationDto organization) { - return db.qualityProfiles().insert(organization, p -> p.setLanguage(A_LANGUAGE)); + private QProfileDto createProfile() { + return db.qualityProfiles().insert(p -> p.setLanguage(A_LANGUAGE)); } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ExportActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ExportActionTest.java index 04f4b069e98..fed422560c5 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ExportActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ExportActionTest.java @@ -34,13 +34,9 @@ import org.sonar.api.utils.System2; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; -import org.sonar.db.user.UserDto; -import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.language.LanguageTesting; -import org.sonar.server.organization.TestDefaultOrganizationProvider; import org.sonar.server.qualityprofile.QProfileBackuper; import org.sonar.server.qualityprofile.QProfileExporters; import org.sonar.server.qualityprofile.QProfileRestoreSummary; @@ -49,10 +45,6 @@ import org.sonar.server.ws.WsActionTester; import static java.lang.String.format; import static org.assertj.core.api.Assertions.assertThat; -import static org.sonar.db.organization.OrganizationDto.Subscription.PAID; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class ExportActionTest { @@ -68,11 +60,10 @@ public class ExportActionTest { private DbClient dbClient = db.getDbClient(); private QProfileBackuper backuper = new TestBackuper(); - private QProfileWsSupport wsSupport = new QProfileWsSupport(dbClient, userSession, TestDefaultOrganizationProvider.from(db)); @Test public void export_profile_in_default_organization() { - QProfileDto profile = createProfile(db.getDefaultOrganization(), false); + QProfileDto profile = createProfile(false); WsActionTester tester = newWsActionTester(newExporter("polop"), newExporter("palap")); String result = tester.newRequest() @@ -84,26 +75,10 @@ public class ExportActionTest { assertThat(result).isEqualTo("Profile " + profile.getLanguage() + "/" + profile.getName() + " exported by polop"); } - @Test - public void export_profile_in_specified_organization() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = createProfile(organization, false); - - WsActionTester tester = newWsActionTester(newExporter("polop"), newExporter("palap")); - String result = tester.newRequest() - .setParam("organization", organization.getKey()) - .setParam("language", profile.getLanguage()) - .setParam("qualityProfile", profile.getName()) - .setParam("exporterKey", "polop").execute() - .getInput(); - - assertThat(result).isEqualTo("Profile " + profile.getLanguage() + "/" + profile.getName() + " exported by polop"); - } - @Test public void export_default_profile() { - QProfileDto nonDefaultProfile = createProfile(db.getDefaultOrganization(), false); - QProfileDto defaultProfile = createProfile(db.getDefaultOrganization(), true); + QProfileDto nonDefaultProfile = createProfile(false); + QProfileDto defaultProfile = createProfile(true); WsActionTester tester = newWsActionTester(newExporter("polop"), newExporter("palap")); String result = tester.newRequest() @@ -117,8 +92,7 @@ public class ExportActionTest { @Test public void return_backup_when_exporter_is_not_specified() { - OrganizationDto organization = db.getDefaultOrganization(); - QProfileDto profile = createProfile(organization, false); + QProfileDto profile = createProfile(false); String result = newWsActionTester(newExporter("polop")).newRequest() .setParam("language", profile.getLanguage()) @@ -129,59 +103,6 @@ public class ExportActionTest { assertThat(result).isEqualTo("Backup of " + profile.getLanguage() + "/" + profile.getKee()); } - @Test - public void do_not_mismatch_profiles_with_other_organizations_and_languages() { - OrganizationDto org1 = db.organizations().insert(); - OrganizationDto org2 = db.organizations().insert(); - QProfileDto defaultJavaInOrg1 = db.qualityProfiles().insert(org1, p -> p.setLanguage(JAVA_LANGUAGE).setName("Sonar Way")); - QProfileDto nonDefaultJavaInOrg1 = db.qualityProfiles().insert(org1, p -> p.setLanguage(JAVA_LANGUAGE).setName("My Way")); - QProfileDto defaultXooInOrg1 = db.qualityProfiles().insert(org1, p -> p.setLanguage(XOO_LANGUAGE).setName("Sonar Way")); - QProfileDto nonDefaultXooInOrg1 = db.qualityProfiles().insert(org1, p -> p.setLanguage(XOO_LANGUAGE).setName("My Way")); - QProfileDto defaultJavaInOrg2 = db.qualityProfiles().insert(org2, p -> p.setLanguage(JAVA_LANGUAGE).setName("Sonar Way")); - QProfileDto nonDefaultJavaInOrg2 = db.qualityProfiles().insert(org2, p -> p.setLanguage(JAVA_LANGUAGE).setName("My Way")); - QProfileDto defaultXooInOrg2 = db.qualityProfiles().insert(org2, p -> p.setLanguage(XOO_LANGUAGE).setName("Sonar Way")); - QProfileDto nonDefaultXooInOrg2 = db.qualityProfiles().insert(org2, p -> p.setLanguage(XOO_LANGUAGE).setName("My Way")); - db.qualityProfiles().setAsDefault(defaultJavaInOrg1, defaultJavaInOrg2, defaultXooInOrg1, defaultXooInOrg2); - - WsActionTester tester = newWsActionTester(); - - // default profile for specified organization and language - assertThat(tester.newRequest() - .setParam("organization", org1.getKey()) - .setParam("language", defaultJavaInOrg1.getLanguage()) - .execute() - .getInput()) - .isEqualTo("Backup of java/" + defaultJavaInOrg1.getKee()); - - // profile for specified organization, language and name --> do not mix with Xoo profile or profile with same lang/name on other - // organization - assertThat(tester.newRequest() - .setParam("organization", org1.getKey()) - .setParam("language", defaultJavaInOrg1.getLanguage()) - .setParam("name", defaultJavaInOrg1.getName()) - .execute() - .getInput()) - .isEqualTo("Backup of java/" + defaultJavaInOrg1.getKee()); - } - - @Test - public void export_profile_in_paid_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto profile = createProfile(organization, false); - UserDto user = db.users().insertUser(); - userSession.logIn(user).addMembership(organization); - - WsActionTester tester = newWsActionTester(newExporter("polop")); - String result = tester.newRequest() - .setParam("organization", organization.getKey()) - .setParam("language", profile.getLanguage()) - .setParam("qualityProfile", profile.getName()) - .setParam("exporterKey", "polop").execute() - .getInput(); - - assertThat(result).isEqualTo("Profile " + profile.getLanguage() + "/" + profile.getName() + " exported by polop"); - } - @Test public void throw_NotFoundException_if_profile_with_specified_name_does_not_exist_in_default_organization() { expectedException.expect(NotFoundException.class); @@ -193,7 +114,7 @@ public class ExportActionTest { @Test public void throw_IAE_if_export_with_specified_key_does_not_exist() { - QProfileDto profile = createProfile(db.getDefaultOrganization(), true); + QProfileDto profile = createProfile(true); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Value of parameter 'exporterKey' (unknown) must be one of: [polop, palap]"); @@ -203,49 +124,13 @@ public class ExportActionTest { .setParam("exporterKey", "unknown").execute(); } - @Test - public void throw_NotFoundException_if_specified_organization_does_not_exist() { - WsActionTester tester = newWsActionTester(newExporter("foo")); - - expectedException.expect(NotFoundException.class); - expectedException.expectMessage("No organization with key 'does_not_exist'"); - - tester.newRequest() - .setParam("organization", "does_not_exist") - .setParam("language", XOO_LANGUAGE) - .setParam("name", "bar") - .setParam("exporterKey", "foo") - .execute(); - } - - @Test - public void fail_on_paid_organization_when_not_member() { - WsActionTester tester = newWsActionTester(newExporter("foo")); - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO_LANGUAGE)); - - expectedException.expect(ForbiddenException.class); - expectedException.expectMessage(format("You're not member of organization '%s'", organization.getKey())); - - tester.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .setParam(PARAM_QUALITY_PROFILE, qualityProfile.getName()) - .setParam(PARAM_LANGUAGE, XOO_LANGUAGE) - .setParam("exporterKey", "foo") - .execute(); - } - @Test public void definition_without_exporters() { WebService.Action definition = newWsActionTester().getDef(); assertThat(definition.isPost()).isFalse(); assertThat(definition.isInternal()).isFalse(); - assertThat(definition.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("language", "qualityProfile", "organization"); - - WebService.Param organizationParam = definition.param("organization"); - assertThat(organizationParam.since()).isEqualTo("6.4"); - assertThat(organizationParam.isInternal()).isTrue(); + assertThat(definition.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("language", "qualityProfile"); WebService.Param name = definition.param("qualityProfile"); assertThat(name.deprecatedSince()).isNullOrEmpty(); @@ -260,7 +145,7 @@ public class ExportActionTest { assertThat(definition.isPost()).isFalse(); assertThat(definition.isInternal()).isFalse(); - assertThat(definition.params()).extracting("key").containsExactlyInAnyOrder("language", "qualityProfile", "organization", "exporterKey"); + assertThat(definition.params()).extracting("key").containsExactlyInAnyOrder("language", "qualityProfile", "exporterKey"); WebService.Param exportersParam = definition.param("exporterKey"); assertThat(exportersParam.possibleValues()).containsOnly("polop", "palap"); assertThat(exportersParam.deprecatedKey()).isEqualTo("format"); @@ -268,8 +153,8 @@ public class ExportActionTest { assertThat(exportersParam.isInternal()).isFalse(); } - private QProfileDto createProfile(OrganizationDto organization, boolean isDefault) { - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO_LANGUAGE)); + private QProfileDto createProfile(boolean isDefault) { + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO_LANGUAGE)); if (isDefault) { db.qualityProfiles().setAsDefault(profile); } @@ -278,7 +163,7 @@ public class ExportActionTest { private WsActionTester newWsActionTester(ProfileExporter... profileExporters) { QProfileExporters exporters = new QProfileExporters(dbClient, null, null, profileExporters, null); - return new WsActionTester(new ExportAction(dbClient, backuper, exporters, LanguageTesting.newLanguages(XOO_LANGUAGE, JAVA_LANGUAGE), wsSupport)); + return new WsActionTester(new ExportAction(dbClient, backuper, exporters, LanguageTesting.newLanguages(XOO_LANGUAGE, JAVA_LANGUAGE))); } private static ProfileExporter newExporter(String key) { @@ -311,7 +196,7 @@ public class ExportActionTest { } @Override - public QProfileRestoreSummary restore(DbSession dbSession, Reader backup, OrganizationDto organization, @Nullable String overriddenProfileName) { + public QProfileRestoreSummary restore(DbSession dbSession, Reader backup, @Nullable String overriddenProfileName) { throw new UnsupportedOperationException(); } @@ -320,7 +205,8 @@ public class ExportActionTest { throw new UnsupportedOperationException(); } - @Override public QProfileRestoreSummary copy(DbSession dbSession, QProfileDto from, QProfileDto to) { + @Override + public QProfileRestoreSummary copy(DbSession dbSession, QProfileDto from, QProfileDto to) { throw new UnsupportedOperationException(); } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/InheritanceActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/InheritanceActionTest.java index 2121a1aeb7a..a533309f3bc 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/InheritanceActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/InheritanceActionTest.java @@ -35,15 +35,12 @@ import org.sonar.api.utils.System2; import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.ActiveRuleDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleTesting; -import org.sonar.db.user.UserDto; import org.sonar.server.es.EsClient; import org.sonar.server.es.EsTester; -import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.organization.TestDefaultOrganizationProvider; import org.sonar.server.qualityprofile.QProfileRules; @@ -60,15 +57,12 @@ import org.sonar.server.util.TypeValidations; import org.sonar.server.ws.WsActionTester; import org.sonarqube.ws.Qualityprofiles.InheritanceWsResponse; -import static java.lang.String.format; import static java.util.Arrays.asList; import static java.util.Collections.singleton; import static org.assertj.core.api.Assertions.assertThat; -import static org.sonar.db.organization.OrganizationDto.Subscription.PAID; import static org.sonar.test.JsonAssert.assertJson; import static org.sonarqube.ws.MediaTypes.PROTOBUF; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class InheritanceActionTest { @@ -100,7 +94,6 @@ public class InheritanceActionTest { @Test public void inheritance_nominal() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule1 = createRule("xoo", "rule1"); RuleDefinitionDto rule2 = createRule("xoo", "rule2"); RuleDefinitionDto rule3 = createRule("xoo", "rule3"); @@ -108,34 +101,33 @@ public class InheritanceActionTest { /* * sonar way (2) <- companyWide (2) <- buWide (2, 1 overriding) <- (forProject1 (2), forProject2 (2)) */ - QProfileDto sonarway = db.qualityProfiles().insert(organization, p -> p.setKee("xoo-sonar-way").setLanguage("xoo").setName("Sonar way").setIsBuiltIn(true)); + QProfileDto sonarway = db.qualityProfiles().insert(p -> p.setKee("xoo-sonar-way").setLanguage("xoo").setName("Sonar way").setIsBuiltIn(true)); createActiveRule(rule1, sonarway); createActiveRule(rule2, sonarway); dbSession.commit(); activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes()); - QProfileDto companyWide = createProfile(organization, "xoo", "My Company Profile", "xoo-my-company-profile-12345"); + QProfileDto companyWide = createProfile("xoo", "My Company Profile", "xoo-my-company-profile-12345"); setParent(sonarway, companyWide); - QProfileDto buWide = createProfile(organization, "xoo", "My BU Profile", "xoo-my-bu-profile-23456"); + QProfileDto buWide = createProfile("xoo", "My BU Profile", "xoo-my-bu-profile-23456"); setParent(companyWide, buWide); overrideActiveRuleSeverity(rule1, buWide, Severity.CRITICAL); - QProfileDto forProject1 = createProfile(organization, "xoo", "For Project One", "xoo-for-project-one-34567"); + QProfileDto forProject1 = createProfile("xoo", "For Project One", "xoo-for-project-one-34567"); setParent(buWide, forProject1); createActiveRule(rule3, forProject1); dbSession.commit(); activeRuleIndexer.indexOnStartup(activeRuleIndexer.getIndexTypes()); - QProfileDto forProject2 = createProfile(organization, "xoo", "For Project Two", "xoo-for-project-two-45678"); + QProfileDto forProject2 = createProfile("xoo", "For Project Two", "xoo-for-project-two-45678"); setParent(buWide, forProject2); overrideActiveRuleSeverity(rule2, forProject2, Severity.CRITICAL); String response = ws.newRequest() .setParam(PARAM_LANGUAGE, buWide.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, buWide.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute() .getInput(); @@ -144,18 +136,17 @@ public class InheritanceActionTest { @Test public void inheritance_parent_child() throws Exception { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule1 = db.rules().insert(); RuleDefinitionDto rule2 = db.rules().insert(); RuleDefinitionDto rule3 = db.rules().insert(); ruleIndexer.commitAndIndex(db.getSession(), asList(rule1.getUuid(), rule2.getUuid(), rule3.getUuid())); - QProfileDto parent = db.qualityProfiles().insert(organization); + QProfileDto parent = db.qualityProfiles().insert(); db.qualityProfiles().activateRule(parent, rule1); db.qualityProfiles().activateRule(parent, rule2); long parentRules = 2; - QProfileDto child = db.qualityProfiles().insert(organization, q -> q.setParentKee(parent.getKee())); + QProfileDto child = db.qualityProfiles().insert(q -> q.setParentKee(parent.getKee())); db.qualityProfiles().activateRule(child, rule3); long childRules = 1; @@ -165,7 +156,6 @@ public class InheritanceActionTest { .setMediaType(PROTOBUF) .setParam(PARAM_LANGUAGE, child.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, child.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute() .getInputStream(); @@ -180,11 +170,10 @@ public class InheritanceActionTest { @Test public void inheritance_ignores_removed_rules() throws Exception { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule = db.rules().insert(r -> r.setStatus(RuleStatus.REMOVED)); ruleIndexer.commitAndIndex(db.getSession(), rule.getUuid()); - QProfileDto profile = db.qualityProfiles().insert(organization); + QProfileDto profile = db.qualityProfiles().insert(); db.qualityProfiles().activateRule(profile, rule); long activeRules = 0; @@ -194,7 +183,6 @@ public class InheritanceActionTest { .setMediaType(PROTOBUF) .setParam(PARAM_LANGUAGE, profile.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute() .getInputStream(); @@ -206,33 +194,17 @@ public class InheritanceActionTest { @Test public void inheritance_no_family() { // Simple profile, no parent, no child - OrganizationDto organization = db.organizations().insert(); - QProfileDto remi = createProfile(organization, "xoo", "Nobodys Boy", "xoo-nobody-s-boy-01234"); + QProfileDto remi = createProfile("xoo", "Nobodys Boy", "xoo-nobody-s-boy-01234"); String response = ws.newRequest() .setParam(PARAM_LANGUAGE, remi.getLanguage()) .setParam(PARAM_QUALITY_PROFILE, remi.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute() .getInput(); assertJson(response).isSimilarTo(getClass().getResource("InheritanceActionTest/inheritance-simple.json")); } - @Test - public void inheritance_on_paid_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - UserDto user = db.users().insertUser(); - userSession.logIn(user).addMembership(organization); - - ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .setParam(PARAM_QUALITY_PROFILE, qualityProfile.getName()) - .setParam(PARAM_LANGUAGE, qualityProfile.getLanguage()) - .execute(); - } - @Test(expected = NotFoundException.class) public void fail_if_not_found() { ws.newRequest() @@ -241,31 +213,16 @@ public class InheritanceActionTest { .execute(); } - @Test - public void fail_on_paid_organization_when_not_member() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - - expectedException.expect(ForbiddenException.class); - expectedException.expectMessage(format("You're not member of organization '%s'", organization.getKey())); - - ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .setParam(PARAM_QUALITY_PROFILE, qualityProfile.getName()) - .setParam(PARAM_LANGUAGE, qualityProfile.getLanguage()) - .execute(); - } - @Test public void definition() { WebService.Action definition = ws.getDef(); assertThat(definition.key()).isEqualTo("inheritance"); - assertThat(definition.params()).extracting(Param::key).containsExactlyInAnyOrder("language", "qualityProfile", "organization"); + assertThat(definition.params()).extracting(Param::key).containsExactlyInAnyOrder("language", "qualityProfile"); } - private QProfileDto createProfile(OrganizationDto organization, String lang, String name, String key) { - return db.qualityProfiles().insert(organization, qp -> qp.setKee(key).setName(name).setLanguage(lang)); + private QProfileDto createProfile(String lang, String name, String key) { + return db.qualityProfiles().insert(qp -> qp.setKee(key).setName(name).setLanguage(lang)); } private void setParent(QProfileDto profile, QProfileDto parent) { diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ProjectsActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ProjectsActionTest.java index 4ebfb623b71..11369776308 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ProjectsActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ProjectsActionTest.java @@ -31,19 +31,15 @@ import org.sonar.db.organization.OrganizationDto; import org.sonar.db.project.ProjectDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.user.UserDto; -import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; -import org.sonar.server.organization.TestDefaultOrganizationProvider; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsActionTester; -import static java.lang.String.format; import static org.assertj.core.api.Assertions.assertThat; import static org.sonar.api.server.ws.WebService.Param.PAGE; import static org.sonar.api.server.ws.WebService.Param.PAGE_SIZE; import static org.sonar.api.server.ws.WebService.Param.TEXT_QUERY; import static org.sonar.api.web.UserRole.USER; -import static org.sonar.db.organization.OrganizationDto.Subscription.PAID; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_KEY; public class ProjectsActionTest { @@ -55,15 +51,13 @@ public class ProjectsActionTest { @Rule public UserSessionRule userSession = UserSessionRule.standalone(); - private WsActionTester ws = new WsActionTester( - new ProjectsAction(db.getDbClient(), userSession, new QProfileWsSupport(db.getDbClient(), userSession, TestDefaultOrganizationProvider.from(db)))); + private WsActionTester ws = new WsActionTester(new ProjectsAction(db.getDbClient(), userSession)); @Test public void list_authorized_projects_only() { - OrganizationDto organization = db.organizations().insert(); - ComponentDto project1 = db.components().insertPrivateProject(organization); - ComponentDto project2 = db.components().insertPrivateProject(organization); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + ComponentDto project1 = db.components().insertPrivateProject(); + ComponentDto project2 = db.components().insertPrivateProject(); + QProfileDto qualityProfile = db.qualityProfiles().insert(); associateProjectsWithProfile(qualityProfile, db.components().getProjectDto(project1), db.components().getProjectDto(project2)); // user only sees project1 UserDto user = db.users().insertUser(); @@ -86,12 +80,12 @@ public class ProjectsActionTest { @Test public void paginate() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); ProjectDto project1 = db.components().insertPublicProjectDto(organization, p -> p.setName("Project One")); ProjectDto project2 = db.components().insertPublicProjectDto(organization, p -> p.setName("Project Two")); ProjectDto project3 = db.components().insertPublicProjectDto(organization, p -> p.setName("Project Three")); ProjectDto project4 = db.components().insertPublicProjectDto(organization, p -> p.setName("Project Four")); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); associateProjectsWithProfile(qualityProfile, project1, project2, project3, project4); ws.newRequest() @@ -195,10 +189,9 @@ public class ProjectsActionTest { @Test public void show_unselected() { - OrganizationDto organization = db.organizations().insert(); - ProjectDto project1 = db.components().insertPublicProjectDto(organization); - ProjectDto project2 = db.components().insertPublicProjectDto(organization); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + ProjectDto project1 = db.components().insertPublicProjectDto(); + ProjectDto project2 = db.components().insertPublicProjectDto(); + QProfileDto qualityProfile = db.qualityProfiles().insert(); associateProjectsWithProfile(qualityProfile, project1); ws.newRequest() @@ -216,14 +209,13 @@ public class ProjectsActionTest { @Test public void show_all() { - OrganizationDto organization = db.organizations().insert(); - ProjectDto project1 = db.components().insertPublicProjectDto(organization); - ProjectDto project2 = db.components().insertPublicProjectDto(organization); - ProjectDto project3 = db.components().insertPublicProjectDto(organization); - ProjectDto project4 = db.components().insertPublicProjectDto(organization); - QProfileDto qualityProfile1 = db.qualityProfiles().insert(organization); + ProjectDto project1 = db.components().insertPublicProjectDto(); + ProjectDto project2 = db.components().insertPublicProjectDto(); + ProjectDto project3 = db.components().insertPublicProjectDto(); + ProjectDto project4 = db.components().insertPublicProjectDto(); + QProfileDto qualityProfile1 = db.qualityProfiles().insert(); associateProjectsWithProfile(qualityProfile1, project1, project2); - QProfileDto qualityProfile2 = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile2 = db.qualityProfiles().insert(); // project3 is associated with P2, must appear as not associated with xooP1 associateProjectsWithProfile(qualityProfile2, project3); @@ -254,12 +246,11 @@ public class ProjectsActionTest { @Test public void filter_on_name() { - OrganizationDto organization = db.organizations().insert(); - ProjectDto project1 = db.components().insertPublicProjectDto(organization, p -> p.setName("Project One")); - ProjectDto project2 = db.components().insertPublicProjectDto(organization, p -> p.setName("Project Two")); - ProjectDto project3 = db.components().insertPublicProjectDto(organization, p -> p.setName("Project Three")); - ProjectDto project4 = db.components().insertPublicProjectDto(organization, p -> p.setName("Project Four")); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + ProjectDto project1 = db.components().insertPublicProjectDto(p -> p.setName("Project One")); + ProjectDto project2 = db.components().insertPublicProjectDto(p -> p.setName("Project Two")); + ProjectDto project3 = db.components().insertPublicProjectDto(p -> p.setName("Project Three")); + ProjectDto project4 = db.components().insertPublicProjectDto(p -> p.setName("Project Four")); + QProfileDto qualityProfile = db.qualityProfiles().insert(); associateProjectsWithProfile(qualityProfile, project1, project2); ws.newRequest() @@ -285,9 +276,8 @@ public class ProjectsActionTest { @Test public void return_deprecated_uuid_field() { - OrganizationDto organization = db.organizations().insert(); - ProjectDto project = db.components().insertPublicProjectDto(organization); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + ProjectDto project = db.components().insertPublicProjectDto(); + QProfileDto qualityProfile = db.qualityProfiles().insert(); associateProjectsWithProfile(qualityProfile, project); ws.newRequest() @@ -303,28 +293,6 @@ public class ProjectsActionTest { " ]}"); } - @Test - public void projects_on_paid_organization() { - OrganizationDto organization = db.organizations().insert(); - ProjectDto project = db.components().insertPublicProjectDto(organization); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - associateProjectsWithProfile(qualityProfile, project); - UserDto user = db.users().insertUser(); - db.organizations().addMember(organization, user); - userSession.logIn(user); - - ws.newRequest() - .setParam(PARAM_KEY, qualityProfile.getKee()) - .setParam("selected", "all") - .execute() - .assertJson("{\"results\":\n" + - " [\n" + - " {\n" + - " \"key\": \"" + project.getKey() + "\",\n" + - " }\n" + - " ]}"); - } - @Test public void fail_on_nonexistent_profile() { expectedException.expect(NotFoundException.class); @@ -334,19 +302,6 @@ public class ProjectsActionTest { .execute(); } - @Test - public void fail_on_paid_organization_when_not_member() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - - expectedException.expect(ForbiddenException.class); - expectedException.expectMessage(format("You're not member of organization '%s'", organization.getKey())); - - ws.newRequest() - .setParam(PARAM_KEY, qualityProfile.getKee()) - .execute(); - } - @Test public void definition() { WebService.Action definition = ws.getDef(); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/QProfileReferenceTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/QProfileReferenceTest.java index b10e73f115a..0adcf26f007 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/QProfileReferenceTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/QProfileReferenceTest.java @@ -60,26 +60,16 @@ public class QProfileReferenceTest { } @Test - public void fromName_creates_reference_by_name_on_default_organization() { - QProfileReference ref = QProfileReference.fromName(null, "js", "Sonar way"); + public void fromName_creates_reference_by_name() { + QProfileReference ref = QProfileReference.fromName("js", "Sonar way"); assertThat(ref.hasKey()).isFalse(); - assertThat(ref.getOrganizationKey()).isEmpty(); - assertThat(ref.getLanguage()).isEqualTo("js"); - assertThat(ref.getName()).isEqualTo("Sonar way"); - } - - @Test - public void fromName_creates_reference_by_name_on_specified_organization() { - QProfileReference ref = QProfileReference.fromName("my-org", "js", "Sonar way"); - assertThat(ref.hasKey()).isFalse(); - assertThat(ref.getOrganizationKey()).hasValue("my-org"); assertThat(ref.getLanguage()).isEqualTo("js"); assertThat(ref.getName()).isEqualTo("Sonar way"); } @Test public void getKey_throws_ISE_on_reference_by_name() { - QProfileReference ref = QProfileReference.fromName(null, "js", "Sonar way"); + QProfileReference ref = QProfileReference.fromName("js", "Sonar way"); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Key is not defined. Please call hasKey()."); @@ -88,36 +78,12 @@ public class QProfileReferenceTest { } @Test - public void getOrganization_throws_ISE_on_reference_by_key() { - QProfileReference ref = QProfileReference.fromKey("foo"); - - expectedException.expect(IllegalStateException.class); - expectedException.expectMessage("Organization is not defined. Please call hasKey()."); - - ref.getOrganizationKey(); - } - - @Test - public void fromName_reads_request_parameters_and_creates_reference_by_name_on_default_organization() { - SimpleGetRequest req = new SimpleGetRequest(); - req.setParam("language", "js"); - req.setParam("qualityProfile", "Sonar way"); - - QProfileReference ref = QProfileReference.fromName(req); - assertThat(ref.getOrganizationKey()).isEmpty(); - assertThat(ref.getLanguage()).isEqualTo("js"); - assertThat(ref.getName()).isEqualTo("Sonar way"); - } - - @Test - public void fromName_reads_request_parameters_and_creates_reference_by_name_on_specified_organization() { + public void fromName_reads_request_parameters_and_creates_reference_by_name() { SimpleGetRequest req = new SimpleGetRequest(); - req.setParam("organization", "my-org"); req.setParam("language", "js"); req.setParam("qualityProfile", "Sonar way"); QProfileReference ref = QProfileReference.fromName(req); - assertThat(ref.getOrganizationKey()).hasValue("my-org"); assertThat(ref.getLanguage()).isEqualTo("js"); assertThat(ref.getName()).isEqualTo("Sonar way"); } @@ -152,7 +118,7 @@ public class QProfileReferenceTest { QProfileReference key1 = QProfileReference.fromKey("one"); QProfileReference key1bis = QProfileReference.fromKey("one"); QProfileReference key2 = QProfileReference.fromKey("two"); - QProfileReference name = QProfileReference.fromName("my-org", "js", "one"); + QProfileReference name = QProfileReference.fromName("js", "one"); assertThat(key1.equals(key1)).isTrue(); assertThat(key1.equals(key1bis)).isTrue(); @@ -165,10 +131,10 @@ public class QProfileReferenceTest { @Test public void test_equals_and_hashCode_of_name_ref() { - QProfileReference name1 = QProfileReference.fromName("org1", "js", "one"); - QProfileReference name1bis = QProfileReference.fromName("org1", "js", "one"); - QProfileReference name2 = QProfileReference.fromName("org1", "js", "two"); - QProfileReference name1OtherLang = QProfileReference.fromName("org1", "java", "one"); + QProfileReference name1 = QProfileReference.fromName("js", "one"); + QProfileReference name1bis = QProfileReference.fromName("js", "one"); + QProfileReference name2 = QProfileReference.fromName("js", "two"); + QProfileReference name1OtherLang = QProfileReference.fromName("java", "one"); QProfileReference key = QProfileReference.fromKey("one"); assertThat(name1.equals(name1)).isTrue(); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/QProfileWsSupportTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/QProfileWsSupportTest.java index 365960c5361..8bace09eaf8 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/QProfileWsSupportTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/QProfileWsSupportTest.java @@ -23,7 +23,6 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.qualityprofile.QualityProfileTesting; import org.sonar.db.rule.RuleDefinitionDto; @@ -50,12 +49,11 @@ public class QProfileWsSupportTest { @Test public void getProfile_returns_the_profile_specified_by_key() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto profile = db.qualityProfiles().insert(); QProfileDto loaded = underTest.getProfile(db.getSession(), QProfileReference.fromKey(profile.getKee())); assertThat(loaded.getKee()).isEqualTo(profile.getKee()); - assertThat(loaded.getOrganizationUuid()).isEqualTo(profile.getOrganizationUuid()); assertThat(loaded.getLanguage()).isEqualTo(profile.getLanguage()); assertThat(loaded.getName()).isEqualTo(profile.getName()); } @@ -69,27 +67,26 @@ public class QProfileWsSupportTest { } @Test - public void getProfile_returns_the_profile_specified_by_name_and_default_organization() { - QProfileDto profile = QualityProfileTesting.newQualityProfileDto().setOrganizationUuid(db.getDefaultOrganization().getUuid()); + public void getProfile_returns_the_profile_specified_by_name() { + QProfileDto profile = QualityProfileTesting.newQualityProfileDto(); db.qualityProfiles().insert(profile); - QProfileDto loaded = underTest.getProfile(db.getSession(), QProfileReference.fromName(null, profile.getLanguage(), profile.getName())); + QProfileDto loaded = underTest.getProfile(db.getSession(), QProfileReference.fromName(profile.getLanguage(), profile.getName())); assertThat(loaded.getKee()).isEqualTo(profile.getKee()); - assertThat(loaded.getOrganizationUuid()).isEqualTo(profile.getOrganizationUuid()); assertThat(loaded.getLanguage()).isEqualTo(profile.getLanguage()); assertThat(loaded.getName()).isEqualTo(profile.getName()); } @Test - public void getProfile_throws_NotFoundException_if_specified_name_does_not_exist_on_default_organization() { - QProfileDto profile = QualityProfileTesting.newQualityProfileDto().setOrganizationUuid(db.getDefaultOrganization().getUuid()); + public void getProfile_throws_NotFoundException_if_specified_name_does_not_exist() { + QProfileDto profile = QualityProfileTesting.newQualityProfileDto(); db.qualityProfiles().insert(profile); expectedException.expect(NotFoundException.class); expectedException.expectMessage("Quality Profile for language 'java' and name 'missing' does not exist"); - underTest.getProfile(db.getSession(), QProfileReference.fromName(null, "java", "missing")); + underTest.getProfile(db.getSession(), QProfileReference.fromName("java", "missing")); } @Test @@ -101,26 +98,4 @@ public class QProfileWsSupportTest { underTest.getRule(db.getSession(), rule.getKey()); } - - @Test - public void getProfile_throws_NotFoundException_if_specified_name_does_not_exist_on_specified_organization() { - OrganizationDto org1 = db.organizations().insert(); - QProfileDto profile = QualityProfileTesting.newQualityProfileDto().setOrganizationUuid(org1.getUuid()); - db.qualityProfiles().insert(profile); - OrganizationDto org2 = db.organizations().insert(); - - expectedException.expect(NotFoundException.class); - expectedException - .expectMessage(format("Quality Profile for language '%s' and name '%s' does not exist in organization '%s'", profile.getLanguage(), profile.getName(), org2.getKey())); - - underTest.getProfile(db.getSession(), QProfileReference.fromName(org2.getKey(), profile.getLanguage(), profile.getName())); - } - - @Test - public void getProfile_throws_NotFoundException_if_specified_organization_does_not_exist() { - expectedException.expect(NotFoundException.class); - expectedException.expectMessage("No organization with key 'the-org'"); - - underTest.getProfile(db.getSession(), QProfileReference.fromName("the-org", "java", "the-name")); - } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsMediumTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsMediumTest.java index 01785428cc1..31658beb136 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsMediumTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsMediumTest.java @@ -54,7 +54,6 @@ import org.sonar.server.rule.index.RuleIndex; import org.sonar.server.rule.index.RuleIndexer; import org.sonar.server.rule.index.RuleQuery; import org.sonar.server.rule.ws.RuleQueryFactory; -import org.sonar.server.rule.ws.RuleWsSupport; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.util.TypeValidations; import org.sonar.server.ws.WsActionTester; @@ -91,8 +90,7 @@ public class QProfilesWsMediumTest { private QProfileRules qProfileRules = new QProfileRulesImpl(dbClient, ruleActivator, ruleIndex, activeRuleIndexer); private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester); private QProfileWsSupport qProfileWsSupport = new QProfileWsSupport(dbClient, userSessionRule, defaultOrganizationProvider); - private RuleWsSupport ruleWsSupport = new RuleWsSupport(dbClient, userSessionRule, defaultOrganizationProvider); - private RuleQueryFactory ruleQueryFactory = new RuleQueryFactory(dbClient, ruleWsSupport); + private RuleQueryFactory ruleQueryFactory = new RuleQueryFactory(dbClient); private OrganizationDto organization; private WsActionTester wsDeactivateRule = new WsActionTester(new DeactivateRuleAction(dbClient, qProfileRules, userSessionRule, qProfileWsSupport)); @@ -377,7 +375,7 @@ public class QProfilesWsMediumTest { dbSession.commit(); // 2. Assert ActiveRule with MINOR severity - assertThat(dbClient.activeRuleDao().selectByRuleUuid(dbSession, organization, rule0.getUuid()).get(0).getSeverityString()).isEqualTo("MINOR"); + assertThat(dbClient.activeRuleDao().selectByOrgRuleUuid(dbSession, rule0.getUuid()).get(0).getSeverityString()).isEqualTo("MINOR"); assertThat(ruleIndex.searchAll(new RuleQuery() .setQProfile(profile) .setKey(rule0.getKey().toString()) @@ -410,8 +408,8 @@ public class QProfilesWsMediumTest { @Test public void reset() { - QProfileDto profile = QProfileTesting.newXooP1(organization); - QProfileDto childProfile = QProfileTesting.newXooP2(organization).setParentKee(QProfileTesting.XOO_P1_KEY); + QProfileDto profile = QProfileTesting.newXooP1(); + QProfileDto childProfile = QProfileTesting.newXooP2().setParentKee(QProfileTesting.XOO_P1_KEY); dbClient.qualityProfileDao().insert(dbSession, profile, childProfile); RuleDefinitionDto rule = createRule(profile.getLanguage(), "rule"); @@ -445,7 +443,7 @@ public class QProfilesWsMediumTest { } private QProfileDto createProfile(String lang) { - QProfileDto profile = QProfileTesting.newQProfileDto(organization, new QProfileName(lang, "P" + lang), "p" + lang); + QProfileDto profile = QProfileTesting.newQProfileDto(new QProfileName(lang, "P" + lang), "p" + lang); dbClient.qualityProfileDao().insert(dbSession, profile); return profile; } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RemoveGroupActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RemoveGroupActionTest.java index 8adbaf028ce..c9b3c1cd13b 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RemoveGroupActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RemoveGroupActionTest.java @@ -43,7 +43,6 @@ import static java.lang.String.format; import static org.assertj.core.api.Assertions.assertThat; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_GROUP; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class RemoveGroupActionTest { @@ -68,13 +67,13 @@ public class RemoveGroupActionTest { assertThat(def.key()).isEqualTo("remove_group"); assertThat(def.isPost()).isTrue(); assertThat(def.isInternal()).isTrue(); - assertThat(def.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("organization", "qualityProfile", "language", "group"); + assertThat(def.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("qualityProfile", "language", "group"); } @Test public void remove_group() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); db.qualityProfiles().addGroupPermission(profile, group); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); @@ -83,7 +82,6 @@ public class RemoveGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(response.getStatus()).isEqualTo(204); @@ -92,8 +90,8 @@ public class RemoveGroupActionTest { @Test public void does_nothing_when_group_cannot_edit_profile() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); assertThat(db.getDbClient().qProfileEditGroupsDao().exists(db.getSession(), profile, group)).isFalse(); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); @@ -102,7 +100,6 @@ public class RemoveGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(db.getDbClient().qProfileEditGroupsDao().exists(db.getSession(), profile, group)).isFalse(); @@ -110,8 +107,8 @@ public class RemoveGroupActionTest { @Test public void qp_administers_can_remove_group() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); db.qualityProfiles().addGroupPermission(profile, group); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); @@ -120,7 +117,6 @@ public class RemoveGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(db.getDbClient().qProfileEditGroupsDao().exists(db.getSession(), profile, group)).isFalse(); @@ -128,8 +124,8 @@ public class RemoveGroupActionTest { @Test public void qp_editors_can_remove_group() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); db.qualityProfiles().addGroupPermission(profile, group); UserDto userAllowedToEditProfile = db.users().insertUser(); @@ -140,7 +136,6 @@ public class RemoveGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(db.getDbClient().qProfileEditGroupsDao().exists(db.getSession(), profile, group)).isFalse(); @@ -149,7 +144,7 @@ public class RemoveGroupActionTest { @Test public void uses_default_organization_when_no_organization() { OrganizationDto organization = db.getDefaultOrganization(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); db.qualityProfiles().addGroupPermission(profile, group); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); @@ -165,8 +160,8 @@ public class RemoveGroupActionTest { @Test public void fail_when_group_does_not_exist() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); @@ -176,88 +171,47 @@ public class RemoveGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, "unknown") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_qprofile_does_not_exist() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); GroupDto group = db.users().insertGroup(organization); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name 'unknown' does not exist in organization '%s'", organization.getKey())); + expectedException.expectMessage("Quality Profile for language 'xoo' and name 'unknown' does not exist"); ws.newRequest() .setParam(PARAM_QUALITY_PROFILE, "unknown") .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .execute(); - } - - @Test - public void fail_when_qprofile_does_not_belong_to_organization() { - OrganizationDto organization = db.organizations().insert(); - GroupDto group = db.users().insertGroup(organization); - OrganizationDto anotherOrganization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(anotherOrganization, p -> p.setLanguage(XOO)); - userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); - - expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name '%s' does not exist in organization '%s'", profile.getName(), organization.getKey())); - - ws.newRequest() - .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_wrong_language() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("unknown")); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage("unknown")); GroupDto group = db.users().insertGroup(organization); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name '%s' does not exist in organization '%s'", profile.getName(), organization.getKey())); - - ws.newRequest() - .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .execute(); - } - - @Test - public void fail_when_group_does_not_belong_to_organization() { - OrganizationDto organization = db.organizations().insert(); - OrganizationDto anotherOrganization = db.organizations().insert(); - GroupDto group = db.users().insertGroup(anotherOrganization); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); - userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); - - expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("No group with name '%s' in organization '%s'", group.getName(), organization.getKey())); + expectedException.expectMessage(format("Quality Profile for language 'xoo' and name '%s' does not exist", profile.getName())); ws.newRequest() .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_qp_is_built_in() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); GroupDto group = db.users().insertGroup(organization); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO).setIsBuiltIn(true)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO).setIsBuiltIn(true)); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(BadRequestException.class); @@ -267,14 +221,13 @@ public class RemoveGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_not_enough_permission() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); userSession.logIn(db.users().insertUser()).addPermission(OrganizationPermission.ADMINISTER_QUALITY_GATES, organization); @@ -284,7 +237,6 @@ public class RemoveGroupActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_GROUP, group.getName()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RemoveProjectActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RemoveProjectActionTest.java index 0193a9eaf44..9dccd96e95e 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RemoveProjectActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RemoveProjectActionTest.java @@ -31,7 +31,6 @@ import org.sonar.db.DbClient; import org.sonar.db.DbTester; import org.sonar.db.component.ComponentDto; import org.sonar.db.component.ResourceTypesRule; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.project.ProjectDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.user.UserDto; @@ -77,25 +76,22 @@ public class RemoveProjectActionTest { assertThat(definition.isPost()).isTrue(); assertThat(definition.key()).isEqualTo("remove_project"); - assertThat(definition.params()).extracting(WebService.Param::key).containsOnly("qualityProfile", "project", "language", "organization"); + assertThat(definition.params()).extracting(WebService.Param::key).containsOnly("qualityProfile", "project", "language"); WebService.Param languageParam = definition.param("language"); assertThat(languageParam.possibleValues()).containsOnly(LANGUAGE_1, LANGUAGE_2); assertThat(languageParam.exampleValue()).isNull(); assertThat(languageParam.deprecatedSince()).isNullOrEmpty(); - WebService.Param organizationParam = definition.param("organization"); - assertThat(organizationParam.since()).isEqualTo("6.4"); - assertThat(organizationParam.isInternal()).isTrue(); WebService.Param profileName = definition.param("qualityProfile"); assertThat(profileName.deprecatedSince()).isNullOrEmpty(); } @Test - public void remove_profile_from_project_in_default_organization() { + public void remove_profile_from_project() { logInAsProfileAdmin(); ProjectDto project = db.components().insertPrivateProjectDto(db.getDefaultOrganization()); - QProfileDto profileLang1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(LANGUAGE_1)); - QProfileDto profileLang2 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(LANGUAGE_2)); + QProfileDto profileLang1 = db.qualityProfiles().insert(p -> p.setLanguage(LANGUAGE_1)); + QProfileDto profileLang2 = db.qualityProfiles().insert(p -> p.setLanguage(LANGUAGE_2)); db.qualityProfiles().associateWithProject(project, profileLang1); db.qualityProfiles().associateWithProject(project, profileLang2); @@ -110,10 +106,10 @@ public class RemoveProjectActionTest { public void removal_does_not_fail_if_profile_is_not_associated_to_project() { logInAsProfileAdmin(); - ProjectDto project = db.components().insertPrivateProjectDto(db.getDefaultOrganization()); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setLanguage("xoo")); + ProjectDto project = db.components().insertPrivateProjectDto(); + QProfileDto profile = db.qualityProfiles().insert(qp -> qp.setLanguage("xoo")); - TestResponse response = call(db.getDefaultOrganization(), project, profile); + TestResponse response = call(project, profile); assertThat(response.getStatus()).isEqualTo(HttpURLConnection.HTTP_NO_CONTENT); assertProjectIsNotAssociatedToProfile(project, profile); @@ -122,26 +118,25 @@ public class RemoveProjectActionTest { @Test public void project_administrator_can_remove_profile() { ProjectDto project = db.components().insertPrivateProjectDto(db.getDefaultOrganization()); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setLanguage("xoo")); + QProfileDto profile = db.qualityProfiles().insert(qp -> qp.setLanguage("xoo")); db.qualityProfiles().associateWithProject(project, profile); userSession.logIn(db.users().insertUser()).addProjectPermission(UserRole.ADMIN, project); - call(db.getDefaultOrganization(), project, profile); + call(project, profile); assertProjectIsNotAssociatedToProfile(project, profile); } @Test public void as_qprofile_editor() { - OrganizationDto organization = db.organizations().insert(); - ProjectDto project = db.components().insertPrivateProjectDto(organization); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(LANGUAGE_1)); + ProjectDto project = db.components().insertPrivateProjectDto(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(LANGUAGE_1)); db.qualityProfiles().associateWithProject(project, profile); UserDto user = db.users().insertUser(); db.qualityProfiles().addUserPermission(profile, user); userSession.logIn(user); - call(organization, project, profile); + call(project, profile); assertProjectIsNotAssociatedToProfile(project, profile); } @@ -150,7 +145,7 @@ public class RemoveProjectActionTest { public void fail_if_not_enough_permissions() { userSession.logIn(db.users().insertUser()); ProjectDto project = db.components().insertPrivateProjectDto(db.getDefaultOrganization()); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), qp -> qp.setLanguage("xoo")); + QProfileDto profile = db.qualityProfiles().insert(qp -> qp.setLanguage("xoo")); expectedException.expect(ForbiddenException.class); expectedException.expectMessage("Insufficient privileges"); @@ -161,8 +156,8 @@ public class RemoveProjectActionTest { @Test public void fail_if_not_logged_in() { userSession.anonymous(); - ProjectDto project = db.components().insertPrivateProjectDto(db.getDefaultOrganization()); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization()); + ProjectDto project = db.components().insertPrivateProjectDto(); + QProfileDto profile = db.qualityProfiles().insert(); expectedException.expect(UnauthorizedException.class); expectedException.expectMessage("Authentication is required"); @@ -173,7 +168,7 @@ public class RemoveProjectActionTest { @Test public void fail_if_project_does_not_exist() { logInAsProfileAdmin(); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto profile = db.qualityProfiles().insert(); expectedException.expect(NotFoundException.class); expectedException.expectMessage("Project 'unknown' not found"); @@ -187,7 +182,7 @@ public class RemoveProjectActionTest { @Test public void fail_if_profile_does_not_exist() { logInAsProfileAdmin(); - ComponentDto project = db.components().insertPrivateProject(db.getDefaultOrganization()); + ComponentDto project = db.components().insertPrivateProject(); expectedException.expect(NotFoundException.class); expectedException.expectMessage("Quality Profile for language 'xoo' and name 'unknown' does not exist"); @@ -201,11 +196,10 @@ public class RemoveProjectActionTest { @Test public void fail_when_using_branch_db_key() { - OrganizationDto organization = db.organizations().insert(); - ComponentDto project = db.components().insertPublicProject(organization); + ComponentDto project = db.components().insertPublicProject(); userSession.logIn().addProjectPermission(UserRole.ADMIN, project); ComponentDto branch = db.components().insertProjectBranch(project); - QProfileDto profile = db.qualityProfiles().insert(organization); + QProfileDto profile = db.qualityProfiles().insert(); expectedException.expect(NotFoundException.class); expectedException.expectMessage(format("Project '%s' not found", branch.getDbKey())); @@ -238,13 +232,4 @@ public class RemoveProjectActionTest { .setParam("qualityProfile", qualityProfile.getName()); return request.execute(); } - - private TestResponse call(OrganizationDto organization, ProjectDto project, QProfileDto qualityProfile) { - TestRequest request = ws.newRequest() - .setParam("project", project.getKey()) - .setParam("organization", organization.getKey()) - .setParam("language", qualityProfile.getLanguage()) - .setParam("qualityProfile", qualityProfile.getName()); - return request.execute(); - } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RemoveUserActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RemoveUserActionTest.java index 61261d086be..ce49252156a 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RemoveUserActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RemoveUserActionTest.java @@ -43,7 +43,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LOGIN; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class RemoveUserActionTest { @@ -68,13 +67,13 @@ public class RemoveUserActionTest { assertThat(def.key()).isEqualTo("remove_user"); assertThat(def.isPost()).isTrue(); assertThat(def.isInternal()).isTrue(); - assertThat(def.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("organization", "qualityProfile", "language", "login"); + assertThat(def.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("qualityProfile", "language", "login"); } @Test public void remove_user() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); db.qualityProfiles().addUserPermission(profile, user); @@ -84,7 +83,6 @@ public class RemoveUserActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(response.getStatus()).isEqualTo(204); @@ -93,8 +91,8 @@ public class RemoveUserActionTest { @Test public void does_nothing_when_user_cannot_edit_profile() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); assertThat(db.getDbClient().qProfileEditUsersDao().exists(db.getSession(), profile, user)).isFalse(); @@ -104,7 +102,6 @@ public class RemoveUserActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(db.getDbClient().qProfileEditUsersDao().exists(db.getSession(), profile, user)).isFalse(); @@ -112,8 +109,8 @@ public class RemoveUserActionTest { @Test public void qp_administers_can_remove_user() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); db.qualityProfiles().addUserPermission(profile, user); @@ -123,7 +120,6 @@ public class RemoveUserActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(db.getDbClient().qProfileEditUsersDao().exists(db.getSession(), profile, user)).isFalse(); @@ -131,8 +127,8 @@ public class RemoveUserActionTest { @Test public void qp_editors_can_remove_user() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); db.qualityProfiles().addUserPermission(profile, user); @@ -144,7 +140,6 @@ public class RemoveUserActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(db.getDbClient().qProfileEditUsersDao().exists(db.getSession(), profile, user)).isFalse(); @@ -153,7 +148,7 @@ public class RemoveUserActionTest { @Test public void uses_default_organization_when_no_organization() { OrganizationDto organization = db.getDefaultOrganization(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); db.qualityProfiles().addUserPermission(profile, user); @@ -162,7 +157,7 @@ public class RemoveUserActionTest { ws.newRequest() .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_LOGIN, user.getLogin() ) + .setParam(PARAM_LOGIN, user.getLogin()) .execute(); assertThat(db.getDbClient().qProfileEditUsersDao().exists(db.getSession(), profile, user)).isFalse(); @@ -170,8 +165,8 @@ public class RemoveUserActionTest { @Test public void fail_when_user_does_not_exist() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); @@ -181,93 +176,50 @@ public class RemoveUserActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, "unknown") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_qprofile_does_not_exist() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name 'unknown' does not exist in organization '%s'", organization.getKey())); + expectedException.expectMessage("Quality Profile for language 'xoo' and name 'unknown' does not exist"); ws.newRequest() .setParam(PARAM_QUALITY_PROFILE, "unknown") .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .execute(); - } - - @Test - public void fail_when_qprofile_does_not_belong_to_organization() { - OrganizationDto organization = db.organizations().insert(); - UserDto user = db.users().insertUser(); - db.organizations().addMember(organization, user); - OrganizationDto anotherOrganization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(anotherOrganization, p -> p.setLanguage(XOO)); - userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); - - expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name '%s' does not exist in organization '%s'", profile.getName(), organization.getKey())); - - ws.newRequest() - .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_wrong_language() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("unknown")); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage("unknown")); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name '%s' does not exist in organization '%s'", profile.getName(), organization.getKey())); - - ws.newRequest() - .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .execute(); - } - - @Test - public void fail_when_user_is_not_member_of_organization() { - OrganizationDto organization = db.organizations().insert(); - OrganizationDto anotherOrganization = db.organizations().insert(); - UserDto user = db.users().insertUser(); - db.organizations().addMember(anotherOrganization, user); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); - userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); - - expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage(format("User '%s' is not member of organization '%s'", user.getLogin(), organization.getKey())); + expectedException.expectMessage(format("Quality Profile for language 'xoo' and name '%s' does not exist", profile.getName())); ws.newRequest() .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_qp_is_built_in() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO).setIsBuiltIn(true)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO).setIsBuiltIn(true)); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(BadRequestException.class); @@ -277,14 +229,13 @@ public class RemoveUserActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_not_enough_permission() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn(db.users().insertUser()).addPermission(OrganizationPermission.ADMINISTER_QUALITY_GATES, organization); @@ -295,7 +246,6 @@ public class RemoveUserActionTest { .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(PARAM_LOGIN, user.getLogin()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RenameActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RenameActionTest.java index ed4f1a0eb08..34fdc01101f 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RenameActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RenameActionTest.java @@ -70,7 +70,7 @@ public class RenameActionTest { RenameAction underTest = new RenameAction(dbClient, userSession, wsSupport); ws = new WsActionTester(underTest); - organization = db.organizations().insert(); + organization = db.organizations().getDefaultOrganization(); createProfiles(); } @@ -90,14 +90,12 @@ public class RenameActionTest { logInAsQProfileAdministrator(); QProfileDto qualityProfile1 = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organization.getUuid()) .setLanguage("xoo") .setName("Old, valid name"); db.qualityProfiles().insert(qualityProfile1); String qualityProfileKey1 = qualityProfile1.getKee(); QProfileDto qualityProfile2 = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organization.getUuid()) .setLanguage("xoo") .setName("Invalid, duplicated name"); db.qualityProfiles().insert(qualityProfile2); @@ -109,36 +107,9 @@ public class RenameActionTest { call(qualityProfileKey1, "Invalid, duplicated name"); } - @Test - public void allow_same_name_in_different_organizations() { - OrganizationDto organizationX = db.organizations().insert(); - OrganizationDto organizationY = db.organizations().insert(); - userSession.logIn() - .addPermission(ADMINISTER_QUALITY_PROFILES, organizationX); - - QProfileDto qualityProfile1 = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organizationX.getUuid()) - .setLanguage("xoo") - .setName("Old, unique name"); - db.qualityProfiles().insert(qualityProfile1); - String qualityProfileKey1 = qualityProfile1.getKee(); - - QProfileDto qualityProfile2 = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organizationY.getUuid()) - .setLanguage("xoo") - .setName("Duplicated name"); - db.qualityProfiles().insert(qualityProfile2); - String qualityProfileKey2 = qualityProfile2.getKee(); - - call(qualityProfileKey1, "Duplicated name"); - - QProfileDto reloaded = db.getDbClient().qualityProfileDao().selectByUuid(db.getSession(), qualityProfileKey1); - assertThat(reloaded.getName()).isEqualTo("Duplicated name"); - } - @Test public void as_qprofile_editor() { - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); UserDto user = db.users().insertUser(); db.qualityProfiles().addUserPermission(qualityProfile, user); userSession.logIn(user); @@ -171,13 +142,9 @@ public class RenameActionTest { @Test public void fail_if_not_profile_administrator() { - OrganizationDto organizationX = db.organizations().insert(); - OrganizationDto organizationY = db.organizations().insert(); - userSession.logIn(db.users().insertUser()) - .addPermission(ADMINISTER_QUALITY_PROFILES, organizationX); + userSession.logIn(db.users().insertUser()); - QProfileDto qualityProfile = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organizationY.getUuid()); + QProfileDto qualityProfile = QualityProfileTesting.newQualityProfileDto(); db.qualityProfiles().insert(qualityProfile); String qualityProfileKey = qualityProfile.getKee(); @@ -208,7 +175,7 @@ public class RenameActionTest { @Test public void fail_if_profile_is_built_in() { logInAsQProfileAdministrator(); - String qualityProfileKey = db.qualityProfiles().insert(organization, p -> p.setIsBuiltIn(true)).getKee(); + String qualityProfileKey = db.qualityProfiles().insert(p -> p.setIsBuiltIn(true)).getKee(); expectedException.expect(BadRequestException.class); @@ -247,18 +214,17 @@ public class RenameActionTest { } private String createNewValidQualityProfileKey() { - QProfileDto qualityProfile = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organization.getUuid()); + QProfileDto qualityProfile = QualityProfileTesting.newQualityProfileDto(); db.qualityProfiles().insert(qualityProfile); return qualityProfile.getKee(); } private void createProfiles() { - db.qualityProfiles().insert(organization, p -> p.setKee("sonar-way-xoo1-12345").setLanguage(xoo1Key).setName("Sonar way")); + db.qualityProfiles().insert(p -> p.setKee("sonar-way-xoo1-12345").setLanguage(xoo1Key).setName("Sonar way")); - QProfileDto parentXoo2 = db.qualityProfiles().insert(organization, p -> p.setKee("sonar-way-xoo2-23456").setLanguage(xoo2Key).setName("Sonar way")); + QProfileDto parentXoo2 = db.qualityProfiles().insert(p -> p.setKee("sonar-way-xoo2-23456").setLanguage(xoo2Key).setName("Sonar way")); - db.qualityProfiles().insert(organization, p -> p.setKee("my-sonar-way-xoo2-34567").setLanguage(xoo2Key).setName("My Sonar way").setParentKee(parentXoo2.getKee())); + db.qualityProfiles().insert(p -> p.setKee("my-sonar-way-xoo2-34567").setLanguage(xoo2Key).setName("My Sonar way").setParentKee(parentXoo2.getKee())); } private void logInAsQProfileAdministrator() { diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RestoreActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RestoreActionTest.java index ba6df2f3dc4..b794740e2ca 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RestoreActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/RestoreActionTest.java @@ -34,7 +34,6 @@ import org.sonar.db.DbTester; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.exceptions.ForbiddenException; -import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.server.language.LanguageTesting; import org.sonar.server.organization.DefaultOrganizationProvider; @@ -78,13 +77,10 @@ public class RestoreActionTest { assertThat(definition.description()).isNotEmpty(); // parameters - assertThat(definition.params()).hasSize(2); + assertThat(definition.params()).hasSize(1); WebService.Param backupParam = definition.param("backup"); assertThat(backupParam.isRequired()).isTrue(); assertThat(backupParam.since()).isNull(); - WebService.Param orgParam = definition.param("organization"); - assertThat(orgParam.isRequired()).isFalse(); - assertThat(orgParam.since()).isEqualTo("6.4"); } @Test @@ -96,7 +92,6 @@ public class RestoreActionTest { assertThat(backuper.restoredSummary.getProfile().getName()).isEqualTo("the-name-in-backup"); JsonAssert.assertJson(response.getInput()).isSimilarTo("{" + " \"profile\": {" + - " \"organization\": \"" + db.getDefaultOrganization().getKey() + "\"," + " \"name\": \"the-name-in-backup\"," + " \"language\": \"xoo\"," + " \"languageName\": \"Xoo\"," + @@ -110,7 +105,7 @@ public class RestoreActionTest { @Test public void profile_is_restored_on_specified_organization_with_the_name_provided_in_backup() { - OrganizationDto org = db.organizations().insert(); + OrganizationDto org = db.organizations().getDefaultOrganization(); logInAsQProfileAdministrator(org); TestResponse response = restore("", org.getKey()); @@ -118,7 +113,6 @@ public class RestoreActionTest { assertThat(backuper.restoredSummary.getProfile().getName()).isEqualTo("the-name-in-backup"); JsonAssert.assertJson(response.getInput()).isSimilarTo("{" + " \"profile\": {" + - " \"organization\": \"" + org.getKey() + "\"," + " \"name\": \"the-name-in-backup\"," + " \"language\": \"xoo\"," + " \"languageName\": \"Xoo\"," + @@ -153,27 +147,6 @@ public class RestoreActionTest { restore("", null); } - @Test - public void throw_ForbiddenException_if_not_profile_administrator_of_specified_organization() { - OrganizationDto org = db.organizations().insert(); - logInAsQProfileAdministrator(db.getDefaultOrganization()); - - expectedException.expect(ForbiddenException.class); - expectedException.expectMessage("Insufficient privileges"); - - restore("", org.getKey()); - } - - @Test - public void throw_NotFoundException_if_specified_organization_does_not_exist() { - userSession.logIn(); - - expectedException.expect(NotFoundException.class); - expectedException.expectMessage("No organization with key 'missing'"); - - restore("", "missing"); - } - @Test public void throw_UnauthorizedException_if_not_logged_in() { userSession.anonymous(); @@ -211,7 +184,7 @@ public class RestoreActionTest { } @Override - public QProfileRestoreSummary restore(DbSession dbSession, Reader backup, OrganizationDto organization, @Nullable String overriddenProfileName) { + public QProfileRestoreSummary restore(DbSession dbSession, Reader backup, @Nullable String overriddenProfileName) { if (restoredSummary != null) { throw new IllegalStateException("Already restored"); } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SearchActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SearchActionTest.java index 1f1d3b56e41..f71dac140d5 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SearchActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SearchActionTest.java @@ -32,7 +32,6 @@ import org.sonar.api.utils.System2; import org.sonar.core.util.stream.MoreCollectors; import org.sonar.db.DbClient; import org.sonar.db.DbTester; -import org.sonar.db.component.ComponentDto; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.permission.OrganizationPermission; import org.sonar.db.project.ProjectDto; @@ -42,7 +41,6 @@ import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.user.GroupDto; import org.sonar.db.user.UserDto; import org.sonar.server.component.ComponentFinder; -import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.organization.TestDefaultOrganizationProvider; @@ -53,21 +51,16 @@ import org.sonarqube.ws.MediaTypes; import org.sonarqube.ws.Qualityprofiles.SearchWsResponse; import org.sonarqube.ws.Qualityprofiles.SearchWsResponse.QualityProfile; -import static java.lang.String.format; import static java.util.stream.IntStream.range; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import static org.sonar.api.rule.RuleStatus.DEPRECATED; import static org.sonar.api.utils.DateUtils.parseDateTime; -import static org.sonar.db.component.ComponentTesting.newModuleDto; -import static org.sonar.db.organization.OrganizationDto.Subscription.FREE; -import static org.sonar.db.organization.OrganizationDto.Subscription.PAID; import static org.sonar.db.qualityprofile.QualityProfileTesting.newQualityProfileDto; import static org.sonar.server.language.LanguageTesting.newLanguage; import static org.sonar.test.JsonAssert.assertJson; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_DEFAULTS; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_PROJECT; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_PROJECT_KEY; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; @@ -102,7 +95,7 @@ public class SearchActionTest { @Test public void empty_when_no_language_installed() { WsActionTester ws = new WsActionTester(new SearchAction(userSession, new Languages(), dbClient, qProfileWsSupport, new ComponentFinder(dbClient, null))); - db.qualityProfiles().insert(db.getDefaultOrganization()); + db.qualityProfiles().insert(); SearchWsResponse result = call(ws.newRequest()); @@ -111,39 +104,20 @@ public class SearchActionTest { @Test public void default_organization() { - OrganizationDto defaultOrganization = db.getDefaultOrganization(); - OrganizationDto anotherOrganization = db.organizations().insert(); - QProfileDto profile1OnDefaultOrg = db.qualityProfiles().insert(defaultOrganization, p -> p.setLanguage(XOO1.getKey())); - QProfileDto profile2OnDefaultOrg = db.qualityProfiles().insert(defaultOrganization, p -> p.setLanguage(XOO2.getKey())); - QProfileDto profileOnAnotherOrg = db.qualityProfiles().insert(anotherOrganization, p -> p.setLanguage(XOO1.getKey())); + QProfileDto profile1OnDefaultOrg = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); + QProfileDto profile2OnDefaultOrg = db.qualityProfiles().insert(p -> p.setLanguage(XOO2.getKey())); SearchWsResponse result = call(ws.newRequest()); assertThat(result.getProfilesList()).extracting(QualityProfile::getKey) - .containsExactlyInAnyOrder(profile1OnDefaultOrg.getKee(), profile2OnDefaultOrg.getKee()) - .doesNotContain(profileOnAnotherOrg.getKee()); - } - - @Test - public void specific_organization() { - OrganizationDto defaultOrganization = db.getDefaultOrganization(); - OrganizationDto specificOrganization = db.organizations().insert(); - QProfileDto profile1OnSpecificOrg = db.qualityProfiles().insert(specificOrganization, p -> p.setLanguage(XOO1.getKey())); - QProfileDto profile2OnSpecificOrg = db.qualityProfiles().insert(specificOrganization, p -> p.setLanguage(XOO2.getKey())); - QProfileDto profileOnDefaultOrg = db.qualityProfiles().insert(defaultOrganization, p -> p.setLanguage(XOO1.getKey())); - - SearchWsResponse result = call(ws.newRequest().setParam(PARAM_ORGANIZATION, specificOrganization.getKey())); - - assertThat(result.getProfilesList()).extracting(QualityProfile::getKey) - .containsExactlyInAnyOrder(profile1OnSpecificOrg.getKee(), profile2OnSpecificOrg.getKee()) - .doesNotContain(profileOnDefaultOrg.getKee()); + .containsExactlyInAnyOrder(profile1OnDefaultOrg.getKee(), profile2OnDefaultOrg.getKee()); } @Test public void filter_on_default_profile() { - QProfileDto defaultProfile1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); - QProfileDto defaultProfile2 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO2.getKey())); - QProfileDto nonDefaultProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); + QProfileDto defaultProfile1 = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); + QProfileDto defaultProfile2 = db.qualityProfiles().insert(p -> p.setLanguage(XOO2.getKey())); + QProfileDto nonDefaultProfile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); db.qualityProfiles().setAsDefault(defaultProfile1, defaultProfile2); SearchWsResponse result = call(ws.newRequest().setParam(PARAM_DEFAULTS, "true")); @@ -155,9 +129,9 @@ public class SearchActionTest { @Test public void does_not_filter_when_defaults_is_false() { - QProfileDto defaultProfile1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); - QProfileDto defaultProfile2 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO2.getKey())); - QProfileDto nonDefaultProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); + QProfileDto defaultProfile1 = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); + QProfileDto defaultProfile2 = db.qualityProfiles().insert(p -> p.setLanguage(XOO2.getKey())); + QProfileDto nonDefaultProfile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); db.qualityProfiles().setAsDefault(defaultProfile1, defaultProfile2); SearchWsResponse result = call(ws.newRequest().setParam(PARAM_DEFAULTS, "false")); @@ -168,9 +142,9 @@ public class SearchActionTest { @Test public void filter_on_language() { - QProfileDto profile1OnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); - QProfileDto profile2OnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); - QProfileDto profileOnXoo2 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO2.getKey())); + QProfileDto profile1OnXoo1 = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); + QProfileDto profile2OnXoo1 = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); + QProfileDto profileOnXoo2 = db.qualityProfiles().insert(p -> p.setLanguage(XOO2.getKey())); SearchWsResponse result = call(ws.newRequest().setParam(PARAM_LANGUAGE, XOO1.getKey())); @@ -181,9 +155,9 @@ public class SearchActionTest { @Test public void ignore_profiles_on_unknown_language() { - QProfileDto profile1OnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); - QProfileDto profile2OnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO2.getKey())); - QProfileDto profileOnUnknownLanguage = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage("unknown")); + QProfileDto profile1OnXoo1 = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); + QProfileDto profile2OnXoo1 = db.qualityProfiles().insert(p -> p.setLanguage(XOO2.getKey())); + QProfileDto profileOnUnknownLanguage = db.qualityProfiles().insert(p -> p.setLanguage("unknown")); SearchWsResponse result = call(ws.newRequest()); @@ -194,10 +168,10 @@ public class SearchActionTest { @Test public void filter_on_profile_name() { - QProfileDto sonarWayOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setName("Sonar way").setLanguage(XOO1.getKey())); - QProfileDto sonarWayOnXoo2 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setName("Sonar way").setLanguage(XOO1.getKey())); - QProfileDto sonarWayInCamelCase = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setName("Sonar Way").setLanguage(XOO2.getKey())); - QProfileDto anotherProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setName("Another").setLanguage(XOO2.getKey())); + QProfileDto sonarWayOnXoo1 = db.qualityProfiles().insert(p -> p.setName("Sonar way").setLanguage(XOO1.getKey())); + QProfileDto sonarWayOnXoo2 = db.qualityProfiles().insert(p -> p.setName("Sonar way").setLanguage(XOO1.getKey())); + QProfileDto sonarWayInCamelCase = db.qualityProfiles().insert(p -> p.setName("Sonar Way").setLanguage(XOO2.getKey())); + QProfileDto anotherProfile = db.qualityProfiles().insert(p -> p.setName("Another").setLanguage(XOO2.getKey())); SearchWsResponse result = call(ws.newRequest().setParam(PARAM_QUALITY_PROFILE, "Sonar way")); @@ -208,9 +182,9 @@ public class SearchActionTest { @Test public void filter_on_defaults_and_name() { - QProfileDto sonarWayOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setName("Sonar way").setLanguage(XOO1.getKey())); - QProfileDto sonarWayOnXoo2 = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setName("Sonar way").setLanguage(XOO2.getKey())); - QProfileDto anotherProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setName("Another").setLanguage(XOO2.getKey())); + QProfileDto sonarWayOnXoo1 = db.qualityProfiles().insert(p -> p.setName("Sonar way").setLanguage(XOO1.getKey())); + QProfileDto sonarWayOnXoo2 = db.qualityProfiles().insert(p -> p.setName("Sonar way").setLanguage(XOO2.getKey())); + QProfileDto anotherProfile = db.qualityProfiles().insert(p -> p.setName("Another").setLanguage(XOO2.getKey())); db.qualityProfiles().setAsDefault(sonarWayOnXoo1, anotherProfile); SearchWsResponse result = call(ws.newRequest() @@ -225,9 +199,9 @@ public class SearchActionTest { @Test public void filter_on_project_key() { ProjectDto project = db.components().insertPrivateProjectDto(); - QProfileDto profileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); - QProfileDto defaultProfileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); - QProfileDto defaultProfileOnXoo2 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO2.getKey())); + QProfileDto profileOnXoo1 = db.qualityProfiles().insert(q -> q.setLanguage(XOO1.getKey())); + QProfileDto defaultProfileOnXoo1 = db.qualityProfiles().insert(q -> q.setLanguage(XOO1.getKey())); + QProfileDto defaultProfileOnXoo2 = db.qualityProfiles().insert(q -> q.setLanguage(XOO2.getKey())); db.qualityProfiles().associateWithProject(project, profileOnXoo1); db.qualityProfiles().setAsDefault(defaultProfileOnXoo1, defaultProfileOnXoo2); @@ -242,9 +216,9 @@ public class SearchActionTest { @Test public void filter_on_project_key_and_default() { ProjectDto project = db.components().insertPrivateProjectDto(); - QProfileDto profileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); - QProfileDto defaultProfileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); - QProfileDto defaultProfileOnXoo2 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO2.getKey())); + QProfileDto profileOnXoo1 = db.qualityProfiles().insert(q -> q.setLanguage(XOO1.getKey())); + QProfileDto defaultProfileOnXoo1 = db.qualityProfiles().insert(q -> q.setLanguage(XOO1.getKey())); + QProfileDto defaultProfileOnXoo2 = db.qualityProfiles().insert(q -> q.setLanguage(XOO2.getKey())); db.qualityProfiles().associateWithProject(project, profileOnXoo1); db.qualityProfiles().setAsDefault(defaultProfileOnXoo1, defaultProfileOnXoo2); @@ -261,9 +235,9 @@ public class SearchActionTest { @Test public void filter_on_deprecated_project_key_and_default() { ProjectDto project = db.components().insertPrivateProjectDto(); - QProfileDto profileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); - QProfileDto defaultProfileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); - QProfileDto defaultProfileOnXoo2 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO2.getKey())); + QProfileDto profileOnXoo1 = db.qualityProfiles().insert(q -> q.setLanguage(XOO1.getKey())); + QProfileDto defaultProfileOnXoo1 = db.qualityProfiles().insert(q -> q.setLanguage(XOO1.getKey())); + QProfileDto defaultProfileOnXoo2 = db.qualityProfiles().insert(q -> q.setLanguage(XOO2.getKey())); db.qualityProfiles().associateWithProject(project, profileOnXoo1); db.qualityProfiles().setAsDefault(defaultProfileOnXoo1, defaultProfileOnXoo2); @@ -280,9 +254,9 @@ public class SearchActionTest { @Test public void empty_when_filtering_on_project_and_no_language_installed() { WsActionTester ws = new WsActionTester(new SearchAction(userSession, new Languages(), dbClient, qProfileWsSupport, new ComponentFinder(dbClient, null))); - db.qualityProfiles().insert(db.getDefaultOrganization()); + db.qualityProfiles().insert(); ProjectDto project = db.components().insertPrivateProjectDto(); - QProfileDto profileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); + QProfileDto profileOnXoo1 = db.qualityProfiles().insert(q -> q.setLanguage(XOO1.getKey())); db.qualityProfiles().associateWithProject(project, profileOnXoo1); SearchWsResponse result = call(ws.newRequest() @@ -294,16 +268,15 @@ public class SearchActionTest { @Test public void actions_when_user_is_global_qprofile_administer() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto customProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey())); - QProfileDto builtInProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey()).setIsBuiltIn(true)); - QProfileDto defaultProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey())); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto customProfile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); + QProfileDto builtInProfile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey()).setIsBuiltIn(true)); + QProfileDto defaultProfile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); db.qualityProfiles().setAsDefault(defaultProfile); UserDto user = db.users().insertUser(); userSession.logIn(user).addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); - SearchWsResponse result = call(ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey())); + SearchWsResponse result = call(ws.newRequest()); assertThat(result.getProfilesList()) .extracting(QualityProfile::getKey, qp -> qp.getActions().getEdit(), qp -> qp.getActions().getCopy(), qp -> qp.getActions().getSetAsDefault(), @@ -317,19 +290,18 @@ public class SearchActionTest { @Test public void actions_when_user_can_edit_profile() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile1 = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey())); - QProfileDto profile2 = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO2.getKey())); - QProfileDto profile3 = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO2.getKey())); - QProfileDto builtInProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO2.getKey()).setIsBuiltIn(true)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile1 = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); + QProfileDto profile2 = db.qualityProfiles().insert(p -> p.setLanguage(XOO2.getKey())); + QProfileDto profile3 = db.qualityProfiles().insert(p -> p.setLanguage(XOO2.getKey())); + QProfileDto builtInProfile = db.qualityProfiles().insert(p -> p.setLanguage(XOO2.getKey()).setIsBuiltIn(true)); UserDto user = db.users().insertUser(); GroupDto group = db.users().insertGroup(organization); db.qualityProfiles().addUserPermission(profile1, user); db.qualityProfiles().addGroupPermission(profile3, group); userSession.logIn(user).setGroups(group); - SearchWsResponse result = call(ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey())); + SearchWsResponse result = call(ws.newRequest()); assertThat(result.getProfilesList()) .extracting(QualityProfile::getKey, qp -> qp.getActions().getEdit(), qp -> qp.getActions().getCopy(), qp -> qp.getActions().getSetAsDefault(), @@ -344,12 +316,10 @@ public class SearchActionTest { @Test public void actions_when_not_logged_in() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey())); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); userSession.anonymous(); - SearchWsResponse result = call(ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey())); + SearchWsResponse result = call(ws.newRequest()); assertThat(result.getProfilesList()) .extracting(QualityProfile::getKey, qp -> qp.getActions().getEdit(), qp -> qp.getActions().getCopy(), qp -> qp.getActions().getSetAsDefault(), @@ -360,7 +330,7 @@ public class SearchActionTest { @Test public void statistics_on_active_rules() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); RuleDefinitionDto rule = db.rules().insertRule(r -> r.setLanguage(XOO1.getKey())).getDefinition(); RuleDefinitionDto deprecatedRule1 = db.rules().insertRule(r -> r.setStatus(DEPRECATED)).getDefinition(); RuleDefinitionDto deprecatedRule2 = db.rules().insertRule(r -> r.setStatus(DEPRECATED)).getDefinition(); @@ -380,8 +350,8 @@ public class SearchActionTest { public void statistics_on_projects() { ProjectDto project1 = db.components().insertPrivateProjectDto(); ProjectDto project2 = db.components().insertPrivateProjectDto(); - QProfileDto profileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); - QProfileDto defaultProfileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); + QProfileDto profileOnXoo1 = db.qualityProfiles().insert(q -> q.setLanguage(XOO1.getKey())); + QProfileDto defaultProfileOnXoo1 = db.qualityProfiles().insert(q -> q.setLanguage(XOO1.getKey())); db.qualityProfiles().associateWithProject(project1, profileOnXoo1); db.qualityProfiles().associateWithProject(project2, profileOnXoo1); db.qualityProfiles().setAsDefault(defaultProfileOnXoo1); @@ -397,7 +367,6 @@ public class SearchActionTest { public void map_dates() { long time = DateUtils.parseDateTime("2016-12-22T19:10:03+0100").getTime(); qualityProfileDb.insert(newQualityProfileDto() - .setOrganizationUuid(defaultOrganizationProvider.get().getUuid()) .setLanguage(XOO1.getKey()) .setRulesUpdatedAt("2016-12-21T19:10:03+0100") .setLastUsed(time) @@ -411,30 +380,6 @@ public class SearchActionTest { assertThat(parseDateTime(result.getProfiles(0).getUserUpdatedAt()).getTime()).isEqualTo(time); } - @Test - public void return_qprofile_on_free_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(FREE)); - QProfileDto qProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey())); - - SearchWsResponse result = call(ws.newRequest().setParam(PARAM_ORGANIZATION, organization.getKey())); - - assertThat(result.getProfilesList()).extracting(QualityProfile::getKey) - .containsExactlyInAnyOrder(qProfile.getKee()); - } - - @Test - public void return_qprofile_on_paid_organization_when_user_is_member() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto qProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey())); - UserDto user = db.users().insertUser(); - userSession.logIn(user).addMembership(organization); - - SearchWsResponse result = call(ws.newRequest().setParam(PARAM_ORGANIZATION, organization.getKey())); - - assertThat(result.getProfilesList()).extracting(QualityProfile::getKey) - .containsExactlyInAnyOrder(qProfile.getKee()); - } - @Test public void fail_if_project_does_not_exist() { expectedException.expect(NotFoundException.class); @@ -443,54 +388,19 @@ public class SearchActionTest { call(ws.newRequest().setParam(PARAM_PROJECT, "unknown-project")); } - @Test - public void fail_if_project_is_on_another_organization() { - OrganizationDto organization = db.organizations().insert(); - OrganizationDto anotherOrganization = db.organizations().insert(); - ComponentDto project = db.components().insertPrivateProject(anotherOrganization); - - expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Project '%s' not found", project.getDbKey())); - - call(ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .setParam(PARAM_PROJECT, project.getDbKey())); - } - - @Test - public void fail_if_organization_does_not_exist() { - expectedException.expect(NotFoundException.class); - expectedException.expectMessage("No organization with key 'unknown-organization'"); - - call(ws.newRequest().setParam(PARAM_ORGANIZATION, "unknown-organization")); - } - - @Test - public void fail_on_paid_organization_when_not_member() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - userSession.logIn(); - - expectedException.expect(ForbiddenException.class); - expectedException.expectMessage(format("You're not member of organization '%s'", organization.getKey())); - - call(ws.newRequest().setParam(PARAM_ORGANIZATION, organization.getKey())); - } - @Test public void json_example() { - OrganizationDto organization = db.organizations().insertForKey("My Organization"); // languages Language cs = newLanguage("cs", "C#"); Language java = newLanguage("java", "Java"); Language python = newLanguage("py", "Python"); // profiles - QProfileDto sonarWayCs = db.qualityProfiles().insert(organization, + QProfileDto sonarWayCs = db.qualityProfiles().insert( p -> p.setName("Sonar way").setKee("AU-TpxcA-iU5OvuD2FL3").setIsBuiltIn(true).setLanguage(cs.getKey())); - QProfileDto myCompanyProfile = db.qualityProfiles().insert(organization, - p -> p.setName("My Company Profile").setKee("iU5OvuD2FLz").setLanguage(java.getKey())); - QProfileDto myBuProfile = db.qualityProfiles().insert(organization, + QProfileDto myCompanyProfile = db.qualityProfiles().insert(p -> p.setName("My Company Profile").setKee("iU5OvuD2FLz").setLanguage(java.getKey())); + QProfileDto myBuProfile = db.qualityProfiles().insert( p -> p.setName("My BU Profile").setKee("AU-TpxcA-iU5OvuD2FL1").setParentKee(myCompanyProfile.getKee()).setLanguage(java.getKey())); - QProfileDto sonarWayPython = db.qualityProfiles().insert(organization, + QProfileDto sonarWayPython = db.qualityProfiles().insert( p -> p.setName("Sonar way").setKee("AU-TpxcB-iU5OvuD2FL7").setIsBuiltIn(true).setLanguage(python.getKey())); db.qualityProfiles().setAsDefault(sonarWayCs, myCompanyProfile, sonarWayPython); // rules @@ -511,7 +421,7 @@ public class SearchActionTest { .forEach(rule -> db.qualityProfiles().activateRule(sonarWayCs, rule)); // project range(0, 7) - .mapToObj(i -> db.components().insertPrivateProjectDto(organization)) + .mapToObj(i -> db.components().insertPrivateProjectDto()) .forEach(project -> db.qualityProfiles().associateWithProject(project, myBuProfile)); // User UserDto user = db.users().insertUser(); @@ -521,7 +431,7 @@ public class SearchActionTest { underTest = new SearchAction(userSession, new Languages(cs, java, python), dbClient, qProfileWsSupport, new ComponentFinder(dbClient, null)); ws = new WsActionTester(underTest); - String result = ws.newRequest().setParam(PARAM_ORGANIZATION, organization.getKey()).execute().getInput(); + String result = ws.newRequest().execute().getInput(); assertJson(result).ignoreFields("ruleUpdatedAt", "lastUsed", "userUpdatedAt") .isSimilarTo(ws.getDef().responseExampleAsString()); } @@ -541,13 +451,6 @@ public class SearchActionTest { tuple("6.6", "Add available actions 'edit', 'copy' and 'setAsDefault' and global action 'create'"), tuple("7.0", "Add available actions 'delete' and 'associateProjects'")); - WebService.Param organization = definition.param("organization"); - assertThat(organization).isNotNull(); - assertThat(organization.isRequired()).isFalse(); - assertThat(organization.isInternal()).isTrue(); - assertThat(organization.description()).isNotEmpty(); - assertThat(organization.since()).isEqualTo("6.4"); - WebService.Param defaults = definition.param("defaults"); assertThat(defaults.defaultValue()).isEqualTo("false"); assertThat(defaults.description()).isEqualTo("If set to true, return only the quality profiles marked as default for each language"); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SearchGroupsActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SearchGroupsActionTest.java index 4fbdb03a29e..04fa1fd4506 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SearchGroupsActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SearchGroupsActionTest.java @@ -50,11 +50,9 @@ import static org.sonar.db.user.GroupTesting.newGroupDto; import static org.sonar.test.JsonAssert.assertJson; import static org.sonarqube.ws.MediaTypes.JSON; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class SearchGroupsActionTest { - private static final String XOO = "xoo"; private static final String FOO = "foo"; private static final Languages LANGUAGES = LanguageTesting.newLanguages(XOO, FOO); @@ -77,20 +75,19 @@ public class SearchGroupsActionTest { assertThat(def.isPost()).isFalse(); assertThat(def.isInternal()).isTrue(); assertThat(def.params()).extracting(WebService.Param::key) - .containsExactlyInAnyOrder("organization", "qualityProfile", "language", "selected", "q", "p", "ps"); + .containsExactlyInAnyOrder("qualityProfile", "language", "selected", "q", "p", "ps"); } @Test public void test_example() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group1 = db.users().insertGroup(newGroupDto().setName("users").setDescription("Users").setOrganizationUuid(organization.getUuid())); GroupDto group2 = db.users().insertGroup(newGroupDto().setName("administrators").setDescription("Administrators").setOrganizationUuid(organization.getUuid())); db.qualityProfiles().addGroupPermission(profile, group1); userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); String result = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") @@ -103,15 +100,14 @@ public class SearchGroupsActionTest { @Test public void search_all_groups() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group1 = db.users().insertGroup(organization); GroupDto group2 = db.users().insertGroup(organization); db.qualityProfiles().addGroupPermission(profile, group1); userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); SearchGroupsResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") @@ -125,15 +121,14 @@ public class SearchGroupsActionTest { @Test public void search_selected_groups() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group1 = db.users().insertGroup(organization); GroupDto group2 = db.users().insertGroup(organization); db.qualityProfiles().addGroupPermission(profile, group1); userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); SearchGroupsResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "selected") @@ -146,15 +141,14 @@ public class SearchGroupsActionTest { @Test public void search_deselected_groups() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); GroupDto group1 = db.users().insertGroup(organization); GroupDto group2 = db.users().insertGroup(organization); db.qualityProfiles().addGroupPermission(profile, group1); userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); SearchGroupsResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "deselected") @@ -167,8 +161,8 @@ public class SearchGroupsActionTest { @Test public void search_by_name() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert( p -> p.setLanguage(XOO)); GroupDto group1 = db.users().insertGroup(organization, "sonar-users-project"); GroupDto group2 = db.users().insertGroup(organization, "sonar-users-qprofile"); GroupDto group3 = db.users().insertGroup(organization, "sonar-admin"); @@ -178,7 +172,6 @@ public class SearchGroupsActionTest { userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); SearchGroupsResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(TEXT_QUERY, "UsErS") @@ -191,14 +184,13 @@ public class SearchGroupsActionTest { @Test public void group_without_description() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert( p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(newGroupDto().setDescription(null).setOrganizationUuid(organization.getUuid())); db.qualityProfiles().addGroupPermission(profile, group); userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); SearchGroupsResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") @@ -210,8 +202,8 @@ public class SearchGroupsActionTest { @Test public void paging_search() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert( p -> p.setLanguage(XOO)); GroupDto group3 = db.users().insertGroup(organization, "group3"); GroupDto group1 = db.users().insertGroup(organization, "group1"); GroupDto group2 = db.users().insertGroup(organization, "group2"); @@ -220,43 +212,40 @@ public class SearchGroupsActionTest { userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); assertThat(ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") .setParam(PAGE, "1") .setParam(PAGE_SIZE, "1") .executeProtobuf(SearchGroupsResponse.class).getGroupsList()) - .extracting(SearchGroupsResponse.Group::getName) - .containsExactly(group1.getName()); + .extracting(SearchGroupsResponse.Group::getName) + .containsExactly(group1.getName()); assertThat(ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") .setParam(PAGE, "3") .setParam(PAGE_SIZE, "1") .executeProtobuf(SearchGroupsResponse.class).getGroupsList()) - .extracting(SearchGroupsResponse.Group::getName) - .containsExactly(group3.getName()); + .extracting(SearchGroupsResponse.Group::getName) + .containsExactly(group3.getName()); assertThat(ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") .setParam(PAGE, "1") .setParam(PAGE_SIZE, "10") .executeProtobuf(SearchGroupsResponse.class).getGroupsList()) - .extracting(SearchGroupsResponse.Group::getName) - .containsExactly(group1.getName(), group2.getName(), group3.getName()); + .extracting(SearchGroupsResponse.Group::getName) + .containsExactly(group1.getName(), group2.getName(), group3.getName()); } @Test public void uses_default_organization_when_no_organization() { OrganizationDto organization = db.getDefaultOrganization(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + QProfileDto profile = db.qualityProfiles().insert( p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); db.qualityProfiles().addGroupPermission(profile, group); userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); @@ -272,14 +261,13 @@ public class SearchGroupsActionTest { @Test public void qp_administers_can_search_groups() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert( p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); db.qualityProfiles().addGroupPermission(profile, group); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); SearchGroupsResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") @@ -290,8 +278,8 @@ public class SearchGroupsActionTest { @Test public void qp_editors_can_search_groups() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert( p -> p.setLanguage(XOO)); GroupDto group = db.users().insertGroup(organization); db.qualityProfiles().addGroupPermission(profile, group); UserDto userAllowedToEditProfile = db.users().insertUser(); @@ -299,7 +287,6 @@ public class SearchGroupsActionTest { userSession.logIn(userAllowedToEditProfile); SearchGroupsResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") @@ -310,47 +297,28 @@ public class SearchGroupsActionTest { @Test public void fail_when_qprofile_does_not_exist() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name 'unknown' does not exist in organization '%s'", organization.getKey())); + expectedException.expectMessage("Quality Profile for language 'xoo' and name 'unknown' does not exist"); ws.newRequest() .setParam(PARAM_QUALITY_PROFILE, "unknown") .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .execute(); - } - - @Test - public void fail_when_qprofile_does_not_belong_to_organization() { - OrganizationDto organization = db.organizations().insert(); - OrganizationDto anotherOrganization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(anotherOrganization, p -> p.setLanguage(XOO)); - userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); - - expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name '%s' does not exist in organization '%s'", profile.getName(), organization.getKey())); - - ws.newRequest() - .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_wrong_language() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert( p -> p.setLanguage(XOO)); userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'foo' and name '%s' does not exist in organization '%s'", profile.getName(), organization.getKey())); + expectedException.expectMessage(format("Quality Profile for language 'foo' and name '%s' does not exist", profile.getName(), organization.getKey())); ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, FOO) .executeProtobuf(SearchGroupsResponse.class); @@ -358,8 +326,8 @@ public class SearchGroupsActionTest { @Test public void fail_when_not_enough_permission() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert( p -> p.setLanguage(XOO)); userSession.logIn(db.users().insertUser()).addPermission(OrganizationPermission.ADMINISTER_QUALITY_GATES, organization); expectedException.expect(ForbiddenException.class); @@ -367,7 +335,6 @@ public class SearchGroupsActionTest { ws.newRequest() .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SearchUsersActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SearchUsersActionTest.java index 9f90246ba28..064a158a315 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SearchUsersActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SearchUsersActionTest.java @@ -51,7 +51,6 @@ import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_ import static org.sonar.test.JsonAssert.assertJson; import static org.sonarqube.ws.MediaTypes.JSON; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class SearchUsersActionTest { @@ -79,15 +78,15 @@ public class SearchUsersActionTest { assertThat(def.isPost()).isFalse(); assertThat(def.isInternal()).isTrue(); assertThat(def.params()).extracting(WebService.Param::key) - .containsExactlyInAnyOrder("organization", "qualityProfile", "language", "selected", "q", "p", "ps"); + .containsExactlyInAnyOrder("qualityProfile", "language", "selected", "q", "p", "ps"); } @Test public void test_example() { avatarResolver = new AvatarResolverImpl(); ws = new WsActionTester(new SearchUsersAction(db.getDbClient(), wsSupport, LANGUAGES, avatarResolver)); - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user1 = db.users().insertUser(u -> u.setLogin("admin").setName("Administrator").setEmail("admin@email.com")); UserDto user2 = db.users().insertUser(u -> u.setLogin("george.orwell").setName("George Orwell").setEmail("george@orwell.com")); db.organizations().addMember(organization, user1); @@ -96,7 +95,6 @@ public class SearchUsersActionTest { userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); String result = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") @@ -109,8 +107,8 @@ public class SearchUsersActionTest { @Test public void search_all_users() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user1 = db.users().insertUser(u -> u.setEmail("user1@email.com")); UserDto user2 = db.users().insertUser(u -> u.setEmail("user2@email.com")); db.organizations().addMember(organization, user1); @@ -119,13 +117,13 @@ public class SearchUsersActionTest { userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); SearchUsersResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") .executeProtobuf(SearchUsersResponse.class); - assertThat(response.getUsersList()).extracting(SearchUsersResponse.User::getLogin, SearchUsersResponse.User::getName, SearchUsersResponse.User::getAvatar, SearchUsersResponse.User::getSelected) + assertThat(response.getUsersList()) + .extracting(SearchUsersResponse.User::getLogin, SearchUsersResponse.User::getName, SearchUsersResponse.User::getAvatar, SearchUsersResponse.User::getSelected) .containsExactlyInAnyOrder( tuple(user1.getLogin(), user1.getName(), "user1@email.com_avatar", true), tuple(user2.getLogin(), user2.getName(), "user2@email.com_avatar", false)); @@ -133,8 +131,8 @@ public class SearchUsersActionTest { @Test public void search_selected_users() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user1 = db.users().insertUser(); UserDto user2 = db.users().insertUser(); db.organizations().addMember(organization, user1); @@ -143,7 +141,6 @@ public class SearchUsersActionTest { userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); SearchUsersResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "selected") @@ -156,8 +153,8 @@ public class SearchUsersActionTest { @Test public void search_deselected_users() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user1 = db.users().insertUser(); UserDto user2 = db.users().insertUser(); db.organizations().addMember(organization, user1); @@ -166,7 +163,6 @@ public class SearchUsersActionTest { userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); SearchUsersResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "deselected") @@ -179,8 +175,8 @@ public class SearchUsersActionTest { @Test public void search_by_login() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user1 = db.users().insertUser(); UserDto user2 = db.users().insertUser(); db.organizations().addMember(organization, user1); @@ -189,7 +185,6 @@ public class SearchUsersActionTest { userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); SearchUsersResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(TEXT_QUERY, user1.getLogin()) @@ -202,8 +197,8 @@ public class SearchUsersActionTest { @Test public void search_by_name() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user1 = db.users().insertUser(u -> u.setName("John Doe")); UserDto user2 = db.users().insertUser(u -> u.setName("Jane Doe")); UserDto user3 = db.users().insertUser(u -> u.setName("John Smith")); @@ -214,7 +209,6 @@ public class SearchUsersActionTest { userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); SearchUsersResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(TEXT_QUERY, "ohn") @@ -227,15 +221,14 @@ public class SearchUsersActionTest { @Test public void user_without_email() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(u -> u.setEmail(null)); db.organizations().addMember(organization, user); db.qualityProfiles().addUserPermission(profile, user); userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); SearchUsersResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") @@ -247,8 +240,8 @@ public class SearchUsersActionTest { @Test public void paging_search() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user2 = db.users().insertUser(u -> u.setName("user2")); UserDto user3 = db.users().insertUser(u -> u.setName("user3")); UserDto user1 = db.users().insertUser(u -> u.setName("user1")); @@ -260,43 +253,40 @@ public class SearchUsersActionTest { userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); assertThat(ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") .setParam(PAGE, "1") .setParam(PAGE_SIZE, "1") .executeProtobuf(SearchUsersResponse.class).getUsersList()) - .extracting(SearchUsersResponse.User::getLogin) - .containsExactly(user1.getLogin()); + .extracting(SearchUsersResponse.User::getLogin) + .containsExactly(user1.getLogin()); assertThat(ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") .setParam(PAGE, "3") .setParam(PAGE_SIZE, "1") .executeProtobuf(SearchUsersResponse.class).getUsersList()) - .extracting(SearchUsersResponse.User::getLogin) - .containsExactly(user3.getLogin()); + .extracting(SearchUsersResponse.User::getLogin) + .containsExactly(user3.getLogin()); assertThat(ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") .setParam(PAGE, "1") .setParam(PAGE_SIZE, "10") .executeProtobuf(SearchUsersResponse.class).getUsersList()) - .extracting(SearchUsersResponse.User::getLogin) - .containsExactly(user1.getLogin(), user2.getLogin(), user3.getLogin()); + .extracting(SearchUsersResponse.User::getLogin) + .containsExactly(user1.getLogin(), user2.getLogin(), user3.getLogin()); } @Test public void uses_default_organization_when_no_organization() { OrganizationDto organization = db.getDefaultOrganization(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user1 = db.users().insertUser(); db.organizations().addMember(organization, user1); db.qualityProfiles().addUserPermission(profile, user1); @@ -313,14 +303,13 @@ public class SearchUsersActionTest { @Test public void qp_administers_can_search_users() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); SearchUsersResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") @@ -331,74 +320,51 @@ public class SearchUsersActionTest { @Test public void qp_editors_can_search_users() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); - db.organizations().addMember(organization, user); + db.organizations().addMember(db.organizations().getDefaultOrganization(), user); UserDto userAllowedToEditProfile = db.users().insertUser(); db.qualityProfiles().addUserPermission(profile, userAllowedToEditProfile); userSession.logIn(userAllowedToEditProfile); SearchUsersResponse response = ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) .setParam(SELECTED, "all") .executeProtobuf(SearchUsersResponse.class); - assertThat(response.getUsersList()).extracting(SearchUsersResponse.User::getLogin).containsExactlyInAnyOrder(user.getLogin()); + assertThat(response.getUsersList()).extracting(SearchUsersResponse.User::getLogin).containsExactlyInAnyOrder(user.getLogin(), userAllowedToEditProfile.getLogin()); } @Test public void fail_when_qprofile_does_not_exist() { - OrganizationDto organization = db.organizations().insert(); + OrganizationDto organization = db.organizations().getDefaultOrganization(); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name 'unknown' does not exist in organization '%s'", organization.getKey())); + expectedException.expectMessage("Quality Profile for language 'xoo' and name 'unknown' does not exist"); ws.newRequest() .setParam(PARAM_QUALITY_PROFILE, "unknown") .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .execute(); - } - - @Test - public void fail_when_qprofile_does_not_belong_to_organization() { - OrganizationDto organization = db.organizations().insert(); - UserDto user = db.users().insertUser(); - db.organizations().addMember(organization, user); - OrganizationDto anotherOrganization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(anotherOrganization, p -> p.setLanguage(XOO)); - userSession.logIn().addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); - - expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'xoo' and name '%s' does not exist in organization '%s'", profile.getName(), organization.getKey())); - - ws.newRequest() - .setParam(PARAM_QUALITY_PROFILE, profile.getName()) - .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } @Test public void fail_when_wrong_language() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user1 = db.users().insertUser(); db.organizations().addMember(organization, user1); db.qualityProfiles().addUserPermission(profile, user1); userSession.logIn().addPermission(ADMINISTER_QUALITY_PROFILES, organization); expectedException.expect(NotFoundException.class); - expectedException.expectMessage(format("Quality Profile for language 'foo' and name '%s' does not exist in organization '%s'", profile.getName(), organization.getKey())); + expectedException.expectMessage(format("Quality Profile for language 'foo' and name '%s' does not exist", profile.getName())); ws.newRequest() - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, FOO) .executeProtobuf(SearchUsersResponse.class); @@ -406,8 +372,8 @@ public class SearchUsersActionTest { @Test public void fail_when_not_enough_permission() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO)); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO)); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn(db.users().insertUser()).addPermission(OrganizationPermission.ADMINISTER_QUALITY_GATES, organization); @@ -417,7 +383,6 @@ public class SearchUsersActionTest { ws.newRequest() .setParam(PARAM_QUALITY_PROFILE, profile.getName()) .setParam(PARAM_LANGUAGE, XOO) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SetDefaultActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SetDefaultActionTest.java index 234123245b5..9253fa22ea0 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SetDefaultActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/SetDefaultActionTest.java @@ -29,7 +29,6 @@ import org.sonar.api.server.ws.WebService.Param; import org.sonar.db.DbClient; import org.sonar.db.DbTester; import org.sonar.db.organization.OrganizationDto; -import org.sonar.db.organization.OrganizationTesting; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.qualityprofile.QualityProfileTesting; import org.sonar.server.exceptions.ForbiddenException; @@ -46,7 +45,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.sonar.db.permission.OrganizationPermission.ADMINISTER_QUALITY_PROFILES; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_KEY; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_LANGUAGE; -import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_ORGANIZATION; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_QUALITY_PROFILE; public class SetDefaultActionTest { @@ -81,21 +79,12 @@ public class SetDefaultActionTest { defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); dbClient = db.getDbClient(); wsSupport = new QProfileWsSupport(dbClient, userSessionRule, defaultOrganizationProvider); - organization = OrganizationTesting.newOrganizationDto(); - db.organizations().insert(organization); + organization = db.organizations().getDefaultOrganization(); underTest = new SetDefaultAction(LanguageTesting.newLanguages(XOO_1_KEY, XOO_2_KEY), dbClient, userSessionRule, wsSupport); - String organizationUuid = organization.getUuid(); - xoo1Profile = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organizationUuid) - .setLanguage(XOO_1_KEY); - xoo2Profile = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organizationUuid) - .setLanguage(XOO_2_KEY); - xoo2Profile2 = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organizationUuid) - .setLanguage(XOO_2_KEY) - .setParentKee(xoo2Profile.getKee()); + xoo1Profile = QualityProfileTesting.newQualityProfileDto().setLanguage(XOO_1_KEY); + xoo2Profile = QualityProfileTesting.newQualityProfileDto().setLanguage(XOO_2_KEY); + xoo2Profile2 = QualityProfileTesting.newQualityProfileDto().setLanguage(XOO_2_KEY).setParentKee(xoo2Profile.getKee()); dbClient.qualityProfileDao().insert(db.getSession(), xoo1Profile, xoo2Profile, xoo2Profile2); db.commit(); db.qualityProfiles().setAsDefault(xoo1Profile, xoo2Profile2); @@ -109,64 +98,25 @@ public class SetDefaultActionTest { assertThat(definition).isNotNull(); assertThat(definition.isPost()).isTrue(); - assertThat(definition.params()).extracting(Param::key).containsExactlyInAnyOrder("qualityProfile", "language", "organization"); - assertThat(definition.param("organization").since()).isEqualTo("6.4"); + assertThat(definition.params()).extracting(Param::key).containsExactlyInAnyOrder("qualityProfile", "language"); } @Test public void set_default_profile_using_language_and_name() { logInAsQProfileAdministrator(); - checkDefaultProfile(organization, XOO_1_KEY, xoo1Profile.getKee()); - checkDefaultProfile(organization, XOO_2_KEY, xoo2Profile2.getKee()); + checkDefaultProfile(XOO_1_KEY, xoo1Profile.getKee()); + checkDefaultProfile(XOO_2_KEY, xoo2Profile2.getKee()); TestResponse response = ws.newRequest().setMethod("POST") .setParam("language", xoo2Profile.getLanguage()) .setParam("qualityProfile", xoo2Profile.getName()) - .setParam("organization", organization.getKey()) .execute(); assertThat(response.getInput()).isEmpty(); - checkDefaultProfile(organization, XOO_1_KEY, xoo1Profile.getKee()); - checkDefaultProfile(organization, XOO_2_KEY, xoo2Profile.getKee()); - } - - @Test - public void should_not_change_other_organizations() { - OrganizationDto organization1 = db.organizations().insert(); - OrganizationDto organization2 = db.organizations().insert(); - - userSessionRule - .logIn() - .addPermission(ADMINISTER_QUALITY_PROFILES, organization1.getUuid()); - - QProfileDto profileOrg1Old = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organization1.getUuid()) - .setLanguage(XOO_1_KEY); - QProfileDto profileOrg1New = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organization1.getUuid()) - .setLanguage(XOO_1_KEY); - QProfileDto profileOrg2 = QualityProfileTesting.newQualityProfileDto() - .setOrganizationUuid(organization2.getUuid()) - .setLanguage(XOO_1_KEY); - db.qualityProfiles().insert(profileOrg1Old, profileOrg1New, profileOrg2); - db.qualityProfiles().setAsDefault(profileOrg1Old, profileOrg2); - - checkDefaultProfile(organization1, XOO_1_KEY, profileOrg1Old.getKee()); - checkDefaultProfile(organization2, XOO_1_KEY, profileOrg2.getKee()); - - TestResponse response = ws.newRequest().setMethod("POST") - .setParam("language", profileOrg1New.getLanguage()) - .setParam("qualityProfile", profileOrg1New.getName()) - .setParam("organization", organization1.getKey()) - .execute(); - - assertThat(response.getInput()).isEmpty(); - assertThat(response.getStatus()).isEqualTo(204); - - checkDefaultProfile(organization1, XOO_1_KEY, profileOrg1New.getKee()); - checkDefaultProfile(organization2, XOO_1_KEY, profileOrg2.getKee()); + checkDefaultProfile(XOO_1_KEY, xoo1Profile.getKee()); + checkDefaultProfile(XOO_2_KEY, xoo2Profile.getKee()); } @Test @@ -181,8 +131,8 @@ public class SetDefaultActionTest { Fail.failBecauseExceptionWasNotThrown(NotFoundException.class); } catch (NotFoundException nfe) { assertThat(nfe).hasMessage("Quality Profile for language 'xoo2' and name 'Unknown' does not exist"); - checkDefaultProfile(organization, XOO_1_KEY, xoo1Profile.getKee()); - checkDefaultProfile(organization, XOO_2_KEY, xoo2Profile2.getKee()); + checkDefaultProfile(XOO_1_KEY, xoo1Profile.getKee()); + checkDefaultProfile(XOO_2_KEY, xoo2Profile2.getKee()); } } @@ -194,7 +144,6 @@ public class SetDefaultActionTest { expectedException.expectMessage("Insufficient privileges"); ws.newRequest().setMethod("POST") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_QUALITY_PROFILE, xoo2Profile.getName()) .setParam(PARAM_LANGUAGE, xoo2Profile.getLanguage()) .execute(); @@ -216,7 +165,7 @@ public class SetDefaultActionTest { .addPermission(ADMINISTER_QUALITY_PROFILES, organization.getUuid()); } - private void checkDefaultProfile(OrganizationDto organization, String language, String key) { - assertThat(dbClient.qualityProfileDao().selectDefaultProfile(db.getSession(), organization, language).getKee()).isEqualTo(key); + private void checkDefaultProfile(String language, String key) { + assertThat(dbClient.qualityProfileDao().selectDefaultProfile(db.getSession(), language).getKee()).isEqualTo(key); } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ShowActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ShowActionTest.java index 2a9da814cf6..600c8a0cf0a 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ShowActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/qualityprofile/ws/ShowActionTest.java @@ -33,7 +33,6 @@ import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.user.UserDto; import org.sonar.server.es.EsTester; -import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.organization.TestDefaultOrganizationProvider; import org.sonar.server.qualityprofile.index.ActiveRuleIndexer; @@ -47,12 +46,10 @@ import org.sonarqube.ws.Qualityprofiles.ShowResponse; import org.sonarqube.ws.Qualityprofiles.ShowResponse.CompareToSonarWay; import org.sonarqube.ws.Qualityprofiles.ShowResponse.QualityProfile; -import static java.lang.String.format; import static java.util.stream.IntStream.range; import static org.assertj.core.api.Assertions.assertThat; import static org.sonar.api.rule.RuleStatus.DEPRECATED; import static org.sonar.api.utils.DateUtils.parseDateTime; -import static org.sonar.db.organization.OrganizationDto.Subscription.PAID; import static org.sonar.server.language.LanguageTesting.newLanguage; import static org.sonar.test.JsonAssert.assertJson; import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_COMPARE_TO_SONAR_WAY; @@ -82,7 +79,7 @@ public class ShowActionTest { @Test public void profile_info() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); ShowResponse result = call(ws.newRequest().setParam(PARAM_KEY, profile.getKee())); @@ -94,7 +91,7 @@ public class ShowActionTest { @Test public void default_profile() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); db.qualityProfiles().setAsDefault(profile); ShowResponse result = call(ws.newRequest().setParam(PARAM_KEY, profile.getKee())); @@ -104,8 +101,8 @@ public class ShowActionTest { @Test public void non_default_profile() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); - QProfileDto defaultProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); + QProfileDto defaultProfile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); db.qualityProfiles().setAsDefault(defaultProfile); ShowResponse result = call(ws.newRequest().setParam(PARAM_KEY, profile.getKee())); @@ -116,7 +113,7 @@ public class ShowActionTest { @Test public void map_dates() { long time = DateUtils.parseDateTime("2016-12-22T19:10:03+0100").getTime(); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p + QProfileDto profile = db.qualityProfiles().insert(p -> p .setLanguage(XOO1.getKey()) .setRulesUpdatedAt("2016-12-21T19:10:03+0100") .setLastUsed(time) @@ -131,7 +128,7 @@ public class ShowActionTest { @Test public void statistics() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); // Active rules range(0, 10) .mapToObj(i -> db.rules().insertRule(r -> r.setLanguage(XOO1.getKey())).getDefinition()) @@ -154,8 +151,8 @@ public class ShowActionTest { @Test public void compare_to_sonar_way_profile() { - QProfileDto sonarWayProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setIsBuiltIn(true).setName("Sonar way").setLanguage(XOO1.getKey())); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); + QProfileDto sonarWayProfile = db.qualityProfiles().insert(p -> p.setIsBuiltIn(true).setName("Sonar way").setLanguage(XOO1.getKey())); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); RuleDefinitionDto commonRule = db.rules().insertRule(r -> r.setLanguage(XOO1.getKey())).getDefinition(); RuleDefinitionDto sonarWayRule1 = db.rules().insertRule(r -> r.setLanguage(XOO1.getKey())).getDefinition(); RuleDefinitionDto sonarWayRule2 = db.rules().insertRule(r -> r.setLanguage(XOO1.getKey())).getDefinition(); @@ -184,8 +181,8 @@ public class ShowActionTest { @Test public void compare_to_sonar_way_profile_when_same_active_rules() { - QProfileDto sonarWayProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setIsBuiltIn(true).setName("Sonar way").setLanguage(XOO1.getKey())); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); + QProfileDto sonarWayProfile = db.qualityProfiles().insert(p -> p.setIsBuiltIn(true).setName("Sonar way").setLanguage(XOO1.getKey())); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); RuleDefinitionDto commonRule = db.rules().insertRule(r -> r.setLanguage(XOO1.getKey())).getDefinition(); db.qualityProfiles().activateRule(profile, commonRule); db.qualityProfiles().activateRule(sonarWayProfile, commonRule); @@ -204,9 +201,8 @@ public class ShowActionTest { @Test public void no_comparison_when_sonar_way_does_not_exist() { - QProfileDto anotherSonarWayProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), - p -> p.setIsBuiltIn(true).setName("Another Sonar way").setLanguage(XOO1.getKey())); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); + QProfileDto anotherSonarWayProfile = db.qualityProfiles().insert(p -> p.setIsBuiltIn(true).setName("Another Sonar way").setLanguage(XOO1.getKey())); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); ShowResponse result = call(ws.newRequest() .setParam(PARAM_KEY, profile.getKee()) @@ -217,8 +213,8 @@ public class ShowActionTest { @Test public void no_comparison_when_profile_is_built_in() { - QProfileDto sonarWayProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setIsBuiltIn(true).setName("Sonar way").setLanguage(XOO1.getKey())); - QProfileDto anotherBuiltInProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setIsBuiltIn(true).setLanguage(XOO1.getKey())); + QProfileDto sonarWayProfile = db.qualityProfiles().insert(p -> p.setIsBuiltIn(true).setName("Sonar way").setLanguage(XOO1.getKey())); + QProfileDto anotherBuiltInProfile = db.qualityProfiles().insert(p -> p.setIsBuiltIn(true).setLanguage(XOO1.getKey())); ShowResponse result = call(ws.newRequest() .setParam(PARAM_KEY, anotherBuiltInProfile.getKee()) @@ -229,8 +225,8 @@ public class ShowActionTest { @Test public void no_comparison_if_sonar_way_is_not_built_in() { - QProfileDto sonarWayProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setIsBuiltIn(false).setName("Sonar way").setLanguage(XOO1.getKey())); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); + QProfileDto sonarWayProfile = db.qualityProfiles().insert(p -> p.setIsBuiltIn(false).setName("Sonar way").setLanguage(XOO1.getKey())); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); ShowResponse result = call(ws.newRequest() .setParam(PARAM_KEY, profile.getKee()) @@ -241,8 +237,8 @@ public class ShowActionTest { @Test public void no_comparison_when_param_is_false() { - QProfileDto sonarWayProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setIsBuiltIn(true).setName("Sonar way").setLanguage(XOO1.getKey())); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); + QProfileDto sonarWayProfile = db.qualityProfiles().insert(p -> p.setIsBuiltIn(true).setName("Sonar way").setLanguage(XOO1.getKey())); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); ShowResponse result = call(ws.newRequest() .setParam(PARAM_KEY, profile.getKee()) @@ -253,8 +249,8 @@ public class ShowActionTest { @Test public void compare_to_sonarqube_way_profile() { - QProfileDto sonarWayProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setIsBuiltIn(true).setName("SonarQube way").setLanguage(XOO1.getKey())); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); + QProfileDto sonarWayProfile = db.qualityProfiles().insert(p -> p.setIsBuiltIn(true).setName("SonarQube way").setLanguage(XOO1.getKey())); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); CompareToSonarWay result = call(ws.newRequest() .setParam(PARAM_KEY, profile.getKee()) @@ -268,9 +264,9 @@ public class ShowActionTest { @Test public void compare_to_sonar_way_over_sonarqube_way() { - QProfileDto sonarWayProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setIsBuiltIn(true).setName("Sonar way").setLanguage(XOO1.getKey())); - QProfileDto sonarQubeWayProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setIsBuiltIn(true).setName("SonarQube way").setLanguage(XOO1.getKey())); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setLanguage(XOO1.getKey())); + QProfileDto sonarWayProfile = db.qualityProfiles().insert(p -> p.setIsBuiltIn(true).setName("Sonar way").setLanguage(XOO1.getKey())); + QProfileDto sonarQubeWayProfile = db.qualityProfiles().insert(p -> p.setIsBuiltIn(true).setName("SonarQube way").setLanguage(XOO1.getKey())); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); CompareToSonarWay result = call(ws.newRequest() .setParam(PARAM_KEY, profile.getKee()) @@ -284,8 +280,8 @@ public class ShowActionTest { @Test public void show_on_paid_organization() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(XOO1.getKey())); + OrganizationDto organization = db.organizations().getDefaultOrganization(); + QProfileDto qualityProfile = db.qualityProfiles().insert(p -> p.setLanguage(XOO1.getKey())); UserDto user = db.users().insertUser(); db.organizations().addMember(organization, user); userSession.logIn(user); @@ -299,7 +295,7 @@ public class ShowActionTest { @Test public void fail_if_profile_language_is_not_supported() { - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p.setKee("unknown-profile").setLanguage("kotlin")); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setKee("unknown-profile").setLanguage("kotlin")); expectedException.expect(NotFoundException.class); expectedException.expectMessage("Quality Profile with key 'unknown-profile' does not exist"); @@ -315,25 +311,14 @@ public class ShowActionTest { call(ws.newRequest().setParam(PARAM_KEY, "unknown-profile")); } - @Test - public void fail_on_paid_organization_when_not_member() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - - expectedException.expect(ForbiddenException.class); - expectedException.expectMessage(format("You're not member of organization '%s'", organization.getKey())); - - call(ws.newRequest().setParam(PARAM_KEY, qualityProfile.getKee())); - } - @Test public void json_example() { Language cs = newLanguage("cs", "C#"); - QProfileDto parentProfile = db.qualityProfiles().insert(db.getDefaultOrganization(), + QProfileDto parentProfile = db.qualityProfiles().insert( p -> p.setKee("AU-TpxcA-iU5OvuD2FL1") .setName("Parent Company Profile") .setLanguage(cs.getKey())); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization(), p -> p + QProfileDto profile = db.qualityProfiles().insert(p -> p .setKee("AU-TpxcA-iU5OvuD2FL3") .setName("My Company Profile") .setLanguage(cs.getKey()) diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/RuleCreatorTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/RuleCreatorTest.java index a9f4d089c82..569bb2b7abc 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/RuleCreatorTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/RuleCreatorTest.java @@ -75,8 +75,7 @@ public class RuleCreatorTest { private DbSession dbSession = dbTester.getSession(); private UuidFactory uuidFactory = new SequenceUuidFactory(); - private RuleCreator underTest = new RuleCreator(system2, new RuleIndexer(es.client(), dbTester.getDbClient()), dbTester.getDbClient(), newFullTypeValidations(), - TestDefaultOrganizationProvider.from(dbTester), uuidFactory); + private RuleCreator underTest = new RuleCreator(system2, new RuleIndexer(es.client(), dbTester.getDbClient()), dbTester.getDbClient(), newFullTypeValidations(), uuidFactory); @Test public void create_custom_rule() { @@ -91,7 +90,7 @@ public class RuleCreatorTest { .setParameters(ImmutableMap.of("regex", "a.*")); RuleKey customRuleKey = underTest.create(dbSession, newRule); - RuleDto rule = dbTester.getDbClient().ruleDao().selectOrFailByKey(dbSession, dbTester.getDefaultOrganization(), customRuleKey); + RuleDto rule = dbTester.getDbClient().ruleDao().selectOrFailByKey(dbSession, customRuleKey); assertThat(rule).isNotNull(); assertThat(rule.getKey()).isEqualTo(RuleKey.of("java", "CUSTOM_RULE")); assertThat(rule.getPluginKey()).isEqualTo("sonarjava"); @@ -210,7 +209,7 @@ public class RuleCreatorTest { List customRuleKeys = underTest.create(dbSession, Arrays.asList(firstRule, secondRule)); - List rules = dbTester.getDbClient().ruleDao().selectByKeys(dbSession, dbTester.getDefaultOrganization(), customRuleKeys); + List rules = dbTester.getDbClient().ruleDao().selectByKeys(dbSession, customRuleKeys); assertThat(rules).hasSize(2); assertThat(rules).asList() @@ -512,7 +511,7 @@ public class RuleCreatorTest { } private RuleDto createTemplateRule() { - RuleDto templateRule = RuleTesting.newDto(RuleKey.of("java", "S001"), dbTester.getDefaultOrganization()) + RuleDto templateRule = RuleTesting.newDto(RuleKey.of("java", "S001")) .setIsTemplate(true) .setLanguage("java") .setPluginKey("sonarjava") diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/RuleDescriptionFormatterTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/RuleDescriptionFormatterTest.java index 8865be5c100..a27b4e3f16e 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/RuleDescriptionFormatterTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/RuleDescriptionFormatterTest.java @@ -19,7 +19,6 @@ */ package org.sonar.server.rule; -import com.google.common.collect.Sets; import org.junit.Test; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleDto; diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/RuleUpdaterTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/RuleUpdaterTest.java index f2a539aec00..8450a557ab8 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/RuleUpdaterTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/RuleUpdaterTest.java @@ -19,14 +19,12 @@ */ package org.sonar.server.rule; -import com.google.common.base.Function; -import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import java.util.List; import java.util.Map; -import javax.annotation.Nonnull; +import java.util.stream.Collectors; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -92,18 +90,17 @@ public class RuleUpdaterTest { dbSession.commit(); RuleUpdate update = createForPluginRule(RULE_KEY) - .setTags(Sets.newHashSet("java9")) - .setOrganization(db.getDefaultOrganization()); + .setTags(Sets.newHashSet("java9")); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Rule with REMOVED status cannot be updated: squid:S001"); - underTest.update(dbSession, update, db.getDefaultOrganization(), userSessionRule); + underTest.update(dbSession, update, userSessionRule); } @Test public void no_changes() { - RuleDto ruleDto = RuleTesting.newDto(RULE_KEY, db.getDefaultOrganization()) + RuleDto ruleDto = RuleTesting.newDto(RULE_KEY) // the following fields are not supposed to be updated .setNoteData("my *note*") .setNoteUserUuid("me") @@ -117,10 +114,10 @@ public class RuleUpdaterTest { RuleUpdate update = createForPluginRule(RULE_KEY); assertThat(update.isEmpty()).isTrue(); - underTest.update(dbSession, update, db.getDefaultOrganization(), userSessionRule); + underTest.update(dbSession, update, userSessionRule); dbSession.clearCache(); - RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, db.getDefaultOrganization(), RULE_KEY); + RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, RULE_KEY); assertThat(rule.getNoteData()).isEqualTo("my *note*"); assertThat(rule.getNoteUserUuid()).isEqualTo("me"); assertThat(rule.getTags()).containsOnly("tag1"); @@ -134,7 +131,7 @@ public class RuleUpdaterTest { UserDto user = db.users().insertUser(); userSessionRule.logIn(user); - RuleDto ruleDto = RuleTesting.newDto(RULE_KEY, db.getDefaultOrganization()) + RuleDto ruleDto = RuleTesting.newDto(RULE_KEY) .setNoteData(null) .setNoteUserUuid(null) @@ -148,12 +145,11 @@ public class RuleUpdaterTest { dbSession.commit(); RuleUpdate update = createForPluginRule(RULE_KEY) - .setMarkdownNote("my *note*") - .setOrganization(db.getDefaultOrganization()); - underTest.update(dbSession, update, db.getDefaultOrganization(), userSessionRule); + .setMarkdownNote("my *note*"); + underTest.update(dbSession, update, userSessionRule); dbSession.clearCache(); - RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, db.getDefaultOrganization(), RULE_KEY); + RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, RULE_KEY); assertThat(rule.getNoteData()).isEqualTo("my *note*"); assertThat(rule.getNoteUserUuid()).isEqualTo(user.getUuid()); assertThat(rule.getNoteCreatedAt()).isNotNull(); @@ -167,7 +163,7 @@ public class RuleUpdaterTest { @Test public void remove_markdown_note() { - RuleDto ruleDto = RuleTesting.newDto(RULE_KEY, db.getDefaultOrganization()) + RuleDto ruleDto = RuleTesting.newDto(RULE_KEY) .setNoteData("my *note*") .setNoteUserUuid("me"); db.rules().insert(ruleDto.getDefinition()); @@ -175,12 +171,11 @@ public class RuleUpdaterTest { dbSession.commit(); RuleUpdate update = createForPluginRule(RULE_KEY) - .setMarkdownNote(null) - .setOrganization(db.getDefaultOrganization()); - underTest.update(dbSession, update, db.getDefaultOrganization(), userSessionRule); + .setMarkdownNote(null); + underTest.update(dbSession, update, userSessionRule); dbSession.clearCache(); - RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, db.getDefaultOrganization(), RULE_KEY); + RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, RULE_KEY); assertThat(rule.getNoteData()).isNull(); assertThat(rule.getNoteUserUuid()).isNull(); assertThat(rule.getNoteCreatedAt()).isNull(); @@ -190,29 +185,28 @@ public class RuleUpdaterTest { @Test public void set_tags() { // insert db - db.rules().insert(RuleTesting.newDto(RULE_KEY, db.getDefaultOrganization()) + db.rules().insert(RuleTesting.newDto(RULE_KEY) .setTags(Sets.newHashSet("security")) .setSystemTags(Sets.newHashSet("java8", "javadoc")).getDefinition()); dbSession.commit(); // java8 is a system tag -> ignore RuleUpdate update = createForPluginRule(RULE_KEY) - .setTags(Sets.newHashSet("bug", "java8")) - .setOrganization(db.getDefaultOrganization()); - underTest.update(dbSession, update, db.getDefaultOrganization(), userSessionRule); + .setTags(Sets.newHashSet("bug", "java8")); + underTest.update(dbSession, update, userSessionRule); - RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, db.getDefaultOrganization(), RULE_KEY); + RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, RULE_KEY); assertThat(rule.getTags()).containsOnly("bug"); assertThat(rule.getSystemTags()).containsOnly("java8", "javadoc"); // verify that tags are indexed in index - List tags = ruleIndex.listTags(db.getDefaultOrganization(), null, 10); + List tags = ruleIndex.listTags(null, 10); assertThat(tags).containsExactly("bug", "java8", "javadoc"); } @Test public void remove_tags() { - RuleDto ruleDto = RuleTesting.newDto(RULE_KEY, db.getDefaultOrganization()) + RuleDto ruleDto = RuleTesting.newDto(RULE_KEY) .setUuid("57a3af91-32f8-48b0-9e11-0eac14ffa915") .setTags(Sets.newHashSet("security")) .setSystemTags(Sets.newHashSet("java8", "javadoc")); @@ -221,17 +215,16 @@ public class RuleUpdaterTest { dbSession.commit(); RuleUpdate update = createForPluginRule(RULE_KEY) - .setTags(null) - .setOrganization(db.getDefaultOrganization()); - underTest.update(dbSession, update, db.getDefaultOrganization(), userSessionRule); + .setTags(null); + underTest.update(dbSession, update, userSessionRule); dbSession.clearCache(); - RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, db.getDefaultOrganization(), RULE_KEY); + RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, RULE_KEY); assertThat(rule.getTags()).isEmpty(); assertThat(rule.getSystemTags()).containsOnly("java8", "javadoc"); // verify that tags are indexed in index - List tags = ruleIndex.listTags(db.getDefaultOrganization(), null, 10); + List tags = ruleIndex.listTags(null, 10); assertThat(tags).containsExactly("java8", "javadoc"); } @@ -245,13 +238,12 @@ public class RuleUpdaterTest { DefaultDebtRemediationFunction fn = new DefaultDebtRemediationFunction(DebtRemediationFunction.Type.CONSTANT_ISSUE, null, "1min"); RuleUpdate update = createForPluginRule(RULE_KEY) - .setDebtRemediationFunction(fn) - .setOrganization(db.getDefaultOrganization()); - underTest.update(dbSession, update, db.getDefaultOrganization(), userSessionRule); + .setDebtRemediationFunction(fn); + underTest.update(dbSession, update, userSessionRule); dbSession.clearCache(); // verify debt is overridden - RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, db.getDefaultOrganization(), RULE_KEY); + RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, RULE_KEY); assertThat(rule.getRemediationFunction()).isEqualTo(DebtRemediationFunction.Type.CONSTANT_ISSUE.name()); assertThat(rule.getRemediationGapMultiplier()).isNull(); assertThat(rule.getRemediationBaseEffort()).isEqualTo("1min"); @@ -270,13 +262,12 @@ public class RuleUpdaterTest { dbSession.commit(); RuleUpdate update = createForPluginRule(RULE_KEY) - .setDebtRemediationFunction(new DefaultDebtRemediationFunction(DebtRemediationFunction.Type.LINEAR, "2d", null)) - .setOrganization(db.getDefaultOrganization()); - underTest.update(dbSession, update, db.getDefaultOrganization(), userSessionRule); + .setDebtRemediationFunction(new DefaultDebtRemediationFunction(DebtRemediationFunction.Type.LINEAR, "2d", null)); + underTest.update(dbSession, update, userSessionRule); dbSession.clearCache(); // verify debt is overridden - RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, db.getDefaultOrganization(), RULE_KEY); + RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, RULE_KEY); assertThat(rule.getRemediationFunction()).isEqualTo(DebtRemediationFunction.Type.LINEAR.name()); assertThat(rule.getRemediationGapMultiplier()).isEqualTo("2d"); assertThat(rule.getRemediationBaseEffort()).isNull(); @@ -295,13 +286,12 @@ public class RuleUpdaterTest { dbSession.commit(); RuleUpdate update = createForPluginRule(RULE_KEY) - .setDebtRemediationFunction(new DefaultDebtRemediationFunction(DebtRemediationFunction.Type.CONSTANT_ISSUE, null, "10min")) - .setOrganization(db.getDefaultOrganization()); - underTest.update(dbSession, update, db.getDefaultOrganization(), userSessionRule); + .setDebtRemediationFunction(new DefaultDebtRemediationFunction(DebtRemediationFunction.Type.CONSTANT_ISSUE, null, "10min")); + underTest.update(dbSession, update, userSessionRule); dbSession.clearCache(); // verify debt is overridden - RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, db.getDefaultOrganization(), RULE_KEY); + RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, RULE_KEY); assertThat(rule.getRemediationFunction()).isEqualTo(DebtRemediationFunction.Type.CONSTANT_ISSUE.name()); assertThat(rule.getRemediationGapMultiplier()).isNull(); assertThat(rule.getRemediationBaseEffort()).isEqualTo("10min"); @@ -313,7 +303,7 @@ public class RuleUpdaterTest { @Test public void reset_remediation_function() { - RuleDto ruleDto = RuleTesting.newDto(RULE_KEY, db.getDefaultOrganization()) + RuleDto ruleDto = RuleTesting.newDto(RULE_KEY) .setDefRemediationFunction(DebtRemediationFunction.Type.LINEAR.name()) .setDefRemediationGapMultiplier("1d") .setDefRemediationBaseEffort("5min") @@ -325,13 +315,12 @@ public class RuleUpdaterTest { dbSession.commit(); RuleUpdate update = createForPluginRule(RULE_KEY) - .setDebtRemediationFunction(null) - .setOrganization(db.getDefaultOrganization()); - underTest.update(dbSession, update, db.getDefaultOrganization(), userSessionRule); + .setDebtRemediationFunction(null); + underTest.update(dbSession, update, userSessionRule); dbSession.clearCache(); // verify debt is coming from default values - RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, db.getDefaultOrganization(), RULE_KEY); + RuleDto rule = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, RULE_KEY); assertThat(rule.getDefRemediationFunction()).isEqualTo(DebtRemediationFunction.Type.LINEAR.name()); assertThat(rule.getDefRemediationGapMultiplier()).isEqualTo("1d"); assertThat(rule.getDefRemediationBaseEffort()).isEqualTo("5min"); @@ -366,14 +355,13 @@ public class RuleUpdaterTest { .setMarkdownDescription("New description") .setSeverity("MAJOR") .setStatus(RuleStatus.READY) - .setParameters(ImmutableMap.of("regex", "b.*")) - .setOrganization(db.getDefaultOrganization()); - underTest.update(dbSession, update, db.getDefaultOrganization(), userSessionRule); + .setParameters(ImmutableMap.of("regex", "b.*")); + underTest.update(dbSession, update, userSessionRule); dbSession.clearCache(); // Verify custom rule is updated - RuleDto customRuleReloaded = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, db.getDefaultOrganization(), customRule.getKey()); + RuleDto customRuleReloaded = db.getDbClient().ruleDao().selectOrFailByKey(dbSession, customRule.getKey()); assertThat(customRuleReloaded).isNotNull(); assertThat(customRuleReloaded.getName()).isEqualTo("New name"); assertThat(customRuleReloaded.getDescription()).isEqualTo("New description"); @@ -415,9 +403,8 @@ public class RuleUpdaterTest { .setName("New name") .setMarkdownDescription("New description") .setSeverity("MAJOR") - .setStatus(RuleStatus.READY) - .setOrganization(db.getDefaultOrganization()); - underTest.update(dbSession, update, db.getDefaultOrganization(), userSessionRule); + .setStatus(RuleStatus.READY); + underTest.update(dbSession, update, userSessionRule); dbSession.clearCache(); @@ -447,7 +434,7 @@ public class RuleUpdaterTest { db.rules().insertRuleParam(customRule, param -> param.setName("message").setType("STRING").setDescription("message")); // Create a quality profile - QProfileDto profileDto = QProfileTesting.newXooP1(db.getDefaultOrganization()); + QProfileDto profileDto = QProfileTesting.newXooP1(); db.getDbClient().qualityProfileDao().insert(dbSession, profileDto); dbSession.commit(); @@ -466,15 +453,14 @@ public class RuleUpdaterTest { // Update custom rule parameter 'regex', add 'message' and remove 'format' RuleUpdate update = createForCustomRule(customRule.getKey()) - .setParameters(ImmutableMap.of("regex", "b.*", "message", "a message")) - .setOrganization(db.getDefaultOrganization()); - underTest.update(dbSession, update, db.getDefaultOrganization(), userSessionRule); + .setParameters(ImmutableMap.of("regex", "b.*", "message", "a message")); + underTest.update(dbSession, update, userSessionRule); // Verify custom rule parameters has been updated List params = db.getDbClient().ruleDao().selectRuleParamsByRuleKey(dbSession, customRule.getKey()); assertThat(params).hasSize(3); - Map paramsByKey = paramsByKey(params); + Map paramsByKey = paramsByName(params); assertThat(paramsByKey.get("regex")).isNotNull(); assertThat(paramsByKey.get("regex").getDefaultValue()).isEqualTo("b.*"); assertThat(paramsByKey.get("message")).isNotNull(); @@ -511,13 +497,12 @@ public class RuleUpdaterTest { // Update custom rule RuleUpdate update = createForCustomRule(customRule.getKey()) .setName("") - .setMarkdownDescription("New desc") - .setOrganization(db.getDefaultOrganization()); + .setMarkdownDescription("New desc"); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("The name is missing"); - underTest.update(dbSession, update, db.getDefaultOrganization(), userSessionRule); + underTest.update(dbSession, update, userSessionRule); } @Test @@ -536,8 +521,8 @@ public class RuleUpdaterTest { expectedException.expectMessage("The description is missing"); underTest.update(dbSession, - createForCustomRule(customRule.getKey()).setName("New name").setMarkdownDescription("").setOrganization(db.getDefaultOrganization()), - db.getDefaultOrganization(), userSessionRule); + createForCustomRule(customRule.getKey()).setName("New name").setMarkdownDescription(""), + userSessionRule); } @Test @@ -573,16 +558,8 @@ public class RuleUpdaterTest { createForPluginRule(ruleDefinition.getKey()).setSeverity(CRITICAL); } - private static Map paramsByKey(List params) { - return FluentIterable.from(params).uniqueIndex(RuleParamToKey.INSTANCE); + private static Map paramsByName(List params) { + return params.stream().collect(Collectors.toMap(RuleParamDto::getName, p -> p)); } - private enum RuleParamToKey implements Function { - INSTANCE; - - @Override - public String apply(@Nonnull RuleParamDto input) { - return input.getName(); - } - } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/ActiveRuleCompleterTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/ActiveRuleCompleterTest.java index 04ad927f36d..609bc44bdf3 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/ActiveRuleCompleterTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/ActiveRuleCompleterTest.java @@ -24,7 +24,6 @@ import org.junit.Rule; import org.junit.Test; import org.sonar.api.resources.Languages; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.ActiveRuleDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.db.rule.RuleDefinitionDto; @@ -39,13 +38,12 @@ public class ActiveRuleCompleterTest { @Test public void test_completeShow() { - OrganizationDto organization = dbTester.organizations().insert(); ActiveRuleCompleter underTest = new ActiveRuleCompleter(dbTester.getDbClient(), new Languages()); RuleDefinitionDto rule = dbTester.rules().insert(); - QProfileDto qualityProfile = dbTester.qualityProfiles().insert(organization); + QProfileDto qualityProfile = dbTester.qualityProfiles().insert(); ActiveRuleDto activeRule = dbTester.qualityProfiles().activateRule(qualityProfile, rule); - List result = underTest.completeShow(dbTester.getSession(), organization, rule); + List result = underTest.completeShow(dbTester.getSession(), rule); assertThat(result).extracting(Rules.Active::getQProfile).containsExactlyInAnyOrder(qualityProfile.getKee()); assertThat(result).extracting(Rules.Active::getSeverity).containsExactlyInAnyOrder(activeRule.getSeverityString()); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/AppActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/AppActionTest.java index aaf840d03d2..0c544508c03 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/AppActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/AppActionTest.java @@ -30,7 +30,6 @@ import org.sonar.db.DbTester; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.permission.OrganizationPermission; import org.sonar.db.rule.RuleRepositoryDto; -import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.language.LanguageTesting; import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.organization.TestDefaultOrganizationProvider; @@ -52,11 +51,10 @@ public class AppActionTest { public DbTester db = DbTester.create(System2.INSTANCE); @Rule public UserSessionRule userSession = UserSessionRule.standalone(); + private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); private Languages languages = new Languages(LANG1, LANG2); - private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); - private RuleWsSupport wsSupport = new RuleWsSupport(db.getDbClient(), userSession, defaultOrganizationProvider); - private AppAction underTest = new AppAction(languages, db.getDbClient(), userSession, wsSupport); + private AppAction underTest = new AppAction(languages, db.getDbClient(), userSession, defaultOrganizationProvider); private WsActionTester ws = new WsActionTester(underTest); @Test @@ -65,11 +63,7 @@ public class AppActionTest { assertThat(definition.isInternal()).isTrue(); assertThat(definition.key()).isEqualTo("app"); - assertThat(definition.params()).hasSize(1); - assertThat(definition.param("organization")) - .matches(p -> p.isInternal()) - .matches(p -> p.since().equals("6.4")) - .matches(p -> !p.isRequired()); + assertThat(definition.params()).isEmpty(); } @Test @@ -106,7 +100,8 @@ public class AppActionTest { } @Test - public void canWrite_is_true_if_user_is_profile_administrator_of_default_organization() { + public void canWrite_is_true_if_user_is_profile_administrator() { + // TODO userSession.addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, db.getDefaultOrganization()); String json = ws.newRequest().execute().getInput(); @@ -115,32 +110,8 @@ public class AppActionTest { } @Test - public void canWrite_is_true_if_user_is_profile_administrator_of_specified_organization() { - OrganizationDto organization = db.organizations().insert(); - userSession.addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); - - String json = ws.newRequest() - .setParam("organization", organization.getKey()) - .execute().getInput(); - - assertJson(json).isSimilarTo("{ \"canWrite\": true }"); - } - - @Test - public void canWrite_is_false_if_user_is_not_profile_administrator_of_specified_organization() { - OrganizationDto organization1 = db.organizations().insert(); - OrganizationDto organization2 = db.organizations().insert(); - userSession.addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization1); - - String json = ws.newRequest() - .setParam("organization", organization2.getKey()) - .execute().getInput(); - - assertJson(json).isSimilarTo("{ \"canWrite\": false }"); - } - - @Test - public void canWrite_is_false_if_user_is_not_profile_administrator_of_default_organization() { + public void canWrite_is_false_if_user_is_not_profile_administrator() { + // TODO OrganizationDto organization = db.organizations().insert(); userSession.addPermission(OrganizationPermission.ADMINISTER_QUALITY_PROFILES, organization); @@ -149,16 +120,6 @@ public class AppActionTest { assertJson(json).isSimilarTo("{ \"canWrite\": false }"); } - @Test - public void throw_NotFoundException_if_organization_does_not_exist() { - expectedException.expect(NotFoundException.class); - expectedException.expectMessage("No organization with key 'does_not_exist'"); - - ws.newRequest() - .setParam("organization", "does_not_exist") - .execute(); - } - private void insertRules() { RuleRepositoryDto repo1 = new RuleRepositoryDto("xoo", "xoo", "SonarQube"); RuleRepositoryDto repo2 = new RuleRepositoryDto("squid", "ws", "SonarQube"); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/CreateActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/CreateActionTest.java index 24fb092c90c..16a4e45c36f 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/CreateActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/CreateActionTest.java @@ -78,8 +78,7 @@ public class CreateActionTest { private UuidFactory uuidFactory = new SequenceUuidFactory(); private WsActionTester ws = new WsActionTester(new CreateAction(db.getDbClient(), - new RuleCreator(system2, new RuleIndexer(es.client(), db.getDbClient()), db.getDbClient(), newFullTypeValidations(), - TestDefaultOrganizationProvider.from(db), uuidFactory), + new RuleCreator(system2, new RuleIndexer(es.client(), db.getDbClient()), db.getDbClient(), newFullTypeValidations(), uuidFactory), new RuleMapper(new Languages(), createMacroInterpreter()), new RuleWsSupport(db.getDbClient(), userSession, defaultOrganizationProvider))); @@ -95,7 +94,7 @@ public class CreateActionTest { public void create_custom_rule() { logInAsQProfileAdministrator(); // Template rule - RuleDto templateRule = newTemplateRule(RuleKey.of("java", "S001"), db.getDefaultOrganization()).setType(CODE_SMELL); + RuleDto templateRule = newTemplateRule(RuleKey.of("java", "S001")).setType(CODE_SMELL); db.rules().insert(templateRule.getDefinition()); db.rules().insertOrUpdateMetadata(templateRule.getMetadata().setRuleUuid(templateRule.getUuid())); db.rules().insertRuleParam(templateRule.getDefinition(), param -> param.setName("regex").setType("STRING").setDescription("Reg ex").setDefaultValue(".*")); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/DeleteActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/DeleteActionTest.java index 542dd291068..41b76377426 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/DeleteActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/DeleteActionTest.java @@ -57,12 +57,11 @@ public class DeleteActionTest { public EsTester es = EsTester.create(); @Rule public ExpectedException thrown = ExpectedException.none(); - + private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(dbTester); private DbClient dbClient = dbTester.getDbClient(); private DbSession dbSession = dbTester.getSession(); private RuleIndexer ruleIndexer = spy(new RuleIndexer(es.client(), dbClient)); private QProfileRules qProfileRules = mock(QProfileRules.class); - private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.fromUuid("ORG1"); private RuleWsSupport ruleWsSupport = new RuleWsSupport(mock(DbClient.class), userSession, defaultOrganizationProvider); private DeleteAction underTest = new DeleteAction(System2.INSTANCE, ruleIndexer, dbClient, qProfileRules, ruleWsSupport); private WsActionTester tester = new WsActionTester(underTest); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/RuleQueryFactoryTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/RuleQueryFactoryTest.java index 3e2f7ff24cd..486035c98ed 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/RuleQueryFactoryTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/RuleQueryFactoryTest.java @@ -22,17 +22,15 @@ package org.sonar.server.rule.ws; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.sonar.api.impl.ws.SimpleGetRequest; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; -import org.sonar.api.impl.ws.SimpleGetRequest; import org.sonar.api.utils.System2; import org.sonar.db.DbClient; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.QProfileDto; import org.sonar.server.exceptions.NotFoundException; -import org.sonar.server.organization.TestDefaultOrganizationProvider; import org.sonar.server.rule.index.RuleQuery; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.TestRequest; @@ -50,7 +48,6 @@ import static org.sonar.api.rules.RuleType.CODE_SMELL; import static org.sonar.api.server.ws.WebService.Param.ASCENDING; import static org.sonar.api.server.ws.WebService.Param.SORT; import static org.sonar.api.server.ws.WebService.Param.TEXT_QUERY; -import static org.sonar.db.organization.OrganizationDto.Subscription.PAID; import static org.sonar.db.qualityprofile.ActiveRuleDto.INHERITED; import static org.sonar.db.qualityprofile.ActiveRuleDto.OVERRIDES; import static org.sonar.server.rule.ws.RuleWsSupport.defineGenericRuleSearchParameters; @@ -62,7 +59,6 @@ import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INCLUDE_EXTERNAL; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_INHERITANCE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_IS_TEMPLATE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_LANGUAGES; -import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ORGANIZATION; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_QPROFILE; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_REPOSITORIES; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_RULE_KEY; @@ -83,7 +79,7 @@ public class RuleQueryFactoryTest { private DbClient dbClient = db.getDbClient(); - private RuleQueryFactory underTest = new RuleQueryFactory(dbClient, new RuleWsSupport(dbClient, userSession, TestDefaultOrganizationProvider.from(db))); + private RuleQueryFactory underTest = new RuleQueryFactory(dbClient); private FakeAction fakeAction = new FakeAction(underTest); @@ -116,9 +112,8 @@ public class RuleQueryFactoryTest { @Test public void create_rule_search_query() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - QProfileDto compareToQualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); + QProfileDto compareToQualityProfile = db.qualityProfiles().insert(); RuleQuery result = executeRuleSearchQuery( PARAM_RULE_KEY, "ruleKey", @@ -131,7 +126,6 @@ public class RuleQueryFactoryTest { PARAM_INCLUDE_EXTERNAL, "false", PARAM_LANGUAGES, "java,js", TEXT_QUERY, "S001", - PARAM_ORGANIZATION, organization.getKey(), PARAM_QPROFILE, qualityProfile.getKee(), PARAM_COMPARE_TO_PROFILE, compareToQualityProfile.getKee(), PARAM_REPOSITORIES, "pmd,checkstyle", @@ -150,9 +144,8 @@ public class RuleQueryFactoryTest { @Test public void include_external_is_mandatory_for_rule_search_query() { - OrganizationDto organization = db.organizations().insert(); - db.qualityProfiles().insert(organization); - db.qualityProfiles().insert(organization); + db.qualityProfiles().insert(); + db.qualityProfiles().insert(); Request request = new SimpleGetRequest(); expectedException.expect(IllegalArgumentException.class); @@ -162,9 +155,8 @@ public class RuleQueryFactoryTest { @Test public void create_query() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - QProfileDto compareToQualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); + QProfileDto compareToQualityProfile = db.qualityProfiles().insert(); RuleQuery result = execute( PARAM_RULE_KEY, "ruleKey", @@ -177,7 +169,6 @@ public class RuleQueryFactoryTest { PARAM_INCLUDE_EXTERNAL, "true", PARAM_LANGUAGES, "java,js", TEXT_QUERY, "S001", - PARAM_ORGANIZATION, organization.getKey(), PARAM_QPROFILE, qualityProfile.getKee(), PARAM_COMPARE_TO_PROFILE, compareToQualityProfile.getKee(), PARAM_REPOSITORIES, "pmd,checkstyle", @@ -196,8 +187,7 @@ public class RuleQueryFactoryTest { @Test public void use_quality_profiles_language_if_available() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); String qualityProfileKey = qualityProfile.getKee(); RuleQuery result = execute( @@ -210,16 +200,14 @@ public class RuleQueryFactoryTest { @Test public void use_specified_languages_if_no_quality_profile_available() { - RuleQuery result = execute( - PARAM_LANGUAGES, "specifiedLanguage"); + RuleQuery result = execute(PARAM_LANGUAGES, "specifiedLanguage"); assertThat(result.getLanguages()).containsExactly("specifiedLanguage"); } @Test public void create_query_add_language_from_profile() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setName("Sonar way").setLanguage("xoo").setKee("sonar-way")); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setName("Sonar way").setLanguage("xoo").setKee("sonar-way")); RuleQuery result = execute( PARAM_QPROFILE, profile.getKee(), @@ -229,103 +217,16 @@ public class RuleQueryFactoryTest { assertThat(result.getLanguages()).containsOnly("xoo"); } - @Test - public void filter_on_quality_profiles_organization_if_searching_for_actives_with_no_organization_specified() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setName("Sonar way").setLanguage("xoo").setKee("sonar-way")); - - RuleQuery result = execute( - PARAM_ACTIVATION, "true", - PARAM_QPROFILE, profile.getKee()); - - assertThat(result.getOrganization().getUuid()).isEqualTo(organization.getUuid()); - } - @Test public void filter_on_compare_to() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto compareToProfile = db.qualityProfiles().insert(organization); + QProfileDto compareToProfile = db.qualityProfiles().insert(); RuleQuery result = execute( - PARAM_ORGANIZATION, organization.getKey(), PARAM_COMPARE_TO_PROFILE, compareToProfile.getKee()); assertThat(result.getCompareToQProfile().getKee()).isEqualTo(compareToProfile.getKee()); } - @Test - public void activation_is_kept_when_member_of_paid_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setName("Sonar way").setLanguage("xoo").setKee("sonar-way")); - userSession.logIn(db.users().insertUser()).addMembership(organization); - - RuleQuery result = execute( - PARAM_ACTIVATION, "true", - PARAM_QPROFILE, profile.getKee()); - - assertThat(result.getActivation()).isTrue(); - } - - @Test - public void activation_is_set_to_null_when_not_member_of_paid_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setName("Sonar way").setLanguage("xoo").setKee("sonar-way")); - - RuleQuery result = execute( - PARAM_ACTIVATION, "true", - PARAM_QPROFILE, profile.getKee()); - - assertThat(result.getActivation()).isNull(); - } - - @Test - public void fail_if_organization_and_quality_profile_are_contradictory() { - OrganizationDto organization1 = db.organizations().insert(); - OrganizationDto organization2 = db.organizations().insert(); - - QProfileDto qualityProfile = db.qualityProfiles().insert(organization1); - - String qualityProfileKey = qualityProfile.getKee(); - String organization2Key = organization2.getKey(); - - expectedException.expect(IllegalArgumentException.class); - expectedException.expectMessage("The specified quality profile '" + qualityProfileKey + "' is not part of the specified organization '" + organization2Key + "'"); - - execute(PARAM_QPROFILE, qualityProfileKey, - PARAM_ORGANIZATION, organization2Key); - } - - @Test - public void fail_if_organization_and_compare_to_quality_profile_are_contradictory() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - - OrganizationDto otherOrganization = db.organizations().insert(); - QProfileDto compareToQualityProfile = db.qualityProfiles().insert(otherOrganization); - - expectedException.expect(IllegalArgumentException.class); - expectedException - .expectMessage("The specified quality profile '" + compareToQualityProfile.getKee() + "' is not part of the specified organization '" + organization.getKey() + "'"); - - execute(PARAM_QPROFILE, qualityProfile.getKee(), - PARAM_COMPARE_TO_PROFILE, compareToQualityProfile.getKee(), - PARAM_ORGANIZATION, organization.getKey()); - } - - @Test - public void fail_when_organization_does_not_exist() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); - String qualityProfileKey = qualityProfile.getKee(); - - expectedException.expect(NotFoundException.class); - expectedException.expectMessage("No organization with key 'unknown'"); - - execute(PARAM_QPROFILE, qualityProfileKey, - PARAM_ORGANIZATION, "unknown"); - } - - @Test public void fail_when_profile_does_not_exist() { expectedException.expect(NotFoundException.class); expectedException.expectMessage("The specified qualityProfile 'unknown' does not exist"); @@ -335,8 +236,7 @@ public class RuleQueryFactoryTest { @Test public void fail_when_compare_to_profile_does_not_exist() { - OrganizationDto organization = db.organizations().insert(); - QProfileDto qualityProfile = db.qualityProfiles().insert(organization); + QProfileDto qualityProfile = db.qualityProfiles().insert(); expectedException.expect(NotFoundException.class); expectedException.expectMessage("The specified qualityProfile 'unknown' does not exist"); @@ -358,7 +258,6 @@ public class RuleQueryFactoryTest { assertThat(result.getQueryText()).isEqualTo("S001"); assertThat(result.getQProfile().getKee()).isEqualTo(qualityProfile.getKee()); assertThat(result.getCompareToQProfile().getKee()).isEqualTo(compareToQualityProfile.getKee()); - assertThat(result.getOrganization().getUuid()).isEqualTo(qualityProfile.getOrganizationUuid()); assertThat(result.getRepositories()).containsOnly("pmd", "checkstyle"); assertThat(result.getRuleKey()).isNull(); assertThat(result.getSeverities()).containsOnly(MINOR, CRITICAL); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java index 751668263af..12838c60cf6 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java @@ -81,8 +81,6 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.sonar.api.rule.Severity.BLOCKER; -import static org.sonar.api.server.ws.WebService.Param.FIELDS; -import static org.sonar.db.organization.OrganizationDto.Subscription.PAID; import static org.sonar.db.rule.RuleTesting.setSystemTags; import static org.sonar.db.rule.RuleTesting.setTags; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVATION; @@ -112,8 +110,7 @@ public class SearchActionTest { private ActiveRuleIndexer activeRuleIndexer = new ActiveRuleIndexer(db.getDbClient(), es.client()); private Languages languages = LanguageTesting.newLanguages(JAVA, "js"); private ActiveRuleCompleter activeRuleCompleter = new ActiveRuleCompleter(db.getDbClient(), languages); - private RuleWsSupport wsSupport = new RuleWsSupport(db.getDbClient(), userSession, defaultOrganizationProvider); - private RuleQueryFactory ruleQueryFactory = new RuleQueryFactory(db.getDbClient(), wsSupport); + private RuleQueryFactory ruleQueryFactory = new RuleQueryFactory(db.getDbClient()); private MacroInterpreter macroInterpreter = mock(MacroInterpreter.class); private RuleMapper ruleMapper = new RuleMapper(languages, macroInterpreter); private SearchAction underTest = new SearchAction(ruleIndex, activeRuleCompleter, ruleQueryFactory, db.getDbClient(), ruleMapper, @@ -136,7 +133,7 @@ public class SearchActionTest { assertThat(def.since()).isEqualTo("4.4"); assertThat(def.isInternal()).isFalse(); assertThat(def.responseExampleAsString()).isNotEmpty(); - assertThat(def.params()).hasSize(28); + assertThat(def.params()).hasSize(27); WebService.Param compareToProfile = def.param("compareToProfile"); assertThat(compareToProfile.since()).isEqualTo("6.5"); @@ -171,10 +168,10 @@ public class SearchActionTest { OrganizationDto organization = db.organizations().insert(); UserDto user1 = db.users().insertUser(); RuleDefinitionDto rule1 = db.rules().insert(); - db.rules().insertOrUpdateMetadata(rule1, user1, organization); + db.rules().insertOrUpdateMetadata(rule1, user1); UserDto disableUser = db.users().insertDisabledUser(); RuleDefinitionDto rule2 = db.rules().insert(); - db.rules().insertOrUpdateMetadata(rule2, disableUser, organization); + db.rules().insertOrUpdateMetadata(rule2, disableUser); indexRules(); SearchResponse result = ws.newRequest() @@ -308,53 +305,47 @@ public class SearchActionTest { } @Test - public void should_filter_on_organization_specific_tags() { - OrganizationDto organization = db.organizations().insert(); + public void should_filter_on_specific_tags() { RuleDefinitionDto rule1 = db.rules().insert(r -> r.setLanguage("java")); - RuleMetadataDto metadata1 = insertMetadata(organization, rule1, setTags("tag1", "tag2")); + RuleMetadataDto metadata1 = insertMetadata(rule1, setTags("tag1", "tag2")); RuleDefinitionDto rule2 = db.rules().insert(r -> r.setLanguage("java")); - RuleMetadataDto metadata2 = insertMetadata(organization, rule2); + RuleMetadataDto metadata2 = insertMetadata(rule2); indexRules(); Consumer request = r -> r .setParam("f", "repo,name") - .setParam("tags", metadata1.getTags().stream().collect(Collectors.joining(","))) - .setParam("organization", organization.getKey()); + .setParam("tags", metadata1.getTags().stream().collect(Collectors.joining(","))); verify(request, rule1); } @Test public void when_searching_for_several_tags_combine_them_with_OR() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto bothTagsRule = db.rules().insert(r -> r.setLanguage("java")); - insertMetadata(organization, bothTagsRule, setTags("tag1", "tag2")); + insertMetadata(bothTagsRule, setTags("tag1", "tag2")); RuleDefinitionDto oneTagRule = db.rules().insert(r -> r.setLanguage("java")); - insertMetadata(organization, oneTagRule, setTags("tag1")); + insertMetadata(oneTagRule, setTags("tag1")); RuleDefinitionDto otherTagRule = db.rules().insert(r -> r.setLanguage("java")); - insertMetadata(organization, otherTagRule, setTags("tag2")); + insertMetadata(otherTagRule, setTags("tag2")); RuleDefinitionDto noTagRule = db.rules().insert(r -> r.setLanguage("java")); - insertMetadata(organization, noTagRule, setTags()); + insertMetadata(noTagRule, setTags()); indexRules(); Consumer request = r -> r .setParam("f", "repo,name") - .setParam("tags", "tag1,tag2") - .setParam("organization", organization.getKey()); + .setParam("tags", "tag1,tag2"); verify(request, bothTagsRule, oneTagRule, otherTagRule); } @Test public void should_list_tags_in_tags_facet() { - OrganizationDto organization = db.organizations().insert(); String[] tags = get101Tags(); RuleDefinitionDto rule = db.rules().insert(setSystemTags("x")); - insertMetadata(organization, rule, setTags(tags)); + insertMetadata(rule, setTags(tags)); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "repo,name") .setParam("facets", "tags") - .setParam("organization", organization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getFacets().getFacets(0).getValuesList()).extracting(v -> v.getVal(), v -> v.getCount()) .contains(tuple("tag0", 1L), tuple("tag25", 1L), tuple("tag99", 1L)) @@ -363,16 +354,14 @@ public class SearchActionTest { @Test public void should_list_tags_ordered_by_count_then_by_name_in_tags_facet() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule = db.rules().insert(setSystemTags("tag7", "tag5", "tag3", "tag1", "tag9")); - insertMetadata(organization, rule, setTags("tag2", "tag4", "tag6", "tag8", "tagA")); + insertMetadata( rule, setTags("tag2", "tag4", "tag6", "tag8", "tagA")); db.rules().insert(setSystemTags("tag2")); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "repo,name") .setParam("facets", "tags") - .setParam("organization", organization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getFacets().getFacets(0).getValuesList()).extracting(v -> v.getVal(), v -> v.getCount()) .containsExactly(tuple("tag2", 2L), tuple("tag1", 1L), tuple("tag3", 1L), tuple("tag4", 1L), tuple("tag5", 1L), tuple("tag6", 1L), tuple("tag7", 1L), tuple("tag8", 1L), @@ -405,14 +394,12 @@ public class SearchActionTest { @Test public void should_return_organization_specific_tags() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java")); - RuleMetadataDto metadata = insertMetadata(organization, rule, setTags("tag1", "tag2")); + RuleMetadataDto metadata = insertMetadata(rule, setTags("tag1", "tag2")); indexRules(); SearchResponse result = ws.newRequest() .setParam("f", "tags") - .setParam("organization", organization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(result.getRulesList()).extracting(Rule::getKey).containsExactly(rule.getKey().toString()); assertThat(result.getRulesList()) @@ -420,28 +407,6 @@ public class SearchActionTest { .containsExactly(metadata.getTags().toArray(new String[0])); } - @Test - public void should_not_return_tags_of_foreign_organization() { - OrganizationDto organizationWithSpecificTags = db.organizations().insert(); - OrganizationDto myOrganization = db.organizations().insert(); - RuleDefinitionDto rule = db.rules().insert(setSystemTags("system1", "system2")); - insertMetadata(organizationWithSpecificTags, rule, setTags("tag1", "tag2")); - indexRules(); - - SearchResponse result = ws.newRequest() - .setParam("facets", "tags") - .setParam("f", "tags") - .setParam("organization", myOrganization.getKey()) - .executeProtobuf(SearchResponse.class); - - assertThat(result.getRulesList()).extracting(Rule::getKey).containsExactly(rule.getKey().toString()); - assertThat(result.getFacets().getFacets(0).getValuesList()) - .extracting(v -> tuple(v.getVal(), v.getCount())) - .containsExactly( - tuple("system1", 1L), - tuple("system2", 1L)); - } - @Test public void should_return_specified_fields() { RuleDefinitionDto rule = db.rules().insert(r1 -> r1.setLanguage("java")); @@ -489,7 +454,7 @@ public class SearchActionTest { .setDefRemediationGapMultiplier("1h") .setDefRemediationBaseEffort("15min")); - RuleMetadataDto metadata = insertMetadata(db.getDefaultOrganization(), rule, + RuleMetadataDto metadata = insertMetadata(rule, r -> r.setRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET.name()) .setRemediationGapMultiplier("2h") .setRemediationBaseEffort("25min")); @@ -523,7 +488,7 @@ public class SearchActionTest { .setDefRemediationGapMultiplier("1h") .setDefRemediationBaseEffort("15min")); - RuleMetadataDto metadata = insertMetadata(db.getDefaultOrganization(), rule, + RuleMetadataDto metadata = insertMetadata(rule, r -> r.setRemediationFunction(DebtRemediationFunction.Type.CONSTANT_ISSUE.name()) .setRemediationGapMultiplier(null) .setRemediationBaseEffort("5min")); @@ -557,7 +522,7 @@ public class SearchActionTest { .setDefRemediationGapMultiplier("1h") .setDefRemediationBaseEffort("15min")); - RuleMetadataDto metadata = insertMetadata(db.getDefaultOrganization(), rule, + RuleMetadataDto metadata = insertMetadata(rule, r -> r.setRemediationFunction(DebtRemediationFunction.Type.LINEAR.name()) .setRemediationGapMultiplier("1h") .setRemediationBaseEffort(null)); @@ -642,7 +607,7 @@ public class SearchActionTest { @Test public void search_all_active_rules() { OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("java")); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage("java")); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java")); RuleActivation activation = RuleActivation.create(rule.getUuid(), BLOCKER, null); qProfileRules.activateAndCommit(db.getSession(), profile, singleton(activation)); @@ -666,8 +631,8 @@ public class SearchActionTest { @Test public void search_profile_active_rules() { OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("java")); - QProfileDto waterproofProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage("java")); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage("java")); + QProfileDto waterproofProfile = db.qualityProfiles().insert(p -> p.setLanguage("java")); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java")); RuleParamDto ruleParam1 = db.rules().insertRuleParam(rule, p -> p.setDefaultValue("some value") .setType("STRING") @@ -725,7 +690,7 @@ public class SearchActionTest { @Test public void search_for_active_rules_when_parameter_value_is_null() { OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("java")); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage("java")); RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java")); @@ -775,8 +740,7 @@ public class SearchActionTest { public void facet_filtering_when_searching_for_inactive_rules() { OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, q -> q - .setLanguage("language1")); + QProfileDto profile = db.qualityProfiles().insert(q -> q.setLanguage("language1")); // on same language, not activated => match RuleDefinitionDto rule1 = db.rules().insert(r -> r @@ -894,8 +858,8 @@ public class SearchActionTest { @Test public void compare_to_another_profile() { OrganizationDto organization = db.organizations().insert(); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage(JAVA)); - QProfileDto anotherProfile = db.qualityProfiles().insert(organization, p -> p.setLanguage(JAVA)); + QProfileDto profile = db.qualityProfiles().insert(p -> p.setLanguage(JAVA)); + QProfileDto anotherProfile = db.qualityProfiles().insert(p -> p.setLanguage(JAVA)); RuleDefinitionDto commonRule = db.rules().insertRule(r -> r.setLanguage(JAVA)).getDefinition(); RuleDefinitionDto profileRule1 = db.rules().insertRule(r -> r.setLanguage(JAVA)).getDefinition(); RuleDefinitionDto profileRule2 = db.rules().insertRule(r -> r.setLanguage(JAVA)).getDefinition(); @@ -924,95 +888,6 @@ public class SearchActionTest { .containsExactlyInAnyOrder(anotherProfileRule1.getKey().toString(), anotherProfileRule2.getKey().toString()); } - @Test - public void active_rules_are_returned_when_member_of_paid_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("java")); - RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java")); - RuleActivation activation = RuleActivation.create(rule.getUuid(), BLOCKER, null); - qProfileRules.activateAndCommit(db.getSession(), profile, singleton(activation)); - userSession.logIn(db.users().insertUser()).addMembership(organization); - - indexRules(); - - SearchResponse result = ws.newRequest() - .setParam(FIELDS, "actives") - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .executeProtobuf(SearchResponse.class); - - assertThat(result.getRulesCount()).isEqualTo(1); - assertThat(result.getActives().getActivesMap()).isNotEmpty(); - } - - @Test - public void active_rules_are_not_returned_when_not_member_of_paid_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("java")); - RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("java")); - RuleActivation activation = RuleActivation.create(rule.getUuid(), BLOCKER, null); - qProfileRules.activateAndCommit(db.getSession(), profile, singleton(activation)); - - indexRules(); - - SearchResponse result = ws.newRequest() - .setParam(FIELDS, "actives") - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .executeProtobuf(SearchResponse.class); - - assertThat(result.getRulesCount()).isEqualTo(1); - assertThat(result.getActives().getActivesMap()).isEmpty(); - } - - @Test - public void search_for_active_rules_when_member_of_paid_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("java")); - // Rule1 is activated on profile - RuleDefinitionDto rule1 = db.rules().insert(r -> r.setLanguage("java")); - RuleActivation activation = RuleActivation.create(rule1.getUuid(), BLOCKER, null); - qProfileRules.activateAndCommit(db.getSession(), profile, singleton(activation)); - // Rule2 is not activated - RuleDefinitionDto rule2 = db.rules().insert(r -> r.setLanguage("java")); - userSession.logIn(db.users().insertUser()).addMembership(organization); - - indexRules(); - - SearchResponse result = ws.newRequest() - .setParam(FIELDS, "actives") - .setParam(PARAM_QPROFILE, profile.getKee()) - .setParam(PARAM_ACTIVATION, "true") - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .executeProtobuf(SearchResponse.class); - - assertThat(result.getRulesList()).extracting(Rule::getKey) - .containsExactlyInAnyOrder(rule1.getKey().toString()); - } - - @Test - public void search_for_active_rules_is_ignored_when_not_member_of_paid_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - QProfileDto profile = db.qualityProfiles().insert(organization, p -> p.setLanguage("java")); - // Rule1 is activated on profile - RuleDefinitionDto rule1 = db.rules().insert(r -> r.setLanguage("java")); - RuleActivation activation = RuleActivation.create(rule1.getUuid(), BLOCKER, null); - qProfileRules.activateAndCommit(db.getSession(), profile, singleton(activation)); - // Rule2 is not activated - RuleDefinitionDto rule2 = db.rules().insert(r -> r.setLanguage("java")); - - indexRules(); - - SearchResponse result = ws.newRequest() - .setParam(FIELDS, "actives") - .setParam(PARAM_QPROFILE, profile.getKee()) - .setParam(PARAM_ACTIVATION, "true") - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .executeProtobuf(SearchResponse.class); - - // the 2 rules are returned as filter on profile is ignored - assertThat(result.getRulesList()).extracting(Rule::getKey) - .containsExactlyInAnyOrder(rule1.getKey().toString(), rule2.getKey().toString()); - } - @SafeVarargs private final void checkField(RuleDefinitionDto rule, String fieldName, Extractor responseExtractor, T... expected) { SearchResponse result = ws.newRequest() @@ -1023,9 +898,9 @@ public class SearchActionTest { } @SafeVarargs - private final RuleMetadataDto insertMetadata(OrganizationDto organization, RuleDefinitionDto rule, Consumer... populaters) { - RuleMetadataDto metadata = db.rules().insertOrUpdateMetadata(rule, organization, populaters); - ruleIndexer.commitAndIndex(db.getSession(), rule.getUuid(), organization); + private final RuleMetadataDto insertMetadata(RuleDefinitionDto rule, Consumer... populaters) { + RuleMetadataDto metadata = db.rules().insertOrUpdateMetadata(rule, populaters); + ruleIndexer.commitAndIndex(db.getSession(), rule.getUuid()); return metadata; } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java index 454001cb508..6d3aefd7910 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java @@ -29,7 +29,6 @@ import org.sonar.api.rule.Severity; import org.sonar.api.rules.RuleType; import org.sonar.api.server.ws.WebService; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.qualityprofile.ActiveRuleDto; import org.sonar.db.qualityprofile.ActiveRuleParamDto; import org.sonar.db.qualityprofile.QProfileDto; @@ -38,7 +37,7 @@ import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleMetadataDto; import org.sonar.db.rule.RuleParamDto; import org.sonar.db.user.UserDto; -import org.sonar.server.exceptions.NotFoundException; +import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.organization.TestDefaultOrganizationProvider; import org.sonar.server.tester.UserSessionRule; import org.sonar.server.text.MacroInterpreter; @@ -54,7 +53,6 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import static org.sonar.db.organization.OrganizationDto.Subscription.PAID; import static org.sonar.db.rule.RuleDto.Format.MARKDOWN; import static org.sonar.db.rule.RuleTesting.newCustomRule; import static org.sonar.db.rule.RuleTesting.newTemplateRule; @@ -62,7 +60,6 @@ import static org.sonar.db.rule.RuleTesting.setTags; import static org.sonar.server.language.LanguageTesting.newLanguage; import static org.sonar.server.rule.ws.ShowAction.PARAM_ACTIVES; import static org.sonar.server.rule.ws.ShowAction.PARAM_KEY; -import static org.sonar.server.rule.ws.ShowAction.PARAM_ORGANIZATION; import static org.sonarqube.ws.Common.RuleType.UNKNOWN; import static org.sonarqube.ws.Common.RuleType.VULNERABILITY; @@ -76,6 +73,7 @@ public class ShowActionTest { public DbTester db = DbTester.create(); @org.junit.Rule public ExpectedException thrown = ExpectedException.none(); + private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); private MacroInterpreter macroInterpreter = mock(MacroInterpreter.class); private Languages languages = new Languages(newLanguage("xoo", "Xoo")); @@ -83,7 +81,7 @@ public class ShowActionTest { private WsActionTester ws = new WsActionTester( new ShowAction(db.getDbClient(), new RuleMapper(languages, macroInterpreter), new ActiveRuleCompleter(db.getDbClient(), languages), - new RuleWsSupport(db.getDbClient(), userSession, TestDefaultOrganizationProvider.from(db)))); + new RuleWsSupport(db.getDbClient(), userSession, defaultOrganizationProvider))); @Before public void before() { @@ -125,9 +123,9 @@ public class ShowActionTest { } @Test - public void show_rule_tags_in_default_organization() { + public void show_rule_tags() { RuleDefinitionDto rule = db.rules().insert(); - RuleMetadataDto metadata = db.rules().insertOrUpdateMetadata(rule, db.getDefaultOrganization(), setTags("tag1", "tag2"), m -> m.setNoteData(null).setNoteUserUuid(null)); + RuleMetadataDto metadata = db.rules().insertOrUpdateMetadata(rule, setTags("tag1", "tag2"), m -> m.setNoteData(null).setNoteUserUuid(null)); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) @@ -137,31 +135,14 @@ public class ShowActionTest { .containsExactly(metadata.getTags().toArray(new String[0])); } - @Test - public void show_rule_tags_in_specific_organization() { - RuleDefinitionDto rule = db.rules().insert(); - OrganizationDto organization = db.organizations().insert(); - RuleMetadataDto metadata = db.rules().insertOrUpdateMetadata(rule, organization, setTags("tag1", "tag2"), m -> m.setNoteData(null).setNoteUserUuid(null)); - - ShowResponse result = ws.newRequest() - .setParam(PARAM_KEY, rule.getKey().toString()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .executeProtobuf(ShowResponse.class); - - assertThat(result.getRule().getTags().getTagsList()) - .containsExactly(metadata.getTags().toArray(new String[0])); - } - @Test public void show_rule_with_note_login() { RuleDefinitionDto rule = db.rules().insert(); UserDto user = db.users().insertUser(); - OrganizationDto organization = db.organizations().insert(); - db.rules().insertOrUpdateMetadata(rule, user, organization); + db.rules().insertOrUpdateMetadata(rule, user); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(ShowResponse.class); assertThat(result.getRule().getNoteLogin()).isEqualTo(user.getLogin()); @@ -196,7 +177,7 @@ public class ShowActionTest { .setDefRemediationFunction(null) .setDefRemediationGapMultiplier(null) .setDefRemediationBaseEffort(null)); - db.rules().insertOrUpdateMetadata(rule, db.getDefaultOrganization(), + db.rules().insertOrUpdateMetadata(rule, m -> m.setNoteData(null).setNoteUserUuid(null), m -> m .setRemediationFunction("LINEAR_OFFSET") @@ -223,7 +204,7 @@ public class ShowActionTest { .setDefRemediationFunction("LINEAR_OFFSET") .setDefRemediationGapMultiplier("5d") .setDefRemediationBaseEffort("10h")); - db.rules().insertOrUpdateMetadata(rule, db.getDefaultOrganization(), m -> m.setNoteData(null).setNoteUserUuid(null), + db.rules().insertOrUpdateMetadata(rule, m -> m.setNoteData(null).setNoteUserUuid(null), m -> m .setRemediationFunction("CONSTANT_ISSUE") .setRemediationGapMultiplier(null) @@ -250,7 +231,7 @@ public class ShowActionTest { .setDefRemediationFunction(null) .setDefRemediationGapMultiplier(null) .setDefRemediationBaseEffort(null)); - db.rules().insertOrUpdateMetadata(rule, db.getDefaultOrganization(), m -> m.setNoteData(null).setNoteUserUuid(null), + db.rules().insertOrUpdateMetadata(rule, m -> m.setNoteData(null).setNoteUserUuid(null), m -> m .setRemediationFunction(null) .setRemediationGapMultiplier(null) @@ -277,7 +258,7 @@ public class ShowActionTest { .setDefRemediationGapMultiplier("5d") .setDefRemediationBaseEffort("10h") .setGapDescription("gap desc")); - db.rules().insertOrUpdateMetadata(rule, db.getDefaultOrganization(), m -> m.setNoteData(null).setNoteUserUuid(null), + db.rules().insertOrUpdateMetadata(rule, m -> m.setNoteData(null).setNoteUserUuid(null), m -> m .setRemediationFunction("CONSTANT_ISSUE") .setRemediationGapMultiplier(null) @@ -335,11 +316,10 @@ public class ShowActionTest { @Test public void show_adhoc_rule() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto externalRule = db.rules().insert(r -> r .setIsExternal(true) .setIsAdHoc(true)); - RuleMetadataDto metadata = db.rules().insertOrUpdateMetadata(externalRule, organization, m -> m + RuleMetadataDto metadata = db.rules().insertOrUpdateMetadata(externalRule, m -> m .setAdHocName("adhoc name") .setAdHocDescription("
    desc
    ") .setAdHocSeverity(Severity.BLOCKER) @@ -350,7 +330,6 @@ public class ShowActionTest { ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, externalRule.getKey().toString()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(ShowResponse.class); Rule resultRule = result.getRule(); @@ -361,7 +340,6 @@ public class ShowActionTest { @Test public void ignore_predefined_info_on_adhoc_rule() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto externalRule = db.rules().insert(r -> r .setIsExternal(true) .setIsAdHoc(true) @@ -369,7 +347,7 @@ public class ShowActionTest { .setDescription("
    predefined desc
    ") .setSeverity(Severity.BLOCKER) .setType(RuleType.VULNERABILITY)); - RuleMetadataDto metadata = db.rules().insertOrUpdateMetadata(externalRule, organization, m -> m + RuleMetadataDto metadata = db.rules().insertOrUpdateMetadata(externalRule, m -> m .setAdHocName("adhoc name") .setAdHocDescription("
    adhoc desc
    ") .setAdHocSeverity(Severity.MAJOR) @@ -380,7 +358,6 @@ public class ShowActionTest { ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, externalRule.getKey().toString()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(ShowResponse.class); Rule resultRule = result.getRule(); @@ -391,7 +368,6 @@ public class ShowActionTest { @Test public void adhoc_info_are_empty_when_no_metadata() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto externalRule = db.rules().insert(r -> r .setIsExternal(true) .setIsAdHoc(true) @@ -403,7 +379,6 @@ public class ShowActionTest { ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, externalRule.getKey().toString()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(ShowResponse.class); Rule resultRule = result.getRule(); @@ -414,11 +389,10 @@ public class ShowActionTest { @Test public void show_rule_with_activation() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule = db.rules().insert(); RuleParamDto ruleParam = db.rules().insertRuleParam(rule, p -> p.setType("STRING").setDescription("Reg *exp*").setDefaultValue(".*")); - RuleMetadataDto ruleMetadata = db.rules().insertOrUpdateMetadata(rule, organization, m -> m.setNoteData(null).setNoteUserUuid(null)); - QProfileDto qProfile = db.qualityProfiles().insert(organization); + RuleMetadataDto ruleMetadata = db.rules().insertOrUpdateMetadata(rule, m -> m.setNoteData(null).setNoteUserUuid(null)); + QProfileDto qProfile = db.qualityProfiles().insert(); ActiveRuleDto activeRule = db.qualityProfiles().activateRule(qProfile, rule); db.getDbClient().activeRuleDao().insertParam(db.getSession(), activeRule, new ActiveRuleParamDto() .setRulesParameterUuid(ruleParam.getUuid()) @@ -429,7 +403,6 @@ public class ShowActionTest { ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) .setParam(PARAM_ACTIVES, "true") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(ShowResponse.class); List actives = result.getActivesList(); @@ -443,66 +416,19 @@ public class ShowActionTest { @Test public void show_rule_without_activation() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule = db.rules().insert(); - RuleMetadataDto ruleMetadata = db.rules().insertOrUpdateMetadata(rule, organization, m -> m.setNoteData(null).setNoteUserUuid(null)); - QProfileDto qProfile = db.qualityProfiles().insert(organization); + RuleMetadataDto ruleMetadata = db.rules().insertOrUpdateMetadata(rule, m -> m.setNoteData(null).setNoteUserUuid(null)); + QProfileDto qProfile = db.qualityProfiles().insert(); ActiveRuleDto activeRule = db.qualityProfiles().activateRule(qProfile, rule); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) .setParam(PARAM_ACTIVES, "false") - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .executeProtobuf(ShowResponse.class); - - assertThat(result.getActivesList()).isEmpty(); - } - - @Test - public void active_rules_are_returned_when_member_of_paid_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - RuleDefinitionDto rule = db.rules().insert(); - QProfileDto qProfile = db.qualityProfiles().insert(organization); - ActiveRuleDto activeRule = db.qualityProfiles().activateRule(qProfile, rule); - userSession.logIn(db.users().insertUser()).addMembership(organization); - - ShowResponse result = ws.newRequest() - .setParam(PARAM_KEY, rule.getKey().toString()) - .setParam(PARAM_ACTIVES, "true") - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .executeProtobuf(ShowResponse.class); - - assertThat(result.getActivesList()).isNotEmpty(); - } - - @Test - public void active_rules_are_not_returned_when_not_member_of_paid_organization() { - OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); - RuleDefinitionDto rule = db.rules().insert(); - QProfileDto qProfile = db.qualityProfiles().insert(organization); - ActiveRuleDto activeRule = db.qualityProfiles().activateRule(qProfile, rule); - - ShowResponse result = ws.newRequest() - .setParam(PARAM_KEY, rule.getKey().toString()) - .setParam(PARAM_ACTIVES, "true") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(ShowResponse.class); assertThat(result.getActivesList()).isEmpty(); } - @Test - public void throw_NotFoundException_if_organization_cannot_be_found() { - RuleDefinitionDto rule = db.rules().insert(); - - thrown.expect(NotFoundException.class); - - ws.newRequest() - .setParam("key", rule.getKey().toString()) - .setParam("organization", "foo") - .execute(); - } - @Test public void test_definition() { WebService.Action def = ws.getDef(); @@ -515,8 +441,7 @@ public class ShowActionTest { .extracting(WebService.Param::key, WebService.Param::isRequired) .containsExactlyInAnyOrder( tuple("key", true), - tuple("actives", false), - tuple("organization", false)); + tuple("actives", false)); } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/TagsActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/TagsActionTest.java index e4204570e4d..295f7eabab5 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/TagsActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/TagsActionTest.java @@ -19,7 +19,6 @@ */ package org.sonar.server.rule.ws; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.sonar.api.server.ws.WebService; @@ -30,7 +29,6 @@ import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.server.es.EsClient; import org.sonar.server.es.EsTester; -import org.sonar.server.organization.TestDefaultOrganizationProvider; import org.sonar.server.rule.index.RuleIndex; import org.sonar.server.rule.index.RuleIndexer; import org.sonar.server.tester.UserSessionRule; @@ -55,15 +53,10 @@ public class TagsActionTest { private RuleIndex ruleIndex = new RuleIndex(esClient, System2.INSTANCE); private RuleIndexer ruleIndexer = new RuleIndexer(esClient, dbClient); - private WsActionTester ws = new WsActionTester(new org.sonar.server.rule.ws.TagsAction(ruleIndex, dbClient, TestDefaultOrganizationProvider.from(db))); + private WsActionTester ws = new WsActionTester(new org.sonar.server.rule.ws.TagsAction(ruleIndex)); private OrganizationDto organization; - @Before - public void before() { - organization = db.organizations().insert(); - } - @Test public void definition() { WebService.Action action = ws.getDef(); @@ -71,7 +64,7 @@ public class TagsActionTest { assertThat(action.responseExampleAsString()).isNotEmpty(); assertThat(action.isPost()).isFalse(); assertThat(action.isInternal()).isFalse(); - assertThat(action.params()).hasSize(3); + assertThat(action.params()).hasSize(2); WebService.Param query = action.param("q"); assertThat(query).isNotNull(); @@ -85,14 +78,6 @@ public class TagsActionTest { assertThat(pageSize.defaultValue()).isEqualTo("10"); assertThat(pageSize.description()).isNotEmpty(); assertThat(pageSize.exampleValue()).isNotEmpty(); - - WebService.Param organization = action.param("organization"); - assertThat(organization).isNotNull(); - assertThat(organization.isRequired()).isFalse(); - assertThat(organization.isInternal()).isTrue(); - assertThat(organization.description()).isNotEmpty(); - assertThat(organization.exampleValue()).isNotEmpty(); - assertThat(organization.since()).isEqualTo("6.4"); } @Test @@ -108,10 +93,10 @@ public class TagsActionTest { public void tag() { RuleDefinitionDto r = db.rules().insert(setSystemTags()); ruleIndexer.commitAndIndex(db.getSession(), r.getUuid()); - db.rules().insertOrUpdateMetadata(r, organization, setTags("tag")); - ruleIndexer.commitAndIndex(db.getSession(), r.getUuid(), organization); + db.rules().insertOrUpdateMetadata(r, setTags("tag")); + ruleIndexer.commitAndIndex(db.getSession(), r.getUuid()); - String result = ws.newRequest().setParam("organization", organization.getKey()).execute().getInput(); + String result = ws.newRequest().execute().getInput(); assertJson(result).isSimilarTo("{\"tags\":[\"tag\"]}"); } } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/UpdateActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/UpdateActionTest.java index 0419187f977..6720427e5a3 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/UpdateActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/UpdateActionTest.java @@ -29,14 +29,12 @@ import org.sonar.api.rule.Severity; import org.sonar.api.utils.System2; import org.sonar.db.DbClient; import org.sonar.db.DbTester; -import org.sonar.db.organization.OrganizationDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleMetadataDto; import org.sonar.db.user.UserDto; import org.sonar.server.es.EsClient; import org.sonar.server.es.EsTester; import org.sonar.server.exceptions.ForbiddenException; -import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.organization.TestDefaultOrganizationProvider; @@ -61,7 +59,6 @@ import static org.sonar.db.rule.RuleTesting.setSystemTags; import static org.sonar.db.rule.RuleTesting.setTags; import static org.sonar.server.rule.ws.UpdateAction.PARAM_KEY; import static org.sonar.server.rule.ws.UpdateAction.PARAM_MARKDOWN_NOTE; -import static org.sonar.server.rule.ws.UpdateAction.PARAM_ORGANIZATION; import static org.sonar.server.rule.ws.UpdateAction.PARAM_REMEDIATION_FN_BASE_EFFORT; import static org.sonar.server.rule.ws.UpdateAction.PARAM_REMEDIATION_FN_GAP_MULTIPLIER; import static org.sonar.server.rule.ws.UpdateAction.PARAM_REMEDIATION_FN_TYPE; @@ -83,11 +80,10 @@ public class UpdateActionTest { @Rule public UserSessionRule userSession = UserSessionRule.standalone(); - + private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); private DbClient dbClient = db.getDbClient(); private EsClient esClient = es.client(); - private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); private Languages languages = new Languages(); private RuleMapper mapper = new RuleMapper(languages, createMacroInterpreter()); private RuleIndexer ruleIndexer = new RuleIndexer(esClient, dbClient); @@ -155,11 +151,11 @@ public class UpdateActionTest { } @Test - public void update_tags_for_default_organization() { + public void update_tags() { logInAsQProfileAdministrator(); RuleDefinitionDto rule = db.rules().insert(setSystemTags("stag1", "stag2")); - db.rules().insertOrUpdateMetadata(rule, db.getDefaultOrganization(), setTags("tag1", "tag2"), m -> m.setNoteData(null).setNoteUserUuid(null)); + db.rules().insertOrUpdateMetadata(rule, setTags("tag1", "tag2"), m -> m.setNoteData(null).setNoteUserUuid(null)); Rules.UpdateResponse result = ws.newRequest().setMethod("POST") .setParam(PARAM_KEY, rule.getKey().toString()) @@ -174,38 +170,9 @@ public class UpdateActionTest { assertThat(updatedRule.getTags().getTagsList()).containsExactly("tag2", "tag3"); } - @Test - public void update_tags_for_specific_organization() { - OrganizationDto organization = db.organizations().insert(); - logInAsQProfileAdministrator(organization.getUuid()); - - RuleDefinitionDto rule = db.rules().insert(setSystemTags("stag1", "stag2")); - db.rules().insertOrUpdateMetadata(rule, organization, setTags("tagAlt1", "tagAlt2"), m -> m.setNoteData(null).setNoteUserUuid(null)); - - Rules.UpdateResponse result = ws.newRequest().setMethod("POST") - .setParam(PARAM_KEY, rule.getKey().toString()) - .setParam(PARAM_TAGS, "tag2,tag3") - .setParam(PARAM_ORGANIZATION, organization.getKey()) - .executeProtobuf(Rules.UpdateResponse.class); - - Rules.Rule updatedRule = result.getRule(); - assertThat(updatedRule).isNotNull(); - - // check response - assertThat(updatedRule.getKey()).isEqualTo(rule.getKey().toString()); - assertThat(updatedRule.getSysTags().getSysTagsList()).containsExactly(rule.getSystemTags().toArray(new String[0])); - assertThat(updatedRule.getTags().getTagsList()).containsExactly("tag2", "tag3"); - - // check database - RuleMetadataDto metadataOfSpecificOrg = db.getDbClient().ruleDao().selectMetadataByKey(db.getSession(), rule.getKey(), organization.getUuid()) - .orElseThrow(() -> new IllegalStateException("Cannot load metadata")); - assertThat(metadataOfSpecificOrg.getTags()).containsExactly("tag2", "tag3"); - } - @Test public void update_rule_remediation_function() { - OrganizationDto organization = db.organizations().insert(); - logInAsQProfileAdministrator(organization.getUuid()); + logInAsQProfileAdministrator(); RuleDefinitionDto rule = db.rules().insert( r -> r.setDefRemediationFunction(LINEAR.toString()), @@ -218,7 +185,6 @@ public class UpdateActionTest { Rules.UpdateResponse result = ws.newRequest().setMethod("POST") .setParam("key", rule.getKey().toString()) - .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_REMEDIATION_FN_TYPE, newOffset) .setParam(PARAM_REMEDIATION_FN_GAP_MULTIPLIER, newMultiplier) .setParam(PARAM_REMEDIATION_FN_BASE_EFFORT, newEffort) @@ -238,7 +204,7 @@ public class UpdateActionTest { assertThat(updatedRule.getRemFnBaseEffort()).isEqualTo(newEffort); // check database - RuleMetadataDto metadataOfSpecificOrg = db.getDbClient().ruleDao().selectMetadataByKey(db.getSession(), rule.getKey(), organization.getUuid()) + RuleMetadataDto metadataOfSpecificOrg = db.getDbClient().ruleDao().selectMetadataByKey(db.getSession(), rule.getKey()) .orElseThrow(() -> new IllegalStateException("Cannot load metadata")); assertThat(metadataOfSpecificOrg.getRemediationFunction()).isEqualTo(newOffset); assertThat(metadataOfSpecificOrg.getRemediationGapMultiplier()).isEqualTo(newMultiplier); @@ -247,17 +213,15 @@ public class UpdateActionTest { @Test public void update_note() { - OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto rule = db.rules().insert(); UserDto userHavingUpdatingNote = db.users().insertUser(); - db.rules().insertOrUpdateMetadata(rule, userHavingUpdatingNote, organization, m -> m.setNoteData("old data")); + db.rules().insertOrUpdateMetadata(rule, userHavingUpdatingNote, m -> m.setNoteData("old data")); UserDto userAuthenticated = db.users().insertUser(); - userSession.logIn(userAuthenticated).addPermission(ADMINISTER_QUALITY_PROFILES, organization); + userSession.logIn(userAuthenticated).addPermission(ADMINISTER_QUALITY_PROFILES, db.getDefaultOrganization()); Rules.UpdateResponse result = ws.newRequest().setMethod("POST") .setParam(PARAM_KEY, rule.getKey().toString()) .setParam(PARAM_MARKDOWN_NOTE, "new data") - .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(Rules.UpdateResponse.class); Rules.Rule updatedRule = result.getRule(); @@ -267,7 +231,7 @@ public class UpdateActionTest { assertThat(updatedRule.getNoteLogin()).isEqualTo(userAuthenticated.getLogin()); // check database - RuleMetadataDto metadataOfSpecificOrg = db.getDbClient().ruleDao().selectMetadataByKey(db.getSession(), rule.getKey(), organization.getUuid()).get(); + RuleMetadataDto metadataOfSpecificOrg = db.getDbClient().ruleDao().selectMetadataByKey(db.getSession(), rule.getKey()).get(); assertThat(metadataOfSpecificOrg.getNoteData()).isEqualTo("new data"); assertThat(metadataOfSpecificOrg.getNoteUserUuid()).isEqualTo(userAuthenticated.getUuid()); } @@ -330,27 +294,10 @@ public class UpdateActionTest { ws.newRequest().setMethod("POST").execute(); } - @Test - public void throw_NotFoundException_if_organization_cannot_be_found() { - logInAsQProfileAdministrator(); - RuleDefinitionDto rule = db.rules().insert(); - - expectedException.expect(NotFoundException.class); - - ws.newRequest().setMethod("POST") - .setParam("key", rule.getKey().toString()) - .setParam("organization", "foo") - .execute(); - } - private void logInAsQProfileAdministrator() { - logInAsQProfileAdministrator(db.getDefaultOrganization().getUuid()); - } - - private void logInAsQProfileAdministrator(String orgUuid) { userSession .logIn() - .addPermission(ADMINISTER_QUALITY_PROFILES, orgUuid); + .addPermission(ADMINISTER_QUALITY_PROFILES, defaultOrganizationProvider.get().getUuid()); } private static MacroInterpreter createMacroInterpreter() { diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/ui/ws/ComponentActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/ui/ws/ComponentActionTest.java index e5e7b76d873..6fc63c1a432 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/ui/ws/ComponentActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/ui/ws/ComponentActionTest.java @@ -256,8 +256,8 @@ public class ComponentActionTest { public void return_quality_profiles_and_supports_deleted_ones() { OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org")); ComponentDto project = insertProject(organization); - QProfileDto qp1 = db.qualityProfiles().insert(organization, t -> t.setKee("qp1").setName("Sonar Way Java").setLanguage("java")); - QProfileDto qp2 = db.qualityProfiles().insert(organization, t -> t.setKee("qp2").setName("Sonar Way Xoo").setLanguage("xoo")); + QProfileDto qp1 = db.qualityProfiles().insert(t -> t.setKee("qp1").setName("Sonar Way Java").setLanguage("java")); + QProfileDto qp2 = db.qualityProfiles().insert(t -> t.setKee("qp2").setName("Sonar Way Xoo").setLanguage("xoo")); addQualityProfiles(project, new QualityProfile(qp1.getKee(), qp1.getName(), qp1.getLanguage(), new Date()), new QualityProfile(qp2.getKee(), qp2.getName(), qp2.getLanguage(), new Date())); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java index 60b84eee1cc..cc4e57e3352 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java @@ -192,7 +192,7 @@ public class DeactivateActionTest { public void deactivate_user_deletes_his_qprofiles_permissions() { logInAsSystemAdministrator(); UserDto user = db.users().insertUser(); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto profile = db.qualityProfiles().insert(); db.qualityProfiles().addUserPermission(profile, user); deactivate(user.getLogin()); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/usergroups/ws/DeleteActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/usergroups/ws/DeleteActionTest.java index 338877bd6f0..57433b3b578 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/usergroups/ws/DeleteActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/usergroups/ws/DeleteActionTest.java @@ -204,7 +204,7 @@ public class DeleteActionTest { addAdminToDefaultOrganization(); insertDefaultGroupOnDefaultOrganization(); GroupDto group = db.users().insertGroup(); - QProfileDto profile = db.qualityProfiles().insert(db.getDefaultOrganization()); + QProfileDto profile = db.qualityProfiles().insert(); db.qualityProfiles().addGroupPermission(profile, group); loginAsAdminOnDefaultOrganization(); diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofile/QualityProfileWsParameters.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofile/QualityProfileWsParameters.java index f05b091f2e2..4fb221aeb74 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofile/QualityProfileWsParameters.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofile/QualityProfileWsParameters.java @@ -51,7 +51,6 @@ public class QualityProfileWsParameters { public static final String PARAM_DEFAULTS = "defaults"; public static final String PARAM_FROM_KEY = "fromKey"; public static final String PARAM_GROUP = "group"; - public static final String PARAM_ORGANIZATION = "organization"; public static final String PARAM_LANGUAGE = "language"; public static final String PARAM_LOGIN = "login"; public static final String PARAM_NAME = "name"; diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ActivateRulesRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ActivateRulesRequest.java index 796a7d3e9d4..9a8d5a29b2d 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ActivateRulesRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ActivateRulesRequest.java @@ -40,7 +40,6 @@ public class ActivateRulesRequest { private List inheritance; private String isTemplate; private List languages; - private String organization; private List owaspTop10; private String q; private String qprofile; @@ -198,19 +197,6 @@ public class ActivateRulesRequest { return languages; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public ActivateRulesRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * Possible values: *
      diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/AddGroupRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/AddGroupRequest.java index 1ede6644899..3d5ef361083 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/AddGroupRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/AddGroupRequest.java @@ -32,7 +32,6 @@ public class AddGroupRequest { private String group; private String language; - private String organization; private String qualityProfile; /** @@ -60,19 +59,6 @@ public class AddGroupRequest { return language; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public AddGroupRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * This is a mandatory parameter. * Example value: "Recommended quality profile" diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/AddProjectRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/AddProjectRequest.java index e6e3407e662..87d2d7e038e 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/AddProjectRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/AddProjectRequest.java @@ -31,7 +31,6 @@ import javax.annotation.Generated; public class AddProjectRequest { private String language; - private String organization; private String project; private String qualityProfile; @@ -47,19 +46,6 @@ public class AddProjectRequest { return language; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public AddProjectRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * This is a mandatory parameter. * Example value: "my_project" diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/AddUserRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/AddUserRequest.java index 3b01345e563..a9b521a5645 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/AddUserRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/AddUserRequest.java @@ -32,7 +32,6 @@ public class AddUserRequest { private String language; private String login; - private String organization; private String qualityProfile; /** @@ -60,19 +59,6 @@ public class AddUserRequest { return login; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public AddUserRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * This is a mandatory parameter. * Example value: "Recommended quality profile" diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/BackupRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/BackupRequest.java index 4cd3227770b..8ce280421db 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/BackupRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/BackupRequest.java @@ -31,7 +31,6 @@ import javax.annotation.Generated; public class BackupRequest { private String language; - private String organization; private String qualityProfile; /** @@ -46,19 +45,6 @@ public class BackupRequest { return language; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public BackupRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * This is a mandatory parameter. * Example value: "Sonar way" diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ChangeParentRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ChangeParentRequest.java index 360b4df967a..16322ccdced 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ChangeParentRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ChangeParentRequest.java @@ -31,7 +31,6 @@ import javax.annotation.Generated; public class ChangeParentRequest { private String language; - private String organization; private String parentQualityProfile; private String qualityProfile; @@ -47,19 +46,6 @@ public class ChangeParentRequest { return language; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public ChangeParentRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * Example value: "Sonar way" */ diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ChangelogRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ChangelogRequest.java index 9f1b1f0b9e5..0c67bf5949d 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ChangelogRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ChangelogRequest.java @@ -31,7 +31,6 @@ import javax.annotation.Generated; public class ChangelogRequest { private String language; - private String organization; private String p; private String ps; private String qualityProfile; @@ -50,19 +49,6 @@ public class ChangelogRequest { return language; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public ChangelogRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * Example value: "42" */ diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/CreateRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/CreateRequest.java index 0558d4bd0e7..8bb4041b961 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/CreateRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/CreateRequest.java @@ -32,7 +32,6 @@ public class CreateRequest { private String language; private String name; - private String organization; /** * This is a mandatory parameter. @@ -60,16 +59,4 @@ public class CreateRequest { return name; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public CreateRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } } diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/DeactivateRulesRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/DeactivateRulesRequest.java index 9debd5f2e63..d828e6849c6 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/DeactivateRulesRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/DeactivateRulesRequest.java @@ -40,7 +40,6 @@ public class DeactivateRulesRequest { private List inheritance; private String isTemplate; private List languages; - private String organization; private List owaspTop10; private String q; private String qprofile; @@ -197,19 +196,6 @@ public class DeactivateRulesRequest { return languages; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public DeactivateRulesRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * Possible values: *
        diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/DeleteRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/DeleteRequest.java index 7a2d0c22c14..3e9638007ea 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/DeleteRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/DeleteRequest.java @@ -31,7 +31,6 @@ import javax.annotation.Generated; public class DeleteRequest { private String language; - private String organization; private String qualityProfile; /** @@ -46,19 +45,6 @@ public class DeleteRequest { return language; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public DeleteRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * This is a mandatory parameter. * Example value: "Sonar way" diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ExportRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ExportRequest.java index 7ccc3d79b89..99479d04b36 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ExportRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/ExportRequest.java @@ -31,7 +31,6 @@ import javax.annotation.Generated; public class ExportRequest { private String language; - private String organization; private String qualityProfile; /** @@ -47,19 +46,6 @@ public class ExportRequest { return language; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public ExportRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * Example value: "My Sonar way" */ diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/InheritanceRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/InheritanceRequest.java index 9b29d2e7bca..f89ad67b47e 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/InheritanceRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/InheritanceRequest.java @@ -31,7 +31,6 @@ import javax.annotation.Generated; public class InheritanceRequest { private String language; - private String organization; private String qualityProfile; /** @@ -46,19 +45,6 @@ public class InheritanceRequest { return language; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public InheritanceRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * This is a mandatory parameter. * Example value: "Sonar way" diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/QualityprofilesService.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/QualityprofilesService.java index eaad9b8e20d..2dd6158e0ef 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/QualityprofilesService.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/QualityprofilesService.java @@ -82,7 +82,6 @@ public class QualityprofilesService extends BaseService { .setParam("inheritance", request.getInheritance() == null ? null : request.getInheritance().stream().collect(Collectors.joining(","))) .setParam("is_template", request.getIsTemplate()) .setParam("languages", request.getLanguages() == null ? null : request.getLanguages().stream().collect(Collectors.joining(","))) - .setParam("organization", request.getOrganization()) .setParam("owaspTop10", request.getOwaspTop10() == null ? null : request.getOwaspTop10().stream().collect(Collectors.joining(","))) .setParam("q", request.getQ()) .setParam("qprofile", request.getQprofile()) @@ -114,7 +113,6 @@ public class QualityprofilesService extends BaseService { new PostRequest(path("add_group")) .setParam("group", request.getGroup()) .setParam("language", request.getLanguage()) - .setParam("organization", request.getOrganization()) .setParam("qualityProfile", request.getQualityProfile()) .setMediaType(MediaTypes.JSON) ).content(); @@ -131,7 +129,6 @@ public class QualityprofilesService extends BaseService { call( new PostRequest(path("add_project")) .setParam("language", request.getLanguage()) - .setParam("organization", request.getOrganization()) .setParam("project", request.getProject()) .setParam("qualityProfile", request.getQualityProfile()) .setMediaType(MediaTypes.JSON) @@ -150,7 +147,6 @@ public class QualityprofilesService extends BaseService { new PostRequest(path("add_user")) .setParam("language", request.getLanguage()) .setParam("login", request.getLogin()) - .setParam("organization", request.getOrganization()) .setParam("qualityProfile", request.getQualityProfile()) .setMediaType(MediaTypes.JSON) ).content(); @@ -167,7 +163,6 @@ public class QualityprofilesService extends BaseService { return call( new GetRequest(path("backup")) .setParam("language", request.getLanguage()) - .setParam("organization", request.getOrganization()) .setParam("qualityProfile", request.getQualityProfile()) .setMediaType(MediaTypes.JSON) ).content(); @@ -184,7 +179,6 @@ public class QualityprofilesService extends BaseService { call( new PostRequest(path("change_parent")) .setParam("language", request.getLanguage()) - .setParam("organization", request.getOrganization()) .setParam("parentQualityProfile", request.getParentQualityProfile()) .setParam("qualityProfile", request.getQualityProfile()) .setMediaType(MediaTypes.JSON) @@ -202,7 +196,6 @@ public class QualityprofilesService extends BaseService { return call( new GetRequest(path("changelog")) .setParam("language", request.getLanguage()) - .setParam("organization", request.getOrganization()) .setParam("p", request.getP()) .setParam("ps", request.getPs()) .setParam("qualityProfile", request.getQualityProfile()) @@ -254,8 +247,7 @@ public class QualityprofilesService extends BaseService { return call( new PostRequest(path("create")) .setParam("language", request.getLanguage()) - .setParam("name", request.getName()) - .setParam("organization", request.getOrganization()), + .setParam("name", request.getName()), CreateWsResponse.parser()); } @@ -294,7 +286,6 @@ public class QualityprofilesService extends BaseService { .setParam("inheritance", request.getInheritance() == null ? null : request.getInheritance().stream().collect(Collectors.joining(","))) .setParam("is_template", request.getIsTemplate()) .setParam("languages", request.getLanguages() == null ? null : request.getLanguages().stream().collect(Collectors.joining(","))) - .setParam("organization", request.getOrganization()) .setParam("owaspTop10", request.getOwaspTop10() == null ? null : request.getOwaspTop10().stream().collect(Collectors.joining(","))) .setParam("q", request.getQ()) .setParam("qprofile", request.getQprofile()) @@ -324,7 +315,6 @@ public class QualityprofilesService extends BaseService { call( new PostRequest(path("delete")) .setParam("language", request.getLanguage()) - .setParam("organization", request.getOrganization()) .setParam("qualityProfile", request.getQualityProfile()) .setMediaType(MediaTypes.JSON) ).content(); @@ -341,7 +331,6 @@ public class QualityprofilesService extends BaseService { return call( new GetRequest(path("export")) .setParam("language", request.getLanguage()) - .setParam("organization", request.getOrganization()) .setParam("qualityProfile", request.getQualityProfile()) .setMediaType(MediaTypes.JSON) ).content(); @@ -386,7 +375,6 @@ public class QualityprofilesService extends BaseService { return call( new GetRequest(path("inheritance")) .setParam("language", request.getLanguage()) - .setParam("organization", request.getOrganization()) .setParam("qualityProfile", request.getQualityProfile()), Qualityprofiles.InheritanceWsResponse.parser()); } @@ -422,7 +410,6 @@ public class QualityprofilesService extends BaseService { new PostRequest(path("remove_group")) .setParam("group", request.getGroup()) .setParam("language", request.getLanguage()) - .setParam("organization", request.getOrganization()) .setParam("qualityProfile", request.getQualityProfile()) .setMediaType(MediaTypes.JSON) ).content(); @@ -439,7 +426,6 @@ public class QualityprofilesService extends BaseService { call( new PostRequest(path("remove_project")) .setParam("language", request.getLanguage()) - .setParam("organization", request.getOrganization()) .setParam("project", request.getProject()) .setParam("qualityProfile", request.getQualityProfile()) .setMediaType(MediaTypes.JSON) @@ -458,7 +444,6 @@ public class QualityprofilesService extends BaseService { new PostRequest(path("remove_user")) .setParam("language", request.getLanguage()) .setParam("login", request.getLogin()) - .setParam("organization", request.getOrganization()) .setParam("qualityProfile", request.getQualityProfile()) .setMediaType(MediaTypes.JSON) ).content(); @@ -491,7 +476,6 @@ public class QualityprofilesService extends BaseService { call( new PostRequest(path("restore")) .setParam("backup", request.getBackup()) - .setParam("organization", request.getOrganization()) .setMediaType(MediaTypes.JSON) ).content(); } @@ -508,7 +492,6 @@ public class QualityprofilesService extends BaseService { new GetRequest(path("search")) .setParam("defaults", request.getDefaults()) .setParam("language", request.getLanguage()) - .setParam("organization", request.getOrganization()) .setParam("project", request.getProject()) .setParam("qualityProfile", request.getQualityProfile()), SearchWsResponse.parser()); @@ -525,7 +508,6 @@ public class QualityprofilesService extends BaseService { return call( new GetRequest(path("search_groups")) .setParam("language", request.getLanguage()) - .setParam("organization", request.getOrganization()) .setParam("p", request.getP()) .setParam("ps", request.getPs()) .setParam("q", request.getQ()) @@ -545,7 +527,6 @@ public class QualityprofilesService extends BaseService { return call( new GetRequest(path("search_users")) .setParam("language", request.getLanguage()) - .setParam("organization", request.getOrganization()) .setParam("p", request.getP()) .setParam("ps", request.getPs()) .setParam("q", request.getQ()) @@ -565,7 +546,6 @@ public class QualityprofilesService extends BaseService { call( new PostRequest(path("set_default")) .setParam("language", request.getLanguage()) - .setParam("organization", request.getOrganization()) .setParam("qualityProfile", request.getQualityProfile()) .setMediaType(MediaTypes.JSON) ).content(); diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RemoveGroupRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RemoveGroupRequest.java index c7e2cbb46c2..d0dce1024f9 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RemoveGroupRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RemoveGroupRequest.java @@ -32,7 +32,6 @@ public class RemoveGroupRequest { private String group; private String language; - private String organization; private String qualityProfile; /** @@ -60,19 +59,6 @@ public class RemoveGroupRequest { return language; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public RemoveGroupRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * This is a mandatory parameter. * Example value: "Recommended quality profile" diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RemoveProjectRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RemoveProjectRequest.java index 1d3edb8f6e1..acb329a1329 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RemoveProjectRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RemoveProjectRequest.java @@ -31,7 +31,6 @@ import javax.annotation.Generated; public class RemoveProjectRequest { private String language; - private String organization; private String project; private String qualityProfile; @@ -47,19 +46,6 @@ public class RemoveProjectRequest { return language; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public RemoveProjectRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * This is a mandatory parameter. * Example value: "my_project" diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RemoveUserRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RemoveUserRequest.java index 3318a036403..41a06d3718e 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RemoveUserRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RemoveUserRequest.java @@ -32,7 +32,6 @@ public class RemoveUserRequest { private String language; private String login; - private String organization; private String qualityProfile; /** @@ -60,19 +59,6 @@ public class RemoveUserRequest { return login; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public RemoveUserRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * This is a mandatory parameter. * Example value: "Recommended quality profile" diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RestoreRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RestoreRequest.java index d4d7f0317c5..84af739c0e6 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RestoreRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/RestoreRequest.java @@ -31,7 +31,6 @@ import javax.annotation.Generated; public class RestoreRequest { private String backup; - private String organization; /** * This is a mandatory parameter. @@ -45,16 +44,4 @@ public class RestoreRequest { return backup; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public RestoreRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } } diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SearchGroupsRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SearchGroupsRequest.java index c0282ee67ce..146c9717c14 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SearchGroupsRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SearchGroupsRequest.java @@ -31,7 +31,6 @@ import javax.annotation.Generated; public class SearchGroupsRequest { private String language; - private String organization; private String p; private String ps; private String q; @@ -50,19 +49,6 @@ public class SearchGroupsRequest { return language; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public SearchGroupsRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * Example value: "42" */ diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SearchRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SearchRequest.java index 99472222efe..708b831cf06 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SearchRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SearchRequest.java @@ -32,7 +32,6 @@ public class SearchRequest { private String defaults; private String language; - private String organization; private String project; private String qualityProfile; @@ -65,19 +64,6 @@ public class SearchRequest { return language; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public SearchRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * Example value: "my_project" */ diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SearchUsersRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SearchUsersRequest.java index 97f5c1e0ccf..3af4b71f966 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SearchUsersRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SearchUsersRequest.java @@ -31,7 +31,6 @@ import javax.annotation.Generated; public class SearchUsersRequest { private String language; - private String organization; private String p; private String ps; private String q; @@ -50,19 +49,6 @@ public class SearchUsersRequest { return language; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public SearchUsersRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * Example value: "42" */ diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SetDefaultRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SetDefaultRequest.java index 1cf06b01d80..c519a836ed8 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SetDefaultRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/qualityprofiles/SetDefaultRequest.java @@ -31,7 +31,6 @@ import javax.annotation.Generated; public class SetDefaultRequest { private String language; - private String organization; private String qualityProfile; /** @@ -46,19 +45,6 @@ public class SetDefaultRequest { return language; } - /** - * This is part of the internal API. - * Example value: "my-org" - */ - public SetDefaultRequest setOrganization(String organization) { - this.organization = organization; - return this; - } - - public String getOrganization() { - return organization; - } - /** * This is a mandatory parameter. * Example value: "Sonar way" diff --git a/sonar-ws/src/main/protobuf/ws-qualityprofiles.proto b/sonar-ws/src/main/protobuf/ws-qualityprofiles.proto index ddb6ebbe8ff..4d9cd5d44ac 100644 --- a/sonar-ws/src/main/protobuf/ws-qualityprofiles.proto +++ b/sonar-ws/src/main/protobuf/ws-qualityprofiles.proto @@ -46,7 +46,6 @@ message SearchWsResponse { optional string rulesUpdatedAt = 11; optional string lastUsed = 13; optional string userUpdatedAt = 14; - optional string organization = 15; optional bool isBuiltIn = 16; optional Actions actions = 17; @@ -77,7 +76,6 @@ message CreateWsResponse { optional bool isDefault = 6; optional Infos infos = 7; optional Warnings warnings = 8; - optional string organization = 9; message Infos { repeated string infos = 1; @@ -134,7 +132,6 @@ message ShowResponse { optional string rulesUpdatedAt = 10; optional string lastUsed = 11; optional string userUpdatedAt = 12; - optional string organization = 13; optional bool isBuiltIn = 14; } -- 2.39.5