diff --git a/.github/workflows/build-dev-image.yml b/.github/workflows/build-dev-image.yml index 9dbee6bb91..81bbfbdbc6 100644 --- a/.github/workflows/build-dev-image.yml +++ b/.github/workflows/build-dev-image.yml @@ -4,6 +4,7 @@ on: push: branches: - develop + - feature/orgs paths-ignore: - '.github/**' - README.md @@ -29,7 +30,7 @@ jobs: uses: reportportal/.github/.github/workflows/build-docker-image.yaml@main with: aws-region: ${{ vars.AWS_REGION }} - image-tag: 'develop-${{ github.run_number }}' - version: 'develop-${{ github.run_number }}' + image-tag: 'orgs-${{ github.run_number }}' + version: 'orgs-${{ github.run_number }}' date: ${{ needs.variables-setup.outputs.date }} secrets: inherit diff --git a/.github/workflows/build-feature-image.yaml b/.github/workflows/build-feature-image.yaml index 757cf2eb51..6875e95b31 100644 --- a/.github/workflows/build-feature-image.yaml +++ b/.github/workflows/build-feature-image.yaml @@ -5,6 +5,7 @@ on: types: [opened, synchronize, reopened] branches: - 'develop' + - 'feature/orgs' jobs: variables-setup: diff --git a/.github/workflows/java-checks.yml b/.github/workflows/java-checks.yml index 958772ddd2..913b9a788a 100644 --- a/.github/workflows/java-checks.yml +++ b/.github/workflows/java-checks.yml @@ -11,6 +11,7 @@ on: branches: - master - develop + - feature/orgs paths-ignore: - '.github/**' - README.md diff --git a/build.gradle b/build.gradle index 693542e907..403227f523 100644 --- a/build.gradle +++ b/build.gradle @@ -72,9 +72,9 @@ dependencies { implementation 'com.epam.reportportal:plugin-api' } else { implementation 'com.github.reportportal:commons-events:e337f8b7be' - implementation 'com.github.reportportal:commons-dao:458b67ab61' + implementation 'com.github.reportportal:commons-dao:ade8559' implementation 'com.github.reportportal:commons-rules:42d4dd5634' - implementation 'com.github.reportportal:commons-model:c800793' + implementation 'com.github.reportportal:commons-model:23adba8' implementation 'com.github.reportportal:commons:07566b8e' implementation 'com.github.reportportal:commons-fonts:d6e62dd' implementation 'com.github.reportportal:plugin-api:0ccfed880c' @@ -90,6 +90,8 @@ dependencies { implementation 'com.opencsv:opencsv:5.8' + implementation 'com.github.slugify:slugify:3.0.6' + // Fix CVE-2021-41079, CVE-2022-23181, CVE-2021-33037, CVE-2021-30640, CVE-2022-42252 implementation 'org.apache.tomcat.embed:tomcat-embed-core:9.0.82' diff --git a/docker-compose.yml b/docker-compose.yml index ee9e4e2b8d..e23d9c8c6f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,11 +24,11 @@ services: ports: - "5432:5432" - elastic: - image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.3.0 + opensearch: + image: opensearchproject/opensearch:2.11.0 restart: always volumes: - - elastic:/usr/share/elasticsearch/data + - opensearch:/usr/share/opensearch/data environment: - "bootstrap.memory_lock=true" - "discovery.type=single-node" @@ -77,5 +77,5 @@ services: volumes: reportportal-database: - elastic: + opensearch: minio: \ No newline at end of file diff --git a/project-properties.gradle b/project-properties.gradle index 5e70950dbd..98b0d56774 100755 --- a/project-properties.gradle +++ b/project-properties.gradle @@ -67,6 +67,8 @@ project.ext { (migrationsUrl + '/migrations/76_user_bid_extension.up.sql') : 'V076__user_bid_extension.sql', (migrationsUrl + '/migrations/77_email_server_documentation_link.up.sql') : 'V077__email_server_documentation_link.sql', (migrationsUrl + '/migrations/78_drop_redundant_index.up.sql') : 'V078__drop_redundant_index.sql', + (migrationsUrl + '/migrations/83_add_slugify_function.up.sql') : 'V083__add_slugify_function.sql', + (migrationsUrl + '/migrations/84_organization_tables.up.sql') : 'V084__organization_tables.sql', ] excludeTests = ['**/entity/**', '**/aop/**', diff --git a/src/main/java/com/epam/ta/reportportal/auth/permissions/BaseProjectPermission.java b/src/main/java/com/epam/ta/reportportal/auth/permissions/BaseProjectPermission.java index 372b7be071..65bf7a875d 100644 --- a/src/main/java/com/epam/ta/reportportal/auth/permissions/BaseProjectPermission.java +++ b/src/main/java/com/epam/ta/reportportal/auth/permissions/BaseProjectPermission.java @@ -47,7 +47,7 @@ protected BaseProjectPermission(ProjectExtractor projectExtractor) { * subclass */ @Override - public boolean isAllowed(Authentication authentication, Object projectName) { + public boolean isAllowed(Authentication authentication, Object projectKey) { if (!authentication.isAuthenticated()) { return false; } @@ -56,14 +56,14 @@ public boolean isAllowed(Authentication authentication, Object projectName) { ReportPortalUser rpUser = (ReportPortalUser) oauth.getUserAuthentication().getPrincipal(); BusinessRule.expect(rpUser, Objects::nonNull).verify(ErrorType.ACCESS_DENIED); - final String resolvedProjectName = String.valueOf(projectName); + final String resolvedProjectKey = String.valueOf(projectKey); final ReportPortalUser.ProjectDetails projectDetails = projectExtractor.findProjectDetails( - rpUser, resolvedProjectName) + rpUser, resolvedProjectKey) .orElseThrow(() -> new ReportPortalException(ErrorType.ACCESS_DENIED)); - fillProjectDetails(rpUser, resolvedProjectName, projectDetails); + fillProjectDetails(rpUser, resolvedProjectKey, projectDetails); ProjectRole role = projectDetails.getProjectRole(); - return checkAllowed(rpUser, projectName.toString(), role); + return checkAllowed(rpUser, projectKey.toString(), role); } private void fillProjectDetails(ReportPortalUser rpUser, String resolvedProjectName, @@ -83,4 +83,4 @@ private void fillProjectDetails(ReportPortalUser rpUser, String resolvedProjectN * @return TRUE if access allowed */ abstract protected boolean checkAllowed(ReportPortalUser user, String project, ProjectRole role); -} \ No newline at end of file +} diff --git a/src/main/java/com/epam/ta/reportportal/auth/permissions/Permissions.java b/src/main/java/com/epam/ta/reportportal/auth/permissions/Permissions.java index c860bb5ed7..67cf598a19 100644 --- a/src/main/java/com/epam/ta/reportportal/auth/permissions/Permissions.java +++ b/src/main/java/com/epam/ta/reportportal/auth/permissions/Permissions.java @@ -29,20 +29,15 @@ private Permissions() { public static final String ADMIN_ONLY = "hasRole('ADMINISTRATOR')"; - public static final String ALLOWED_TO_EDIT_USER = - "(#login.toLowerCase() == authentication.name)" + "||" + ADMIN_ONLY; + public static final String ALLOWED_TO_EDIT_USER = "(#login.toLowerCase() == authentication.name)" + "||" + ADMIN_ONLY; - public static final String ALLOWED_TO_REPORT = - "hasPermission(#projectName.toLowerCase(), 'reporterPermission')" + "||" + ADMIN_ONLY; + public static final String ALLOWED_TO_REPORT = "hasPermission(#projectKey.toLowerCase(), 'reporterPermission')" + "||" + ADMIN_ONLY; - public static final String ASSIGNED_TO_PROJECT = "hasPermission(#projectName.toLowerCase(), 'isAssignedToProject')"; + public static final String ASSIGNED_TO_PROJECT = "hasPermission(#projectKey.toLowerCase(), 'isAssignedToProject')"; - public static final String PROJECT_MANAGER = - "hasPermission(#projectName.toLowerCase(), 'projectManagerPermission')" + "||" + ADMIN_ONLY; + public static final String PROJECT_MANAGER = "hasPermission(#projectKey.toLowerCase(), 'projectManagerPermission')" + "||" + ADMIN_ONLY; - public static final String NOT_CUSTOMER = - "hasPermission(#projectName.toLowerCase(), 'notCustomerPermission')" + "||" + ADMIN_ONLY; + public static final String NOT_CUSTOMER = "hasPermission(#projectKey.toLowerCase(), 'notCustomerPermission')" + "||" + ADMIN_ONLY; - public static final String PROJECT_MANAGER_OR_ADMIN = - "hasPermission(#projectName.toLowerCase(), 'projectManagerPermission')" + "||" + ADMIN_ONLY; -} \ No newline at end of file + public static final String PROJECT_MANAGER_OR_ADMIN = "hasPermission(#projectKey.toLowerCase(), 'projectManagerPermission')" + "||" + ADMIN_ONLY; +} diff --git a/src/main/java/com/epam/ta/reportportal/core/file/impl/GetFileHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/file/impl/GetFileHandlerImpl.java index 3bc74f859e..6f3b630125 100644 --- a/src/main/java/com/epam/ta/reportportal/core/file/impl/GetFileHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/file/impl/GetFileHandlerImpl.java @@ -67,12 +67,12 @@ public BinaryData getUserPhoto(ReportPortalUser loggedInUser, boolean loadThumbn } @Override - public BinaryData getUserPhoto(String username, ReportPortalUser loggedInUser, String projectName, + public BinaryData getUserPhoto(String username, ReportPortalUser loggedInUser, String projectKey, boolean loadThumbnail) { User user = userRepository.findByLogin(username) .orElseThrow(() -> new ReportPortalException(ErrorType.USER_NOT_FOUND, username)); ReportPortalUser.ProjectDetails projectDetails = projectExtractor.extractProjectDetailsAdmin( - loggedInUser, projectName); + loggedInUser, projectKey); if (loggedInUser.getUserRole() != UserRole.ADMINISTRATOR) { expect( ProjectUtils.isAssignedToProject(user, projectDetails.getProjectId()), diff --git a/src/main/java/com/epam/ta/reportportal/core/integration/impl/CreateIntegrationHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/integration/impl/CreateIntegrationHandlerImpl.java index e5075fac21..1304480fdc 100644 --- a/src/main/java/com/epam/ta/reportportal/core/integration/impl/CreateIntegrationHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/integration/impl/CreateIntegrationHandlerImpl.java @@ -108,11 +108,11 @@ public EntryCreatedRS createGlobalIntegration(IntegrationRQ createRequest, Strin } @Override - public EntryCreatedRS createProjectIntegration(String projectName, IntegrationRQ createRequest, + public EntryCreatedRS createProjectIntegration(String projectKey, IntegrationRQ createRequest, String pluginName, ReportPortalUser user) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); IntegrationType integrationType = integrationTypeRepository.findByName(pluginName) .orElseThrow(() -> new ReportPortalException(ErrorType.INTEGRATION_NOT_FOUND, pluginName)); @@ -175,11 +175,11 @@ public OperationCompletionRS updateGlobalIntegration(Long id, IntegrationRQ upda } @Override - public OperationCompletionRS updateProjectIntegration(Long id, String projectName, + public OperationCompletionRS updateProjectIntegration(Long id, String projectKey, IntegrationRQ updateRequest, ReportPortalUser user) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); final Integration integration = integrationRepository.findByIdAndProjectId(id, project.getId()) .orElseThrow(() -> new ReportPortalException(ErrorType.INTEGRATION_NOT_FOUND, id)); diff --git a/src/main/java/com/epam/ta/reportportal/core/integration/impl/DeleteIntegrationHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/integration/impl/DeleteIntegrationHandlerImpl.java index 4137032e78..17a5ac3ecc 100644 --- a/src/main/java/com/epam/ta/reportportal/core/integration/impl/DeleteIntegrationHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/integration/impl/DeleteIntegrationHandlerImpl.java @@ -16,6 +16,10 @@ package com.epam.ta.reportportal.core.integration.impl; +import static com.epam.ta.reportportal.ws.converter.converters.IntegrationConverter.TO_ACTIVITY_RESOURCE; +import static com.epam.ta.reportportal.ws.model.ErrorType.INTEGRATION_NOT_FOUND; +import static com.epam.ta.reportportal.ws.model.ErrorType.PROJECT_NOT_FOUND; + import com.epam.ta.reportportal.commons.ReportPortalUser; import com.epam.ta.reportportal.commons.validation.Suppliers; import com.epam.ta.reportportal.core.events.activity.IntegrationDeletedEvent; @@ -29,17 +33,12 @@ import com.epam.ta.reportportal.exception.ReportPortalException; import com.epam.ta.reportportal.ws.model.ErrorType; import com.epam.ta.reportportal.ws.model.OperationCompletionRS; +import java.util.Collections; +import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; -import java.util.Collections; -import java.util.List; - -import static com.epam.ta.reportportal.ws.converter.converters.IntegrationConverter.TO_ACTIVITY_RESOURCE; -import static com.epam.ta.reportportal.ws.model.ErrorType.INTEGRATION_NOT_FOUND; -import static com.epam.ta.reportportal.ws.model.ErrorType.PROJECT_NOT_FOUND; - /** * @author <a href="mailto:andrei_varabyeu@epam.com">Andrei Varabyeu</a> */ @@ -96,10 +95,10 @@ public OperationCompletionRS deleteGlobalIntegrationsByType(String type, ReportP } @Override - public OperationCompletionRS deleteProjectIntegration(Long integrationId, String projectName, + public OperationCompletionRS deleteProjectIntegration(Long integrationId, String projectKey, ReportPortalUser user) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectKey)); Integration integration = integrationRepository.findByIdAndProjectId(integrationId, project.getId()) .orElseThrow(() -> new ReportPortalException(INTEGRATION_NOT_FOUND, integrationId)); @@ -115,10 +114,10 @@ public OperationCompletionRS deleteProjectIntegration(Long integrationId, String } @Override - public OperationCompletionRS deleteProjectIntegrationsByType(String type, String projectName, + public OperationCompletionRS deleteProjectIntegrationsByType(String type, String projectKey, ReportPortalUser user) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectKey)); IntegrationType integrationType = integrationTypeRepository.findByName(type) .orElseThrow(() -> new ReportPortalException(ErrorType.INTEGRATION_NOT_FOUND, type)); List<Integration> integrations = integrationRepository.findAllByProjectIdAndInIntegrationTypeIds( diff --git a/src/main/java/com/epam/ta/reportportal/core/integration/impl/GetIntegrationHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/integration/impl/GetIntegrationHandlerImpl.java index 887f3a205c..730e9c0864 100644 --- a/src/main/java/com/epam/ta/reportportal/core/integration/impl/GetIntegrationHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/integration/impl/GetIntegrationHandlerImpl.java @@ -73,9 +73,9 @@ public GetIntegrationHandlerImpl(@Qualifier("integrationServiceMapping") } @Override - public IntegrationResource getProjectIntegrationById(Long integrationId, String projectName) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + public IntegrationResource getProjectIntegrationById(Long integrationId, String projectKey) { + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); Integration integration = integrationRepository.findByIdAndProjectId(integrationId, project.getId()).orElseThrow( () -> new ReportPortalException(ErrorType.INTEGRATION_NOT_FOUND, integrationId)); @@ -194,17 +194,17 @@ public List<IntegrationResource> getGlobalIntegrations(String pluginName) { } @Override - public List<IntegrationResource> getProjectIntegrations(String projectName) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + public List<IntegrationResource> getProjectIntegrations(String projectKey) { + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); return integrationRepository.findAllByProjectIdOrderByCreationDateDesc(project.getId()).stream() .map(TO_INTEGRATION_RESOURCE).collect(Collectors.toList()); } @Override - public List<IntegrationResource> getProjectIntegrations(String pluginName, String projectName) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + public List<IntegrationResource> getProjectIntegrations(String pluginName, String projectKey) { + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); IntegrationType integrationType = integrationTypeRepository.findByName(pluginName) .orElseThrow(() -> new ReportPortalException(ErrorType.INTEGRATION_NOT_FOUND, pluginName)); return integrationRepository.findAllByProjectIdAndTypeOrderByCreationDateDesc(project.getId(), @@ -213,9 +213,9 @@ public List<IntegrationResource> getProjectIntegrations(String pluginName, Strin } @Override - public boolean testConnection(Long integrationId, String projectName) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + public boolean testConnection(Long integrationId, String projectKey) { + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); Integration integration = integrationRepository.findByIdAndProjectId(integrationId, project.getId()).orElseGet( diff --git a/src/main/java/com/epam/ta/reportportal/core/jasper/impl/ProjectJasperReportHandler.java b/src/main/java/com/epam/ta/reportportal/core/jasper/impl/ProjectJasperReportHandler.java index 8d058df594..3c94a8b580 100644 --- a/src/main/java/com/epam/ta/reportportal/core/jasper/impl/ProjectJasperReportHandler.java +++ b/src/main/java/com/epam/ta/reportportal/core/jasper/impl/ProjectJasperReportHandler.java @@ -68,7 +68,7 @@ public Map<String, Object> convertParams(ProjectInfo project) { params.put(ProjectReportConstants.PROJECT_TYPE, project.getProjectType()); params.put(ProjectReportConstants.PROJECT_NAME, project.getName()); params.put(ProjectReportConstants.ORGANIZATION, - ofNullable(project.getOrganization()).orElse(EMPTY_STRING)); + ofNullable(project.getOrganizationSlug()).orElse(EMPTY_STRING)); params.put(ProjectReportConstants.MEMBERS, project.getUsersQuantity()); params.put(ProjectReportConstants.LAUNCHES, project.getLaunchesQuantity()); diff --git a/src/main/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImpl.java index be6d10999f..eb6e9978ff 100644 --- a/src/main/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImpl.java @@ -107,7 +107,7 @@ public FinishLaunchRS finishLaunch(String launchId, FinishExecutionRQ finishLaun FinishLaunchRS response = new FinishLaunchRS(); response.setId(launch.getUuid()); response.setNumber(launch.getNumber()); - response.setLink(generateLaunchLink(baseUrl, projectDetails.getProjectName(), + response.setLink(generateLaunchLink(baseUrl, projectDetails.getProjectKey(), String.valueOf(launch.getId()) )); return response; diff --git a/src/main/java/com/epam/ta/reportportal/core/launch/impl/GetLaunchHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/launch/impl/GetLaunchHandlerImpl.java index 666232300e..39943bc95e 100644 --- a/src/main/java/com/epam/ta/reportportal/core/launch/impl/GetLaunchHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/launch/impl/GetLaunchHandlerImpl.java @@ -169,10 +169,10 @@ private Launch findLaunch(String launchId, ReportPortalUser.ProjectDetails proje } @Override - public LaunchResource getLaunchByProjectName(String projectName, Pageable pageable, Filter filter, + public LaunchResource getLaunchByProjectName(String projectKey, Pageable pageable, Filter filter, String username) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); Page<Launch> launches = launchRepository.findByFilter(ProjectFilter.of(filter, project.getId()), pageable); @@ -408,4 +408,4 @@ private void fillWithAdditionalParams(Map<String, Object> params, Launch launch, params.put(LaunchReportConstants.TEST_ITEMS, dataProvider.getTestItemsOfLaunch(launch)); } -} \ No newline at end of file +} diff --git a/src/main/java/com/epam/ta/reportportal/core/log/ElasticLogService.java b/src/main/java/com/epam/ta/reportportal/core/log/ElasticLogService.java index c836c6d521..afa2e92f3a 100644 --- a/src/main/java/com/epam/ta/reportportal/core/log/ElasticLogService.java +++ b/src/main/java/com/epam/ta/reportportal/core/log/ElasticLogService.java @@ -39,7 +39,7 @@ @Primary @Service -@ConditionalOnProperty(prefix = "rp.elasticsearch", name = "host") +@ConditionalOnProperty(prefix = "rp.searchengine", name = "host") public class ElasticLogService implements LogService { private final AmqpTemplate amqpTemplate; diff --git a/src/main/java/com/epam/ta/reportportal/core/organization/GetOrganizationHandler.java b/src/main/java/com/epam/ta/reportportal/core/organization/GetOrganizationHandler.java new file mode 100644 index 0000000000..4accde691d --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/core/organization/GetOrganizationHandler.java @@ -0,0 +1,43 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.core.organization; + +import com.epam.ta.reportportal.commons.ReportPortalUser; +import com.epam.ta.reportportal.model.OrganizationResource; +import java.util.List; + +/** + * @author Andrei Piankouski + */ +public interface GetOrganizationHandler { + + /** + * Get Organization resource information + * + * @param organizationId Organization id + * @param user User + * @return {@link OrganizationResource} + */ + OrganizationResource getResource(Long organizationId, ReportPortalUser user); + + /** + * Get List of all Organizations + * + * @return The {@link List} of the {@link OrganizationResource} + */ + List<OrganizationResource> getAllOrganization(); +} diff --git a/src/main/java/com/epam/ta/reportportal/core/organization/impl/GetOrganizationHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/organization/impl/GetOrganizationHandlerImpl.java new file mode 100644 index 0000000000..0b1a603502 --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/core/organization/impl/GetOrganizationHandlerImpl.java @@ -0,0 +1,58 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.core.organization.impl; + +import com.epam.ta.reportportal.commons.ReportPortalUser; +import com.epam.ta.reportportal.core.organization.GetOrganizationHandler; +import com.epam.ta.reportportal.dao.organization.OrganizationRepository; +import com.epam.ta.reportportal.entity.organization.Organization; +import com.epam.ta.reportportal.exception.ReportPortalException; +import com.epam.ta.reportportal.model.OrganizationResource; +import com.epam.ta.reportportal.ws.converter.converters.OrganizationConverter; +import com.epam.ta.reportportal.ws.model.ErrorType; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author Andrei Piankouski + */ +@Service +public class GetOrganizationHandlerImpl implements GetOrganizationHandler { + + private final OrganizationRepository organizationRepository; + + @Autowired + public GetOrganizationHandlerImpl(OrganizationRepository organizationRepository) { + this.organizationRepository = organizationRepository; + } + + @Override + public OrganizationResource getResource(Long organizationId, ReportPortalUser user) { + Organization organization = organizationRepository.findById(organizationId) + .orElseThrow( + () -> new ReportPortalException(ErrorType.ORGANIZATION_NOT_FOUND, organizationId)); + return OrganizationConverter.TO_ORGANIZATION_RESOURCE.apply(organization); + } + + @Override + public List<OrganizationResource> getAllOrganization() { + List<Organization> organizations = organizationRepository.findAll(); + return organizations.stream().map(OrganizationConverter.TO_ORGANIZATION_RESOURCE).toList(); + } + +} diff --git a/src/main/java/com/epam/ta/reportportal/core/project/GetProjectHandler.java b/src/main/java/com/epam/ta/reportportal/core/project/GetProjectHandler.java index 7e215e4328..75789f170e 100644 --- a/src/main/java/com/epam/ta/reportportal/core/project/GetProjectHandler.java +++ b/src/main/java/com/epam/ta/reportportal/core/project/GetProjectHandler.java @@ -38,12 +38,12 @@ public interface GetProjectHandler { /** * Get project users info * - * @param projectName {@link com.epam.ta.reportportal.entity.project.Project#name} + * @param projectKey {@link com.epam.ta.reportportal.entity.project.Project#name} * @param filter {@link Filter} * @param pageable {@link Pageable} * @return list of {@link UserResource} */ - Iterable<UserResource> getProjectUsers(String projectName, Filter filter, Pageable pageable); + Iterable<UserResource> getProjectUsers(String projectKey, Filter filter, Pageable pageable); boolean exists(Long id); @@ -64,11 +64,11 @@ public interface GetProjectHandler { /** * Get project resource information * - * @param projectName Project name + * @param projectKey Project name * @param user User * @return {@link ProjectResource} */ - ProjectResource getResource(String projectName, ReportPortalUser user); + ProjectResource getResource(String projectKey, ReportPortalUser user); /** * Get list of specified usernames @@ -115,4 +115,4 @@ Iterable<SearchUserResource> getUserNames(String value, void exportProjects(ReportFormat reportFormat, Queryable filter, OutputStream outputStream); Map<String, Boolean> getAnalyzerIndexingStatus(); -} \ No newline at end of file +} diff --git a/src/main/java/com/epam/ta/reportportal/core/project/impl/CreateProjectHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/project/impl/CreateProjectHandlerImpl.java index 29aa901691..bff3c788c5 100644 --- a/src/main/java/com/epam/ta/reportportal/core/project/impl/CreateProjectHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/project/impl/CreateProjectHandlerImpl.java @@ -32,7 +32,9 @@ import com.epam.ta.reportportal.dao.ProjectRepository; import com.epam.ta.reportportal.dao.ProjectUserRepository; import com.epam.ta.reportportal.dao.UserRepository; +import com.epam.ta.reportportal.dao.organization.OrganizationRepository; import com.epam.ta.reportportal.entity.enums.ProjectType; +import com.epam.ta.reportportal.entity.organization.Organization; import com.epam.ta.reportportal.entity.project.Project; import com.epam.ta.reportportal.entity.project.ProjectAttribute; import com.epam.ta.reportportal.entity.project.ProjectRole; @@ -43,6 +45,7 @@ import com.epam.ta.reportportal.model.EntryCreatedRS; import com.epam.ta.reportportal.model.project.CreateProjectRQ; import com.epam.ta.reportportal.util.PersonalProjectService; +import com.epam.ta.reportportal.util.SlugifyUtils; import com.epam.ta.reportportal.ws.model.ErrorType; import java.util.Date; import java.util.Optional; @@ -73,13 +76,14 @@ public class CreateProjectHandlerImpl implements CreateProjectHandler { private final ApplicationEventPublisher applicationEventPublisher; private final ProjectUserRepository projectUserRepository; + private final OrganizationRepository organizationRepository; @Autowired public CreateProjectHandlerImpl(PersonalProjectService personalProjectService, ProjectRepository projectRepository, UserRepository userRepository, AttributeRepository attributeRepository, IssueTypeRepository issueTypeRepository, ApplicationEventPublisher applicationEventPublisher, - ProjectUserRepository projectUserRepository) { + ProjectUserRepository projectUserRepository, OrganizationRepository organizationRepository) { this.personalProjectService = personalProjectService; this.projectRepository = projectRepository; this.userRepository = userRepository; @@ -87,11 +91,13 @@ public CreateProjectHandlerImpl(PersonalProjectService personalProjectService, this.issueTypeRepository = issueTypeRepository; this.applicationEventPublisher = applicationEventPublisher; this.projectUserRepository = projectUserRepository; + this.organizationRepository = organizationRepository; } @Override public EntryCreatedRS createProject(CreateProjectRQ createProjectRQ, ReportPortalUser user) { String projectName = createProjectRQ.getProjectName().toLowerCase().trim(); + Long orgId = createProjectRQ.getOrganizationId(); expect(projectName, not(equalTo(RESERVED_PROJECT_NAME))).verify(ErrorType.INCORRECT_REQUEST, Suppliers.formattedSupplier("Project with name '{}' is reserved by system", projectName) @@ -105,7 +111,12 @@ public EntryCreatedRS createProject(CreateProjectRQ createProjectRQ, ReportPorta ) ); - Optional<Project> existProject = projectRepository.findByName(projectName); + Organization organization = organizationRepository.findById(orgId) + .orElseThrow(() -> new ReportPortalException(ErrorType.ORGANIZATION_NOT_FOUND, orgId)); + var projectSlug = SlugifyUtils.slugify(projectName); + var projectKey = generateProjectKey(organization, projectSlug); + + Optional<Project> existProject = projectRepository.findByKey(projectKey); expect(existProject, not(isPresent())).verify(ErrorType.PROJECT_ALREADY_EXISTS, projectName); ProjectType projectType = ProjectType.findByName(createProjectRQ.getEntryType()).orElseThrow( @@ -120,6 +131,10 @@ public EntryCreatedRS createProject(CreateProjectRQ createProjectRQ, ReportPorta .orElseThrow(() -> new ReportPortalException(ErrorType.USER_NOT_FOUND, user.getUsername())); Project project = new Project(); + + project.setOrganization(organization); + project.setKey(projectKey); + project.setSlug(projectSlug); project.setName(projectName); project.setCreationDate(new Date()); @@ -161,4 +176,8 @@ public Project createPersonal(User user) { publishProjectCreatedEvent(null, RP_SUBJECT_NAME, personalProject); return personalProject; } + + private String generateProjectKey(Organization organization, String projectSlug) { + return organization.getSlug() + "-" + projectSlug; + } } diff --git a/src/main/java/com/epam/ta/reportportal/core/project/impl/DeleteProjectHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/project/impl/DeleteProjectHandlerImpl.java index 117f156ff8..789ed82ead 100644 --- a/src/main/java/com/epam/ta/reportportal/core/project/impl/DeleteProjectHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/project/impl/DeleteProjectHandlerImpl.java @@ -167,12 +167,12 @@ private void publishProjectBulkDeletedEvent(ReportPortalUser user, Collection<St } @Override - public OperationCompletionRS deleteProjectIndex(String projectName, String username) { + public OperationCompletionRS deleteProjectIndex(String projectKey, String username) { expect(analyzerServiceClient.hasClients(), Predicate.isEqual(true)).verify( ErrorType.UNABLE_INTERACT_WITH_INTEGRATION, "There are no analyzer deployed."); - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); User user = userRepository.findByLogin(username) .orElseThrow(() -> new ReportPortalException(ErrorType.USER_NOT_FOUND, username)); @@ -195,7 +195,7 @@ public OperationCompletionRS deleteProjectIndex(String projectName, String usern false )); return new OperationCompletionRS( - "Project index with name = '" + projectName + "' is successfully deleted."); + "Project index with key = '" + projectKey + "' is successfully deleted."); } private OperationCompletionRS deleteProject(Project project) { diff --git a/src/main/java/com/epam/ta/reportportal/core/project/impl/GetProjectHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/project/impl/GetProjectHandlerImpl.java index 77a69d497a..2e05d505b3 100644 --- a/src/main/java/com/epam/ta/reportportal/core/project/impl/GetProjectHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/project/impl/GetProjectHandlerImpl.java @@ -93,10 +93,10 @@ public GetProjectHandlerImpl(ProjectRepository projectRepository, UserRepository } @Override - public Iterable<UserResource> getProjectUsers(String projectName, Filter filter, + public Iterable<UserResource> getProjectUsers(String projectKey, Filter filter, Pageable pageable) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); if (CollectionUtils.isEmpty(project.getUsers())) { return Collections.emptyList(); } @@ -127,7 +127,7 @@ public Project get(Long id) { @Override public Project get(String name) { - return projectRepository.findByName(name) + return projectRepository.findByKey(name) .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, name)); } @@ -138,10 +138,10 @@ public Project getRaw(String name) { } @Override - public ProjectResource getResource(String projectName, ReportPortalUser user) { + public ProjectResource getResource(String projectKey, ReportPortalUser user) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); return projectConverter.TO_PROJECT_RESOURCE.apply(project); } diff --git a/src/main/java/com/epam/ta/reportportal/core/project/impl/GetProjectInfoHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/project/impl/GetProjectInfoHandlerImpl.java index 8cc2dcae97..9eff14dac6 100644 --- a/src/main/java/com/epam/ta/reportportal/core/project/impl/GetProjectInfoHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/project/impl/GetProjectInfoHandlerImpl.java @@ -164,10 +164,10 @@ public Iterable<ProjectInfoResource> getAllProjectsInfo(Queryable filter, Pageab } @Override - public ProjectInfoResource getProjectInfo(String projectName, String interval) { + public ProjectInfoResource getProjectInfo(String projectKey, String interval) { - Project project = projectRepository.findByName(normalizeId(projectName)) - .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(normalizeId(projectKey)) + .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectKey)); InfoInterval infoInterval = InfoInterval.findByInterval(interval) .orElseThrow(() -> new ReportPortalException(BAD_REQUEST_ERROR, interval)); @@ -179,7 +179,7 @@ public ProjectInfoResource getProjectInfo(String projectName, String interval) { projectRepository.findProjectInfoByFilter(filter, Pageable.unpaged()); ProjectInfoResource projectInfoResource = ProjectSettingsConverter.TO_PROJECT_INFO_RESOURCE.apply(result.get().findFirst() - .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectName))); + .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectKey))); LocalDateTime startIntervalDate = getStartIntervalDate(infoInterval); @@ -207,10 +207,10 @@ public ProjectInfoResource getProjectInfo(String projectName, String interval) { } @Override - public Map<String, ?> getProjectInfoWidgetContent(String projectName, String interval, + public Map<String, ?> getProjectInfoWidgetContent(String projectKey, String interval, String widgetCode) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectKey)); InfoInterval infoInterval = InfoInterval.findByInterval(interval) .orElseThrow(() -> new ReportPortalException(BAD_REQUEST_ERROR, interval)); diff --git a/src/main/java/com/epam/ta/reportportal/core/project/impl/UpdateProjectHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/project/impl/UpdateProjectHandlerImpl.java index 743ec71b59..2c58eacb05 100644 --- a/src/main/java/com/epam/ta/reportportal/core/project/impl/UpdateProjectHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/project/impl/UpdateProjectHandlerImpl.java @@ -174,10 +174,10 @@ public UpdateProjectHandlerImpl(ProjectExtractor projectExtractor, } @Override - public OperationCompletionRS updateProject(String projectName, UpdateProjectRQ updateProjectRQ, + public OperationCompletionRS updateProject(String projectKey, UpdateProjectRQ updateProjectRQ, ReportPortalUser user) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); ProjectAttributesActivityResource before = TO_ACTIVITY_RESOURCE.apply(project); updateProjectConfiguration(updateProjectRQ.getConfiguration(), project); ofNullable(updateProjectRQ.getUserRoles()).ifPresent( @@ -193,10 +193,10 @@ public OperationCompletionRS updateProject(String projectName, UpdateProjectRQ u } @Override - public OperationCompletionRS updateProjectNotificationConfig(String projectName, + public OperationCompletionRS updateProjectNotificationConfig(String projectKey, ReportPortalUser user, ProjectNotificationConfigDTO updateProjectNotificationConfigRQ) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); ProjectResource before = projectConverter.TO_PROJECT_RESOURCE.apply(project); updateSenderCases(project, updateProjectNotificationConfigRQ.getSenderCases()); @@ -211,17 +211,17 @@ public OperationCompletionRS updateProjectNotificationConfig(String projectName, user.getUserId(), user.getUsername() )); return new OperationCompletionRS( - "Notification configuration of project - '" + projectName + "' is successfully updated."); + "Notification configuration of project - '" + projectKey + "' is successfully updated."); } @Override - public OperationCompletionRS unassignUsers(String projectName, UnassignUsersRQ unassignUsersRQ, + public OperationCompletionRS unassignUsers(String projectKey, UnassignUsersRQ unassignUsersRQ, ReportPortalUser user) { expect(unassignUsersRQ.getUsernames(), not(List::isEmpty)).verify(BAD_REQUEST_ERROR, "Request should contain at least one username." ); - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectKey)); User modifier = userRepository.findById(user.getUserId()) .orElseThrow(() -> new ReportPortalException(USER_NOT_FOUND, user.getUsername())); if (!UserRole.ADMINISTRATOR.equals(modifier.getRole())) { @@ -243,11 +243,11 @@ public OperationCompletionRS unassignUsers(String projectName, UnassignUsersRQ u } @Override - public OperationCompletionRS assignUsers(String projectName, AssignUsersRQ assignUsersRQ, + public OperationCompletionRS assignUsers(String projectKey, AssignUsersRQ assignUsersRQ, ReportPortalUser user) { if (UserRole.ADMINISTRATOR.equals(user.getUserRole())) { - Project project = projectRepository.findByName(normalizeId(projectName)).orElseThrow( - () -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, normalizeId(projectName))); + Project project = projectRepository.findByKey(normalizeId(projectKey)).orElseThrow( + () -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, normalizeId(projectKey))); List<String> assignedUsernames = project.getUsers().stream().map(u -> u.getUser().getLogin()).collect(toList()); @@ -264,9 +264,9 @@ public OperationCompletionRS assignUsers(String projectName, AssignUsersRQ assig ); ReportPortalUser.ProjectDetails projectDetails = - projectExtractor.extractProjectDetails(user, projectName); + projectExtractor.extractProjectDetails(user, projectKey); Project project = projectRepository.findById(projectDetails.getProjectId()).orElseThrow( - () -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, normalizeId(projectName))); + () -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, normalizeId(projectKey))); List<String> assignedUsernames = project.getUsers().stream().map(u -> u.getUser().getLogin()).collect(toList()); @@ -283,16 +283,16 @@ public OperationCompletionRS assignUsers(String projectName, AssignUsersRQ assig return new OperationCompletionRS( "User(s) with username='" + assignUsersRQ.getUserNames().keySet() - + "' was successfully assigned to project='" + normalizeId(projectName) + "'"); + + "' was successfully assigned to project='" + normalizeId(projectKey) + "'"); } @Override - public OperationCompletionRS indexProjectData(String projectName, ReportPortalUser user) { + public OperationCompletionRS indexProjectData(String projectKey, ReportPortalUser user) { expect(analyzerServiceClient.hasClients(), Predicate.isEqual(true)).verify( ErrorType.UNABLE_INTERACT_WITH_INTEGRATION, "There are no analyzer deployed."); - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectKey)); expect(ofNullable(indexerStatusCache.getIndexingStatus().getIfPresent(project.getId())).orElse( false), equalTo(false)).verify(ErrorType.FORBIDDEN_OPERATION, @@ -334,7 +334,7 @@ private List<ProjectUser> unassignUsers(List<String> usernames, User modifier, P }); } else { ReportPortalUser.ProjectDetails projectDetails = - projectExtractor.extractProjectDetails(user, project.getName()); + projectExtractor.extractProjectDetails(user, project.getKey()); usernames.forEach(username -> { User userForUnassign = userRepository.findByLogin(username) diff --git a/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/CreateProjectSettingsHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/CreateProjectSettingsHandlerImpl.java index 74f41a536a..081f605972 100644 --- a/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/CreateProjectSettingsHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/CreateProjectSettingsHandlerImpl.java @@ -109,10 +109,10 @@ public CreateProjectSettingsHandlerImpl(ProjectRepository projectRepository, } @Override - public IssueSubTypeCreatedRS createProjectIssueSubType(String projectName, ReportPortalUser user, + public IssueSubTypeCreatedRS createProjectIssueSubType(String projectKey, ReportPortalUser user, CreateIssueSubTypeRQ rq) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectKey)); expect(NOT_ISSUE_FLAG.getValue().equalsIgnoreCase(rq.getTypeRef()), equalTo(false)).verify( INCORRECT_REQUEST, "Impossible to create sub-type for 'Not Issue' type."); @@ -172,11 +172,11 @@ private void updateWidgets(Project project, IssueType issueType) { } @Override - public EntryCreatedRS createPatternTemplate(String projectName, + public EntryCreatedRS createPatternTemplate(String projectKey, CreatePatternTemplateRQ createPatternTemplateRQ, ReportPortalUser user) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); PatternTemplate patternTemplate = createPatternTemplateMapping.get( PatternTemplateType.fromString(createPatternTemplateRQ.getType()).orElseThrow( diff --git a/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/DeleteProjectSettingsHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/DeleteProjectSettingsHandlerImpl.java index 487e53bb15..0ba96704e9 100644 --- a/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/DeleteProjectSettingsHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/DeleteProjectSettingsHandlerImpl.java @@ -16,13 +16,31 @@ package com.epam.ta.reportportal.core.project.settings.impl; +import static com.epam.ta.reportportal.commons.Predicates.in; +import static com.epam.ta.reportportal.commons.Predicates.not; +import static com.epam.ta.reportportal.commons.validation.BusinessRule.expect; +import static com.epam.ta.reportportal.entity.enums.TestItemIssueGroup.AUTOMATION_BUG; +import static com.epam.ta.reportportal.entity.enums.TestItemIssueGroup.NO_DEFECT; +import static com.epam.ta.reportportal.entity.enums.TestItemIssueGroup.PRODUCT_BUG; +import static com.epam.ta.reportportal.entity.enums.TestItemIssueGroup.SYSTEM_ISSUE; +import static com.epam.ta.reportportal.entity.enums.TestItemIssueGroup.TO_INVESTIGATE; +import static com.epam.ta.reportportal.ws.converter.converters.IssueTypeConverter.TO_ACTIVITY_RESOURCE; +import static com.epam.ta.reportportal.ws.model.ErrorType.FORBIDDEN_OPERATION; +import static com.epam.ta.reportportal.ws.model.ErrorType.ISSUE_TYPE_NOT_FOUND; +import static com.epam.ta.reportportal.ws.model.ErrorType.PROJECT_NOT_FOUND; + import com.epam.ta.reportportal.commons.ReportPortalUser; import com.epam.ta.reportportal.commons.validation.Suppliers; import com.epam.ta.reportportal.core.events.MessageBus; import com.epam.ta.reportportal.core.events.activity.DefectTypeDeletedEvent; import com.epam.ta.reportportal.core.events.activity.PatternDeletedEvent; import com.epam.ta.reportportal.core.project.settings.DeleteProjectSettingsHandler; -import com.epam.ta.reportportal.dao.*; +import com.epam.ta.reportportal.dao.IssueEntityRepository; +import com.epam.ta.reportportal.dao.IssueTypeRepository; +import com.epam.ta.reportportal.dao.PatternTemplateRepository; +import com.epam.ta.reportportal.dao.ProjectRepository; +import com.epam.ta.reportportal.dao.StatisticsFieldRepository; +import com.epam.ta.reportportal.dao.WidgetRepository; import com.epam.ta.reportportal.entity.enums.TestItemIssueGroup; import com.epam.ta.reportportal.entity.item.issue.IssueEntity; import com.epam.ta.reportportal.entity.item.issue.IssueType; @@ -36,22 +54,14 @@ import com.epam.ta.reportportal.ws.model.ErrorType; import com.epam.ta.reportportal.ws.model.OperationCompletionRS; import com.google.common.collect.Sets; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -import static com.epam.ta.reportportal.commons.Predicates.in; -import static com.epam.ta.reportportal.commons.Predicates.not; -import static com.epam.ta.reportportal.commons.validation.BusinessRule.expect; -import static com.epam.ta.reportportal.entity.enums.TestItemIssueGroup.*; -import static com.epam.ta.reportportal.ws.converter.converters.IssueTypeConverter.TO_ACTIVITY_RESOURCE; -import static com.epam.ta.reportportal.ws.model.ErrorType.*; - /** * @author <a href="mailto:ihar_kahadouski@epam.com">Ihar Kahadouski</a> */ @@ -91,9 +101,9 @@ public DeleteProjectSettingsHandlerImpl(ProjectRepository projectRepository, Sta } @Override - public OperationCompletionRS deleteProjectIssueSubType(String projectName, ReportPortalUser user, Long id) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectName)); + public OperationCompletionRS deleteProjectIssueSubType(String projectKey, ReportPortalUser user, Long id) { + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectKey)); ProjectIssueType type = project.getProjectIssueTypes() .stream() @@ -161,10 +171,10 @@ private void updateWidgets(Project project, IssueType issueType) { } @Override - public OperationCompletionRS deletePatternTemplate(String projectName, ReportPortalUser user, Long id) { + public OperationCompletionRS deletePatternTemplate(String projectKey, ReportPortalUser user, Long id) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); PatternTemplate patternTemplate = patternTemplateRepository.findByIdAndProjectId(id, project.getId()) .orElseThrow(() -> new ReportPortalException(ErrorType.PATTERN_TEMPLATE_NOT_FOUND_IN_PROJECT, id, project.getName())); diff --git a/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/GetProjectSettingsHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/GetProjectSettingsHandlerImpl.java index 692c78d1de..282b37bc51 100644 --- a/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/GetProjectSettingsHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/GetProjectSettingsHandlerImpl.java @@ -34,17 +34,17 @@ @Transactional(readOnly = true) public class GetProjectSettingsHandlerImpl implements GetProjectSettingsHandler { - private final ProjectRepository repository; + private final ProjectRepository projectRepository; @Autowired public GetProjectSettingsHandlerImpl(ProjectRepository repository) { - this.repository = repository; + this.projectRepository = repository; } @Override - public ProjectSettingsResource getProjectSettings(String projectName) { - Project project = repository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + public ProjectSettingsResource getProjectSettings(String projectKey) { + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); return ProjectSettingsConverter.TO_PROJECT_SETTINGS_RESOURCE.apply(project); } } diff --git a/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/UpdateProjectSettingsHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/UpdateProjectSettingsHandlerImpl.java index ce46d5e925..6630e2b878 100644 --- a/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/UpdateProjectSettingsHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/project/settings/impl/UpdateProjectSettingsHandlerImpl.java @@ -84,14 +84,14 @@ public UpdateProjectSettingsHandlerImpl(ProjectRepository projectRepository, } @Override - public OperationCompletionRS updateProjectIssueSubType(String projectName, ReportPortalUser user, + public OperationCompletionRS updateProjectIssueSubType(String projectKey, ReportPortalUser user, UpdateIssueSubTypeRQ updateIssueSubTypeRQ) { - expect(updateIssueSubTypeRQ.getIds().size() > 0, equalTo(true)).verify(FORBIDDEN_OPERATION, + expect(!updateIssueSubTypeRQ.getIds().isEmpty(), equalTo(true)).verify(FORBIDDEN_OPERATION, "Please specify at least one item data for update." ); - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(PROJECT_NOT_FOUND, projectKey)); List<IssueTypeActivityResource> issueTypeActivityResources = updateIssueSubTypeRQ.getIds().stream().map(subTypeRQ -> TO_ACTIVITY_RESOURCE.apply( @@ -107,11 +107,11 @@ public OperationCompletionRS updateProjectIssueSubType(String projectName, Repor } @Override - public OperationCompletionRS updatePatternTemplate(Long id, String projectName, + public OperationCompletionRS updatePatternTemplate(Long id, String projectKey, UpdatePatternTemplateRQ updatePatternTemplateRQ, ReportPortalUser user) { - Project project = projectRepository.findByName(projectName) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + Project project = projectRepository.findByKey(projectKey) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); PatternTemplate patternTemplate = patternTemplateRepository.findById(id).orElseThrow( () -> new ReportPortalException(ErrorType.PATTERN_TEMPLATE_NOT_FOUND_IN_PROJECT, id, diff --git a/src/main/java/com/epam/ta/reportportal/demodata/DemoDataController.java b/src/main/java/com/epam/ta/reportportal/demodata/DemoDataController.java index 123cdfa3f1..570b85d6fe 100644 --- a/src/main/java/com/epam/ta/reportportal/demodata/DemoDataController.java +++ b/src/main/java/com/epam/ta/reportportal/demodata/DemoDataController.java @@ -16,6 +16,8 @@ package com.epam.ta.reportportal.demodata; +import static com.epam.ta.reportportal.auth.permissions.Permissions.PROJECT_MANAGER; + import com.epam.ta.reportportal.commons.ReportPortalUser; import com.epam.ta.reportportal.demodata.model.DemoDataRq; import com.epam.ta.reportportal.demodata.model.DemoDataRs; @@ -25,15 +27,17 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import static com.epam.ta.reportportal.auth.permissions.Permissions.PROJECT_MANAGER; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; /** * @author Ihar Kahadouski */ @RestController -@RequestMapping("/v1/demo/{projectName}") +@RequestMapping("/v1/demo/{projectKey}") @PreAuthorize(PROJECT_MANAGER) class DemoDataController { @@ -48,8 +52,8 @@ class DemoDataController { @PostMapping("/generate") @ApiOperation(value = "generate") - public DemoDataRs generate(@PathVariable String projectName, @Validated @RequestBody DemoDataRq demoDataRq, + public DemoDataRs generate(@PathVariable String projectKey, @Validated @RequestBody DemoDataRq demoDataRq, @AuthenticationPrincipal ReportPortalUser user) { - return demoDataService.generate(demoDataRq, projectExtractor.extractProjectDetailsAdmin(user, projectName), user); + return demoDataService.generate(demoDataRq, projectExtractor.extractProjectDetailsAdmin(user, projectKey), user); } } diff --git a/src/main/java/com/epam/ta/reportportal/model/OrganizationResource.java b/src/main/java/com/epam/ta/reportportal/model/OrganizationResource.java new file mode 100644 index 0000000000..e3e7a6cff0 --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/model/OrganizationResource.java @@ -0,0 +1,50 @@ +package com.epam.ta.reportportal.model; + +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import javax.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * Basic JSON representation of Organization. + * + * @author Andrei Piankouski + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +@Getter +@Setter +@ToString +public class OrganizationResource { + + @NotNull + @JsonProperty(value = "organizationId", required = true) + private Long organizationId; + + @NotNull + @JsonProperty(value = "organizationName", required = true) + private String organizationName; + + @NotNull + @JsonProperty(value = "organizationSlug", required = true) + private String organizationSlug; + +} diff --git a/src/main/java/com/epam/ta/reportportal/model/project/CreateProjectRQ.java b/src/main/java/com/epam/ta/reportportal/model/project/CreateProjectRQ.java index 43c511c17a..cd15712f80 100644 --- a/src/main/java/com/epam/ta/reportportal/model/project/CreateProjectRQ.java +++ b/src/main/java/com/epam/ta/reportportal/model/project/CreateProjectRQ.java @@ -17,6 +17,7 @@ package com.epam.ta.reportportal.model.project; import static com.epam.ta.reportportal.ws.model.ValidationConstraints.PROJECT_NAME_REGEXP; +import static com.epam.ta.reportportal.ws.model.ValidationConstraints.PROJECT_SLUG_REGEXP; import com.epam.ta.reportportal.ws.annotations.In; import com.epam.ta.reportportal.ws.model.ValidationConstraints; @@ -27,6 +28,8 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; +import lombok.Getter; +import lombok.Setter; /** * Create project request initial model @@ -35,6 +38,8 @@ * @author Andrei_Ramanchuk */ @JsonInclude(Include.NON_NULL) +@Getter +@Setter public class CreateProjectRQ { @NotBlank @@ -50,28 +55,13 @@ public class CreateProjectRQ { @ApiModelProperty(required = true, allowableValues = "INTERNAL") private String entryType; - public String getProjectName() { - return projectName; - } + @JsonProperty(value = "organizationId") + private Long organizationId; - public void setProjectName(String projectName) { - this.projectName = projectName; - } + @Pattern(regexp = PROJECT_SLUG_REGEXP) + @Size(min = ValidationConstraints.MIN_NAME_LENGTH, max = ValidationConstraints.MAX_NAME_LENGTH) + @JsonProperty(value = "projectSlug", required = true) + @ApiModelProperty(required = true) + private String projectSlug; - public String getEntryType() { - return entryType; - } - - public void setEntryType(String value) { - this.entryType = value; - } - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder("CreateProjectRQ{"); - sb.append("projectName='").append(projectName).append('\''); - sb.append(", entryType='").append(entryType).append('\''); - sb.append('}'); - return sb.toString(); - } } diff --git a/src/main/java/com/epam/ta/reportportal/model/project/ProjectInfoResource.java b/src/main/java/com/epam/ta/reportportal/model/project/ProjectInfoResource.java index 1e6e3c3a84..594d92d7a6 100644 --- a/src/main/java/com/epam/ta/reportportal/model/project/ProjectInfoResource.java +++ b/src/main/java/com/epam/ta/reportportal/model/project/ProjectInfoResource.java @@ -23,6 +23,9 @@ import java.util.List; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; /** * Project info resource representation for responses<br> @@ -34,6 +37,9 @@ * @author Dzmitry_Kavalets * @author Andrei_Ramanchuk */ +@Getter +@Setter +@ToString public class ProjectInfoResource { @NotNull @@ -78,94 +84,18 @@ public class ProjectInfoResource { @JsonProperty(value = "organization") private String organization; - public ProjectInfoResource() { - } - - public Long getProjectId() { - return projectId; - } - - public void setProjectId(Long projectId) { - this.projectId = projectId; - } - - public String getProjectName() { - return projectName; - } - - public void setProjectName(String projectName) { - this.projectName = projectName; - } - - public Integer getUsersQuantity() { - return usersQuantity; - } - - public void setUsersQuantity(Integer usersQuantity) { - this.usersQuantity = usersQuantity; - } - - public Integer getLaunchesQuantity() { - return launchesQuantity; - } - - public void setLaunchesQuantity(Integer launchesQuantity) { - this.launchesQuantity = launchesQuantity; - } - - public void setLaunchesPerUser(List<LaunchesPerUser> value) { - this.launchesPerUser = value; - } - - public List<LaunchesPerUser> getLaunchesPerUser() { - return launchesPerUser; - } - - public void setUniqueTickets(Integer value) { - this.uniqueTickets = value; - } - - public Integer getUniqueTickets() { - return uniqueTickets; - } - - public void setLaunchesPerWeek(String value) { - this.launchesPerWeek = value; - } - - public String getLaunchesPerWeek() { - return launchesPerWeek; - } - - public Date getLastRun() { - return lastRun; - } - - public void setLastRun(Date lastRun) { - this.lastRun = lastRun; - } - - public Date getCreationDate() { - return creationDate; - } - - public void setCreationDate(Date creationDate) { - this.creationDate = creationDate; - } + @NotBlank + @JsonProperty(value = "projectKey") + private String projectKey; - public String getEntryType() { - return entryType; - } + @NotBlank + @JsonProperty(value = "projectSlug") + private String projectSlug; - public void setEntryType(String entryType) { - this.entryType = entryType; - } + @JsonProperty(value = "organizationId") + private String organizationId; - public String getOrganization() { - return organization; - } + @JsonProperty(value = "organizationSlug") + private String organizationSlug; - public void setOrganization(String organization) { - this.organization = organization; - } } diff --git a/src/main/java/com/epam/ta/reportportal/model/project/ProjectResource.java b/src/main/java/com/epam/ta/reportportal/model/project/ProjectResource.java index 0702c6a410..361c96e9ed 100644 --- a/src/main/java/com/epam/ta/reportportal/model/project/ProjectResource.java +++ b/src/main/java/com/epam/ta/reportportal/model/project/ProjectResource.java @@ -21,12 +21,18 @@ import java.util.Date; import java.util.List; import javax.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; /** * Project resource representation for responses * * @author Pavel Bortnik */ + +@Getter +@Setter public class ProjectResource { @NotNull @@ -37,6 +43,12 @@ public class ProjectResource { @JsonProperty(value = "projectName", required = true) private String projectName; + @JsonProperty(value = "projectKey") + private String projectKey; + + @JsonProperty(value = "projectSlug") + private String projectSlug; + @JsonProperty(value = "entryType", required = true) private String entryType; @@ -53,6 +65,12 @@ public class ProjectResource { @JsonProperty(value = "organization") private String organization; + @JsonProperty(value = "organizationId") + private Long organizationId; + + @JsonProperty(value = "organizationSlug") + private String organizationSlug; + @JsonProperty(value = "allocatedStorage") private Long allocatedStorage; @@ -60,79 +78,9 @@ public class ProjectResource { @JsonProperty(value = "creationDate") private Date creationDate; - public Date getCreationDate() { - return creationDate; - } - - public void setCreationDate(Date creationDate) { - this.creationDate = creationDate; - } - - public Long getProjectId() { - return projectId; - } - - public void setProjectId(Long projectId) { - this.projectId = projectId; - } - - public String getProjectName() { - return projectName; - } - - public void setProjectName(String projectName) { - this.projectName = projectName; - } - - public String getEntryType() { - return entryType; - } - - public void setEntryType(String entryType) { - this.entryType = entryType; - } - - public void setConfiguration( - ProjectConfiguration configuration) { - this.configuration = configuration; - } - - public ProjectConfiguration getConfiguration() { - return configuration; - } - - public List<IntegrationResource> getIntegrations() { - return integrations; - } - - public void setIntegrations(List<IntegrationResource> integrations) { - this.integrations = integrations; - } - - public List<ProjectUser> getUsers() { - return users; - } - - public void setUsers(List<ProjectUser> users) { - this.users = users; - } - - public String getOrganization() { - return organization; - } - - public void setOrganization(String organization) { - this.organization = organization; - } - - public Long getAllocatedStorage() { - return allocatedStorage; - } - - public void setAllocatedStorage(Long allocatedStorage) { - this.allocatedStorage = allocatedStorage; - } - + @Getter + @Setter + @ToString public static class ProjectUser { @JsonProperty(value = "login") @@ -141,25 +89,5 @@ public static class ProjectUser { @JsonProperty(value = "projectRole") private String projectRole; - public String getLogin() { - return login; - } - - public void setLogin(String login) { - this.login = login; - } - - public void setProjectRole(String value) { - this.projectRole = value; - } - - public String getProjectRole() { - return projectRole; - } - - @Override - public String toString() { - return "ProjectUser{" + "projectRole='" + projectRole + '\'' + '}'; - } } } diff --git a/src/main/java/com/epam/ta/reportportal/model/user/UserResource.java b/src/main/java/com/epam/ta/reportportal/model/user/UserResource.java index 6867eaf2bb..80f549a11e 100644 --- a/src/main/java/com/epam/ta/reportportal/model/user/UserResource.java +++ b/src/main/java/com/epam/ta/reportportal/model/user/UserResource.java @@ -19,8 +19,12 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.HashMap; import java.util.Map; import javax.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; /** * User resource representation for responses @@ -28,154 +32,69 @@ * @author Andrei_Ramanchuk */ @JsonInclude(Include.NON_NULL) +@Getter +@Setter +@ToString public class UserResource { - @NotNull - @JsonProperty(value = "id", required = true) - private Long id; + @NotNull + @JsonProperty(value = "id", required = true) + private Long id; - @NotNull - @JsonProperty(value = "userId", required = true) - private String userId; + @NotNull + @JsonProperty(value = "userId", required = true) + private String userId; - @JsonProperty(value = "email", required = true) - private String email; + @JsonProperty(value = "email", required = true) + private String email; - @JsonProperty(value = "photoId") - private String photoId; + @JsonProperty(value = "photoId") + private String photoId; - @JsonProperty(value = "fullName") - private String fullName; + @JsonProperty(value = "fullName") + private String fullName; - @JsonProperty(value = "accountType") - private String accountType; + @JsonProperty(value = "accountType") + private String accountType; - @JsonProperty(value = "userRole") - private String userRole; + @JsonProperty(value = "userRole") + private String userRole; - @JsonProperty(value = "photoLoaded") - private boolean isLoaded; + @JsonProperty(value = "photoLoaded") + private boolean isLoaded; - @JsonProperty(value = "metadata") - private Object metadata; + @JsonProperty(value = "metadata") + private Object metadata; - @JsonProperty(value = "assignedProjects") - private Map<String, AssignedProject> assignedProjects; + @JsonProperty(value = "assignedProjects") + private Map<String, AssignedProject> assignedProjects = new HashMap<>(); - public Long getId() { - return id; - } + @JsonProperty(value = "assignedOrganizations") + private Map<String, AssignedOrganization> assignedOrganizations = new HashMap<>(); - public void setId(Long id) { - this.id = id; - } + @Getter + @Setter + @ToString + public static class AssignedProject { - public void setUserId(String value) { - this.userId = value; - } + private String projectRole; + private String entryType; + private String projectKey; + private String projectSlug; + private String projectName; + private Long organizationId; - public String getUserId() { - return userId; - } + } - public void setEmail(String value) { - this.email = value; - } + @Getter + @Setter + @ToString + public static class AssignedOrganization { - public String getEmail() { - return email; - } + private Long organizationId; + private String organizationRole; + private String organizationName; - public void setPhotoId(String value) { - this.photoId = value; - } + } - public String getPhotoId() { - return photoId; - } - - public void setFullName(String value) { - this.fullName = value; - } - - public String getFullName() { - return fullName; - } - - public void setAccountType(String value) { - this.accountType = value; - } - - public String getAccountType() { - return accountType; - } - - public String getUserRole() { - return userRole; - } - - public void setUserRole(String value) { - this.userRole = value; - } - - public Object getMetadata() { - return metadata; - } - - public void setMetadata(Object metadata) { - this.metadata = metadata; - } - - public void setIsLoaded(boolean value) { - this.isLoaded = value; - } - - public boolean getIsLoaded() { - return isLoaded; - } - - public Map<String, AssignedProject> getAssignedProjects() { - return assignedProjects; - } - - public void setAssignedProjects(Map<String, AssignedProject> assignedProjects) { - this.assignedProjects = assignedProjects; - } - - public static class AssignedProject { - - private String projectRole; - private String entryType; - - public String getEntryType() { - return entryType; - } - - public void setEntryType(String entryType) { - this.entryType = entryType; - } - - public void setProjectRole(String projectRole) { - this.projectRole = projectRole; - } - - public String getProjectRole() { - return projectRole; - } - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder("AssignedProject{"); - sb.append("projectRole='").append(projectRole).append('\''); - sb.append('}'); - return sb.toString(); - } - } - - @Override - public String toString() { - return "UserResource{" + "id=" + id + ", userId='" + userId + '\'' + ", email='" + email + '\'' + ", photoId='" + photoId + '\'' - + ", fullName='" + fullName + '\'' + ", accountType='" + accountType + '\'' + ", userRole='" + userRole + '\'' - + ", isLoaded=" + isLoaded + ", metadata=" + metadata + ", assignedProjects=" + assignedProjects + '}'; - } } diff --git a/src/main/java/com/epam/ta/reportportal/util/ProjectExtractor.java b/src/main/java/com/epam/ta/reportportal/util/ProjectExtractor.java index 998001d160..908fd5bd6c 100644 --- a/src/main/java/com/epam/ta/reportportal/util/ProjectExtractor.java +++ b/src/main/java/com/epam/ta/reportportal/util/ProjectExtractor.java @@ -44,15 +44,15 @@ public ProjectExtractor(ProjectUserRepository projectUserRepository) { * Extracts project details for specified user by specified project name * * @param user User - * @param projectName Project name + * @param projectKey Project name * @return Project Details */ public ReportPortalUser.ProjectDetails extractProjectDetails(ReportPortalUser user, - String projectName) { - final String normalizedProjectName = normalizeId(projectName); + String projectKey) { + final String normalizedProjectName = normalizeId(projectKey); if (user.getUserRole().equals(ADMINISTRATOR)) { - return extractProjectDetailsAdmin(user, projectName); + return extractProjectDetailsAdmin(user, projectKey); } return user.getProjectDetails().computeIfAbsent(normalizedProjectName, k -> findProjectDetails(user, normalizedProjectName).orElseThrow( @@ -66,12 +66,12 @@ public ReportPortalUser.ProjectDetails extractProjectDetails(ReportPortalUser us * Find project details for specified user by specified project name * * @param user User - * @param projectName Project name + * @param projectKey Project unique key * @return {@link Optional} with Project Details */ public Optional<ReportPortalUser.ProjectDetails> findProjectDetails(ReportPortalUser user, - String projectName) { - return projectUserRepository.findDetailsByUserIdAndProjectName(user.getUserId(), projectName); + String projectKey) { + return projectUserRepository.findDetailsByUserIdAndProjectKey(user.getUserId(), projectKey); } /** @@ -79,24 +79,24 @@ public Optional<ReportPortalUser.ProjectDetails> findProjectDetails(ReportPortal * - he is added as a PROJECT_MANAGER to the project * * @param user User - * @param projectName Project name + * @param projectKey Project unique key * @return Project Details */ public ReportPortalUser.ProjectDetails extractProjectDetailsAdmin(ReportPortalUser user, - String projectName) { + String projectKey) { //dirty hack to allow everything for user with 'admin' authority if (user.getUserRole().getAuthority().equals(ADMINISTRATOR.getAuthority())) { - ReportPortalUser.ProjectDetails projectDetails = projectUserRepository.findAdminDetailsProjectName( - normalizeId(projectName)) - .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectName)); + ReportPortalUser.ProjectDetails projectDetails = projectUserRepository.findAdminDetailsProjectKey( + normalizeId(projectKey)) + .orElseThrow(() -> new ReportPortalException(ErrorType.PROJECT_NOT_FOUND, projectKey)); user.getProjectDetails().put( - normalizeId(projectName), + normalizeId(projectKey), projectDetails ); } - return Optional.ofNullable(user.getProjectDetails().get(normalizeId(projectName))).orElseThrow( + return Optional.ofNullable(user.getProjectDetails().get(normalizeId(projectKey))).orElseThrow( () -> new ReportPortalException(ErrorType.ACCESS_DENIED, "Please check the list of your available projects." )); diff --git a/src/main/java/com/epam/ta/reportportal/util/SlugifyUtils.java b/src/main/java/com/epam/ta/reportportal/util/SlugifyUtils.java new file mode 100644 index 0000000000..f2dc5f2e11 --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/util/SlugifyUtils.java @@ -0,0 +1,15 @@ +package com.epam.ta.reportportal.util; + +import com.github.slugify.Slugify; + +public class SlugifyUtils { + + private SlugifyUtils() { + } + + public static String slugify(String inputStr) { + var slg = Slugify.builder().build(); + return slg.slugify(inputStr); + } + +} diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/ActivityController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/ActivityController.java index 20a093a88d..df688e46be 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/ActivityController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/ActivityController.java @@ -35,9 +35,9 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.transaction.annotation.Transactional; + import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; - import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; @@ -45,7 +45,7 @@ * @author Ihar_Kahadouski */ @RestController - @RequestMapping("/v1/{projectName}/activity") + @RequestMapping("/v1/{projectKey}/activity") @Transactional(readOnly = true) @PreAuthorize(ASSIGNED_TO_PROJECT) public class ActivityController { @@ -60,23 +60,23 @@ public ActivityController(ActivityHandler activityHandler, ProjectExtractor proj this.projectExtractor = projectExtractor; } - @RequestMapping(value = "/{activityId}", method = RequestMethod.GET) + @GetMapping(value = "/{activityId}") @ResponseStatus(OK) - public ActivityResource getActivity(@PathVariable String projectName, + public ActivityResource getActivity(@PathVariable String projectKey, @PathVariable Long activityId, @AuthenticationPrincipal ReportPortalUser user) { ReportPortalUser.ProjectDetails projectDetails = - projectExtractor.extractProjectDetailsAdmin(user, EntityUtils.normalizeId(projectName)); + projectExtractor.extractProjectDetailsAdmin(user, EntityUtils.normalizeId(projectKey)); return activityHandler.getActivity(projectDetails, activityId); } - @RequestMapping(value = "/item/{itemId}", method = RequestMethod.GET) + @GetMapping(value = "/item/{itemId}") @ResponseStatus(OK) @ApiOperation("Get activities for test item") - public Iterable<ActivityEventResource> getTestItemActivities(@PathVariable String projectName, + public Iterable<ActivityEventResource> getTestItemActivities(@PathVariable String projectKey, @PathVariable Long itemId, @FilterFor(Activity.class) Filter filter, @SortFor(Activity.class) Pageable pageable, @AuthenticationPrincipal ReportPortalUser user) { ReportPortalUser.ProjectDetails projectDetails = - projectExtractor.extractProjectDetailsAdmin(user, EntityUtils.normalizeId(projectName)); + projectExtractor.extractProjectDetailsAdmin(user, EntityUtils.normalizeId(projectKey)); return activityHandler.getItemActivities(projectDetails, itemId, filter, pageable); } - } \ No newline at end of file + } diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/ActivityEventController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/ActivityEventController.java index 79931aa40d..f3ef2bc6ad 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/ActivityEventController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/ActivityEventController.java @@ -99,13 +99,13 @@ public PagedResponse<ActivityEventResource> getActivities( return activityEventHandler.getActivityEventsHistory(filter, pageable); } - @GetMapping("/{projectName}/subjectName") + @GetMapping("/{projectKey}/subjectName") @PreAuthorize(ADMIN_ONLY) @ApiOperation(value = "Load project activities subjectNames by filter", notes = "Only for current project") - public List<String> getProjectSubjectName(@PathVariable String projectName, + public List<String> getProjectSubjectName(@PathVariable String projectKey, @RequestParam(FilterCriteriaResolver.DEFAULT_FILTER_PREFIX + Condition.CNT + "subjectName") String value, @AuthenticationPrincipal ReportPortalUser user) { return activityEventHandler.getSubjectNames( - projectExtractor.extractProjectDetails(user, projectName), value); + projectExtractor.extractProjectDetails(user, projectKey), value); } } diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/BugTrackingSystemController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/BugTrackingSystemController.java index 82a0c12a6f..5bcc32d95e 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/BugTrackingSystemController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/BugTrackingSystemController.java @@ -67,30 +67,30 @@ public BugTrackingSystemController(ProjectExtractor projectExtractor, } @Transactional(readOnly = true) - @GetMapping(value = "/{projectName}/{integrationId}/fields-set") + @GetMapping(value = "/{projectKey}/{integrationId}/fields-set") @ResponseStatus(HttpStatus.OK) @ApiOperation("Get list of fields required for posting ticket in concrete integration") @PreAuthorize(PROJECT_MANAGER) public List<PostFormField> getSetOfIntegrationSystemFields( @RequestParam(value = "issueType") String issuetype, - @PathVariable String projectName, @PathVariable Long integrationId, + @PathVariable String projectKey, @PathVariable Long integrationId, @AuthenticationPrincipal ReportPortalUser user) { return getTicketHandler.getSubmitTicketFields(issuetype, integrationId, - projectExtractor.extractProjectDetails(user, EntityUtils.normalizeId(projectName)) + projectExtractor.extractProjectDetails(user, EntityUtils.normalizeId(projectKey)) ); } @Transactional(readOnly = true) - @GetMapping(value = "/{projectName}/{integrationId}/issue_types") + @GetMapping(value = "/{projectKey}/{integrationId}/issue_types") @ResponseStatus(HttpStatus.OK) @ApiOperation("Get list of allowable issue types for bug tracking system") @PreAuthorize(PROJECT_MANAGER) - public List<String> getAllowableIssueTypes(@PathVariable String projectName, + public List<String> getAllowableIssueTypes(@PathVariable String projectKey, @PathVariable Long integrationId, @AuthenticationPrincipal ReportPortalUser user) { return getTicketHandler.getAllowableIssueTypes(integrationId, - projectExtractor.extractProjectDetails(user, EntityUtils.normalizeId(projectName))); + projectExtractor.extractProjectDetails(user, EntityUtils.normalizeId(projectKey))); } @Transactional(readOnly = true) @@ -115,29 +115,29 @@ public List<String> getAllowableIssueTypes(@PathVariable Long integrationId, } @Transactional - @PostMapping(value = "/{projectName}/{integrationId}/ticket") + @PostMapping(value = "/{projectKey}/{integrationId}/ticket") @ResponseStatus(HttpStatus.CREATED) @ApiOperation("Post ticket to the bts integration") public Ticket createIssue(@Validated @RequestBody PostTicketRQ ticketRQ, - @PathVariable String projectName, + @PathVariable String projectKey, @PathVariable Long integrationId, @AuthenticationPrincipal ReportPortalUser user) { return createTicketHandler.createIssue(ticketRQ, integrationId, - projectExtractor.extractProjectDetails(user, EntityUtils.normalizeId(projectName)), + projectExtractor.extractProjectDetails(user, EntityUtils.normalizeId(projectKey)), user ); } @Transactional(readOnly = true) - @GetMapping(value = "/{projectName}/ticket/{ticketId}") + @GetMapping(value = "/{projectKey}/ticket/{ticketId}") @ResponseStatus(HttpStatus.OK) @ApiOperation("Get ticket from the bts integration") - public Ticket getTicket(@PathVariable String ticketId, @PathVariable String projectName, + public Ticket getTicket(@PathVariable String ticketId, @PathVariable String projectKey, @RequestParam(value = "btsUrl") String btsUrl, @RequestParam(value = "btsProject") String btsProject, @AuthenticationPrincipal ReportPortalUser user) { return getTicketHandler.getTicket(ticketId, btsUrl, btsProject, - projectExtractor.extractProjectDetails(user, EntityUtils.normalizeId(projectName))); + projectExtractor.extractProjectDetails(user, EntityUtils.normalizeId(projectKey))); } } diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/DashboardController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/DashboardController.java index 3132b143ba..83b71bc339 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/DashboardController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/DashboardController.java @@ -58,7 +58,7 @@ */ @RestController @PreAuthorize(ASSIGNED_TO_PROJECT) -@RequestMapping("/v1/{projectName}/dashboard") +@RequestMapping("/v1/{projectKey}/dashboard") public class DashboardController { private final ProjectExtractor projectExtractor; @@ -82,74 +82,74 @@ public DashboardController(ProjectExtractor projectExtractor, @PostMapping @ResponseStatus(CREATED) @ApiOperation("Create dashboard for specified project") - public EntryCreatedRS createDashboard(@PathVariable String projectName, + public EntryCreatedRS createDashboard(@PathVariable String projectKey, @RequestBody @Validated CreateDashboardRQ createRQ, @AuthenticationPrincipal ReportPortalUser user) { return createDashboardHandler.createDashboard( - projectExtractor.extractProjectDetails(user, projectName), createRQ, user); + projectExtractor.extractProjectDetails(user, projectKey), createRQ, user); } @Transactional(readOnly = true) @GetMapping @ResponseStatus(OK) @ApiOperation("Get all permitted dashboard resources for specified project") - public Iterable<DashboardResource> getAllDashboards(@PathVariable String projectName, + public Iterable<DashboardResource> getAllDashboards(@PathVariable String projectKey, @SortFor(Dashboard.class) Pageable pageable, @FilterFor(Dashboard.class) Filter filter, @AuthenticationPrincipal ReportPortalUser user) { return getDashboardHandler.getDashboards( - projectExtractor.extractProjectDetails(user, projectName), pageable, filter, user); + projectExtractor.extractProjectDetails(user, projectKey), pageable, filter, user); } @Transactional @PutMapping("/{dashboardId}/add") @ResponseStatus(OK) @ApiOperation("Add widget to specified dashboard") - public OperationCompletionRS addWidget(@PathVariable String projectName, + public OperationCompletionRS addWidget(@PathVariable String projectKey, @PathVariable Long dashboardId, @RequestBody @Validated AddWidgetRq addWidgetRq, @AuthenticationPrincipal ReportPortalUser user) { return updateDashboardHandler.addWidget( - dashboardId, projectExtractor.extractProjectDetails(user, projectName), addWidgetRq, user); + dashboardId, projectExtractor.extractProjectDetails(user, projectKey), addWidgetRq, user); } @Transactional @DeleteMapping("/{dashboardId}/{widgetId}") @ResponseStatus(OK) @ApiOperation("Remove widget from specified dashboard") - public OperationCompletionRS removeWidget(@PathVariable String projectName, + public OperationCompletionRS removeWidget(@PathVariable String projectKey, @PathVariable Long dashboardId, @PathVariable Long widgetId, @AuthenticationPrincipal ReportPortalUser user) { return updateDashboardHandler.removeWidget( - widgetId, dashboardId, projectExtractor.extractProjectDetails(user, projectName), user); + widgetId, dashboardId, projectExtractor.extractProjectDetails(user, projectKey), user); } @Transactional @PutMapping(value = "/{dashboardId}") @ResponseStatus(OK) @ApiOperation("Update specified dashboard for specified project") - public OperationCompletionRS updateDashboard(@PathVariable String projectName, + public OperationCompletionRS updateDashboard(@PathVariable String projectKey, @PathVariable Long dashboardId, @RequestBody @Validated UpdateDashboardRQ updateRQ, @AuthenticationPrincipal ReportPortalUser user) { return updateDashboardHandler.updateDashboard( - projectExtractor.extractProjectDetails(user, projectName), updateRQ, dashboardId, user); + projectExtractor.extractProjectDetails(user, projectKey), updateRQ, dashboardId, user); } @Transactional @DeleteMapping(value = "/{dashboardId}") @ResponseStatus(OK) @ApiOperation("Delete specified dashboard by ID for specified project") - public OperationCompletionRS deleteDashboard(@PathVariable String projectName, + public OperationCompletionRS deleteDashboard(@PathVariable String projectKey, @PathVariable Long dashboardId, @AuthenticationPrincipal ReportPortalUser user) { return deleteDashboardHandler.deleteDashboard( - dashboardId, projectExtractor.extractProjectDetails(user, projectName), user); + dashboardId, projectExtractor.extractProjectDetails(user, projectKey), user); } @Transactional @GetMapping(value = "/{dashboardId}") @ResponseStatus(OK) @ApiOperation("Get specified dashboard by ID for specified project") - public DashboardResource getDashboard(@PathVariable String projectName, + public DashboardResource getDashboard(@PathVariable String projectKey, @PathVariable Long dashboardId, @AuthenticationPrincipal ReportPortalUser user) { return getDashboardHandler.getDashboard( - dashboardId, projectExtractor.extractProjectDetails(user, projectName)); + dashboardId, projectExtractor.extractProjectDetails(user, projectKey)); } } diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/FileStorageController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/FileStorageController.java index c0dff7cca4..6538b79089 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/FileStorageController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/FileStorageController.java @@ -73,12 +73,12 @@ public FileStorageController(ProjectExtractor projectExtractor, EditUserHandler @Transactional(readOnly = true) @PreAuthorize(ASSIGNED_TO_PROJECT) - @GetMapping(value = "/{projectName}/{dataId}") - public void getFile(@PathVariable String projectName, @PathVariable("dataId") Long dataId, + @GetMapping(value = "/{projectKey}/{dataId}") + public void getFile(@PathVariable String projectKey, @PathVariable("dataId") Long dataId, HttpServletResponse response, @AuthenticationPrincipal ReportPortalUser user) { toResponse(response, getFileHandler.loadFileById(dataId, - projectExtractor.extractProjectDetails(user, projectName))); + projectExtractor.extractProjectDetails(user, projectKey))); } @Transactional(readOnly = true) @@ -92,15 +92,15 @@ public void getMyPhoto(@AuthenticationPrincipal ReportPortalUser user, @Transactional(readOnly = true) @PreAuthorize(NOT_CUSTOMER) - @GetMapping(value = "/{projectName}/userphoto") + @GetMapping(value = "/{projectKey}/userphoto") @ApiOperation("Get user's photo") - public void getUserPhoto(@PathVariable String projectName, + public void getUserPhoto(@PathVariable String projectKey, @RequestParam(value = "id") String username, @RequestParam(value = "loadThumbnail", required = false) boolean loadThumbnail, HttpServletResponse response, @AuthenticationPrincipal ReportPortalUser user) { BinaryData userPhoto = getFileHandler.getUserPhoto(EntityUtils.normalizeId(username), user, - projectName, loadThumbnail); + projectKey, loadThumbnail); toResponse(response, userPhoto); } diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/IntegrationController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/IntegrationController.java index 629c209862..5d8223c3b9 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/IntegrationController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/IntegrationController.java @@ -96,24 +96,24 @@ public List<IntegrationResource> getGlobalIntegrations( } @Transactional(readOnly = true) - @GetMapping("/project/{projectName}/all") + @GetMapping("/project/{projectKey}/all") @ResponseStatus(HttpStatus.OK) @PreAuthorize(ASSIGNED_TO_PROJECT) @ApiOperation("Get available project integrations") - public List<IntegrationResource> getProjectIntegrations(@PathVariable String projectName, + public List<IntegrationResource> getProjectIntegrations(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser reportPortalUser) { - return getIntegrationHandler.getProjectIntegrations(normalizeId(projectName)); + return getIntegrationHandler.getProjectIntegrations(normalizeId(projectKey)); } @Transactional(readOnly = true) - @GetMapping("/project/{projectName}/all/{pluginName}") + @GetMapping("/project/{projectKey}/all/{pluginName}") @ResponseStatus(HttpStatus.OK) @PreAuthorize(ASSIGNED_TO_PROJECT) @ApiOperation("Get available project integrations for plugin") public List<IntegrationResource> getProjectIntegrations( - @AuthenticationPrincipal ReportPortalUser reportPortalUser, @PathVariable String projectName, + @AuthenticationPrincipal ReportPortalUser reportPortalUser, @PathVariable String projectKey, @PathVariable String pluginName) { - return getIntegrationHandler.getProjectIntegrations(pluginName, normalizeId(projectName)); + return getIntegrationHandler.getProjectIntegrations(pluginName, normalizeId(projectKey)); } @Transactional @@ -127,27 +127,27 @@ public EntryCreatedRS createGlobalIntegration(@RequestBody @Valid IntegrationRQ } @Transactional - @PostMapping(value = "/{projectName}/{pluginName}") + @PostMapping(value = "/{projectKey}/{pluginName}") @ResponseStatus(HttpStatus.CREATED) @ApiOperation("Create project Report Portal integration instance") @PreAuthorize(PROJECT_MANAGER) public EntryCreatedRS createProjectIntegration(@RequestBody @Valid IntegrationRQ createRequest, - @PathVariable String pluginName, @PathVariable String projectName, + @PathVariable String pluginName, @PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user) { - return createIntegrationHandler.createProjectIntegration(normalizeId(projectName), + return createIntegrationHandler.createProjectIntegration(normalizeId(projectKey), createRequest, pluginName, user ); } @Transactional(readOnly = true) - @GetMapping(value = "{projectName}/{integrationId}/connection/test") + @GetMapping(value = "{projectKey}/{integrationId}/connection/test") @ResponseStatus(HttpStatus.OK) @PreAuthorize(ASSIGNED_TO_PROJECT) @ApiOperation("Test connection to the integration through the project config") public boolean testIntegrationConnection(@PathVariable Long integrationId, - @PathVariable String projectName, @AuthenticationPrincipal ReportPortalUser user) { - return getIntegrationHandler.testConnection(integrationId, normalizeId(projectName)); + @PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user) { + return getIntegrationHandler.testConnection(integrationId, normalizeId(projectKey)); } @Transactional(readOnly = true) @@ -171,13 +171,13 @@ public IntegrationResource getGlobalIntegration(@PathVariable Long integrationId } @Transactional(readOnly = true) - @GetMapping(value = "/{projectName}/{integrationId}") + @GetMapping(value = "/{projectKey}/{integrationId}") @ResponseStatus(HttpStatus.OK) @ApiOperation("Get integration instance") @PreAuthorize(ASSIGNED_TO_PROJECT) - public IntegrationResource getProjectIntegration(@PathVariable String projectName, + public IntegrationResource getProjectIntegration(@PathVariable String projectKey, @PathVariable Long integrationId, @AuthenticationPrincipal ReportPortalUser user) { - return getIntegrationHandler.getProjectIntegrationById(integrationId, normalizeId(projectName)); + return getIntegrationHandler.getProjectIntegrationById(integrationId, normalizeId(projectKey)); } @Transactional @@ -193,15 +193,15 @@ public OperationCompletionRS updateGlobalIntegration(@PathVariable Long integrat } @Transactional - @PutMapping(value = "/{projectName}/{integrationId}") + @PutMapping(value = "/{projectKey}/{integrationId}") @ResponseStatus(HttpStatus.OK) @ApiOperation("Update project integration instance") @PreAuthorize(PROJECT_MANAGER) public OperationCompletionRS updateProjectIntegration(@PathVariable Long integrationId, - @RequestBody @Valid IntegrationRQ updateRequest, @PathVariable String projectName, + @RequestBody @Valid IntegrationRQ updateRequest, @PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user) { return createIntegrationHandler.updateProjectIntegration(integrationId, - normalizeId(projectName), updateRequest, user + normalizeId(projectKey), updateRequest, user ); } @@ -227,41 +227,41 @@ public OperationCompletionRS deleteAllIntegrations(@PathVariable String type, } @Transactional - @DeleteMapping(value = "/{projectName}/{integrationId}") + @DeleteMapping(value = "/{projectKey}/{integrationId}") @ResponseStatus(HttpStatus.OK) @ApiOperation("Delete project integration instance") @PreAuthorize(PROJECT_MANAGER) - public OperationCompletionRS deleteProjectIntegration(@PathVariable String projectName, + public OperationCompletionRS deleteProjectIntegration(@PathVariable String projectKey, @PathVariable Long integrationId, @AuthenticationPrincipal ReportPortalUser user) { return deleteIntegrationHandler.deleteProjectIntegration(integrationId, - normalizeId(projectName), user + normalizeId(projectKey), user ); } @Transactional - @DeleteMapping(value = "/{projectName}/all/{type}") + @DeleteMapping(value = "/{projectKey}/all/{type}") @ResponseStatus(HttpStatus.OK) @ApiOperation("Delete all integrations assigned to specified project") @PreAuthorize(PROJECT_MANAGER) public OperationCompletionRS deleteAllProjectIntegrations(@PathVariable String type, - @PathVariable String projectName, @AuthenticationPrincipal ReportPortalUser user) { - return deleteIntegrationHandler.deleteProjectIntegrationsByType(type, normalizeId(projectName), + @PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user) { + return deleteIntegrationHandler.deleteProjectIntegrationsByType(type, normalizeId(projectKey), user ); } @Transactional - @PutMapping(value = "{projectName}/{integrationId}/{command}", consumes = { + @PutMapping(value = "{projectKey}/{integrationId}/{command}", consumes = { APPLICATION_JSON_VALUE }) @ResponseStatus(HttpStatus.OK) @PreAuthorize(ASSIGNED_TO_PROJECT) @ApiOperation("Execute command to the integration instance") - public Object executeIntegrationCommand(@PathVariable String projectName, + public Object executeIntegrationCommand(@PathVariable String projectKey, @PathVariable("integrationId") Long integrationId, @PathVariable("command") String command, @RequestBody Map<String, Object> executionParams, @AuthenticationPrincipal ReportPortalUser user) { return executeIntegrationHandler.executeCommand( - projectExtractor.extractProjectDetails(user, projectName), integrationId, command, + projectExtractor.extractProjectDetails(user, projectKey), integrationId, command, executionParams ); } diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/LaunchAsyncController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/LaunchAsyncController.java index 49c2521396..151501ca23 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/LaunchAsyncController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/LaunchAsyncController.java @@ -82,11 +82,11 @@ public LaunchAsyncController(ProjectExtractor projectExtractor, @PreAuthorize(ALLOWED_TO_REPORT) @ResponseStatus(CREATED) @ApiOperation("Starts launch for specified project") - public StartLaunchRS startLaunch(@PathVariable String projectName, + public StartLaunchRS startLaunch(@PathVariable String projectKey, @ApiParam(value = "Start launch request body", required = true) @RequestBody @Validated StartLaunchRQ startLaunchRQ, @AuthenticationPrincipal ReportPortalUser user) { return startLaunchHandler.startLaunch(user, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), startLaunchRQ + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), startLaunchRQ ); } @@ -95,11 +95,11 @@ public StartLaunchRS startLaunch(@PathVariable String projectName, @PreAuthorize(ALLOWED_TO_REPORT) @ResponseStatus(OK) @ApiOperation("Finish launch for specified project") - public FinishLaunchRS finishLaunch(@PathVariable String projectName, + public FinishLaunchRS finishLaunch(@PathVariable String projectKey, @PathVariable String launchId, @RequestBody @Validated FinishExecutionRQ finishLaunchRQ, @AuthenticationPrincipal ReportPortalUser user, HttpServletRequest request) { return finishLaunchHandler.finishLaunch(launchId, finishLaunchRQ, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), user, + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), user, composeBaseUrl(request) ); } @@ -110,11 +110,11 @@ public FinishLaunchRS finishLaunch(@PathVariable String projectName, @PreAuthorize(ALLOWED_TO_REPORT) @ResponseStatus(OK) @ApiOperation("Merge set of specified launches in common one") - public LaunchResource mergeLaunches(@PathVariable String projectName, + public LaunchResource mergeLaunches(@PathVariable String projectKey, @ApiParam(value = "Merge launches request body", required = true) @RequestBody @Validated MergeLaunchesRQ mergeLaunchesRQ, @AuthenticationPrincipal ReportPortalUser user) { return mergeLaunchesHandler.mergeLaunches( - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), user, + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), user, mergeLaunchesRQ ); } diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/LaunchController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/LaunchController.java index 93c1331a03..ce0614c779 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/LaunchController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/LaunchController.java @@ -88,7 +88,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestPart; -import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @@ -104,7 +103,7 @@ * @author Andrei_Ramanchuk */ @RestController -@RequestMapping("/v1/{projectName}/launch") +@RequestMapping("/v1/{projectKey}/launch") public class LaunchController { private final ProjectExtractor projectExtractor; @@ -143,11 +142,11 @@ public LaunchController(ProjectExtractor projectExtractor, StartLaunchHandler st @PreAuthorize(ALLOWED_TO_REPORT) @ResponseStatus(CREATED) @ApiOperation("Starts launch for specified project") - public StartLaunchRS startLaunch(@PathVariable String projectName, + public StartLaunchRS startLaunch(@PathVariable String projectKey, @ApiParam(value = "Start launch request body", required = true) @RequestBody @Validated @Valid StartLaunchRQ startLaunchRQ, @AuthenticationPrincipal ReportPortalUser user) { return startLaunchHandler.startLaunch(user, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), startLaunchRQ + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), startLaunchRQ ); } @@ -155,11 +154,11 @@ public StartLaunchRS startLaunch(@PathVariable String projectName, @PreAuthorize(ALLOWED_TO_REPORT) @ResponseStatus(OK) @ApiOperation("Finish launch for specified project") - public FinishLaunchRS finishLaunch(@PathVariable String projectName, + public FinishLaunchRS finishLaunch(@PathVariable String projectKey, @PathVariable String launchId, @RequestBody @Validated FinishExecutionRQ finishLaunchRQ, @AuthenticationPrincipal ReportPortalUser user, HttpServletRequest request) { return finishLaunchHandler.finishLaunch(launchId, finishLaunchRQ, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), user, + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), user, composeBaseUrl(request) ); } @@ -171,11 +170,11 @@ public FinishLaunchRS finishLaunch(@PathVariable String projectName, @PreAuthorize(ALLOWED_TO_REPORT) @ResponseStatus(OK) @ApiOperation("Force finish launch for specified project") - public OperationCompletionRS forceFinishLaunch(@PathVariable String projectName, + public OperationCompletionRS forceFinishLaunch(@PathVariable String projectKey, @PathVariable Long launchId, @RequestBody @Validated FinishExecutionRQ finishExecutionRQ, @AuthenticationPrincipal ReportPortalUser user) { return stopLaunchHandler.stopLaunch(launchId, finishExecutionRQ, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), user + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), user ); } @@ -184,11 +183,11 @@ public OperationCompletionRS forceFinishLaunch(@PathVariable String projectName, @PreAuthorize(ALLOWED_TO_REPORT) @ResponseStatus(OK) @ApiOperation("Force finish launch") - public List<OperationCompletionRS> bulkForceFinish(@PathVariable String projectName, + public List<OperationCompletionRS> bulkForceFinish(@PathVariable String projectKey, @RequestBody @Validated BulkRQ<Long, FinishExecutionRQ> rq, @AuthenticationPrincipal ReportPortalUser user) { return stopLaunchHandler.stopLaunch(rq, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), user + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), user ); } @@ -197,11 +196,11 @@ public List<OperationCompletionRS> bulkForceFinish(@PathVariable String projectN @PreAuthorize(ALLOWED_TO_REPORT) @ResponseStatus(OK) @ApiOperation("Updates launch for specified project") - public OperationCompletionRS updateLaunch(@PathVariable String projectName, + public OperationCompletionRS updateLaunch(@PathVariable String projectKey, @PathVariable Long launchId, @RequestBody @Validated UpdateLaunchRQ updateLaunchRQ, @AuthenticationPrincipal ReportPortalUser user) { return updateLaunchHandler.updateLaunch(launchId, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), user, updateLaunchRQ + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), user, updateLaunchRQ ); } @@ -210,11 +209,11 @@ public OperationCompletionRS updateLaunch(@PathVariable String projectName, @PreAuthorize(ALLOWED_TO_REPORT) @ResponseStatus(OK) @ApiOperation("Updates launches for specified project") - public List<OperationCompletionRS> updateLaunches(@PathVariable String projectName, + public List<OperationCompletionRS> updateLaunches(@PathVariable String projectKey, @RequestBody @Validated BulkRQ<Long, UpdateLaunchRQ> rq, @AuthenticationPrincipal ReportPortalUser user) { return updateLaunchHandler.updateLaunch(rq, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), user + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), user ); } @@ -223,10 +222,10 @@ public List<OperationCompletionRS> updateLaunches(@PathVariable String projectNa @PreAuthorize(ALLOWED_TO_REPORT) @ResponseStatus(OK) @ApiOperation("Delete specified launch by ID") - public OperationCompletionRS deleteLaunch(@PathVariable String projectName, + public OperationCompletionRS deleteLaunch(@PathVariable String projectKey, @PathVariable Long launchId, @AuthenticationPrincipal ReportPortalUser user) { return deleteLaunchMessageHandler.deleteLaunch(launchId, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), user + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), user ); } @@ -234,10 +233,10 @@ public OperationCompletionRS deleteLaunch(@PathVariable String projectName, @GetMapping("/{launchId}") @ResponseStatus(OK) @ApiOperation("Get specified launch by ID") - public LaunchResource getLaunch(@PathVariable String projectName, @PathVariable String launchId, + public LaunchResource getLaunch(@PathVariable String projectKey, @PathVariable String launchId, @AuthenticationPrincipal ReportPortalUser user) { return getLaunchMessageHandler.getLaunch(launchId, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)) + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)) ); } @@ -245,10 +244,10 @@ public LaunchResource getLaunch(@PathVariable String projectName, @PathVariable @GetMapping("/uuid/{launchId}") @ResponseStatus(OK) @ApiOperation("Get specified launch by UUID") - public LaunchResource getLaunchByUuid(@PathVariable String projectName, + public LaunchResource getLaunchByUuid(@PathVariable String projectKey, @PathVariable String launchId, @AuthenticationPrincipal ReportPortalUser user) { return getLaunchMessageHandler.getLaunch(launchId, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)) + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)) ); } @@ -256,11 +255,11 @@ public LaunchResource getLaunchByUuid(@PathVariable String projectName, @GetMapping @ResponseStatus(OK) @ApiOperation("Get list of project launches by filter") - public Iterable<LaunchResource> getProjectLaunches(@PathVariable String projectName, + public Iterable<LaunchResource> getProjectLaunches(@PathVariable String projectKey, @FilterFor(Launch.class) Filter filter, @SortFor(Launch.class) Pageable pageable, @AuthenticationPrincipal ReportPortalUser user) { return getLaunchMessageHandler.getProjectLaunches( - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), filter, pageable, + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), filter, pageable, user.getUsername() ); } @@ -269,55 +268,54 @@ public Iterable<LaunchResource> getProjectLaunches(@PathVariable String projectN @GetMapping(value = "/latest") @ResponseStatus(OK) @ApiOperation("Get list of latest project launches by filter") - public Iterable<LaunchResource> getLatestLaunches(@PathVariable String projectName, + public Iterable<LaunchResource> getLatestLaunches(@PathVariable String projectKey, @FilterFor(Launch.class) Filter filter, @SortFor(Launch.class) Pageable pageable, @AuthenticationPrincipal ReportPortalUser user) { return getLaunchMessageHandler.getLatestLaunches( - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), filter, pageable); + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), filter, pageable); } @GetMapping(value = "/mode") - @ResponseBody @ResponseStatus(OK) @ApiOperation("Get launches of specified project from DEBUG mode") - public Iterable<LaunchResource> getDebugLaunches(@PathVariable String projectName, + public Iterable<LaunchResource> getDebugLaunches(@PathVariable String projectKey, @FilterFor(Launch.class) Filter filter, @SortFor(Launch.class) Pageable pageable, @AuthenticationPrincipal ReportPortalUser user) { return getLaunchMessageHandler.getDebugLaunches( - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), filter, pageable); + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), filter, pageable); } @Transactional(readOnly = true) @GetMapping(value = "/attribute/keys") @ResponseStatus(OK) @ApiOperation("Get all unique attribute keys of project launches") - public List<String> getAttributeKeys(@PathVariable String projectName, + public List<String> getAttributeKeys(@PathVariable String projectKey, @RequestParam(value = "filter." + "cnt." + "attributeKey") String value, @AuthenticationPrincipal ReportPortalUser user) { return getLaunchMessageHandler.getAttributeKeys( - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), value); + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), value); } @Transactional(readOnly = true) @GetMapping(value = "/attribute/values") @ResponseStatus(OK) @ApiOperation("Get all unique attribute values of project launches") - public List<String> getAttributeValues(@PathVariable String projectName, + public List<String> getAttributeValues(@PathVariable String projectKey, @RequestParam(value = "filter." + "eq." + "attributeKey", required = false) String key, @RequestParam(value = "filter." + "cnt." + "attributeValue") String value, @AuthenticationPrincipal ReportPortalUser user) { return getLaunchMessageHandler.getAttributeValues( - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), key, value); + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), key, value); } @GetMapping(value = "/cluster/{launchId}") @ResponseStatus(OK) @ApiOperation("Get all index clusters of the launch") - public Iterable<ClusterInfoResource> getClusters(@PathVariable String projectName, + public Iterable<ClusterInfoResource> getClusters(@PathVariable String projectKey, @PathVariable String launchId, Pageable pageable, @AuthenticationPrincipal ReportPortalUser user) { return getLaunchMessageHandler.getClusters(launchId, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), pageable + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), pageable ); } @@ -326,11 +324,11 @@ public Iterable<ClusterInfoResource> getClusters(@PathVariable String projectNam @PreAuthorize(PROJECT_MANAGER_OR_ADMIN) @ResponseStatus(OK) @ApiOperation("Bulk update attributes and description") - public OperationCompletionRS bulkUpdate(@PathVariable String projectName, + public OperationCompletionRS bulkUpdate(@PathVariable String projectKey, @RequestBody @Validated BulkInfoUpdateRQ bulkInfoUpdateRQ, @AuthenticationPrincipal ReportPortalUser user) { return updateLaunchHandler.bulkInfoUpdate(bulkInfoUpdateRQ, - projectExtractor.extractProjectDetails(user, projectName) + projectExtractor.extractProjectDetails(user, projectKey) ); } @@ -338,33 +336,33 @@ public OperationCompletionRS bulkUpdate(@PathVariable String projectName, @GetMapping(value = "/owners") @ResponseStatus(OK) @ApiOperation("Get all unique owners of project launches") - public List<String> getAllOwners(@PathVariable String projectName, + public List<String> getAllOwners(@PathVariable String projectKey, @RequestParam(value = "filter." + "cnt." + "user") String value, @RequestParam(value = "mode", required = false, defaultValue = "DEFAULT") String mode, @AuthenticationPrincipal ReportPortalUser user) { return getLaunchMessageHandler.getOwners( - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), value, mode); + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), value, mode); } @Transactional(readOnly = true) @GetMapping(value = "/names") @ResponseStatus(OK) @ApiOperation("Get launch names of project") - public List<String> getAllLaunchNames(@PathVariable String projectName, + public List<String> getAllLaunchNames(@PathVariable String projectKey, @RequestParam(value = "filter." + "cnt." + "name", required = false, defaultValue = "") String value, @AuthenticationPrincipal ReportPortalUser user) { return getLaunchMessageHandler.getLaunchNames( - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), value); + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), value); } @Transactional(readOnly = true) @GetMapping(value = "/compare") @ResponseStatus(OK) @ApiOperation("Compare launches") - public Map<String, List<ChartStatisticsContent>> compareLaunches(@PathVariable String projectName, + public Map<String, List<ChartStatisticsContent>> compareLaunches(@PathVariable String projectKey, @RequestParam(value = "ids") Long[] ids, @AuthenticationPrincipal ReportPortalUser user) { return getLaunchMessageHandler.getLaunchesComparisonInfo( - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), ids); + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), ids); } @Transactional @@ -372,11 +370,11 @@ public Map<String, List<ChartStatisticsContent>> compareLaunches(@PathVariable S @PreAuthorize(ALLOWED_TO_REPORT) @ResponseStatus(OK) @ApiOperation("Merge set of specified launches in common one") - public LaunchResource mergeLaunches(@PathVariable String projectName, + public LaunchResource mergeLaunches(@PathVariable String projectKey, @ApiParam(value = "Merge launches request body", required = true) @RequestBody @Validated MergeLaunchesRQ mergeLaunchesRQ, @AuthenticationPrincipal ReportPortalUser user) { return mergeLaunchesHandler.mergeLaunches( - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), user, + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), user, mergeLaunchesRQ ); } @@ -385,22 +383,22 @@ public LaunchResource mergeLaunches(@PathVariable String projectName, @PostMapping(value = "/analyze") @ResponseStatus(OK) @ApiOperation("Start launch auto-analyzer on demand") - public OperationCompletionRS startLaunchAnalyzer(@PathVariable String projectName, + public OperationCompletionRS startLaunchAnalyzer(@PathVariable String projectKey, @RequestBody @Validated AnalyzeLaunchRQ analyzeLaunchRQ, @AuthenticationPrincipal ReportPortalUser user) { return updateLaunchHandler.startLaunchAnalyzer(analyzeLaunchRQ, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), user + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), user ); } @PostMapping(value = "/cluster") @ResponseStatus(OK) @ApiOperation("Create launch clusters") - public OperationCompletionRS createClusters(@PathVariable String projectName, + public OperationCompletionRS createClusters(@PathVariable String projectKey, @RequestBody @Validated CreateClustersRQ createClustersRQ, @AuthenticationPrincipal ReportPortalUser user) { return updateLaunchHandler.createClusters(createClustersRQ, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), user + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), user ); } @@ -408,10 +406,10 @@ public OperationCompletionRS createClusters(@PathVariable String projectName, @GetMapping(value = "/status") @ResponseStatus(OK) - public Map<String, String> getStatuses(@PathVariable String projectName, + public Map<String, String> getStatuses(@PathVariable String projectKey, @RequestParam(value = "ids") Long[] ids, @AuthenticationPrincipal ReportPortalUser user) { return getLaunchMessageHandler.getStatuses( - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), ids); + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), ids); } @Transactional(readOnly = true) @@ -419,7 +417,7 @@ public Map<String, String> getStatuses(@PathVariable String projectName, @ResponseStatus(OK) @PreAuthorize(ASSIGNED_TO_PROJECT) @ApiOperation(value = "Export specified launch", notes = "Only following formats are supported: pdf (by default), xls, html.") - public void getLaunchReport(@PathVariable String projectName, @PathVariable Long launchId, + public void getLaunchReport(@PathVariable String projectKey, @PathVariable Long launchId, @ApiParam(allowableValues = "pdf, xls, html") @RequestParam(value = "view", required = false, defaultValue = "pdf") String view, @AuthenticationPrincipal ReportPortalUser user, HttpServletResponse response) { @@ -447,11 +445,11 @@ public void getLaunchReport(@PathVariable String projectName, @PathVariable Long @PreAuthorize(ALLOWED_TO_REPORT) @ResponseStatus(OK) @ApiOperation("Delete specified launches by ids") - public DeleteBulkRS deleteLaunches(@PathVariable String projectName, + public DeleteBulkRS deleteLaunches(@PathVariable String projectKey, @RequestBody @Valid DeleteBulkRQ deleteBulkRQ, @AuthenticationPrincipal ReportPortalUser user) { return deleteLaunchMessageHandler.deleteLaunches(deleteBulkRQ, - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), user + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), user ); } @@ -459,12 +457,12 @@ public DeleteBulkRS deleteLaunches(@PathVariable String projectName, @PostMapping(value = "/import", consumes = { MediaType.MULTIPART_FORM_DATA_VALUE }) @ResponseStatus(OK) @ApiOperation(value = "Import junit xml report", notes = "Only following formats are supported: zip and xml.") - public OperationCompletionRS importLaunch(@PathVariable String projectName, + public OperationCompletionRS importLaunch(@PathVariable String projectKey, @RequestParam("file") MultipartFile file, @AuthenticationPrincipal ReportPortalUser user, HttpServletRequest request, @RequestPart(required = false) @Valid LaunchImportRQ launchImportRq) { return importLaunchHandler.importLaunch( - projectExtractor.extractProjectDetails(user, normalizeId(projectName)), user, "XUNIT", file, + projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), user, "XUNIT", file, composeBaseUrl(request), launchImportRq ); } diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/LogAsyncController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/LogAsyncController.java index 980ac468fa..e77a925a53 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/LogAsyncController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/LogAsyncController.java @@ -62,7 +62,7 @@ * @author Konstantin Antipin */ @RestController -@RequestMapping("/v2/{projectName}/log") +@RequestMapping("/v2/{projectKey}/log") @PreAuthorize(ASSIGNED_TO_PROJECT) public class LogAsyncController { @@ -90,12 +90,12 @@ public LogAsyncController(ProjectExtractor projectExtractor, @ResponseStatus(CREATED) @ApiIgnore @PreAuthorize(ALLOWED_TO_REPORT) - public EntryCreatedAsyncRS createLog(@PathVariable String projectName, + public EntryCreatedAsyncRS createLog(@PathVariable String projectKey, @RequestBody SaveLogRQ createLogRQ, @AuthenticationPrincipal ReportPortalUser user) { validateSaveRQ(validator, createLogRQ); return createLogHandler.createLog(createLogRQ, null, - projectExtractor.extractProjectDetails(user, projectName)); + projectExtractor.extractProjectDetails(user, projectKey)); } @HttpLogging @@ -103,12 +103,12 @@ public EntryCreatedAsyncRS createLog(@PathVariable String projectName, @ResponseStatus(CREATED) @ApiOperation("Create log") @PreAuthorize(ALLOWED_TO_REPORT) - public EntryCreatedAsyncRS createLogEntry(@PathVariable String projectName, + public EntryCreatedAsyncRS createLogEntry(@PathVariable String projectKey, @RequestBody SaveLogRQ createLogRQ, @AuthenticationPrincipal ReportPortalUser user) { validateSaveRQ(validator, createLogRQ); return createLogHandler.createLog(createLogRQ, null, - projectExtractor.extractProjectDetails(user, projectName)); + projectExtractor.extractProjectDetails(user, projectKey)); } @HttpLogging @@ -118,7 +118,7 @@ public EntryCreatedAsyncRS createLogEntry(@PathVariable String projectName, // request mappings // @Async @PreAuthorize(ALLOWED_TO_REPORT) - public ResponseEntity<BatchSaveOperatingRS> createLog(@PathVariable String projectName, + public ResponseEntity<BatchSaveOperatingRS> createLog(@PathVariable String projectKey, @RequestPart(value = Constants.LOG_REQUEST_JSON_PART) SaveLogRQ[] createLogRQs, HttpServletRequest request, @AuthenticationPrincipal ReportPortalUser user) { @@ -140,7 +140,7 @@ public ResponseEntity<BatchSaveOperatingRS> createLog(@PathVariable String proje * There is no filename in request. Use simple save * method */ - responseItem = createLog(projectName, createLogRq, user); + responseItem = createLog(projectKey, createLogRq, user); } else { /* Find by request part */ @@ -156,7 +156,7 @@ public ResponseEntity<BatchSaveOperatingRS> createLog(@PathVariable String proje */ //noinspection ConstantConditions responseItem = createLogHandler.createLog(createLogRq, data, - projectExtractor.extractProjectDetails(user, projectName)); + projectExtractor.extractProjectDetails(user, projectKey)); } response.addResponse(new BatchElementCreatedRS(responseItem.getId())); } catch (Exception e) { diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/LogController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/LogController.java index 50628ef033..7a065a5933 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/LogController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/LogController.java @@ -88,7 +88,7 @@ * @author Pavel Bortnik */ @RestController -@RequestMapping("/v1/{projectName}/log") +@RequestMapping("/v1/{projectKey}/log") @PreAuthorize(ASSIGNED_TO_PROJECT) public class LogController { @@ -122,11 +122,11 @@ public LogController(ProjectExtractor projectExtractor, @ResponseStatus(CREATED) @ApiIgnore @PreAuthorize(ALLOWED_TO_REPORT) - public EntryCreatedAsyncRS createLog(@PathVariable String projectName, + public EntryCreatedAsyncRS createLog(@PathVariable String projectKey, @RequestBody SaveLogRQ createLogRQ, @AuthenticationPrincipal ReportPortalUser user) { validateSaveRQ(validator, createLogRQ); return createLogHandler.createLog(createLogRQ, null, - projectExtractor.extractProjectDetails(user, projectName) + projectExtractor.extractProjectDetails(user, projectKey) ); } @@ -135,11 +135,11 @@ public EntryCreatedAsyncRS createLog(@PathVariable String projectName, @ResponseStatus(CREATED) @ApiOperation("Create log") @PreAuthorize(ALLOWED_TO_REPORT) - public EntryCreatedAsyncRS createLogEntry(@PathVariable String projectName, + public EntryCreatedAsyncRS createLogEntry(@PathVariable String projectKey, @RequestBody SaveLogRQ createLogRQ, @AuthenticationPrincipal ReportPortalUser user) { validateSaveRQ(validator, createLogRQ); return createLogHandler.createLog(createLogRQ, null, - projectExtractor.extractProjectDetails(user, projectName) + projectExtractor.extractProjectDetails(user, projectKey) ); } @@ -149,7 +149,7 @@ public EntryCreatedAsyncRS createLogEntry(@PathVariable String projectName, // request mappings // @Async @PreAuthorize(ALLOWED_TO_REPORT) - public ResponseEntity<BatchSaveOperatingRS> createLog(@PathVariable String projectName, + public ResponseEntity<BatchSaveOperatingRS> createLog(@PathVariable String projectKey, @RequestPart(value = Constants.LOG_REQUEST_JSON_PART) SaveLogRQ[] createLogRQs, HttpServletRequest request, @AuthenticationPrincipal ReportPortalUser user) { @@ -170,7 +170,7 @@ public ResponseEntity<BatchSaveOperatingRS> createLog(@PathVariable String proje * There is no filename in request. Use simple save * method */ - responseItem = createLog(projectName, createLogRq, user); + responseItem = createLog(projectKey, createLogRq, user); } else { /* Find by request part */ @@ -188,7 +188,7 @@ public ResponseEntity<BatchSaveOperatingRS> createLog(@PathVariable String proje */ //noinspection ConstantConditions responseItem = createLogHandler.createLog(createLogRq, data, - projectExtractor.extractProjectDetails(user, projectName) + projectExtractor.extractProjectDetails(user, projectKey) ); } response.addResponse(new BatchElementCreatedRS(responseItem.getId())); @@ -207,45 +207,45 @@ public ResponseEntity<BatchSaveOperatingRS> createLog(@PathVariable String proje @RequestMapping(value = "/{logId}", method = RequestMethod.DELETE) @ApiOperation("Delete log") @Transactional - public OperationCompletionRS deleteLog(@PathVariable String projectName, @PathVariable Long logId, + public OperationCompletionRS deleteLog(@PathVariable String projectKey, @PathVariable Long logId, @AuthenticationPrincipal ReportPortalUser user) { return deleteLogHandler.deleteLog(logId, - projectExtractor.extractProjectDetails(user, projectName), user + projectExtractor.extractProjectDetails(user, projectKey), user ); } @RequestMapping(method = RequestMethod.GET) @ApiOperation("Get logs by filter") @Transactional(readOnly = true) - public Iterable<LogResource> getLogs(@PathVariable String projectName, + public Iterable<LogResource> getLogs(@PathVariable String projectKey, @RequestParam(value = DEFAULT_FILTER_PREFIX + UNDR + CRITERIA_PATH, required = false) String underPath, @FilterFor(Log.class) Filter filter, @SortDefault({ "logTime" }) @SortFor(Log.class) Pageable pageable, @AuthenticationPrincipal ReportPortalUser user) { return getLogHandler.getLogs(underPath, - projectExtractor.extractProjectDetails(user, projectName), filter, pageable + projectExtractor.extractProjectDetails(user, projectKey), filter, pageable ); } @PostMapping(value = "/under") @ApiOperation("Get logs under items") @Transactional(readOnly = true) - public Map<Long, List<LogResource>> getLogsUnder(@PathVariable String projectName, + public Map<Long, List<LogResource>> getLogsUnder(@PathVariable String projectKey, @RequestBody GetLogsUnderRq logsUnderRq, @AuthenticationPrincipal ReportPortalUser user) { return getLogHandler.getLogs(logsUnderRq, - projectExtractor.extractProjectDetails(user, projectName) + projectExtractor.extractProjectDetails(user, projectKey) ); } @GetMapping(value = "/{logId}/page") @ApiOperation("Get logs by filter") @Transactional(readOnly = true) - public Map<String, Serializable> getPageNumber(@PathVariable String projectName, + public Map<String, Serializable> getPageNumber(@PathVariable String projectKey, @PathVariable Long logId, @FilterFor(Log.class) Filter filter, @SortFor(Log.class) Pageable pageable, @AuthenticationPrincipal ReportPortalUser user) { return ImmutableMap.<String, Serializable>builder().put("number", getLogHandler.getPageNumber(logId, - projectExtractor.extractProjectDetails(user, projectName), filter, pageable + projectExtractor.extractProjectDetails(user, projectKey), filter, pageable ) ).build(); } @@ -253,9 +253,9 @@ public Map<String, Serializable> getPageNumber(@PathVariable String projectName, @GetMapping(value = "/{logId}") @ApiOperation("Get log by ID") @Transactional(readOnly = true) - public LogResource getLog(@PathVariable String projectName, @PathVariable String logId, + public LogResource getLog(@PathVariable String projectKey, @PathVariable String logId, @AuthenticationPrincipal ReportPortalUser user) { - return getLogHandler.getLog(logId, projectExtractor.extractProjectDetails(user, projectName), + return getLogHandler.getLog(logId, projectExtractor.extractProjectDetails(user, projectKey), user ); } @@ -268,9 +268,9 @@ public LogResource getLog(@PathVariable String projectName, @PathVariable String @GetMapping(value = "/uuid/{logId}") @ApiOperation("Get log by UUID (Will be removed in version 6.0)") @Transactional(readOnly = true) - public LogResource getLogByUuid(@PathVariable String projectName, @PathVariable String logId, + public LogResource getLogByUuid(@PathVariable String projectKey, @PathVariable String logId, @AuthenticationPrincipal ReportPortalUser user) { - return getLogHandler.getLog(logId, projectExtractor.extractProjectDetails(user, projectName), + return getLogHandler.getLog(logId, projectExtractor.extractProjectDetails(user, projectKey), user ); } @@ -278,35 +278,35 @@ public LogResource getLogByUuid(@PathVariable String projectName, @PathVariable @GetMapping(value = "/nested/{parentId}") @ApiOperation("Get nested steps with logs for the parent Test Item") @Transactional(readOnly = true) - public Iterable<?> getNestedItems(@PathVariable String projectName, @PathVariable Long parentId, + public Iterable<?> getNestedItems(@PathVariable String projectKey, @PathVariable Long parentId, @ApiParam(required = false) @RequestParam Map<String, String> params, @FilterFor(Log.class) Filter filter, @SortFor(Log.class) Pageable pageable, @AuthenticationPrincipal ReportPortalUser user) { return getLogHandler.getNestedItems(parentId, - projectExtractor.extractProjectDetails(user, projectName), params, filter, pageable + projectExtractor.extractProjectDetails(user, projectKey), params, filter, pageable ); } @GetMapping(value = "/locations/{parentId}") @ApiOperation("Get next or previous log in test item") @Transactional(readOnly = true) - public List<PagedLogResource> getErrorPage(@PathVariable String projectName, + public List<PagedLogResource> getErrorPage(@PathVariable String projectKey, @PathVariable Long parentId, @RequestParam Map<String, String> params, @FilterFor(Log.class) Filter filter, @SortFor(Log.class) Pageable pageable, @AuthenticationPrincipal ReportPortalUser user) { return getLogHandler.getLogsWithLocation(parentId, - projectExtractor.extractProjectDetails(user, projectName), params, filter, pageable + projectExtractor.extractProjectDetails(user, projectKey), params, filter, pageable ); } @PostMapping("search/{itemId}") @ResponseStatus(OK) @ApiOperation("Search test items with similar error logs") - public Iterable<SearchLogRs> searchLogs(@PathVariable String projectName, + public Iterable<SearchLogRs> searchLogs(@PathVariable String projectKey, @RequestBody SearchLogRq request, @PathVariable Long itemId, @AuthenticationPrincipal ReportPortalUser user) { return searchLogService.search(itemId, request, - projectExtractor.extractProjectDetails(user, projectName) + projectExtractor.extractProjectDetails(user, projectKey) ); } diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/OrganizationController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/OrganizationController.java new file mode 100644 index 0000000000..b10b447e7e --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/OrganizationController.java @@ -0,0 +1,61 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.ws.controller; + +import com.epam.ta.reportportal.commons.ReportPortalUser; +import com.epam.ta.reportportal.core.organization.GetOrganizationHandler; +import com.epam.ta.reportportal.model.OrganizationResource; +import io.swagger.annotations.ApiOperation; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author Andrei Piankouski + */ +@RestController +@RequestMapping("/organization") +public class OrganizationController { + + private final GetOrganizationHandler getOrganizationHandler; + + @Autowired + public OrganizationController(GetOrganizationHandler getOrganizationHandler) { + this.getOrganizationHandler = getOrganizationHandler; + } + + @Transactional + @GetMapping("/{organizationId}") + @ApiOperation(value = "Get information about organization") + public OrganizationResource getOrganization(@PathVariable Long organizationId, + @AuthenticationPrincipal ReportPortalUser user) { + return getOrganizationHandler.getResource(organizationId, user); + } + + @Transactional + @GetMapping("/list") + @ApiOperation(value = "Get list of all organizations") + public List<OrganizationResource> getAllOrganizations( + @AuthenticationPrincipal ReportPortalUser user) { + return getOrganizationHandler.getAllOrganization(); + } +} diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/PluginController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/PluginController.java index 0ef56e4e81..89d7085fd0 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/PluginController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/PluginController.java @@ -121,17 +121,18 @@ public OperationCompletionRS deletePlugin(@PathVariable(value = "pluginId") Long } @Transactional - @PutMapping(value = "{projectName}/{pluginName}/common/{command}", consumes = { - APPLICATION_JSON_VALUE }) + @PutMapping( + value = "{projectKey}/{pluginName}/common/{command}", + consumes = {APPLICATION_JSON_VALUE}) @ResponseStatus(HttpStatus.OK) @PreAuthorize(ASSIGNED_TO_PROJECT) @ApiOperation("Execute command to the plugin instance") - public Object executePluginCommand(@PathVariable String projectName, + public Object executePluginCommand(@PathVariable String projectKey, @PathVariable("pluginName") String pluginName, @PathVariable("command") String command, @RequestBody Map<String, Object> executionParams, @AuthenticationPrincipal ReportPortalUser user) { return executeIntegrationHandler.executeCommand( - projectExtractor.extractProjectDetails(user, projectName), pluginName, command, + projectExtractor.extractProjectDetails(user, projectKey), pluginName, command, executionParams ); } diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/ProjectController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/ProjectController.java index 0fcea11f41..2948fa57f6 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/ProjectController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/ProjectController.java @@ -142,25 +142,25 @@ public EntryCreatedRS createProject(@RequestBody @Validated CreateProjectRQ crea } @Transactional - @PutMapping("/{projectName}") + @PutMapping("/{projectKey}") @ResponseStatus(OK) @PreAuthorize(PROJECT_MANAGER_OR_ADMIN) @ApiOperation(value = "Update project") - public OperationCompletionRS updateProject(@PathVariable String projectName, + public OperationCompletionRS updateProject(@PathVariable String projectKey, @RequestBody @Validated UpdateProjectRQ updateProjectRQ, @AuthenticationPrincipal ReportPortalUser user) { - return updateProjectHandler.updateProject(normalizeId(projectName), updateProjectRQ, user); + return updateProjectHandler.updateProject(normalizeId(projectKey), updateProjectRQ, user); } @Transactional - @PutMapping("/{projectName}/notification") + @PutMapping("/{projectKey}/notification") @ResponseStatus(OK) @PreAuthorize(PROJECT_MANAGER) @ApiOperation("Update project notifications configuration") - public OperationCompletionRS updateProjectNotificationConfig(@PathVariable String projectName, + public OperationCompletionRS updateProjectNotificationConfig(@PathVariable String projectKey, @RequestBody @Validated ProjectNotificationConfigDTO updateProjectNotificationConfigRQ, @AuthenticationPrincipal ReportPortalUser user) { - return updateProjectHandler.updateProjectNotificationConfig(normalizeId(projectName), user, + return updateProjectHandler.updateProjectNotificationConfig(normalizeId(projectKey), user, updateProjectNotificationConfigRQ ); } @@ -183,135 +183,135 @@ public OperationCompletionRS deleteProject(@PathVariable Long projectId, return deleteProjectHandler.deleteProject(projectId, user); } - @DeleteMapping("/{projectName}/index") + @DeleteMapping("/{projectKey}/index") @ResponseStatus(OK) @PreAuthorize(PROJECT_MANAGER_OR_ADMIN) @ApiOperation("Delete project index from ML") - public OperationCompletionRS deleteProjectIndex(@PathVariable String projectName, + public OperationCompletionRS deleteProjectIndex(@PathVariable String projectKey, Principal principal) { - return deleteProjectHandler.deleteProjectIndex(normalizeId(projectName), principal.getName()); + return deleteProjectHandler.deleteProjectIndex(normalizeId(projectKey), principal.getName()); } @Transactional - @PutMapping("/{projectName}/index") + @PutMapping("/{projectKey}/index") @ResponseStatus(OK) @PreAuthorize(PROJECT_MANAGER_OR_ADMIN) @ApiOperation(value = "Starts reindex all project data in ML") - public OperationCompletionRS indexProjectData(@PathVariable String projectName, + public OperationCompletionRS indexProjectData(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user) { - return updateProjectHandler.indexProjectData(normalizeId(projectName), user); + return updateProjectHandler.indexProjectData(normalizeId(projectKey), user); } @Transactional(readOnly = true) - @GetMapping("/{projectName}/users") + @GetMapping("/{projectKey}/users") @PreAuthorize(NOT_CUSTOMER) @ApiOperation("Get users assigned on current project") - public Iterable<UserResource> getProjectUsers(@PathVariable String projectName, + public Iterable<UserResource> getProjectUsers(@PathVariable String projectKey, @FilterFor(User.class) Filter filter, @SortFor(User.class) Pageable pageable, @AuthenticationPrincipal ReportPortalUser user) { - return getProjectHandler.getProjectUsers(normalizeId(projectName), filter, pageable); + return getProjectHandler.getProjectUsers(normalizeId(projectKey), filter, pageable); } @Transactional(readOnly = true) - @GetMapping("/{projectName}") + @GetMapping("/{projectKey}") @PreAuthorize(ASSIGNED_TO_PROJECT) @ApiOperation(value = "Get information about project", notes = "Only for users that are assigned to the project") - public ProjectResource getProject(@PathVariable String projectName, + public ProjectResource getProject(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user) { - return getProjectHandler.getResource(normalizeId(projectName), user); + return getProjectHandler.getResource(normalizeId(projectKey), user); } @Transactional - @PutMapping("/{projectName}/unassign") + @PutMapping("/{projectKey}/unassign") @ResponseStatus(OK) @PreAuthorize(PROJECT_MANAGER) @ApiOperation("Un assign users") - public OperationCompletionRS unassignProjectUsers(@PathVariable String projectName, + public OperationCompletionRS unassignProjectUsers(@PathVariable String projectKey, @RequestBody @Validated UnassignUsersRQ unassignUsersRQ, @AuthenticationPrincipal ReportPortalUser user) { - return updateProjectHandler.unassignUsers(normalizeId(projectName), unassignUsersRQ, user); + return updateProjectHandler.unassignUsers(normalizeId(projectKey), unassignUsersRQ, user); } @Transactional - @PutMapping("/{projectName}/assign") + @PutMapping("/{projectKey}/assign") @ResponseStatus(OK) @PreAuthorize(PROJECT_MANAGER) @ApiOperation("Assign users") - public OperationCompletionRS assignProjectUsers(@PathVariable String projectName, + public OperationCompletionRS assignProjectUsers(@PathVariable String projectKey, @RequestBody @Validated AssignUsersRQ assignUsersRQ, @AuthenticationPrincipal ReportPortalUser user) { - return updateProjectHandler.assignUsers(projectName, assignUsersRQ, user); + return updateProjectHandler.assignUsers(projectKey, assignUsersRQ, user); } @Transactional(readOnly = true) - @GetMapping("/{projectName}/assignable") + @GetMapping("/{projectKey}/assignable") @ResponseStatus(OK) @PreAuthorize(PROJECT_MANAGER) @ApiOperation(value = "Load users which can be assigned to specified project", notes = "Only for users with project manager permissions") public Iterable<UserResource> getUsersForAssign(@FilterFor(User.class) Filter filter, - @SortFor(User.class) Pageable pageable, @PathVariable String projectName, + @SortFor(User.class) Pageable pageable, @PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user) { return getUserHandler.getUsers(filter, pageable, - projectExtractor.extractProjectDetails(user, projectName) + projectExtractor.extractProjectDetails(user, projectKey) ); } @Transactional(readOnly = true) - @GetMapping("/{projectName}/usernames") + @GetMapping("/{projectKey}/usernames") @ResponseStatus(HttpStatus.OK) @PreAuthorize(NOT_CUSTOMER) @ApiOperation(value = "Load project users by filter", notes = "Only for users that are members of the project") - public List<String> getProjectUsers(@PathVariable String projectName, + public List<String> getProjectUsers(@PathVariable String projectKey, @RequestParam(value = FilterCriteriaResolver.DEFAULT_FILTER_PREFIX + Condition.CNT + "users") String value, @AuthenticationPrincipal ReportPortalUser user) { - return getProjectHandler.getUserNames(projectExtractor.extractProjectDetails(user, projectName), + return getProjectHandler.getUserNames(projectExtractor.extractProjectDetails(user, projectKey), normalizeId(value) ); } @Transactional(readOnly = true) - @GetMapping("/{projectName}/usernames/search") + @GetMapping("/{projectKey}/usernames/search") @ResponseStatus(OK) @PreAuthorize(PROJECT_MANAGER) - public Iterable<SearchUserResource> searchForUser(@PathVariable String projectName, + public Iterable<SearchUserResource> searchForUser(@PathVariable String projectKey, @RequestParam(value = "term") String term, Pageable pageable, @AuthenticationPrincipal ReportPortalUser user) { return getProjectHandler.getUserNames(term, - projectExtractor.extractProjectDetails(user, projectName), pageable + projectExtractor.extractProjectDetails(user, projectKey), pageable ); } @Transactional - @PutMapping("/{projectName}/preference/{login}/{filterId}") + @PutMapping("/{projectKey}/preference/{login}/{filterId}") @ResponseStatus(HttpStatus.OK) @PreAuthorize(ALLOWED_TO_EDIT_USER) - public OperationCompletionRS addUserPreference(@PathVariable String projectName, + public OperationCompletionRS addUserPreference(@PathVariable String projectKey, @PathVariable String login, @PathVariable Long filterId, @AuthenticationPrincipal ReportPortalUser user) { - return updatePreference.addPreference(projectExtractor.extractProjectDetails(user, projectName), + return updatePreference.addPreference(projectExtractor.extractProjectDetails(user, projectKey), user, filterId ); } @Transactional - @DeleteMapping("/{projectName}/preference/{login}/{filterId}") + @DeleteMapping("/{projectKey}/preference/{login}/{filterId}") @ResponseStatus(HttpStatus.OK) @PreAuthorize(ALLOWED_TO_EDIT_USER) - public OperationCompletionRS removeUserPreference(@PathVariable String projectName, + public OperationCompletionRS removeUserPreference(@PathVariable String projectKey, @PathVariable String login, @PathVariable Long filterId, @AuthenticationPrincipal ReportPortalUser user) { return updatePreference.removePreference( - projectExtractor.extractProjectDetails(user, projectName), user, filterId); + projectExtractor.extractProjectDetails(user, projectKey), user, filterId); } @Transactional(readOnly = true) - @GetMapping("/{projectName}/preference/{login}") + @GetMapping("/{projectKey}/preference/{login}") @ResponseStatus(HttpStatus.OK) @PreAuthorize(ALLOWED_TO_EDIT_USER) @ApiOperation(value = "Load user preferences", notes = "Only for users that allowed to edit other users") - public PreferenceResource getUserPreference(@PathVariable String projectName, + public PreferenceResource getUserPreference(@PathVariable String projectKey, @PathVariable String login, @AuthenticationPrincipal ReportPortalUser user) { - return getPreference.getPreference(projectExtractor.extractProjectDetails(user, projectName), + return getPreference.getPreference(projectExtractor.extractProjectDetails(user, projectKey), user ); } @@ -363,22 +363,22 @@ public void exportProjects(@ApiParam(allowableValues = "csv") @Transactional(readOnly = true) @PreAuthorize(ASSIGNED_TO_PROJECT) - @GetMapping("/list/{projectName}") + @GetMapping("/list/{projectKey}") @ResponseStatus(HttpStatus.OK) - public ProjectInfoResource getProjectInfo(@PathVariable String projectName, + public ProjectInfoResource getProjectInfo(@PathVariable String projectKey, @RequestParam(value = "interval", required = false, defaultValue = "3M") String interval, @AuthenticationPrincipal ReportPortalUser user) { - return projectInfoHandler.getProjectInfo(projectName, interval); + return projectInfoHandler.getProjectInfo(projectKey, interval); } @Transactional(readOnly = true) @PreAuthorize(ASSIGNED_TO_PROJECT) - @GetMapping("/{projectName}/widget/{widgetCode}") + @GetMapping("/{projectKey}/widget/{widgetCode}") @ResponseStatus(HttpStatus.OK) - public Map<String, ?> getProjectWidget(@PathVariable String projectName, + public Map<String, ?> getProjectWidget(@PathVariable String projectKey, @RequestParam(value = "interval", required = false, defaultValue = "3M") String interval, @PathVariable String widgetCode, @AuthenticationPrincipal ReportPortalUser user) { - return projectInfoHandler.getProjectInfoWidgetContent(projectName, interval, widgetCode); + return projectInfoHandler.getProjectInfoWidgetContent(projectKey, interval, widgetCode); } @Transactional(readOnly = true) diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/ProjectSettingsController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/ProjectSettingsController.java index b5b50ba943..38835f0fa9 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/ProjectSettingsController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/ProjectSettingsController.java @@ -66,7 +66,7 @@ * @author Andrei_Ramanchuk */ @RestController -@RequestMapping("/v1/{projectName}/settings") +@RequestMapping("/v1/{projectKey}/settings") @PreAuthorize(ASSIGNED_TO_PROJECT) public class ProjectSettingsController { @@ -111,48 +111,48 @@ public ProjectSettingsController(CreateProjectSettingsHandler createHandler, @ResponseStatus(CREATED) @PreAuthorize(PROJECT_MANAGER) @ApiOperation("Creation of custom project specific issue sub-type") - public IssueSubTypeCreatedRS createProjectIssueSubType(@PathVariable String projectName, + public IssueSubTypeCreatedRS createProjectIssueSubType(@PathVariable String projectKey, @RequestBody @Validated CreateIssueSubTypeRQ request, @AuthenticationPrincipal ReportPortalUser user) { - return createHandler.createProjectIssueSubType(normalizeId(projectName), user, request); + return createHandler.createProjectIssueSubType(normalizeId(projectKey), user, request); } @PutMapping("/sub-type") @ResponseStatus(OK) @PreAuthorize(PROJECT_MANAGER) @ApiOperation("Update of custom project specific issue sub-type") - public OperationCompletionRS updateProjectIssueSubType(@PathVariable String projectName, + public OperationCompletionRS updateProjectIssueSubType(@PathVariable String projectKey, @RequestBody @Validated UpdateIssueSubTypeRQ request, @AuthenticationPrincipal ReportPortalUser user) { - return updateHandler.updateProjectIssueSubType(normalizeId(projectName), user, request); + return updateHandler.updateProjectIssueSubType(normalizeId(projectKey), user, request); } @DeleteMapping("/sub-type/{id}") @ResponseStatus(OK) @PreAuthorize(PROJECT_MANAGER) @ApiOperation("Delete custom project specific issue sub-type") - public OperationCompletionRS deleteProjectIssueSubType(@PathVariable String projectName, + public OperationCompletionRS deleteProjectIssueSubType(@PathVariable String projectKey, @PathVariable Long id, @AuthenticationPrincipal ReportPortalUser user) { - return deleteHandler.deleteProjectIssueSubType(normalizeId(projectName), user, id); + return deleteHandler.deleteProjectIssueSubType(normalizeId(projectKey), user, id); } @GetMapping @ResponseStatus(OK) @PreAuthorize(ASSIGNED_TO_PROJECT) @ApiOperation(value = "Get project specific issue sub-types", notes = "Only for users that are assigned to the project") - public ProjectSettingsResource getProjectSettings(@PathVariable String projectName, + public ProjectSettingsResource getProjectSettings(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user) { - return getHandler.getProjectSettings(normalizeId(projectName)); + return getHandler.getProjectSettings(normalizeId(projectKey)); } @PostMapping("/pattern") @ResponseStatus(CREATED) @PreAuthorize(PROJECT_MANAGER) @ApiOperation("Create pattern template for items' log messages pattern analysis") - public EntryCreatedRS createPatternTemplate(@PathVariable String projectName, + public EntryCreatedRS createPatternTemplate(@PathVariable String projectKey, @RequestBody @Validated CreatePatternTemplateRQ createPatternTemplateRQ, @AuthenticationPrincipal ReportPortalUser user) { - return createHandler.createPatternTemplate(normalizeId(projectName), createPatternTemplateRQ, + return createHandler.createPatternTemplate(normalizeId(projectKey), createPatternTemplateRQ, user ); } @@ -161,11 +161,11 @@ public EntryCreatedRS createPatternTemplate(@PathVariable String projectName, @ResponseStatus(OK) @PreAuthorize(PROJECT_MANAGER) @ApiOperation("Update pattern template for items' log messages pattern analysis") - public OperationCompletionRS updatePatternTemplate(@PathVariable String projectName, + public OperationCompletionRS updatePatternTemplate(@PathVariable String projectKey, @PathVariable Long id, @RequestBody @Validated UpdatePatternTemplateRQ updatePatternTemplateRQ, @AuthenticationPrincipal ReportPortalUser user) { - return updateHandler.updatePatternTemplate(id, normalizeId(projectName), + return updateHandler.updatePatternTemplate(id, normalizeId(projectKey), updatePatternTemplateRQ, user ); } @@ -174,9 +174,9 @@ public OperationCompletionRS updatePatternTemplate(@PathVariable String projectN @ResponseStatus(OK) @PreAuthorize(PROJECT_MANAGER) @ApiOperation("Delete pattern template for items' log messages pattern analysis") - public OperationCompletionRS deletePatternTemplate(@PathVariable String projectName, + public OperationCompletionRS deletePatternTemplate(@PathVariable String projectKey, @PathVariable Long id, @AuthenticationPrincipal ReportPortalUser user) { - return deleteHandler.deletePatternTemplate(normalizeId(projectName), user, id); + return deleteHandler.deletePatternTemplate(normalizeId(projectKey), user, id); } @Transactional(readOnly = true) @@ -184,9 +184,9 @@ public OperationCompletionRS deletePatternTemplate(@PathVariable String projectN @ResponseStatus(OK) @PreAuthorize(ASSIGNED_TO_PROJECT) @ApiOperation(value = "Returns notifications config of specified project", notes = "Only for users assigned to specified project") - public List<SenderCaseDTO> getNotifications(@PathVariable String projectName) { + public List<SenderCaseDTO> getNotifications(@PathVariable String projectKey) { return getProjectNotificationsHandler.getProjectNotifications( - getProjectHandler.get(normalizeId(projectName)).getId()); + getProjectHandler.get(normalizeId(projectKey)).getId()); } @Transactional @@ -194,11 +194,11 @@ public List<SenderCaseDTO> getNotifications(@PathVariable String projectName) { @ResponseStatus(CREATED) @PreAuthorize(PROJECT_MANAGER_OR_ADMIN) @ApiOperation(value = "Creates notification for specified project", notes = "Only for users with PROJECT_MANAGER or ADMIN roles") - public EntryCreatedRS createNotification(@PathVariable String projectName, + public EntryCreatedRS createNotification(@PathVariable String projectKey, @RequestBody @Validated SenderCaseDTO createNotificationRQ, @AuthenticationPrincipal ReportPortalUser user) { return createProjectNotificationHandler.createNotification( - getProjectHandler.get(normalizeId(projectName)), createNotificationRQ, user); + getProjectHandler.get(normalizeId(projectKey)), createNotificationRQ, user); } @Transactional @@ -206,11 +206,11 @@ public EntryCreatedRS createNotification(@PathVariable String projectName, @ResponseStatus(CREATED) @PreAuthorize(PROJECT_MANAGER_OR_ADMIN) @ApiOperation(value = "Updates notification for specified project", notes = "Only for users with PROJECT_MANAGER or ADMIN roles") - public OperationCompletionRS updateNotification(@PathVariable String projectName, + public OperationCompletionRS updateNotification(@PathVariable String projectKey, @RequestBody @Validated SenderCaseDTO updateNotificationRQ, @AuthenticationPrincipal ReportPortalUser user) { return updateProjectNotificationHandler.updateNotification( - getProjectHandler.get(normalizeId(projectName)), updateNotificationRQ, user); + getProjectHandler.get(normalizeId(projectKey)), updateNotificationRQ, user); } @Transactional @@ -218,9 +218,9 @@ public OperationCompletionRS updateNotification(@PathVariable String projectName @ResponseStatus(OK) @PreAuthorize(PROJECT_MANAGER_OR_ADMIN) @ApiOperation(value = "Deletes notification for specified project", notes = "Only for users with PROJECT_MANAGER or ADMIN roles") - public OperationCompletionRS deleteNotification(@PathVariable String projectName, + public OperationCompletionRS deleteNotification(@PathVariable String projectKey, @PathVariable Long notificationId, @AuthenticationPrincipal ReportPortalUser user) { return deleteNotificationHandler.deleteNotification( - getProjectHandler.get(normalizeId(projectName)), notificationId, user); + getProjectHandler.get(normalizeId(projectKey)), notificationId, user); } -} \ No newline at end of file +} diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/TestItemAsyncController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/TestItemAsyncController.java index 0b234f8aa5..dfe4626c8c 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/TestItemAsyncController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/TestItemAsyncController.java @@ -74,11 +74,11 @@ public TestItemAsyncController(ProjectExtractor projectExtractor, @ResponseStatus(CREATED) @ApiOperation("Start a root test item") @PreAuthorize(ALLOWED_TO_REPORT) - public EntryCreatedAsyncRS startRootItem(@PathVariable String projectName, + public EntryCreatedAsyncRS startRootItem(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @RequestBody @Validated StartTestItemRQ startTestItemRQ) { return startTestItemHandler.startRootItem(user, - projectExtractor.extractProjectDetails(user, projectName), startTestItemRQ); + projectExtractor.extractProjectDetails(user, projectKey), startTestItemRQ); } @HttpLogging @@ -86,11 +86,11 @@ public EntryCreatedAsyncRS startRootItem(@PathVariable String projectName, @ResponseStatus(CREATED) @ApiOperation("Start a child test item") @PreAuthorize(ALLOWED_TO_REPORT) - public EntryCreatedAsyncRS startChildItem(@PathVariable String projectName, + public EntryCreatedAsyncRS startChildItem(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @PathVariable String parentItem, @RequestBody @Validated StartTestItemRQ startTestItemRQ) { return startTestItemHandler.startChildItem(user, - projectExtractor.extractProjectDetails(user, projectName), startTestItemRQ, parentItem); + projectExtractor.extractProjectDetails(user, projectKey), startTestItemRQ, parentItem); } @HttpLogging @@ -98,11 +98,11 @@ public EntryCreatedAsyncRS startChildItem(@PathVariable String projectName, @ResponseStatus(OK) @ApiOperation("Finish test item") @PreAuthorize(ALLOWED_TO_REPORT) - public OperationCompletionRS finishTestItem(@PathVariable String projectName, + public OperationCompletionRS finishTestItem(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @PathVariable String testItemId, @RequestBody @Validated FinishTestItemRQ finishExecutionRQ) { return finishTestItemHandler.finishTestItem(user, - projectExtractor.extractProjectDetails(user, projectName), testItemId, finishExecutionRQ); + projectExtractor.extractProjectDetails(user, projectKey), testItemId, finishExecutionRQ); } } diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/TestItemController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/TestItemController.java index 3a31a568fa..55ed2bb5d2 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/TestItemController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/TestItemController.java @@ -92,7 +92,7 @@ * Controller implementation for {@link com.epam.ta.reportportal.entity.item.TestItem} entity */ @RestController -@RequestMapping("/v1/{projectName}/item") +@RequestMapping("/v1/{projectKey}/item") @PreAuthorize(ASSIGNED_TO_PROJECT) public class TestItemController { @@ -135,11 +135,11 @@ public TestItemController(ProjectExtractor projectExtractor, @ResponseStatus(CREATED) @ApiOperation("Start a root test item") @PreAuthorize(ALLOWED_TO_REPORT) - public EntryCreatedAsyncRS startRootItem(@PathVariable String projectName, + public EntryCreatedAsyncRS startRootItem(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @RequestBody @Validated StartTestItemRQ startTestItemRQ) { return startTestItemHandler.startRootItem(user, - projectExtractor.extractProjectDetails(user, projectName), startTestItemRQ + projectExtractor.extractProjectDetails(user, projectKey), startTestItemRQ ); } @@ -147,11 +147,11 @@ public EntryCreatedAsyncRS startRootItem(@PathVariable String projectName, @ResponseStatus(CREATED) @ApiOperation("Start a child test item") @PreAuthorize(ALLOWED_TO_REPORT) - public EntryCreatedAsyncRS startChildItem(@PathVariable String projectName, + public EntryCreatedAsyncRS startChildItem(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @PathVariable String parentItem, @RequestBody @Validated StartTestItemRQ startTestItemRQ) { return startTestItemHandler.startChildItem(user, - projectExtractor.extractProjectDetails(user, projectName), startTestItemRQ, parentItem + projectExtractor.extractProjectDetails(user, projectKey), startTestItemRQ, parentItem ); } @@ -159,11 +159,11 @@ public EntryCreatedAsyncRS startChildItem(@PathVariable String projectName, @ResponseStatus(OK) @ApiOperation("Finish test item") @PreAuthorize(ALLOWED_TO_REPORT) - public OperationCompletionRS finishTestItem(@PathVariable String projectName, + public OperationCompletionRS finishTestItem(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @PathVariable String testItemId, @RequestBody @Validated FinishTestItemRQ finishExecutionRQ) { return finishTestItemHandler.finishTestItem(user, - projectExtractor.extractProjectDetails(user, projectName), testItemId, finishExecutionRQ + projectExtractor.extractProjectDetails(user, projectKey), testItemId, finishExecutionRQ ); } @@ -174,10 +174,10 @@ public OperationCompletionRS finishTestItem(@PathVariable String projectName, @GetMapping("/{itemId}") @ResponseStatus(OK) @ApiOperation("Find test item by ID") - public TestItemResource getTestItem(@PathVariable String projectName, + public TestItemResource getTestItem(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @PathVariable String itemId) { return getTestItemHandler.getTestItem(itemId, - projectExtractor.extractProjectDetails(user, projectName), user + projectExtractor.extractProjectDetails(user, projectKey), user ); } @@ -186,10 +186,10 @@ public TestItemResource getTestItem(@PathVariable String projectName, @GetMapping("/uuid/{itemId}") @ResponseStatus(OK) @ApiOperation("Find test item by UUID") - public TestItemResource getTestItemByUuid(@PathVariable String projectName, + public TestItemResource getTestItemByUuid(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @PathVariable String itemId) { return getTestItemHandler.getTestItem(itemId, - projectExtractor.extractProjectDetails(user, projectName), user + projectExtractor.extractProjectDetails(user, projectKey), user ); } @@ -198,20 +198,20 @@ public TestItemResource getTestItemByUuid(@PathVariable String projectName, @GetMapping("/suggest/{itemId}") @ResponseStatus(OK) @ApiOperation("Search suggested items in analyzer for provided one") - public List<SuggestedItem> getSuggestedItems(@PathVariable String projectName, + public List<SuggestedItem> getSuggestedItems(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @PathVariable Long itemId) { return suggestItemService.suggestItems(itemId, - projectExtractor.extractProjectDetails(user, projectName), user + projectExtractor.extractProjectDetails(user, projectKey), user ); } @GetMapping("/suggest/cluster/{clusterId}") @ResponseStatus(OK) @ApiOperation("Search suggested items in analyzer for provided one") - public List<SuggestedItem> getSuggestedClusterItems(@PathVariable String projectName, + public List<SuggestedItem> getSuggestedClusterItems(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @PathVariable Long clusterId) { return suggestItemService.suggestClusterItems(clusterId, - projectExtractor.extractProjectDetails(user, projectName), user + projectExtractor.extractProjectDetails(user, projectKey), user ); } @@ -219,10 +219,10 @@ public List<SuggestedItem> getSuggestedClusterItems(@PathVariable String project @PutMapping("/suggest/choice") @ResponseStatus(OK) @ApiOperation("Handle user choice from suggested items") - public OperationCompletionRS handleSuggestChoose(@PathVariable String projectName, + public OperationCompletionRS handleSuggestChoose(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @RequestBody @Validated List<SuggestInfo> request) { - projectExtractor.extractProjectDetails(user, projectName); + projectExtractor.extractProjectDetails(user, projectKey); return suggestItemService.handleSuggestChoice(request); } @@ -231,7 +231,7 @@ public OperationCompletionRS handleSuggestChoose(@PathVariable String projectNam @GetMapping @ResponseStatus(OK) @ApiOperation("Find test items by specified filter") - public Iterable<TestItemResource> getTestItems(@PathVariable String projectName, + public Iterable<TestItemResource> getTestItems(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @Nullable @RequestParam(value = DEFAULT_FILTER_PREFIX + Condition.EQ + CRITERIA_LAUNCH_ID, required = false) Long launchId, @@ -244,7 +244,7 @@ public Iterable<TestItemResource> getTestItems(@PathVariable String projectName, @SortFor(TestItem.class) Pageable pageable) { return getTestItemHandler.getTestItems( new CompositeFilter(Operator.AND, filter, predefinedFilter), pageable, - projectExtractor.extractProjectDetails(user, projectName), user, launchId, filterId, + projectExtractor.extractProjectDetails(user, projectKey), user, launchId, filterId, isLatest, launchesLimit ); } @@ -253,18 +253,18 @@ public Iterable<TestItemResource> getTestItems(@PathVariable String projectName, @GetMapping("/v2") @ResponseStatus(OK) @ApiOperation("Find test items by specified filter") - public Iterable<TestItemResource> getTestItemsV2(@PathVariable String projectName, + public Iterable<TestItemResource> getTestItemsV2(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @RequestParam Map<String, String> params, @FilterFor(TestItem.class) Filter filter, @FilterFor(TestItem.class) Queryable predefinedFilter, @SortFor(TestItem.class) Pageable pageable) { // tmp return null for project, to fix perf issue - if ("libg-140".equalsIgnoreCase(projectName)) { + if ("libg-140".equalsIgnoreCase(projectKey)) { return null; } return getTestItemHandler.getTestItemsByProvider( new CompositeFilter(Operator.AND, filter, predefinedFilter), pageable, - projectExtractor.extractProjectDetails(user, projectName), user, params + projectExtractor.extractProjectDetails(user, projectKey), user, params ); } @@ -272,13 +272,13 @@ public Iterable<TestItemResource> getTestItemsV2(@PathVariable String projectNam @GetMapping("/statistics") @ResponseStatus(OK) @ApiOperation("Find accumulated statistics of items by specified filter") - public StatisticsResource getTestItems(@PathVariable String projectName, + public StatisticsResource getTestItems(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @FilterFor(TestItem.class) Filter filter, @FilterFor(TestItem.class) Queryable predefinedFilter, @RequestParam Map<String, String> params) { return getTestItemHandler.getStatisticsByProvider( new CompositeFilter(Operator.AND, filter, predefinedFilter), - projectExtractor.extractProjectDetails(user, projectName), user, params + projectExtractor.extractProjectDetails(user, projectKey), user, params ); } @@ -286,10 +286,10 @@ public StatisticsResource getTestItems(@PathVariable String projectName, @DeleteMapping("/{itemId}") @ResponseStatus(OK) @ApiOperation("Delete test item") - public OperationCompletionRS deleteTestItem(@PathVariable String projectName, + public OperationCompletionRS deleteTestItem(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @PathVariable Long itemId) { return deleteTestItemHandler.deleteTestItem(itemId, - projectExtractor.extractProjectDetails(user, projectName), user + projectExtractor.extractProjectDetails(user, projectKey), user ); } @@ -297,10 +297,10 @@ public OperationCompletionRS deleteTestItem(@PathVariable String projectName, @DeleteMapping @ResponseStatus(OK) @ApiOperation("Delete test items by specified ids") - public List<OperationCompletionRS> deleteTestItems(@PathVariable String projectName, + public List<OperationCompletionRS> deleteTestItems(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @RequestParam(value = "ids") Set<Long> ids) { return deleteTestItemHandler.deleteTestItems(ids, - projectExtractor.extractProjectDetails(user, projectName), user + projectExtractor.extractProjectDetails(user, projectKey), user ); } @@ -308,18 +308,18 @@ public List<OperationCompletionRS> deleteTestItems(@PathVariable String projectN @PutMapping @ResponseStatus(OK) @ApiOperation("Update issues of specified test items") - public List<Issue> defineTestItemIssueType(@PathVariable String projectName, + public List<Issue> defineTestItemIssueType(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @RequestBody @Validated DefineIssueRQ request) { return updateTestItemHandler.defineTestItemsIssues( - projectExtractor.extractProjectDetails(user, projectName), request, user); + projectExtractor.extractProjectDetails(user, projectKey), request, user); } @Transactional(readOnly = true) @GetMapping("/history") @ResponseStatus(OK) @ApiOperation("Load history of test items") - public Iterable<TestItemHistoryElement> getItemsHistory(@PathVariable String projectName, + public Iterable<TestItemHistoryElement> getItemsHistory(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @FilterFor(TestItem.class) Filter filter, @FilterFor(TestItem.class) Queryable predefinedFilter, @SortFor(TestItem.class) Pageable pageable, @Nullable @@ -338,7 +338,7 @@ public Iterable<TestItemHistoryElement> getItemsHistory(@PathVariable String pro int historyDepth) { return testItemsHistoryHandler.getItemsHistory( - projectExtractor.extractProjectDetails(user, projectName), + projectExtractor.extractProjectDetails(user, projectKey), new CompositeFilter(Operator.AND, filter, predefinedFilter), pageable, HistoryRequestParams.of(historyDepth, parentId, itemId, launchId, type, filterId, launchesLimit, isLatest @@ -351,7 +351,7 @@ public Iterable<TestItemHistoryElement> getItemsHistory(@PathVariable String pro @ResponseStatus(OK) @ApiOperation("Get tickets that contains a term as a part inside for specified launch") public List<String> getTicketIds(@AuthenticationPrincipal ReportPortalUser user, - @PathVariable String projectName, @RequestParam(value = "launch") Long id, + @PathVariable String projectKey, @RequestParam(value = "launch") Long id, @RequestParam(value = "term") String term) { return getTestItemHandler.getTicketIds(id, normalizeId(term)); } @@ -361,9 +361,9 @@ public List<String> getTicketIds(@AuthenticationPrincipal ReportPortalUser user, @ResponseStatus(OK) @ApiOperation("Get tickets that contains a term as a part inside for specified launch") public List<String> getTicketIdsForProject(@AuthenticationPrincipal ReportPortalUser user, - @PathVariable String projectName, @RequestParam(value = "term") String term) { + @PathVariable String projectKey, @RequestParam(value = "term") String term) { return getTestItemHandler.getTicketIds( - projectExtractor.extractProjectDetails(user, projectName), normalizeId(term)); + projectExtractor.extractProjectDetails(user, projectKey), normalizeId(term)); } //TODO EPMRPP-59414 @@ -371,7 +371,7 @@ public List<String> getTicketIdsForProject(@AuthenticationPrincipal ReportPortal @GetMapping("/attribute/keys") @ResponseStatus(OK) @ApiOperation("Get all unique attribute keys of specified launch") - public List<String> getAttributeKeys(@PathVariable String projectName, + public List<String> getAttributeKeys(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @RequestParam(value = "launch") Long id, @RequestParam(value = DEFAULT_FILTER_PREFIX + Condition.CNT + CRITERIA_ITEM_ATTRIBUTE_KEY) String value) { @@ -383,7 +383,7 @@ public List<String> getAttributeKeys(@PathVariable String projectName, @GetMapping("/attribute/keys/all") @ResponseStatus(OK) @ApiOperation("Get all unique attribute keys of specified launch") - public List<String> getAttributeKeysForProject(@PathVariable String projectName, + public List<String> getAttributeKeysForProject(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @RequestParam(value = DEFAULT_FILTER_PREFIX + Condition.CNT + CRITERIA_ITEM_ATTRIBUTE_KEY) String value, @RequestParam(value = FILTER_ID_REQUEST_PARAM) Long launchFilterId, @@ -391,7 +391,7 @@ public List<String> getAttributeKeysForProject(@PathVariable String projectName, boolean isLatest, @RequestParam(value = LAUNCHES_LIMIT_REQUEST_PARAM, defaultValue = "0") int launchesLimit) { return getTestItemHandler.getAttributeKeys(launchFilterId, isLatest, launchesLimit, - projectExtractor.extractProjectDetails(user, projectName), value + projectExtractor.extractProjectDetails(user, projectKey), value ); } @@ -400,7 +400,7 @@ public List<String> getAttributeKeysForProject(@PathVariable String projectName, @GetMapping("/attribute/values") @ResponseStatus(OK) @ApiOperation("Get all unique attribute values of specified launch") - public List<String> getAttributeValues(@PathVariable String projectName, + public List<String> getAttributeValues(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @RequestParam(value = "launch") Long id, @RequestParam(value = DEFAULT_FILTER_PREFIX + Condition.EQ + CRITERIA_ITEM_ATTRIBUTE_KEY, required = false) String key, @@ -413,7 +413,7 @@ public List<String> getAttributeValues(@PathVariable String projectName, @GetMapping("/step/attribute/keys") @ResponseStatus(OK) @ApiOperation("Get all unique attribute keys of step items under specified project") - public List<String> getAttributeKeys(@PathVariable String projectName, + public List<String> getAttributeKeys(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @RequestParam(value = DEFAULT_FILTER_PREFIX + Condition.EQ + CRITERIA_NAME, required = false) String launchName, @@ -421,7 +421,7 @@ public List<String> getAttributeKeys(@PathVariable String projectName, String value) { return ofNullable(launchName).filter(StringUtils::isNotBlank).map( name -> getTestItemHandler.getAttributeKeys( - projectExtractor.extractProjectDetails(user, projectName), name, value)) + projectExtractor.extractProjectDetails(user, projectKey), name, value)) .orElseGet(Collections::emptyList); } @@ -429,7 +429,7 @@ public List<String> getAttributeKeys(@PathVariable String projectName, @GetMapping("/step/attribute/values") @ResponseStatus(OK) @ApiOperation("Get all unique attribute values of step items under specified project") - public List<String> getAttributeValues(@PathVariable String projectName, + public List<String> getAttributeValues(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @RequestParam(value = DEFAULT_FILTER_PREFIX + Condition.EQ + CRITERIA_NAME, required = false) String launchName, @RequestParam(value = DEFAULT_FILTER_PREFIX + Condition.EQ @@ -438,7 +438,7 @@ public List<String> getAttributeValues(@PathVariable String projectName, String value) { return ofNullable(launchName).filter(StringUtils::isNotBlank).map( name -> getTestItemHandler.getAttributeValues( - projectExtractor.extractProjectDetails(user, projectName), name, key, value)) + projectExtractor.extractProjectDetails(user, projectKey), name, key, value)) .orElseGet(Collections::emptyList); } @@ -447,11 +447,11 @@ public List<String> getAttributeValues(@PathVariable String projectName, @PreAuthorize(PROJECT_MANAGER_OR_ADMIN) @ResponseStatus(OK) @ApiOperation("Bulk update attributes and description") - public OperationCompletionRS bulkUpdate(@PathVariable String projectName, + public OperationCompletionRS bulkUpdate(@PathVariable String projectKey, @RequestBody @Validated BulkInfoUpdateRQ bulkInfoUpdateRQ, @AuthenticationPrincipal ReportPortalUser user) { return updateTestItemHandler.bulkInfoUpdate(bulkInfoUpdateRQ, - projectExtractor.extractProjectDetails(user, projectName) + projectExtractor.extractProjectDetails(user, projectKey) ); } @@ -459,22 +459,22 @@ public OperationCompletionRS bulkUpdate(@PathVariable String projectName, @PutMapping("/{itemId}/update") @ResponseStatus(OK) @ApiOperation("Update test item") - public OperationCompletionRS updateTestItem(@PathVariable String projectName, + public OperationCompletionRS updateTestItem(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @PathVariable Long itemId, @RequestBody @Validated UpdateTestItemRQ rq) { return updateTestItemHandler.updateTestItem( - projectExtractor.extractProjectDetails(user, projectName), itemId, rq, user); + projectExtractor.extractProjectDetails(user, projectKey), itemId, rq, user); } @Transactional @PutMapping("/issue/link") @ResponseStatus(OK) @ApiOperation("Attach external issue for specified test items") - public List<OperationCompletionRS> linkExternalIssues(@PathVariable String projectName, + public List<OperationCompletionRS> linkExternalIssues(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @RequestBody @Validated LinkExternalIssueRQ rq) { return updateTestItemHandler.processExternalIssues(rq, - projectExtractor.extractProjectDetails(user, projectName), user + projectExtractor.extractProjectDetails(user, projectKey), user ); } @@ -482,11 +482,11 @@ public List<OperationCompletionRS> linkExternalIssues(@PathVariable String proje @PutMapping("/issue/unlink") @ResponseStatus(OK) @ApiOperation("Unlink external issue for specified test items") - public List<OperationCompletionRS> unlinkExternalIssues(@PathVariable String projectName, + public List<OperationCompletionRS> unlinkExternalIssues(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @RequestBody @Validated UnlinkExternalIssueRQ rq) { return updateTestItemHandler.processExternalIssues(rq, - projectExtractor.extractProjectDetails(user, projectName), user + projectExtractor.extractProjectDetails(user, projectKey), user ); } @@ -494,10 +494,10 @@ public List<OperationCompletionRS> unlinkExternalIssues(@PathVariable String pro @GetMapping("/items") @ResponseStatus(OK) @ApiOperation("Get test items by specified ids") - public List<TestItemResource> getTestItems(@PathVariable String projectName, + public List<TestItemResource> getTestItems(@PathVariable String projectKey, @AuthenticationPrincipal ReportPortalUser user, @RequestParam(value = "ids") Long[] ids) { return getTestItemHandler.getTestItems(ids, - projectExtractor.extractProjectDetails(user, projectName), user + projectExtractor.extractProjectDetails(user, projectKey), user ); } } diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/UserFilterController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/UserFilterController.java index f872a88179..efa385a1ab 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/UserFilterController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/UserFilterController.java @@ -63,7 +63,7 @@ @RestController @PreAuthorize(ASSIGNED_TO_PROJECT) -@RequestMapping("/v1/{projectName}/filter") +@RequestMapping("/v1/{projectKey}/filter") public class UserFilterController { private final ProjectExtractor projectExtractor; @@ -85,62 +85,62 @@ public UserFilterController(ProjectExtractor projectExtractor, @PostMapping @ResponseStatus(HttpStatus.CREATED) @ApiOperation("Create user filter") - public EntryCreatedRS createFilter(@PathVariable String projectName, + public EntryCreatedRS createFilter(@PathVariable String projectKey, @RequestBody @Validated UpdateUserFilterRQ createFilterRQ, @AuthenticationPrincipal ReportPortalUser user) { - return updateUserFilterHandler.createFilter(createFilterRQ, projectName, user); + return updateUserFilterHandler.createFilter(createFilterRQ, projectKey, user); } @Transactional(readOnly = true) @GetMapping(value = "/{filterId}") @ResponseStatus(HttpStatus.OK) @ApiOperation("Get specified user filter by id") - public UserFilterResource getFilter(@PathVariable String projectName, @PathVariable Long filterId, + public UserFilterResource getFilter(@PathVariable String projectKey, @PathVariable Long filterId, @AuthenticationPrincipal ReportPortalUser user) { return getFilterHandler.getUserFilter( - filterId, projectExtractor.extractProjectDetails(user, projectName)); + filterId, projectExtractor.extractProjectDetails(user, projectKey)); } @Transactional(readOnly = true) @GetMapping @ResponseStatus(HttpStatus.OK) @ApiOperation("Get filters") - public Iterable<UserFilterResource> getAllFilters(@PathVariable String projectName, + public Iterable<UserFilterResource> getAllFilters(@PathVariable String projectKey, @SortFor(UserFilter.class) Pageable pageable, @FilterFor(UserFilter.class) Filter filter, @AuthenticationPrincipal ReportPortalUser user) { - return getFilterHandler.getUserFilters(projectName, pageable, filter, user); + return getFilterHandler.getUserFilters(projectKey, pageable, filter, user); } @Transactional @DeleteMapping(value = "/{filterId}") @ResponseStatus(HttpStatus.OK) @ApiOperation("Delete specified user filter by id") - public OperationCompletionRS deleteFilter(@PathVariable String projectName, + public OperationCompletionRS deleteFilter(@PathVariable String projectKey, @PathVariable Long filterId, @AuthenticationPrincipal ReportPortalUser user) { return deleteFilterHandler.deleteFilter( - filterId, projectExtractor.extractProjectDetails(user, projectName), user); + filterId, projectExtractor.extractProjectDetails(user, projectKey), user); } @Transactional(readOnly = true) @GetMapping(value = "/names") @ResponseStatus(HttpStatus.OK) @ApiOperation("Get available filter names") - public Iterable<OwnedEntityResource> getAllFiltersNames(@PathVariable String projectName, + public Iterable<OwnedEntityResource> getAllFiltersNames(@PathVariable String projectKey, @SortFor(UserFilter.class) Pageable pageable, @FilterFor(UserFilter.class) Filter filter, @AuthenticationPrincipal ReportPortalUser user) { return getFilterHandler.getFiltersNames( - projectExtractor.extractProjectDetails(user, projectName), pageable, filter, user); + projectExtractor.extractProjectDetails(user, projectKey), pageable, filter, user); } @Transactional @PutMapping(value = "/{filterId}") @ResponseStatus(HttpStatus.OK) @ApiOperation("Update specified user filter") - public OperationCompletionRS updateUserFilter(@PathVariable String projectName, + public OperationCompletionRS updateUserFilter(@PathVariable String projectKey, @PathVariable Long filterId, @RequestBody @Validated UpdateUserFilterRQ updateRQ, @AuthenticationPrincipal ReportPortalUser user) { return updateUserFilterHandler.updateUserFilter(filterId, updateRQ, - projectExtractor.extractProjectDetails(user, projectName), user + projectExtractor.extractProjectDetails(user, projectKey), user ); } @@ -148,10 +148,10 @@ public OperationCompletionRS updateUserFilter(@PathVariable String projectName, @GetMapping(value = "/filters") @ResponseStatus(HttpStatus.OK) @ApiOperation("Get list of specified user filters") - public List<UserFilterResource> getUserFilters(@PathVariable String projectName, + public List<UserFilterResource> getUserFilters(@PathVariable String projectKey, @RequestParam(value = "ids") Long[] ids, @AuthenticationPrincipal ReportPortalUser user) { List<UserFilter> filters = getFilterHandler.getFiltersById(ids, - projectExtractor.extractProjectDetails(user, projectName), user + projectExtractor.extractProjectDetails(user, projectKey), user ); return filters.stream().map(UserFilterConverter.TO_FILTER_RESOURCE) .collect(Collectors.toList()); @@ -161,11 +161,11 @@ public List<UserFilterResource> getUserFilters(@PathVariable String projectName, @RequestMapping(method = RequestMethod.PUT) @ResponseStatus(HttpStatus.OK) @ApiOperation("Update list of user filters") - public List<OperationCompletionRS> updateUserFilters(@PathVariable String projectName, + public List<OperationCompletionRS> updateUserFilters(@PathVariable String projectKey, @RequestBody @Validated CollectionsRQ<BulkUpdateFilterRQ> updateRQ, @AuthenticationPrincipal ReportPortalUser user) { return updateUserFilterHandler.updateUserFilter( - updateRQ, projectExtractor.extractProjectDetails(user, projectName), user); + updateRQ, projectExtractor.extractProjectDetails(user, projectKey), user); } } diff --git a/src/main/java/com/epam/ta/reportportal/ws/controller/WidgetController.java b/src/main/java/com/epam/ta/reportportal/ws/controller/WidgetController.java index 384c6de639..14cec1c214 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/controller/WidgetController.java +++ b/src/main/java/com/epam/ta/reportportal/ws/controller/WidgetController.java @@ -60,7 +60,7 @@ */ @RestController @PreAuthorize(ASSIGNED_TO_PROJECT) -@RequestMapping("/v1/{projectName}/widget") +@RequestMapping("/v1/{projectKey}/widget") public class WidgetController { private final ProjectExtractor projectExtractor; @@ -83,32 +83,32 @@ public WidgetController(ProjectExtractor projectExtractor, @ResponseStatus(CREATED) @ApiOperation("Create a new widget") public EntryCreatedRS createWidget(@RequestBody @Validated WidgetRQ createWidget, - @AuthenticationPrincipal ReportPortalUser user, @PathVariable String projectName) { + @AuthenticationPrincipal ReportPortalUser user, @PathVariable String projectKey) { return createWidgetHandler.createWidget( - createWidget, projectExtractor.extractProjectDetails(user, projectName), user); + createWidget, projectExtractor.extractProjectDetails(user, projectKey), user); } @Transactional(readOnly = true) @GetMapping(value = "/{widgetId}") @ResponseStatus(OK) @ApiOperation("Get widget by ID") - public WidgetResource getWidget(@PathVariable String projectName, @PathVariable Long widgetId, + public WidgetResource getWidget(@PathVariable String projectKey, @PathVariable Long widgetId, @AuthenticationPrincipal ReportPortalUser user) { return getWidgetHandler.getWidget( - widgetId, projectExtractor.extractProjectDetails(user, projectName), user); + widgetId, projectExtractor.extractProjectDetails(user, projectKey), user); } @Transactional(readOnly = true) @GetMapping(value = "multilevel/{widgetId}") @ResponseStatus(OK) @ApiOperation("Get multilevel widget by ID") - public WidgetResource getWidget(@PathVariable String projectName, @PathVariable Long widgetId, + public WidgetResource getWidget(@PathVariable String projectKey, @PathVariable Long widgetId, @RequestParam(required = false, name = "attributes") String[] attributes, @RequestParam MultiValueMap<String, String> params, @AuthenticationPrincipal ReportPortalUser user) { return getWidgetHandler.getWidget( widgetId, ArrayUtils.nullToEmpty(attributes), params, - projectExtractor.extractProjectDetails(user, projectName), user + projectExtractor.extractProjectDetails(user, projectKey), user ); } @@ -116,32 +116,32 @@ public WidgetResource getWidget(@PathVariable String projectName, @PathVariable @PostMapping(value = "/preview") @ResponseStatus(OK) @ApiOperation("Get widget preview") - public Map<String, ?> getWidgetPreview(@PathVariable String projectName, + public Map<String, ?> getWidgetPreview(@PathVariable String projectKey, @RequestBody @Validated WidgetPreviewRQ previewRQ, @AuthenticationPrincipal ReportPortalUser user) { return getWidgetHandler.getWidgetPreview( - previewRQ, projectExtractor.extractProjectDetails(user, normalizeId(projectName)), user); + previewRQ, projectExtractor.extractProjectDetails(user, normalizeId(projectKey)), user); } @Transactional @PutMapping(value = "/{widgetId}") @ResponseStatus(OK) @ApiOperation("Update specified widget") - public OperationCompletionRS updateWidget(@PathVariable String projectName, + public OperationCompletionRS updateWidget(@PathVariable String projectKey, @PathVariable Long widgetId, @RequestBody @Validated WidgetRQ updateRQ, @AuthenticationPrincipal ReportPortalUser user) { return updateWidgetHandler.updateWidget( - widgetId, updateRQ, projectExtractor.extractProjectDetails(user, projectName), user); + widgetId, updateRQ, projectExtractor.extractProjectDetails(user, projectKey), user); } @Transactional(readOnly = true) @GetMapping(value = "/names/all") @ResponseStatus(OK) @ApiOperation("Load all widget names which belong to a user") - public Iterable<Object> getWidgetNames(@PathVariable String projectName, + public Iterable<Object> getWidgetNames(@PathVariable String projectKey, @SortFor(Widget.class) Pageable pageable, @FilterFor(Widget.class) Filter filter, @AuthenticationPrincipal ReportPortalUser user) { return getWidgetHandler.getOwnNames( - projectExtractor.extractProjectDetails(user, projectName), pageable, filter, user); + projectExtractor.extractProjectDetails(user, projectKey), pageable, filter, user); } -} \ No newline at end of file +} diff --git a/src/main/java/com/epam/ta/reportportal/ws/converter/converters/OrganizationConverter.java b/src/main/java/com/epam/ta/reportportal/ws/converter/converters/OrganizationConverter.java new file mode 100644 index 0000000000..d9ee4adeed --- /dev/null +++ b/src/main/java/com/epam/ta/reportportal/ws/converter/converters/OrganizationConverter.java @@ -0,0 +1,42 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.ws.converter.converters; + +import com.epam.ta.reportportal.entity.organization.Organization; +import com.epam.ta.reportportal.model.OrganizationResource; +import java.util.function.Function; + +/** + * @author Andrei Piankouski + */ +public class OrganizationConverter { + + private OrganizationConverter() { + //static only + } + + + public static final Function<Organization, OrganizationResource> TO_ORGANIZATION_RESOURCE = org -> { + + OrganizationResource orgResource = new OrganizationResource(); + orgResource.setOrganizationId(org.getId()); + orgResource.setOrganizationName(org.getName()); + orgResource.setOrganizationSlug(org.getSlug()); + + return orgResource; + }; +} diff --git a/src/main/java/com/epam/ta/reportportal/ws/converter/converters/ProjectConverter.java b/src/main/java/com/epam/ta/reportportal/ws/converter/converters/ProjectConverter.java index b03929c96c..71de96de3c 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/converter/converters/ProjectConverter.java +++ b/src/main/java/com/epam/ta/reportportal/ws/converter/converters/ProjectConverter.java @@ -55,6 +55,11 @@ public final class ProjectConverter { ProjectResource projectResource = new ProjectResource(); projectResource.setProjectId(project.getId()); projectResource.setProjectName(project.getName()); + projectResource.setProjectKey(project.getKey()); + projectResource.setProjectSlug(project.getSlug()); + projectResource.setOrganization(project.getOrganization().getName()); + projectResource.setOrganizationSlug(project.getOrganization().getSlug()); + projectResource.setOrganizationId(project.getOrganization().getId()); projectResource.setEntryType(project.getProjectType().name()); projectResource.setCreationDate(project.getCreationDate()); projectResource.setAllocatedStorage(project.getAllocatedStorage()); diff --git a/src/main/java/com/epam/ta/reportportal/ws/converter/converters/ProjectSettingsConverter.java b/src/main/java/com/epam/ta/reportportal/ws/converter/converters/ProjectSettingsConverter.java index b3e80010bb..de7bb005bc 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/converter/converters/ProjectSettingsConverter.java +++ b/src/main/java/com/epam/ta/reportportal/ws/converter/converters/ProjectSettingsConverter.java @@ -49,10 +49,12 @@ private ProjectSettingsConverter() { resource.setLaunchesQuantity(project.getLaunchesQuantity()); resource.setProjectId(project.getId()); resource.setProjectName(project.getName()); + resource.setProjectKey(project.getProjectKey()); + resource.setProjectSlug(project.getProjectSlug()); resource.setCreationDate(EntityUtils.TO_DATE.apply(project.getCreationDate())); resource.setLastRun(ofNullable(project.getLastRun()).map(EntityUtils.TO_DATE).orElse(null)); resource.setEntryType(project.getProjectType()); - resource.setOrganization(project.getOrganization()); + resource.setOrganization(project.getOrganizationSlug()); return resource; }; diff --git a/src/main/java/com/epam/ta/reportportal/ws/converter/converters/UserConverter.java b/src/main/java/com/epam/ta/reportportal/ws/converter/converters/UserConverter.java index 155a42d2fa..58f886faeb 100644 --- a/src/main/java/com/epam/ta/reportportal/ws/converter/converters/UserConverter.java +++ b/src/main/java/com/epam/ta/reportportal/ws/converter/converters/UserConverter.java @@ -17,6 +17,7 @@ package com.epam.ta.reportportal.ws.converter.converters; import com.epam.ta.reportportal.commons.MoreCollectors; +import com.epam.ta.reportportal.entity.organization.OrganizationUser; import com.epam.ta.reportportal.entity.user.ProjectUser; import com.epam.ta.reportportal.entity.user.User; import com.epam.ta.reportportal.entity.user.UserType; @@ -29,6 +30,8 @@ import java.util.Map; import java.util.function.BiFunction; import java.util.function.Function; +import java.util.stream.Collectors; +import org.apache.commons.collections.CollectionUtils; /** * Converts user from database to resource @@ -50,21 +53,41 @@ private UserConverter() { resource.setFullName(user.getFullName()); resource.setAccountType(user.getUserType().toString()); resource.setUserRole(user.getRole().toString()); - resource.setIsLoaded(UserType.UPSA != user.getUserType()); + resource.setLoaded(UserType.UPSA != user.getUserType()); resource.setMetadata(user.getMetadata().getMetadata()); - if (null != user.getProjects()) { + if (CollectionUtils.isNotEmpty(user.getProjects())) { List<ProjectUser> projects = Lists.newArrayList(user.getProjects()); projects.sort(Comparator.comparing(compare -> compare.getProject().getName())); Map<String, UserResource.AssignedProject> userProjects = user.getProjects().stream() - .collect(MoreCollectors.toLinkedMap(p -> p.getProject().getName(), p -> { + .collect(MoreCollectors.toLinkedMap(p -> p.getProject().getKey(), p -> { UserResource.AssignedProject assignedProject = new UserResource.AssignedProject(); assignedProject.setEntryType(p.getProject().getProjectType().name()); assignedProject.setProjectRole(p.getProjectRole().toString()); + assignedProject.setProjectKey(p.getProject().getKey()); + assignedProject.setProjectName(p.getProject().getName()); + assignedProject.setProjectSlug(p.getProject().getSlug()); + assignedProject.setOrganizationId(p.getProject().getOrganization().getId()); return assignedProject; })); resource.setAssignedProjects(userProjects); } + + if (CollectionUtils.isNotEmpty(user.getOrganizationUser())) { + List<OrganizationUser> orgUsers = Lists.newArrayList(user.getOrganizationUser()); + Map<String, UserResource.AssignedOrganization> userOrganization = orgUsers + .stream() + .collect(Collectors.toMap(orgUser -> orgUser.getOrganization().getSlug(), + orgUser -> { + UserResource.AssignedOrganization assignedOrganization = new UserResource.AssignedOrganization(); + assignedOrganization.setOrganizationId(orgUser.getOrganization().getId()); + assignedOrganization.setOrganizationName(orgUser.getOrganization().getName()); + assignedOrganization.setOrganizationRole(orgUser.getOrganizationRole().name()); + return assignedOrganization; + })); + resource.setAssignedOrganizations(userOrganization); + } + return resource; }; diff --git a/src/main/resources/application-elastic.yaml b/src/main/resources/application-elastic.yaml index 359c09f7a8..8e7bba8cf1 100644 --- a/src/main/resources/application-elastic.yaml +++ b/src/main/resources/application-elastic.yaml @@ -1,5 +1,5 @@ rp: - elasticsearchLogmessage: + searchengine: host: elasticsearch port: 9200 username: diff --git a/src/test/java/com/epam/ta/reportportal/OrganizationUtil.java b/src/test/java/com/epam/ta/reportportal/OrganizationUtil.java new file mode 100644 index 0000000000..5bf78ba624 --- /dev/null +++ b/src/test/java/com/epam/ta/reportportal/OrganizationUtil.java @@ -0,0 +1,44 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal; + +import com.epam.ta.reportportal.entity.enums.OrganizationType; +import com.epam.ta.reportportal.entity.organization.Organization; +import java.time.LocalDateTime; + +/** + * @author Siarhei Hrabko + */ +public class OrganizationUtil { + + public static final String TEST_ORG_NAME = "Org Name"; + public static final String TEST_PROJECT_NAME = "project Name"; + + public static final Long TEST_ORG_ID = 1L; + public static final String TEST_ORG_SLUG = "o-slug"; + public static final String TEST_PROJECT_SLUG = "project-name"; + public static final String TEST_PROJECT_KEY = TEST_ORG_SLUG + "-" + TEST_PROJECT_SLUG; + public static final Organization TEST_ORG = new Organization(TEST_ORG_ID, + LocalDateTime.now(), + TEST_ORG_NAME, + OrganizationType.INTERNAL, + TEST_ORG_SLUG); + + private OrganizationUtil() { + } + +} diff --git a/src/test/java/com/epam/ta/reportportal/ReportPortalUserUtil.java b/src/test/java/com/epam/ta/reportportal/ReportPortalUserUtil.java index 1b72d998e8..ab64677c13 100644 --- a/src/test/java/com/epam/ta/reportportal/ReportPortalUserUtil.java +++ b/src/test/java/com/epam/ta/reportportal/ReportPortalUserUtil.java @@ -28,8 +28,6 @@ */ public class ReportPortalUserUtil { - public static final String TEST_PROJECT_NAME = "test_project"; - private ReportPortalUserUtil() { //static only } @@ -43,9 +41,10 @@ public static ReportPortalUser getRpUser(String login, UserRole userRole, Projec .withUserId(1L) .withEmail("test@email.com") .withUserRole(userRole) - .withProjectDetails(Maps.newHashMap("test_project", - new ReportPortalUser.ProjectDetails(projectId, TEST_PROJECT_NAME, projectRole) + .withProjectDetails(Maps.newHashMap("o-slug-project-name", + new ReportPortalUser.ProjectDetails(projectId, "project Name", projectRole, + "o-slug-project-name") )) .build(); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/analyzer/auto/impl/SearchLogServiceImplTest.java b/src/test/java/com/epam/ta/reportportal/core/analyzer/auto/impl/SearchLogServiceImplTest.java index a5499d564f..0bf5d3dd71 100644 --- a/src/test/java/com/epam/ta/reportportal/core/analyzer/auto/impl/SearchLogServiceImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/analyzer/auto/impl/SearchLogServiceImplTest.java @@ -89,7 +89,7 @@ class SearchLogServiceImplTest { void searchTest() { ReportPortalUser.ProjectDetails projectDetails = - new ReportPortalUser.ProjectDetails(1L, "project", ProjectRole.PROJECT_MANAGER); + new ReportPortalUser.ProjectDetails(1L, "project", ProjectRole.PROJECT_MANAGER, "project-key"); when(projectRepository.findById(projectDetails.getProjectId())).thenReturn( Optional.of(project)); @@ -146,4 +146,4 @@ void searchTest() { Assertions.assertEquals(1, Lists.newArrayList(responses).size()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/analyzer/auto/impl/SuggestItemServiceTest.java b/src/test/java/com/epam/ta/reportportal/core/analyzer/auto/impl/SuggestItemServiceTest.java index 59919308c1..7d0b2018c7 100644 --- a/src/test/java/com/epam/ta/reportportal/core/analyzer/auto/impl/SuggestItemServiceTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/analyzer/auto/impl/SuggestItemServiceTest.java @@ -67,7 +67,9 @@ class SuggestItemServiceTest { @Test void suggestItems() { final ReportPortalUser rpUser = getRpUser("owner", UserRole.USER, ProjectRole.MEMBER, 1L); - final Project project = new Project(1L, "default"); + final Project project = new Project(); + project.setId(1L); + project.setKey("default"); TestItem testItem = new TestItem(); testItem.setItemId(1L); @@ -109,7 +111,9 @@ void suggestItems() { @Test void suggestRemovedItems() { final ReportPortalUser rpUser = getRpUser("owner", UserRole.USER, ProjectRole.MEMBER, 1L); - final Project project = new Project(1L, "default"); + final Project project = new Project(); + project.setId(1L); + project.setKey("default"); TestItem testItem = new TestItem(); testItem.setItemId(1L); @@ -185,7 +189,9 @@ void showThrowExceptionWhenNotFound() { @Test void suggestClusterItems() { final ReportPortalUser rpUser = getRpUser("owner", UserRole.USER, ProjectRole.MEMBER, 1L); - final Project project = new Project(1L, "default"); + final Project project = new Project(); + project.setId(1L); + project.setKey("default"); final Cluster cluster = new Cluster(); cluster.setId(1L); @@ -244,4 +250,4 @@ private TestItem getRelevantItem() { return relevantItem; } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/analyzer/strategy/LaunchAutoAnalysisStrategyTest.java b/src/test/java/com/epam/ta/reportportal/core/analyzer/strategy/LaunchAutoAnalysisStrategyTest.java index cd41b945f3..823a94660a 100644 --- a/src/test/java/com/epam/ta/reportportal/core/analyzer/strategy/LaunchAutoAnalysisStrategyTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/analyzer/strategy/LaunchAutoAnalysisStrategyTest.java @@ -71,7 +71,7 @@ void analyzeTest() { ReportPortalUser user = getRpUser("user", UserRole.USER, ProjectRole.PROJECT_MANAGER, 1L); ReportPortalUser.ProjectDetails projectDetails = - new ReportPortalUser.ProjectDetails(1L, "name", ProjectRole.PROJECT_MANAGER); + new ReportPortalUser.ProjectDetails(1L, "name", ProjectRole.PROJECT_MANAGER, "project-key"); AnalyzeLaunchRQ analyzeLaunchRQ = new AnalyzeLaunchRQ(); analyzeLaunchRQ.setLaunchId(1L); analyzeLaunchRQ.setAnalyzerHistoryMode("ALL"); @@ -88,4 +88,4 @@ void analyzeTest() { Assertions.assertEquals(Set.of(AnalyzeItemsMode.TO_INVESTIGATE), config.getAnalyzeItemsModes()); Assertions.assertEquals(user, config.getUser()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/analyzer/strategy/LaunchPatternAnalysisStrategyTest.java b/src/test/java/com/epam/ta/reportportal/core/analyzer/strategy/LaunchPatternAnalysisStrategyTest.java index 632cb83968..dc17346ac4 100644 --- a/src/test/java/com/epam/ta/reportportal/core/analyzer/strategy/LaunchPatternAnalysisStrategyTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/analyzer/strategy/LaunchPatternAnalysisStrategyTest.java @@ -72,7 +72,7 @@ void analyzeTest() { ReportPortalUser user = getRpUser("user", UserRole.USER, ProjectRole.PROJECT_MANAGER, 1L); ReportPortalUser.ProjectDetails projectDetails = - new ReportPortalUser.ProjectDetails(1L, "name", ProjectRole.PROJECT_MANAGER); + new ReportPortalUser.ProjectDetails(1L, "name", ProjectRole.PROJECT_MANAGER, "project-key"); AnalyzeLaunchRQ analyzeLaunchRQ = new AnalyzeLaunchRQ(); analyzeLaunchRQ.setLaunchId(1L); analyzeLaunchRQ.setAnalyzeItemsModes(Lists.newArrayList("TO_INVESTIGATE")); @@ -84,4 +84,4 @@ void analyzeTest() { ); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/dashboard/impl/CreateDashboardHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/dashboard/impl/CreateDashboardHandlerImplTest.java index f15009ac20..09a23883aa 100644 --- a/src/test/java/com/epam/ta/reportportal/core/dashboard/impl/CreateDashboardHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/dashboard/impl/CreateDashboardHandlerImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.dashboard.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -56,7 +57,7 @@ void createAlreadyExistDashboard() { when(dashboardRepository.existsByNameAndOwnerAndProjectId("exist", "owner", 1L)).thenReturn( true); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.createDashboard(extractProjectDetails(rpUser, "test_project"), + () -> handler.createDashboard(extractProjectDetails(rpUser, TEST_PROJECT_KEY), createDashboardRQ, rpUser ) ); @@ -64,4 +65,4 @@ void createAlreadyExistDashboard() { exception.getMessage() ); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/events/activity/IntegrationEventsTest.java b/src/test/java/com/epam/ta/reportportal/core/events/activity/IntegrationEventsTest.java index 3204b433f1..a1d7ea428c 100644 --- a/src/test/java/com/epam/ta/reportportal/core/events/activity/IntegrationEventsTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/events/activity/IntegrationEventsTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.events.activity; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.core.events.activity.ActivityTestHelper.checkActivity; import static com.epam.ta.reportportal.core.events.activity.util.ActivityDetailsUtil.NAME; @@ -85,7 +86,7 @@ private static IntegrationActivityResource getIntegration() { integration.setName("name"); integration.setProjectId(3L); integration.setTypeName("type"); - integration.setProjectName("test_project"); + integration.setProjectName(TEST_PROJECT_KEY); return integration; } @@ -96,4 +97,4 @@ void updated() { final Activity expected = getExpectedActivity(EventAction.UPDATE); checkActivity(expected, actual); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/events/activity/ProjectConfigEventTest.java b/src/test/java/com/epam/ta/reportportal/core/events/activity/ProjectConfigEventTest.java index 6afd0f1282..f8eedf117f 100644 --- a/src/test/java/com/epam/ta/reportportal/core/events/activity/ProjectConfigEventTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/events/activity/ProjectConfigEventTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.events.activity; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.core.events.activity.ActivityTestHelper.checkActivity; import com.epam.ta.reportportal.entity.activity.Activity; @@ -89,7 +90,7 @@ void analyzerConfigUpdate() { private static ProjectAttributesActivityResource getProjectAttributes( Map<String, String> config) { ProjectAttributesActivityResource resource = new ProjectAttributesActivityResource(); - resource.setProjectName("test_project"); + resource.setProjectName(TEST_PROJECT_KEY); resource.setProjectId(3L); resource.setConfig(config); return resource; @@ -130,7 +131,7 @@ void projectConfigUpdate() { expected.getDetails() .setHistory(getProjectConfigHistory(KEEP_LOGS, KEEP_SCREENSHOTS, INTERRUPT_JOB_TIME)); expected.setEventName("updateProject"); - expected.setObjectName("test_project"); + expected.setObjectName(TEST_PROJECT_KEY); checkActivity(expected, actual); } diff --git a/src/test/java/com/epam/ta/reportportal/core/events/activity/ProjectIndexEventTest.java b/src/test/java/com/epam/ta/reportportal/core/events/activity/ProjectIndexEventTest.java index c8e7f4d3a9..899fd9ec44 100644 --- a/src/test/java/com/epam/ta/reportportal/core/events/activity/ProjectIndexEventTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/events/activity/ProjectIndexEventTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.events.activity; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.core.events.activity.ActivityTestHelper.checkActivity; import com.epam.ta.reportportal.entity.activity.Activity; @@ -53,7 +54,7 @@ private static Activity getExpectedActivity(EventAction action, boolean indexing @Test void generate() { final boolean indexing = true; - final Activity actual = new ProjectIndexEvent(1L, "user", 3L, "test_project", + final Activity actual = new ProjectIndexEvent(1L, "user", 3L, TEST_PROJECT_KEY, indexing).toActivity(); final Activity expected = getExpectedActivity(EventAction.GENERATE, indexing); checkActivity(expected, actual); @@ -62,9 +63,9 @@ void generate() { @Test void delete() { final boolean indexing = false; - final Activity actual = new ProjectIndexEvent(1L, "user", 3L, "test_project", + final Activity actual = new ProjectIndexEvent(1L, "user", 3L, TEST_PROJECT_KEY, indexing).toActivity(); final Activity expected = getExpectedActivity(EventAction.DELETE, indexing); checkActivity(expected, actual); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/filter/impl/UpdateUserFilterHandlerTest.java b/src/test/java/com/epam/ta/reportportal/core/filter/impl/UpdateUserFilterHandlerTest.java index 16dabc47b5..7f55a0b962 100644 --- a/src/test/java/com/epam/ta/reportportal/core/filter/impl/UpdateUserFilterHandlerTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/filter/impl/UpdateUserFilterHandlerTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.filter.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.commons.querygen.constant.GeneralCriteriaConstant.CRITERIA_NAME; import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; @@ -82,7 +83,7 @@ void updateUserFilterWithTheSameName() { UpdateUserFilterRQ updateUserFilterRQ = getUpdateRequest(SAME_NAME); - ReportPortalUser.ProjectDetails projectDetails = extractProjectDetails(rpUser, "test_project"); + ReportPortalUser.ProjectDetails projectDetails = extractProjectDetails(rpUser, TEST_PROJECT_KEY); when(userFilterRepository.findByIdAndProjectId(1L, projectDetails.getProjectId())).thenReturn( Optional.of(userFilter)); @@ -110,7 +111,7 @@ void updateUserFilterWithAnotherNamePositive() { UpdateUserFilterRQ updateUserFilterRQ = getUpdateRequest(ANOTHER_NAME); - ReportPortalUser.ProjectDetails projectDetails = extractProjectDetails(rpUser, "test_project"); + ReportPortalUser.ProjectDetails projectDetails = extractProjectDetails(rpUser, TEST_PROJECT_KEY); when(userFilterRepository.findByIdAndProjectId(1L, projectDetails.getProjectId())).thenReturn( Optional.of(userFilter)); @@ -142,7 +143,7 @@ void updateUserFilterWithAnotherNameNegative() { UpdateUserFilterRQ updateUserFilterRQ = getUpdateRequest(ANOTHER_NAME); - ReportPortalUser.ProjectDetails projectDetails = extractProjectDetails(rpUser, "test_project"); + ReportPortalUser.ProjectDetails projectDetails = extractProjectDetails(rpUser, TEST_PROJECT_KEY); when(userFilterRepository.findByIdAndProjectId(1L, projectDetails.getProjectId())).thenReturn( Optional.of(userFilter)); @@ -187,4 +188,4 @@ private UpdateUserFilterRQ getUpdateRequest(String name) { return updateUserFilterRQ; } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/hierarchy/impl/FinishLaunchHierarchyHandlerTest.java b/src/test/java/com/epam/ta/reportportal/core/hierarchy/impl/FinishLaunchHierarchyHandlerTest.java index b2b191e199..646fb328dd 100644 --- a/src/test/java/com/epam/ta/reportportal/core/hierarchy/impl/FinishLaunchHierarchyHandlerTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/hierarchy/impl/FinishLaunchHierarchyHandlerTest.java @@ -1,6 +1,6 @@ package com.epam.ta.reportportal.core.hierarchy.impl; -import static com.epam.ta.reportportal.ReportPortalUserUtil.TEST_PROJECT_NAME; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.core.item.impl.status.ToSkippedStatusChangingStrategy.SKIPPED_ISSUE_KEY; import static org.mockito.ArgumentMatchers.any; @@ -101,7 +101,7 @@ void finishWithPassedStatus() { StatusEnum.PASSED, endTime, rpUser, - rpUser.getProjectDetails().get(TEST_PROJECT_NAME) + rpUser.getProjectDetails().get(TEST_PROJECT_KEY) ); verify(changeStatusHandler, times(2)).changeParentStatus(any(TestItem.class), any(), any()); @@ -148,7 +148,7 @@ void finishWithSkippedStatus() { StatusEnum.SKIPPED, endTime, rpUser, - rpUser.getProjectDetails().get(TEST_PROJECT_NAME) + rpUser.getProjectDetails().get(TEST_PROJECT_KEY) ); verify(changeStatusHandler, times(2)).changeParentStatus(any(TestItem.class), any(), any()); @@ -229,4 +229,4 @@ private List<TestItem> getTestItemsWithoutChildren(Launch launch) { return Lists.newArrayList(firstChild, secondChild); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/integration/impl/DeleteIntegrationHandlerTest.java b/src/test/java/com/epam/ta/reportportal/core/integration/impl/DeleteIntegrationHandlerTest.java index 37bd0e11a9..284b01c30b 100644 --- a/src/test/java/com/epam/ta/reportportal/core/integration/impl/DeleteIntegrationHandlerTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/integration/impl/DeleteIntegrationHandlerTest.java @@ -16,10 +16,21 @@ package com.epam.ta.reportportal.core.integration.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_NAME; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.Mockito.anyLong; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import com.epam.ta.reportportal.ReportPortalUserUtil; import com.epam.ta.reportportal.commons.ReportPortalUser; import com.epam.ta.reportportal.commons.validation.Suppliers; -import com.epam.ta.reportportal.core.events.MessageBus; import com.epam.ta.reportportal.core.integration.DeleteIntegrationHandler; import com.epam.ta.reportportal.core.integration.impl.util.IntegrationTestUtil; import com.epam.ta.reportportal.dao.IntegrationRepository; @@ -30,16 +41,10 @@ import com.epam.ta.reportportal.entity.user.UserRole; import com.epam.ta.reportportal.ws.model.OperationCompletionRS; import com.google.common.collect.Lists; -import org.junit.jupiter.api.Test; - import java.util.Optional; +import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationEventPublisher; -import static com.epam.ta.reportportal.ReportPortalUserUtil.TEST_PROJECT_NAME; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.mockito.Mockito.*; - /** * @author <a href="mailto:ivan_budayeu@epam.com">Ivan Budayeu</a> */ @@ -114,6 +119,7 @@ void deleteProjectIntegration() { Project project = new Project(); project.setId(projectId); project.setName(TEST_PROJECT_NAME); + project.setKey(TEST_PROJECT_KEY); final ReportPortalUser user = ReportPortalUserUtil.getRpUser("admin", UserRole.ADMINISTRATOR, @@ -121,7 +127,7 @@ void deleteProjectIntegration() { projectId ); - when(projectRepository.findByName(TEST_PROJECT_NAME)).thenReturn(Optional.of(project)); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.of(project)); when(integrationRepository.findByIdAndProjectId(emailIntegrationId, projectId @@ -130,7 +136,7 @@ void deleteProjectIntegration() { doNothing().when(integrationRepository).deleteById(emailIntegrationId); OperationCompletionRS operationCompletionRS = deleteIntegrationHandler.deleteProjectIntegration(emailIntegrationId, - TEST_PROJECT_NAME, + TEST_PROJECT_KEY, user ); @@ -149,6 +155,7 @@ void deleteProjectIntegrations() { Project project = new Project(); project.setId(projectId); project.setName(TEST_PROJECT_NAME); + project.setKey(TEST_PROJECT_KEY); final ReportPortalUser user = ReportPortalUserUtil.getRpUser("admin", UserRole.ADMINISTRATOR, @@ -156,7 +163,7 @@ void deleteProjectIntegrations() { projectId ); - when(projectRepository.findByName(TEST_PROJECT_NAME)).thenReturn(Optional.of(project)); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.of(project)); when(integrationRepository.findAllByProjectIdOrderByCreationDateDesc(projectId)).thenReturn(Lists.newArrayList(IntegrationTestUtil.getProjectEmailIntegration(emailIntegrationId, projectId @@ -165,17 +172,17 @@ void deleteProjectIntegrations() { when(integrationTypeRepository.findByName(anyString())).thenReturn(Optional.ofNullable(IntegrationTestUtil.getEmailIntegrationType())); OperationCompletionRS operationCompletionRS = deleteIntegrationHandler.deleteProjectIntegrationsByType("EMAIL", - TEST_PROJECT_NAME, + TEST_PROJECT_KEY, user ); verify(integrationRepository, times(1)).deleteAllByProjectIdAndIntegrationTypeId(anyLong(), anyLong()); assertNotNull(operationCompletionRS); assertEquals( - "All integrations with type ='EMAIL' for project with name ='test_project' have been successfully deleted", + "All integrations with type ='EMAIL' for project with name ='project Name' have been successfully deleted", operationCompletionRS.getResultMessage() ); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/integration/impl/GetIntegrationHandlerTest.java b/src/test/java/com/epam/ta/reportportal/core/integration/impl/GetIntegrationHandlerTest.java index 0c7669068f..f51b2937d6 100644 --- a/src/test/java/com/epam/ta/reportportal/core/integration/impl/GetIntegrationHandlerTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/integration/impl/GetIntegrationHandlerTest.java @@ -16,7 +16,8 @@ package com.epam.ta.reportportal.core.integration.impl; -import static com.epam.ta.reportportal.ReportPortalUserUtil.TEST_PROJECT_NAME; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_NAME; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; @@ -65,14 +66,15 @@ void getProjectIntegrationById() { Project project = new Project(); project.setId(projectId); project.setName(TEST_PROJECT_NAME); + project.setKey(TEST_PROJECT_KEY); - when(projectRepository.findByName(TEST_PROJECT_NAME)).thenReturn(Optional.of(project)); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.of(project)); when(integrationRepository.findByIdAndProjectId(emailIntegrationId, projectId)).thenReturn( Optional.of(IntegrationTestUtil.getProjectEmailIntegration(emailIntegrationId, projectId))); IntegrationResource integrationResource = - getIntegrationHandler.getProjectIntegrationById(emailIntegrationId, TEST_PROJECT_NAME); + getIntegrationHandler.getProjectIntegrationById(emailIntegrationId, TEST_PROJECT_KEY); assertNotNull(integrationResource); assertEquals(emailIntegrationId, (long) integrationResource.getId()); @@ -101,4 +103,4 @@ void getGlobalIntegrationById() { assertNotNull(integrationResource.getIntegrationParams()); assertNotNull(integrationResource.getIntegrationType()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/item/impl/DeleteTestItemHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/item/impl/DeleteTestItemHandlerImplTest.java index c5ec0b630e..bcd7b7d147 100644 --- a/src/test/java/com/epam/ta/reportportal/core/item/impl/DeleteTestItemHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/item/impl/DeleteTestItemHandlerImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.item.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -93,7 +94,7 @@ void testItemNotFound() { when(testItemRepository.findById(1L)).thenReturn(Optional.empty()); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.deleteTestItem(1L, extractProjectDetails(rpUser, "test_project"), rpUser) + () -> handler.deleteTestItem(1L, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser) ); assertEquals("Test Item '1' not found. Did you use correct Test Item ID?", exception.getMessage()); @@ -116,7 +117,7 @@ void deleteInProgressItem() { ))); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.deleteTestItem(1L, extractProjectDetails(rpUser, "test_project"), rpUser) + () -> handler.deleteTestItem(1L, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser) ); assertEquals( "Unable to perform operation for non-finished test item. Unable to delete test item ['1'] in progress state", @@ -138,7 +139,7 @@ void deleteTestItemWithInProgressLaunch() { Optional.of(getTestItem(StatusEnum.PASSED, StatusEnum.IN_PROGRESS, 1L, "test"))); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.deleteTestItem(1L, extractProjectDetails(rpUser, "test_project"), rpUser) + () -> handler.deleteTestItem(1L, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser) ); assertEquals( "Unable to perform operation for non-finished launch. Unable to delete test item ['1'] under launch ['null'] with 'In progress' state", @@ -160,7 +161,7 @@ void deleteTestItemFromAnotherProject() { Optional.of(getTestItem(StatusEnum.PASSED, StatusEnum.FAILED, 2L, "test"))); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.deleteTestItem(1L, extractProjectDetails(rpUser, "test_project"), rpUser) + () -> handler.deleteTestItem(1L, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser) ); assertEquals("Forbidden operation. Deleting testItem '1' is not under specified project '1'", exception.getMessage()); @@ -181,7 +182,7 @@ void deleteNotOwnTestItem() { when(launchRepository.findById(any(Long.class))).thenReturn(Optional.of(launch)); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.deleteTestItem(1L, extractProjectDetails(rpUser, "test_project"), rpUser) + () -> handler.deleteTestItem(1L, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser) ); assertEquals("You do not have enough permissions. You are not a launch owner.", exception.getMessage()); @@ -212,7 +213,7 @@ void deleteTestItemWithParent() { when(testItemRepository.hasChildren(parent.getItemId(), parent.getPath())).thenReturn(false); when(launchRepository.hasRetries(any())).thenReturn(false); when(attachmentRepository.moveForDeletionByItems(any(Collection.class))).thenReturn(1); - handler.deleteTestItem(1L, extractProjectDetails(rpUser, "test_project"), rpUser); + handler.deleteTestItem(1L, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser); verify(itemContentRemover, times(1)).remove(anyLong()); assertFalse(parent.isHasChildren()); @@ -232,7 +233,7 @@ void deleteItemPositive() { when(launchRepository.findById(any(Long.class))).thenReturn(Optional.of(launch)); OperationCompletionRS response = handler.deleteTestItem(1L, - extractProjectDetails(rpUser, "test_project"), rpUser); + extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser); verify(itemContentRemover, times(1)).remove(anyLong()); assertEquals("Test Item with ID = '1' has been successfully deleted.", @@ -258,4 +259,4 @@ private TestItem getTestItem(StatusEnum itemStatus, StatusEnum launchStatus, Lon item.setLaunchId(launch.getId()); return item; } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/item/impl/FinishTestItemHandlerAsyncImplTest.java b/src/test/java/com/epam/ta/reportportal/core/item/impl/FinishTestItemHandlerAsyncImplTest.java index 33f8e82dc5..666923bc1d 100644 --- a/src/test/java/com/epam/ta/reportportal/core/item/impl/FinishTestItemHandlerAsyncImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/item/impl/FinishTestItemHandlerAsyncImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.item.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -59,7 +60,7 @@ void finishTestItem() { ReportPortalUser user = getRpUser("test", UserRole.ADMINISTRATOR, ProjectRole.PROJECT_MANAGER, 1L); - finishTestItemHandlerAsync.finishTestItem(user, user.getProjectDetails().get("test_project"), + finishTestItemHandlerAsync.finishTestItem(user, user.getProjectDetails().get(TEST_PROJECT_KEY), "123", request); verify(amqpTemplate).convertAndSend(any(), any(), any(), any()); verify(reportingQueueService).getReportingQueueKey(any()); @@ -74,11 +75,11 @@ void finishTestItemWithoutLaunchUuid() { ReportPortalException exception = assertThrows( ReportPortalException.class, () -> finishTestItemHandlerAsync.finishTestItem(user, - user.getProjectDetails().get("test_project"), "123", request) + user.getProjectDetails().get(TEST_PROJECT_KEY), "123", request) ); assertEquals( "Error in handled Request. Please, check specified parameters: 'Launch UUID should not be null or empty.'", exception.getMessage() ); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/item/impl/FinishTestItemHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/item/impl/FinishTestItemHandlerImplTest.java index 6f7c209483..4f3123fa73 100644 --- a/src/test/java/com/epam/ta/reportportal/core/item/impl/FinishTestItemHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/item/impl/FinishTestItemHandlerImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.item.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -95,7 +96,7 @@ void finishNotExistedTestItem() { final ReportPortalUser rpUser = getRpUser("test", UserRole.USER, ProjectRole.MEMBER, 1L); when(repository.findByUuid("1")).thenReturn(Optional.empty()); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.finishTestItem(rpUser, extractProjectDetails(rpUser, "test_project"), "1", + () -> handler.finishTestItem(rpUser, extractProjectDetails(rpUser, TEST_PROJECT_KEY), "1", new FinishTestItemRQ() ) ); @@ -115,7 +116,7 @@ void finishTestItemUnderNotExistedLaunch() { when(repository.findByUuid("1")).thenReturn(Optional.of(item)); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.finishTestItem(rpUser, extractProjectDetails(rpUser, "test_project"), "1", + () -> handler.finishTestItem(rpUser, extractProjectDetails(rpUser, TEST_PROJECT_KEY), "1", new FinishTestItemRQ() ) ); @@ -144,7 +145,7 @@ void finishTestItemByNotLaunchOwner() { when(launchRepository.findById(any())).thenReturn(Optional.of(launch)); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.finishTestItem(rpUser, extractProjectDetails(rpUser, "test_project"), "1", + () -> handler.finishTestItem(rpUser, extractProjectDetails(rpUser, TEST_PROJECT_KEY), "1", new FinishTestItemRQ() ) ); @@ -171,7 +172,7 @@ void finishStepItemWithoutProvidedStatus() { when(launchRepository.findById(any())).thenReturn(Optional.of(launch)); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.finishTestItem(rpUser, extractProjectDetails(rpUser, "test_project"), "1", + () -> handler.finishTestItem(rpUser, extractProjectDetails(rpUser, TEST_PROJECT_KEY), "1", new FinishTestItemRQ() ) ); @@ -219,7 +220,7 @@ void updateFinishedItemTest() { finishExecutionRQ.setEndTime(new Date()); OperationCompletionRS operationCompletionRS = - handler.finishTestItem(rpUser, extractProjectDetails(rpUser, "test_project"), "1", + handler.finishTestItem(rpUser, extractProjectDetails(rpUser, TEST_PROJECT_KEY), "1", finishExecutionRQ ); @@ -228,4 +229,4 @@ void updateFinishedItemTest() { verify(messageBus, times(1)).publishActivity(any()); verify(eventPublisher, times(1)).publishEvent(any(IssueResolvedEvent.class)); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/item/impl/GetTestItemHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/item/impl/GetTestItemHandlerImplTest.java index f1348bf95a..b68e67cb0c 100644 --- a/src/test/java/com/epam/ta/reportportal/core/item/impl/GetTestItemHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/item/impl/GetTestItemHandlerImplTest.java @@ -16,6 +16,15 @@ package com.epam.ta.reportportal.core.item.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; +import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; +import static com.epam.ta.reportportal.commons.querygen.constant.LogCriteriaConstant.CRITERIA_TEST_ITEM_ID; +import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.when; + import com.epam.ta.reportportal.commons.ReportPortalUser; import com.epam.ta.reportportal.commons.querygen.Condition; import com.epam.ta.reportportal.commons.querygen.Filter; @@ -32,6 +41,7 @@ import com.epam.ta.reportportal.entity.user.UserRole; import com.epam.ta.reportportal.exception.ReportPortalException; import com.epam.ta.reportportal.ws.model.ErrorType; +import java.util.Optional; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.function.Executable; @@ -40,16 +50,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.data.domain.PageRequest; -import java.util.Optional; - -import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; -import static com.epam.ta.reportportal.commons.querygen.constant.LogCriteriaConstant.CRITERIA_TEST_ITEM_ID; -import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.when; - /** * @author <a href="mailto:ihar_kahadouski@epam.com">Ihar Kahadouski</a> */ @@ -77,7 +77,7 @@ void TestItemNotFound() { when(testItemRepository.findById(1L)).thenReturn(Optional.empty()); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getTestItem("1", extractProjectDetails(rpUser, "test_project"), rpUser) + () -> handler.getTestItem("1", extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser) ); assertEquals("Test Item '1' not found. Did you use correct Test Item ID?", exception.getMessage()); } @@ -94,10 +94,10 @@ void getTestItemUnderNotExistedLaunch() { when(testItemService.getEffectiveLaunch(item)).thenReturn(launch); doThrow(new ReportPortalException("Launch '1' not found. Did you use correct Launch ID?")).when(launchAccessValidator) - .validate(launch.getId(), extractProjectDetails(rpUser, "test_project"), rpUser); + .validate(launch.getId(), extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getTestItem("1", extractProjectDetails(rpUser, "test_project"), rpUser) + () -> handler.getTestItem("1", extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser) ); assertEquals("Launch '1' not found. Did you use correct Launch ID?", exception.getMessage()); } @@ -116,10 +116,10 @@ void getTestItemFromAnotherProject() { doThrow(new ReportPortalException( "Forbidden operation. Specified launch with id '1' not referenced to specified project with id '1'")).when( - launchAccessValidator).validate(launch.getId(), extractProjectDetails(rpUser, "test_project"), rpUser); + launchAccessValidator).validate(launch.getId(), extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getTestItem("1", extractProjectDetails(rpUser, "test_project"), rpUser) + () -> handler.getTestItem("1", extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser) ); assertEquals("Forbidden operation. Specified launch with id '1' not referenced to specified project with id '1'", exception.getMessage() @@ -135,7 +135,7 @@ void getTestItemsUnderNotExistedLaunch() { launch.setId(1L); item.setLaunchId(launch.getId()); doThrow(new ReportPortalException("Launch '1' not found. Did you use correct Launch ID?")).when(launchAccessValidator) - .validate(item.getLaunchId(), extractProjectDetails(rpUser, "test_project"), rpUser); + .validate(item.getLaunchId(), extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser); final Executable executable = () -> handler.getTestItems(Filter.builder() .withTarget(TestItem.class) .withCondition(FilterCondition.builder() @@ -143,7 +143,7 @@ void getTestItemsUnderNotExistedLaunch() { .withValue("100") .withCondition(Condition.EQUALS) .build()) - .build(), PageRequest.of(0, 10), extractProjectDetails(rpUser, "test_project"), rpUser, 1L, null, false, 0); + .build(), PageRequest.of(0, 10), extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser, 1L, null, false, 0); final ReportPortalException exception = assertThrows(ReportPortalException.class, executable); assertEquals("Launch '1' not found. Did you use correct Launch ID?", exception.getMessage()); @@ -160,7 +160,7 @@ public void getTestItemUnderAnotherProject() { item.setLaunchId(launch.getId()); doThrow(new ReportPortalException( "Forbidden operation. Specified launch with id '1' not referenced to specified project with id '1'")).when( - launchAccessValidator).validate(item.getLaunchId(), extractProjectDetails(rpUser, "test_project"), rpUser); + launchAccessValidator).validate(item.getLaunchId(), extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser); final Executable executable = () -> handler.getTestItems(Filter.builder() .withTarget(TestItem.class) @@ -169,7 +169,7 @@ public void getTestItemUnderAnotherProject() { .withValue("100") .withCondition(Condition.EQUALS) .build()) - .build(), PageRequest.of(0, 10), extractProjectDetails(rpUser, "test_project"), rpUser, 1L, null, false, 0); + .build(), PageRequest.of(0, 10), extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser, 1L, null, false, 0); final ReportPortalException exception = assertThrows(ReportPortalException.class, executable); assertEquals("Forbidden operation. Specified launch with id '1' not referenced to specified project with id '1'", @@ -191,10 +191,10 @@ void getItemByOperator() { when(testItemRepository.findById(1L)).thenReturn(Optional.of(item)); when(testItemService.getEffectiveLaunch(item)).thenReturn(launch); doThrow(new ReportPortalException("You do not have enough permissions.")).when(launchAccessValidator) - .validate(launch.getId(), extractProjectDetails(operator, "test_project"), operator); + .validate(launch.getId(), extractProjectDetails(operator, TEST_PROJECT_KEY), operator); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getTestItem("1", extractProjectDetails(operator, "test_project"), operator) + () -> handler.getTestItem("1", extractProjectDetails(operator, TEST_PROJECT_KEY), operator) ); assertEquals("You do not have enough permissions.", exception.getMessage()); } @@ -210,8 +210,8 @@ public void getItemsForNonExistingFilter() { item.setLaunchId(launch.getId()); when(userFilterRepository.findByIdAndProjectId( 1L, - extractProjectDetails(rpUser, "test_project").getProjectId() - )).thenThrow(new ReportPortalException(ErrorType.USER_FILTER_NOT_FOUND_IN_PROJECT, 1L, "test_project")); + extractProjectDetails(rpUser, TEST_PROJECT_KEY).getProjectId() + )).thenThrow(new ReportPortalException(ErrorType.USER_FILTER_NOT_FOUND_IN_PROJECT, 1L, TEST_PROJECT_KEY)); final Executable executable = () -> handler.getTestItems(Filter.builder() .withTarget(TestItem.class) @@ -220,10 +220,10 @@ public void getItemsForNonExistingFilter() { .withValue("100") .withCondition(Condition.EQUALS) .build()) - .build(), PageRequest.of(0, 10), extractProjectDetails(rpUser, "test_project"), rpUser, null, 1L, false, 0); + .build(), PageRequest.of(0, 10), extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser, null, 1L, false, 0); final ReportPortalException exception = assertThrows(ReportPortalException.class, executable); - assertEquals("User filter with ID '1' not found on project 'test_project'. Did you use correct User Filter ID?", + assertEquals("User filter with ID '1' not found on project 'o-slug-project-name'. Did you use correct User Filter ID?", exception.getMessage() ); } @@ -239,7 +239,7 @@ public void getItemsForIncorrectTargetClass() { item.setLaunchId(launch.getId()); UserFilter filter = new UserFilter(); filter.setTargetClass(ObjectType.TestItem); - when(userFilterRepository.findByIdAndProjectId(1L, extractProjectDetails(rpUser, "test_project").getProjectId())).thenReturn( + when(userFilterRepository.findByIdAndProjectId(1L, extractProjectDetails(rpUser, TEST_PROJECT_KEY).getProjectId())).thenReturn( Optional.of(filter)); final Executable executable = () -> handler.getTestItems(Filter.builder() @@ -249,7 +249,7 @@ public void getItemsForIncorrectTargetClass() { .withValue("100") .withCondition(Condition.EQUALS) .build()) - .build(), PageRequest.of(0, 10), extractProjectDetails(rpUser, "test_project"), rpUser, null, 1L, false, 0); + .build(), PageRequest.of(0, 10), extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser, null, 1L, false, 0); final ReportPortalException exception = assertThrows(ReportPortalException.class, executable); assertEquals( @@ -269,7 +269,7 @@ public void getItemsForIncorrectLaunchesLimit() { item.setLaunchId(launch.getId()); UserFilter filter = new UserFilter(); filter.setTargetClass(ObjectType.Launch); - when(userFilterRepository.findByIdAndProjectId(1L, extractProjectDetails(rpUser, "test_project").getProjectId())).thenReturn( + when(userFilterRepository.findByIdAndProjectId(1L, extractProjectDetails(rpUser, TEST_PROJECT_KEY).getProjectId())).thenReturn( Optional.of(filter)); final Executable executable = () -> handler.getTestItems(Filter.builder() @@ -279,11 +279,11 @@ public void getItemsForIncorrectLaunchesLimit() { .withValue("100") .withCondition(Condition.EQUALS) .build()) - .build(), PageRequest.of(0, 10), extractProjectDetails(rpUser, "test_project"), rpUser, null, 1L, false, 0); + .build(), PageRequest.of(0, 10), extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser, null, 1L, false, 0); final ReportPortalException exception = assertThrows(ReportPortalException.class, executable); assertEquals("Error in handled Request. Please, check specified parameters: 'Launches limit should be greater than 0'", exception.getMessage() ); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/item/impl/LaunchAccessValidatorImplTest.java b/src/test/java/com/epam/ta/reportportal/core/item/impl/LaunchAccessValidatorImplTest.java index 429b0271d9..001cf60930 100644 --- a/src/test/java/com/epam/ta/reportportal/core/item/impl/LaunchAccessValidatorImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/item/impl/LaunchAccessValidatorImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.item.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -59,7 +60,7 @@ void validateNotExistingLaunch() { when(launchRepository.findById(1L)).thenReturn(Optional.empty()); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> launchAccessValidator.validate(1L, extractProjectDetails(rpUser, "test_project"), + () -> launchAccessValidator.validate(1L, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser) ); assertEquals("Launch '1' not found. Did you use correct Launch ID?", exception.getMessage()); @@ -77,7 +78,7 @@ void validateLaunchUnderAnotherProject() { when(launchRepository.findById(1L)).thenReturn(Optional.of(launch)); final Executable executable = () -> launchAccessValidator.validate(1L, - extractProjectDetails(rpUser, "test_project"), rpUser); + extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser); final ReportPortalException exception = assertThrows(ReportPortalException.class, executable); assertEquals( @@ -98,9 +99,9 @@ void validateLaunchWithOperatorRole() { when(launchRepository.findById(1L)).thenReturn(Optional.of(launch)); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> launchAccessValidator.validate(1L, extractProjectDetails(operator, "test_project"), + () -> launchAccessValidator.validate(1L, extractProjectDetails(operator, TEST_PROJECT_KEY), operator) ); assertEquals("You do not have enough permissions.", exception.getMessage()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/item/impl/StartTestItemHandlerAsyncImplTest.java b/src/test/java/com/epam/ta/reportportal/core/item/impl/StartTestItemHandlerAsyncImplTest.java index b1264242fb..14e964732d 100644 --- a/src/test/java/com/epam/ta/reportportal/core/item/impl/StartTestItemHandlerAsyncImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/item/impl/StartTestItemHandlerAsyncImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.item.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; @@ -54,7 +55,7 @@ void startRootItem() { ReportPortalUser user = getRpUser("test", UserRole.ADMINISTRATOR, ProjectRole.PROJECT_MANAGER, 1L); - startTestItemHandlerAsync.startRootItem(user, user.getProjectDetails().get("test_project"), + startTestItemHandlerAsync.startRootItem(user, user.getProjectDetails().get(TEST_PROJECT_KEY), request); verify(amqpTemplate).convertAndSend(any(), any(), any(), any()); verify(reportingQueueService).getReportingQueueKey(any()); @@ -66,9 +67,9 @@ void startChildItem() { ReportPortalUser user = getRpUser("test", UserRole.ADMINISTRATOR, ProjectRole.PROJECT_MANAGER, 1L); - startTestItemHandlerAsync.startChildItem(user, user.getProjectDetails().get("test_project"), + startTestItemHandlerAsync.startChildItem(user, user.getProjectDetails().get(TEST_PROJECT_KEY), request, "123"); verify(amqpTemplate).convertAndSend(any(), any(), any(), any()); verify(reportingQueueService).getReportingQueueKey(any()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/item/impl/StartTestItemHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/item/impl/StartTestItemHandlerImplTest.java index 4db2058cdc..fcd3d1976e 100644 --- a/src/test/java/com/epam/ta/reportportal/core/item/impl/StartTestItemHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/item/impl/StartTestItemHandlerImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.item.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -88,7 +89,7 @@ void startRootItemUnderNotExistedLaunch() { rq.setLaunchUuid("1"); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.startRootItem(rpUser, extractProjectDetails(rpUser, "test_project"), rq) + () -> handler.startRootItem(rpUser, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rq) ); assertEquals("Launch '1' not found. Did you use correct Launch ID?", exception.getMessage()); } @@ -106,7 +107,7 @@ void startRootItemUnderLaunchFromAnotherProject() { when(launchRepository.findByUuid("1")).thenReturn(Optional.of(launch)); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.startRootItem(rpUser, extractProjectDetails(rpUser, "test_project"), + () -> handler.startRootItem(rpUser, extractProjectDetails(rpUser, TEST_PROJECT_KEY), startTestItemRQ) ); assertEquals("You do not have enough permissions.", exception.getMessage()); @@ -123,7 +124,7 @@ void startRootItemUnderFinishedLaunch() { Optional.of(getLaunch(1L, StatusEnum.PASSED))); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.startRootItem(rpUser, extractProjectDetails(rpUser, "test_project"), + () -> handler.startRootItem(rpUser, extractProjectDetails(rpUser, TEST_PROJECT_KEY), startTestItemRQ) ); assertEquals("Start test item is not allowed. Launch '1' is not in progress", @@ -143,7 +144,7 @@ void startRootItemEarlierThanLaunch() { when(launchRepository.findByUuid("1")).thenReturn(Optional.of(launch)); assertThrows(ReportPortalException.class, - () -> handler.startRootItem(rpUser, extractProjectDetails(rpUser, "test_project"), + () -> handler.startRootItem(rpUser, extractProjectDetails(rpUser, TEST_PROJECT_KEY), startTestItemRQ) ); } @@ -160,7 +161,7 @@ void startChildItemUnderNotExistedParent() { when(testItemRepository.findByUuid("1")).thenReturn(Optional.empty()); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.startChildItem(rpUser, extractProjectDetails(rpUser, "test_project"), rq, "1") + () -> handler.startChildItem(rpUser, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rq, "1") ); assertEquals("Test Item '1' not found. Did you use correct Test Item ID?", exception.getMessage()); @@ -184,7 +185,7 @@ void startChildItemEarlierThanParent() { .validate(any(StartTestItemRQ.class), any(TestItem.class)); assertThrows(ReportPortalException.class, - () -> handler.startChildItem(rpUser, extractProjectDetails(rpUser, "test_project"), + () -> handler.startChildItem(rpUser, extractProjectDetails(rpUser, TEST_PROJECT_KEY), startTestItemRQ, "1") ); } @@ -214,7 +215,7 @@ void startChildItemUnderFinishedParent() { )).when(validator).validate(any(StartTestItemRQ.class), any(TestItem.class)); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.startChildItem(rpUser, extractProjectDetails(rpUser, "test_project"), + () -> handler.startChildItem(rpUser, extractProjectDetails(rpUser, TEST_PROJECT_KEY), startTestItemRQ, "1") ); assertEquals("Error in handled Request. Please, check specified parameters: " @@ -234,7 +235,7 @@ void startChildItemWithNotExistedLaunch() { when(launchRepository.findByUuid("1")).thenReturn(Optional.empty()); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.startChildItem(rpUser, extractProjectDetails(rpUser, "test_project"), + () -> handler.startChildItem(rpUser, extractProjectDetails(rpUser, TEST_PROJECT_KEY), startTestItemRQ, "1") ); @@ -247,4 +248,4 @@ private Launch getLaunch(Long projectId, StatusEnum status) { launch.setStatus(status); return launch; } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/item/impl/UpdateTestItemHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/item/impl/UpdateTestItemHandlerImplTest.java index 1615ff7296..04f3a42307 100644 --- a/src/test/java/com/epam/ta/reportportal/core/item/impl/UpdateTestItemHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/item/impl/UpdateTestItemHandlerImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.item.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.core.item.impl.UpdateTestItemHandlerImpl.INITIAL_STATUS_ATTRIBUTE_KEY; import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; @@ -88,7 +89,7 @@ void updateNotExistedTestItem() { getRpUser("test", UserRole.USER, ProjectRole.PROJECT_MANAGER, 1L); when(itemRepository.findById(1L)).thenReturn(Optional.empty()); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.updateTestItem(extractProjectDetails(rpUser, "test_project"), 1L, + () -> handler.updateTestItem(extractProjectDetails(rpUser, TEST_PROJECT_KEY), 1L, new UpdateTestItemRQ(), rpUser ) ); @@ -109,7 +110,7 @@ void updateTestItemUnderNotExistedLaunch() { new ReportPortalException(ErrorType.LAUNCH_NOT_FOUND)); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.updateTestItem(extractProjectDetails(rpUser, "test_project"), 1L, + () -> handler.updateTestItem(extractProjectDetails(rpUser, TEST_PROJECT_KEY), 1L, new UpdateTestItemRQ(), rpUser ) ); @@ -133,7 +134,7 @@ void updateTestItemUnderNotOwnLaunch() { when(itemRepository.findById(1L)).thenReturn(Optional.of(item)); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.updateTestItem(extractProjectDetails(rpUser, "test_project"), 1L, + () -> handler.updateTestItem(extractProjectDetails(rpUser, TEST_PROJECT_KEY), 1L, new UpdateTestItemRQ(), rpUser ) ); @@ -158,7 +159,7 @@ void updateTestItemFromAnotherProject() { when(itemRepository.findById(1L)).thenReturn(Optional.of(item)); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.updateTestItem(extractProjectDetails(rpUser, "test_project"), 1L, + () -> handler.updateTestItem(extractProjectDetails(rpUser, TEST_PROJECT_KEY), 1L, new UpdateTestItemRQ(), rpUser ) ); @@ -174,7 +175,7 @@ void defineIssuesOnNotExistProject() { when(projectRepository.findById(1L)).thenReturn(Optional.empty()); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.defineTestItemsIssues(extractProjectDetails(rpUser, "test_project"), + () -> handler.defineTestItemsIssues(extractProjectDetails(rpUser, TEST_PROJECT_KEY), new DefineIssueRQ(), rpUser ) ); @@ -208,7 +209,7 @@ void changeNotStepItemStatus() { when(itemRepository.findById(itemId)).thenReturn(Optional.of(item)); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.updateTestItem(extractProjectDetails(user, "test_project"), itemId, rq, user) + () -> handler.updateTestItem(extractProjectDetails(user, TEST_PROJECT_KEY), itemId, rq, user) ); assertEquals("Incorrect Request. Unable to change status on test item with children", exception.getMessage() @@ -241,7 +242,7 @@ void shouldCreateInitialStatusAttribute() { when(statusChangingStrategyMapping.get(StatusEnum.PASSED)).thenReturn(statusChangingStrategy); doNothing().when(statusChangingStrategy).changeStatus(item, StatusEnum.PASSED, user, true); - handler.updateTestItem(extractProjectDetails(user, "test_project"), itemId, rq, user); + handler.updateTestItem(extractProjectDetails(user, TEST_PROJECT_KEY), itemId, rq, user); assertTrue(item.getAttributes().stream().anyMatch( attribute -> INITIAL_STATUS_ATTRIBUTE_KEY.equalsIgnoreCase(attribute.getKey()) && StatusEnum.FAILED.getExecutionCounterField().equalsIgnoreCase("failed"))); @@ -275,7 +276,7 @@ void shouldNotCreateInitialStatusAttribute() { when(statusChangingStrategyMapping.get(StatusEnum.PASSED)).thenReturn(statusChangingStrategy); doNothing().when(statusChangingStrategy).changeStatus(item, StatusEnum.PASSED, user, true); - handler.updateTestItem(extractProjectDetails(user, "test_project"), itemId, rq, user); + handler.updateTestItem(extractProjectDetails(user, TEST_PROJECT_KEY), itemId, rq, user); assertTrue(item.getAttributes().stream().anyMatch( attribute -> INITIAL_STATUS_ATTRIBUTE_KEY.equalsIgnoreCase(attribute.getKey()) && StatusEnum.PASSED.getExecutionCounterField().equalsIgnoreCase("passed"))); @@ -306,9 +307,9 @@ void updateItemPositive() { when(itemRepository.findById(itemId)).thenReturn(Optional.of(item)); OperationCompletionRS response = - handler.updateTestItem(extractProjectDetails(user, "test_project"), itemId, rq, user); + handler.updateTestItem(extractProjectDetails(user, TEST_PROJECT_KEY), itemId, rq, user); assertEquals("TestItem with ID = '1' successfully updated.", response.getResultMessage()); assertEquals(rq.getDescription(), item.getDescription()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/item/impl/history/TestItemsHistoryHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/item/impl/history/TestItemsHistoryHandlerImplTest.java index d1d8f8023d..99ac1d6d92 100644 --- a/src/test/java/com/epam/ta/reportportal/core/item/impl/history/TestItemsHistoryHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/item/impl/history/TestItemsHistoryHandlerImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.item.impl.history; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.commons.querygen.constant.GeneralCriteriaConstant.CRITERIA_ID; import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -55,7 +56,7 @@ void historyDepthLowerThanBoundTest() { ProjectRole.MEMBER, 1L); assertThrows(ReportPortalException.class, - () -> handler.getItemsHistory(extractProjectDetails(rpUser, "test_project"), + () -> handler.getItemsHistory(extractProjectDetails(rpUser, TEST_PROJECT_KEY), Filter.builder() .withTarget(TestItem.class) .withCondition(FilterCondition.builder().eq(CRITERIA_ID, "1").build()) @@ -73,7 +74,7 @@ void historyDepthGreaterThanBoundTest() { ProjectRole.MEMBER, 1L); assertThrows(ReportPortalException.class, - () -> handler.getItemsHistory(extractProjectDetails(rpUser, "test_project"), + () -> handler.getItemsHistory(extractProjectDetails(rpUser, TEST_PROJECT_KEY), Filter.builder() .withTarget(TestItem.class) .withCondition(FilterCondition.builder().eq(CRITERIA_ID, "1").build()) @@ -84,4 +85,4 @@ void historyDepthGreaterThanBoundTest() { ) ); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/launch/impl/DeleteLaunchHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/launch/impl/DeleteLaunchHandlerImplTest.java index 9d0d6c8172..4eb0e90f61 100644 --- a/src/test/java/com/epam/ta/reportportal/core/launch/impl/DeleteLaunchHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/launch/impl/DeleteLaunchHandlerImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.launch.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.core.launch.impl.LaunchTestUtil.getLaunch; import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; @@ -60,7 +61,7 @@ void deleteNotOwnLaunch() { getLaunch(StatusEnum.PASSED, LaunchModeEnum.DEFAULT)); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.deleteLaunch(1L, extractProjectDetails(rpUser, "test_project"), rpUser) + () -> handler.deleteLaunch(1L, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser) ); assertEquals("You do not have enough permissions. You are not launch owner.", exception.getMessage()); @@ -73,7 +74,7 @@ void deleteLaunchFromAnotherProject() { getLaunch(StatusEnum.PASSED, LaunchModeEnum.DEFAULT)); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.deleteLaunch(1L, extractProjectDetails(rpUser, "test_project"), rpUser) + () -> handler.deleteLaunch(1L, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser) ); assertEquals("Forbidden operation. Target launch '1' not under specified project '2'", exception.getMessage()); @@ -87,7 +88,7 @@ void deleteLaunchInProgressStatus() { getLaunch(StatusEnum.IN_PROGRESS, LaunchModeEnum.DEFAULT)); assertThrows(ReportPortalException.class, - () -> handler.deleteLaunch(1L, extractProjectDetails(rpUser, "test_project"), rpUser)); + () -> handler.deleteLaunch(1L, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser)); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerAsyncImplTest.java b/src/test/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerAsyncImplTest.java index 7a76a64e33..17e8cc3d65 100644 --- a/src/test/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerAsyncImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerAsyncImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.launch.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; @@ -55,8 +56,8 @@ void finishLaunch() { 1L); finishLaunchHandlerAsync.finishLaunch("0", request, - user.getProjectDetails().get("test_project"), user, "http://base"); + user.getProjectDetails().get(TEST_PROJECT_KEY), user, "http://base"); verify(amqpTemplate).convertAndSend(any(), any(), any(), any()); verify(reportingQueueService).getReportingQueueKey(any()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImplTest.java index a73235527f..4ab01986b9 100644 --- a/src/test/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.launch.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.core.launch.impl.LaunchTestUtil.getLaunch; import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; @@ -95,7 +96,7 @@ void finishLaunch() { getLaunch(StatusEnum.IN_PROGRESS, LaunchModeEnum.DEFAULT)); FinishLaunchRS response = - handler.finishLaunch("1", finishExecutionRQ, extractProjectDetails(rpUser, "test_project"), + handler.finishLaunch("1", finishExecutionRQ, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser, null ); @@ -117,14 +118,14 @@ void finishLaunchWithLink() { getLaunch(StatusEnum.IN_PROGRESS, LaunchModeEnum.DEFAULT)); final FinishLaunchRS finishLaunchRS = - handler.finishLaunch("1", finishExecutionRQ, extractProjectDetails(rpUser, "test_project"), + handler.finishLaunch("1", finishExecutionRQ, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser, "http://example.com" ); verify(finishHierarchyHandler, times(1)).finishDescendants(any(), any(), any(), any(), any()); assertNotNull(finishLaunchRS); - assertEquals("http://example.com/ui/#test_project/launches/all/1", finishLaunchRS.getLink()); + assertEquals("http://example.com/ui/#o-slug-project-name/launches/all/1", finishLaunchRS.getLink()); } @Test @@ -140,7 +141,7 @@ void stopLaunch() { getLaunch(StatusEnum.IN_PROGRESS, LaunchModeEnum.DEFAULT)); final OperationCompletionRS response = stopLaunchHandler.stopLaunch(1L, finishExecutionRQ, - extractProjectDetails(rpUser, "test_project"), rpUser + extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser ); assertNotNull(response); assertEquals("Launch with ID = '1' successfully stopped.", response.getResultMessage()); @@ -165,7 +166,7 @@ void bulkStopLaunch() { getLaunch(StatusEnum.IN_PROGRESS, LaunchModeEnum.DEFAULT)); final List<OperationCompletionRS> response = - stopLaunchHandler.stopLaunch(bulkRq, extractProjectDetails(rpUser, "test_project"), rpUser); + stopLaunchHandler.stopLaunch(bulkRq, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser); assertNotNull(response); assertEquals(1, response.size()); } @@ -183,7 +184,7 @@ void finishWithIncorrectStatus() { getLaunch(StatusEnum.PASSED, LaunchModeEnum.DEFAULT)); assertThrows(ReportPortalException.class, () -> handler.finishLaunch("1", finishExecutionRQ, - extractProjectDetails(rpUser, "test_project"), rpUser, null + extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser, null )); } @@ -200,7 +201,7 @@ void finishWithIncorrectEndTime() { getLaunch(StatusEnum.IN_PROGRESS, LaunchModeEnum.DEFAULT)); assertThrows(ReportPortalException.class, () -> handler.finishLaunch("1", finishExecutionRQ, - extractProjectDetails(rpUser, "test_project"), rpUser, null + extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser, null )); } @@ -218,11 +219,11 @@ void finishNotOwnLaunch() { final ReportPortalException exception = assertThrows(ReportPortalException.class, () -> handler.finishLaunch("1", finishExecutionRQ, - extractProjectDetails(rpUser, "test_project"), rpUser, null + extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser, null ) ); assertEquals("You do not have enough permissions. You are not launch owner.", exception.getMessage() ); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/launch/impl/GetLaunchHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/launch/impl/GetLaunchHandlerImplTest.java index 858ae21ae9..1e18e3c67c 100644 --- a/src/test/java/com/epam/ta/reportportal/core/launch/impl/GetLaunchHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/launch/impl/GetLaunchHandlerImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.launch.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.commons.querygen.constant.LaunchCriteriaConstant.CRITERIA_LAUNCH_STATUS; import static com.epam.ta.reportportal.core.launch.impl.LaunchTestUtil.getLaunch; @@ -102,7 +103,7 @@ void getLaunchFromOtherProject() { getLaunch(StatusEnum.FAILED, LaunchModeEnum.DEFAULT)); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getLaunch("1", extractProjectDetails(rpUser, "test_project")) + () -> handler.getLaunch("1", extractProjectDetails(rpUser, TEST_PROJECT_KEY)) ); assertEquals("You do not have enough permissions.", exception.getMessage()); } @@ -114,7 +115,7 @@ void getDebugLaunchWithCustomerRole() { getLaunch(StatusEnum.PASSED, LaunchModeEnum.DEBUG)); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getLaunch("1", extractProjectDetails(rpUser, "test_project")) + () -> handler.getLaunch("1", extractProjectDetails(rpUser, TEST_PROJECT_KEY)) ); assertEquals("You do not have enough permissions.", exception.getMessage()); } @@ -124,7 +125,7 @@ void getLaunchNamesIncorrectInput() { final ReportPortalUser rpUser = getRpUser("test", UserRole.USER, ProjectRole.MEMBER, 1L); assertThrows(ReportPortalException.class, - () -> handler.getLaunchNames(extractProjectDetails(rpUser, "test_project"), + () -> handler.getLaunchNames(extractProjectDetails(rpUser, TEST_PROJECT_KEY), RandomStringUtils.random(257) ) ); @@ -138,19 +139,19 @@ void getNotExistLaunch() { when(launchRepository.findById(Long.parseLong(launchId))).thenReturn(Optional.empty()); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getLaunch(launchId, extractProjectDetails(user, "test_project")) + () -> handler.getLaunch(launchId, extractProjectDetails(user, TEST_PROJECT_KEY)) ); assertEquals("Launch '1' not found. Did you use correct Launch ID?", exception.getMessage()); } @Test void getLaunchByNotExistProjectName() { - String projectName = "not_exist"; + String projectKey = "not_exist"; - when(projectRepository.findByName(projectName)).thenReturn(Optional.empty()); + when(projectRepository.findByKey(projectKey)).thenReturn(Optional.empty()); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getLaunchByProjectName(projectName, PageRequest.of(0, 10), getDefaultFilter(), + () -> handler.getLaunchByProjectName(projectKey, PageRequest.of(0, 10), getDefaultFilter(), "user" ) ); @@ -161,13 +162,13 @@ void getLaunchByNotExistProjectName() { @Test void getLaunchByProjectNameNotFound() { - String projectName = "not_exist"; + String projectKey = "not_exist"; - when(projectRepository.findByName(projectName)).thenReturn(Optional.of(new Project())); + when(projectRepository.findByKey(projectKey)).thenReturn(Optional.of(new Project())); when(launchRepository.findByFilter(any(), any())).thenReturn(null); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getLaunchByProjectName(projectName, PageRequest.of(0, 10), getDefaultFilter(), + () -> handler.getLaunchByProjectName(projectKey, PageRequest.of(0, 10), getDefaultFilter(), "user" ) ); @@ -183,7 +184,7 @@ void getLaunchesByNotExistProject() { when(projectRepository.findById(projectId)).thenReturn(Optional.empty()); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getProjectLaunches(extractProjectDetails(user, "test_project"), + () -> handler.getProjectLaunches(extractProjectDetails(user, TEST_PROJECT_KEY), getDefaultFilter(), PageRequest.of(0, 10), "user" ) ); @@ -201,7 +202,7 @@ void getLatestLaunchesOnNotExistProject() { when(projectRepository.findById(projectId)).thenReturn(Optional.empty()); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getLatestLaunches(extractProjectDetails(user, "test_project"), + () -> handler.getLatestLaunches(extractProjectDetails(user, TEST_PROJECT_KEY), getDefaultFilter(), PageRequest.of(0, 10) ) ); @@ -217,7 +218,7 @@ void getOwnersWrongTerm() { getRpUser("user", UserRole.USER, ProjectRole.PROJECT_MANAGER, projectId); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getOwners(extractProjectDetails(user, "test_project"), "qw", + () -> handler.getOwners(extractProjectDetails(user, TEST_PROJECT_KEY), "qw", LaunchModeEnum.DEFAULT.name() ) ); @@ -234,7 +235,7 @@ void getOwnersWrongMode() { getRpUser("user", UserRole.USER, ProjectRole.PROJECT_MANAGER, projectId); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getOwners(extractProjectDetails(user, "test_project"), "qwe", "incorrectMode") + () -> handler.getOwners(extractProjectDetails(user, TEST_PROJECT_KEY), "qwe", "incorrectMode") ); assertEquals("Incorrect filtering parameters. Mode - incorrectMode doesn't exist.", exception.getMessage() @@ -282,7 +283,7 @@ void getLaunchInDebugModeByCustomer() { when(launchRepository.findById(Long.parseLong(launchId))).thenReturn(Optional.of(launch)); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getLaunch(launchId, extractProjectDetails(user, "test_project")) + () -> handler.getLaunch(launchId, extractProjectDetails(user, TEST_PROJECT_KEY)) ); assertEquals("You do not have enough permissions.", exception.getMessage()); } @@ -306,7 +307,7 @@ void getClusterInfo() { when(getClusterHandler.getResources(launch, pageable)).thenReturn(expected); final Iterable<ClusterInfoResource> result = - handler.getClusters(launchId, extractProjectDetails(user, "test_project"), pageable); + handler.getClusters(launchId, extractProjectDetails(user, TEST_PROJECT_KEY), pageable); final Page<ClusterInfoResource> castedResult = (Page<ClusterInfoResource>) result; @@ -326,4 +327,4 @@ private Filter getDefaultFilter() { .withCondition(FilterCondition.builder().eq(CRITERIA_LAUNCH_STATUS, "PASSED").build()) .build(); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/launch/impl/StartLaunchHandlerAsyncImplTest.java b/src/test/java/com/epam/ta/reportportal/core/launch/impl/StartLaunchHandlerAsyncImplTest.java index ca463f709d..696e8f1bb0 100644 --- a/src/test/java/com/epam/ta/reportportal/core/launch/impl/StartLaunchHandlerAsyncImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/launch/impl/StartLaunchHandlerAsyncImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.launch.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; @@ -54,9 +55,9 @@ void starLaunch() { ReportPortalUser user = getRpUser("test", UserRole.ADMINISTRATOR, ProjectRole.PROJECT_MANAGER, 1L); - startLaunchHandlerAsync.startLaunch(user, user.getProjectDetails().get("test_project"), + startLaunchHandlerAsync.startLaunch(user, user.getProjectDetails().get(TEST_PROJECT_KEY), request); verify(amqpTemplate).convertAndSend(any(), any(), any(), any()); verify(reportingQueueService).getReportingQueueKey(any()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/launch/impl/StartLaunchHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/launch/impl/StartLaunchHandlerImplTest.java index 8d074cf6cb..cf288debbe 100644 --- a/src/test/java/com/epam/ta/reportportal/core/launch/impl/StartLaunchHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/launch/impl/StartLaunchHandlerImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.launch.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -89,7 +90,7 @@ void startLaunch() { }).thenReturn(launch); final StartLaunchRS startLaunchRS = startLaunchHandlerImpl.startLaunch(rpUser, - extractProjectDetails(rpUser, "test_project"), + extractProjectDetails(rpUser, TEST_PROJECT_KEY), startLaunchRQ ); @@ -108,8 +109,8 @@ void accessDeniedForCustomerRoleAndDebugMode() { final ReportPortalException exception = assertThrows(ReportPortalException.class, () -> startLaunchHandlerImpl.startLaunch(rpUser, - extractProjectDetails(rpUser, "test_project"), startLaunchRQ) + extractProjectDetails(rpUser, TEST_PROJECT_KEY), startLaunchRQ) ); assertEquals("Forbidden operation.", exception.getMessage()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/launch/impl/UpdateLaunchHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/launch/impl/UpdateLaunchHandlerImplTest.java index 2b0fe871d4..1729f22d83 100644 --- a/src/test/java/com/epam/ta/reportportal/core/launch/impl/UpdateLaunchHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/launch/impl/UpdateLaunchHandlerImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.launch.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.core.launch.impl.LaunchTestUtil.getLaunch; import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; @@ -91,7 +92,7 @@ void updateNotOwnLaunch() { when(launchRepository.findById(1L)).thenReturn( getLaunch(StatusEnum.PASSED, LaunchModeEnum.DEFAULT)); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.updateLaunch(1L, extractProjectDetails(rpUser, "test_project"), rpUser, + () -> handler.updateLaunch(1L, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser, new UpdateLaunchRQ() ) ); @@ -110,7 +111,7 @@ void updateDebugLaunchByCustomer() { updateLaunchRQ.setMode(Mode.DEBUG); final ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.updateLaunch(1L, extractProjectDetails(rpUser, "test_project"), rpUser, + () -> handler.updateLaunch(1L, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser, updateLaunchRQ ) ); @@ -130,7 +131,7 @@ void createClustersLaunchInProgress() { final ReportPortalException exception = assertThrows(ReportPortalException.class, () -> handler.createClusters(createClustersRQ, - extractProjectDetails(rpUser, "test_project"), rpUser + extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser ) ); assertEquals("Incorrect Request. Cannot analyze launch in progress.", exception.getMessage()); @@ -157,7 +158,7 @@ void createClusters() { ProjectAttributeEnum.UNIQUE_ERROR_ANALYZER_REMOVE_NUMBERS.getDefaultValue()); createClustersRQ.setRemoveNumbers(!defaultRemoveNumbers); - handler.createClusters(createClustersRQ, extractProjectDetails(rpUser, "test_project"), rpUser); + handler.createClusters(createClustersRQ, extractProjectDetails(rpUser, TEST_PROJECT_KEY), rpUser); verify(launchAccessValidator, times(1)).validate(any(Launch.class), any(ReportPortalUser.ProjectDetails.class), eq(rpUser) @@ -180,4 +181,4 @@ void createClusters() { assertNotEquals(providedRemoveNumbers, defaultRemoveNumbers); assertEquals(createClustersRQ.isRemoveNumbers(), providedRemoveNumbers); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/log/impl/CreateLogHandlerAsyncImplTest.java b/src/test/java/com/epam/ta/reportportal/core/log/impl/CreateLogHandlerAsyncImplTest.java index bcf4eb3512..e144d71c1b 100644 --- a/src/test/java/com/epam/ta/reportportal/core/log/impl/CreateLogHandlerAsyncImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/log/impl/CreateLogHandlerAsyncImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.log.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; @@ -80,13 +81,13 @@ void createLog() { when(saveLogBinaryDataTask.withProjectId(any())).thenReturn(saveLogBinaryDataTask); createLogHandlerAsync.createLog(request, multipartFile, - user.getProjectDetails().get("test_project")); + user.getProjectDetails().get(TEST_PROJECT_KEY)); verify(provider).get(); verify(saveLogBinaryDataTask).withRequest(request); verify(saveLogBinaryDataTask).withFile(multipartFile); verify(saveLogBinaryDataTask).withProjectId( - user.getProjectDetails().get("test_project").getProjectId()); + user.getProjectDetails().get(TEST_PROJECT_KEY).getProjectId()); } @Test @@ -98,4 +99,4 @@ void sendMessage() { verify(reportingQueueService).getReportingQueueKey(any()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/log/impl/DeleteLogHandlerTest.java b/src/test/java/com/epam/ta/reportportal/core/log/impl/DeleteLogHandlerTest.java index 61018dfb9f..4ff036ed1b 100644 --- a/src/test/java/com/epam/ta/reportportal/core/log/impl/DeleteLogHandlerTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/log/impl/DeleteLogHandlerTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.log.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -88,7 +89,7 @@ void deleteLogOnNotExistProject() { when(projectRepository.existsById(projectId)).thenReturn(false); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.deleteLog(1L, extractProjectDetails(user, "test_project"), user) + () -> handler.deleteLog(1L, extractProjectDetails(user, TEST_PROJECT_KEY), user) ); assertEquals("Project '1' not found. Did you use correct project name?", exception.getMessage()); @@ -105,7 +106,7 @@ void deleteNotExistLog() { when(logRepository.findById(logId)).thenReturn(Optional.empty()); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.deleteLog(logId, extractProjectDetails(user, "test_project"), user) + () -> handler.deleteLog(logId, extractProjectDetails(user, TEST_PROJECT_KEY), user) ); assertEquals("Log '2' not found. Did you use correct Log ID?", exception.getMessage()); } @@ -136,7 +137,7 @@ void deleteLogByNotOwner() { when(logRepository.findById(logId)).thenReturn(Optional.of(log)); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.deleteLog(logId, extractProjectDetails(user, "test_project"), user) + () -> handler.deleteLog(logId, extractProjectDetails(user, TEST_PROJECT_KEY), user) ); assertEquals("You do not have enough permissions.", exception.getMessage()); } @@ -172,7 +173,7 @@ void cleanUpLogDataTest() { when(projectRepository.existsById(projectId)).thenReturn(true); when(logRepository.findById(logId)).thenReturn(Optional.of(log)); - handler.deleteLog(logId, extractProjectDetails(user, "test_project"), user); + handler.deleteLog(logId, extractProjectDetails(user, TEST_PROJECT_KEY), user); verify(logRepository, times(1)).delete(log); verify(logIndexer, times(1)).cleanIndex(projectId, Collections.singletonList(logId)); @@ -210,8 +211,8 @@ void cleanUpLogDataNegative() { doThrow(IllegalArgumentException.class).when(logRepository).delete(log); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.deleteLog(logId, extractProjectDetails(user, "test_project"), user) + () -> handler.deleteLog(logId, extractProjectDetails(user, TEST_PROJECT_KEY), user) ); assertEquals("Error while Log instance deleting.", exception.getMessage()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/log/impl/GetLogHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/log/impl/GetLogHandlerImplTest.java index 22994eb417..6875babe02 100644 --- a/src/test/java/com/epam/ta/reportportal/core/log/impl/GetLogHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/log/impl/GetLogHandlerImplTest.java @@ -1,5 +1,6 @@ package com.epam.ta.reportportal.core.log.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.commons.querygen.constant.LogCriteriaConstant.CRITERIA_ITEM_LAUNCH_ID; import static com.epam.ta.reportportal.commons.querygen.constant.TestItemCriteriaConstant.CRITERIA_PATH; @@ -84,7 +85,7 @@ void getLogs() { logService.findByFilter(queryableArgumentCaptor.capture(), any(Pageable.class))).thenReturn( Page.empty(pageable)); - getLogHandler.getLogs(correctPath, extractProjectDetails(user, "test_project"), idFilter, + getLogHandler.getLogs(correctPath, extractProjectDetails(user, TEST_PROJECT_KEY), idFilter, pageable); Queryable updatedFilter = queryableArgumentCaptor.getValue(); @@ -109,4 +110,4 @@ void getLogs() { Assertions.assertNotEquals(wrongPath, underPathCondition.get().getValue()); Assertions.assertEquals(correctPath, underPathCondition.get().getValue()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/project/impl/CreateProjectHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/project/impl/CreateProjectHandlerImplTest.java index 097ad52f90..4dce106104 100644 --- a/src/test/java/com/epam/ta/reportportal/core/project/impl/CreateProjectHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/project/impl/CreateProjectHandlerImplTest.java @@ -16,6 +16,10 @@ package com.epam.ta.reportportal.core.project.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_ORG; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_ORG_ID; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_NAME; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -24,6 +28,7 @@ import com.epam.ta.reportportal.commons.ReportPortalUser; import com.epam.ta.reportportal.dao.ProjectRepository; import com.epam.ta.reportportal.dao.UserRepository; +import com.epam.ta.reportportal.dao.organization.OrganizationRepository; import com.epam.ta.reportportal.entity.project.ProjectRole; import com.epam.ta.reportportal.entity.user.UserRole; import com.epam.ta.reportportal.exception.ReportPortalException; @@ -47,6 +52,9 @@ class CreateProjectHandlerImplTest { @Mock private UserRepository userRepository; + @Mock + OrganizationRepository organizationRepository; + @InjectMocks private CreateProjectHandlerImpl handler; @@ -56,11 +64,12 @@ void createProjectWithWrongType() { getRpUser("user", UserRole.ADMINISTRATOR, ProjectRole.PROJECT_MANAGER, 1L); CreateProjectRQ createProjectRQ = new CreateProjectRQ(); - String projectName = "projectName"; - createProjectRQ.setProjectName(projectName); + createProjectRQ.setProjectName(TEST_PROJECT_NAME); + createProjectRQ.setOrganizationId(TEST_ORG_ID); createProjectRQ.setEntryType("wrongType"); - when(projectRepository.findByName(projectName.toLowerCase().trim())).thenReturn( + when(organizationRepository.findById(TEST_ORG_ID)).thenReturn(Optional.of(TEST_ORG)); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn( Optional.empty()); ReportPortalException exception = assertThrows(ReportPortalException.class, @@ -78,12 +87,12 @@ void createProjectByNotExistUser() { getRpUser("user", UserRole.ADMINISTRATOR, ProjectRole.PROJECT_MANAGER, 1L); CreateProjectRQ createProjectRQ = new CreateProjectRQ(); - String projectName = "projectName"; - createProjectRQ.setProjectName(projectName); + createProjectRQ.setProjectName(TEST_PROJECT_NAME); + createProjectRQ.setOrganizationId(TEST_ORG_ID); createProjectRQ.setEntryType("internal"); - when(projectRepository.findByName(projectName.toLowerCase().trim())).thenReturn( - Optional.empty()); + when(organizationRepository.findById(TEST_ORG_ID)).thenReturn(Optional.of(TEST_ORG)); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.empty()); when(userRepository.findRawById(rpUser.getUserId())).thenReturn(Optional.empty()); ReportPortalException exception = assertThrows(ReportPortalException.class, @@ -92,4 +101,4 @@ void createProjectByNotExistUser() { assertEquals("User 'user' not found.", exception.getMessage()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/project/impl/DeleteProjectHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/project/impl/DeleteProjectHandlerImplTest.java index 54ed8ef79c..f6e75c4d07 100644 --- a/src/test/java/com/epam/ta/reportportal/core/project/impl/DeleteProjectHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/project/impl/DeleteProjectHandlerImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.project.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -32,7 +33,6 @@ import com.epam.ta.reportportal.core.events.MessageBus; import com.epam.ta.reportportal.core.events.activity.ProjectIndexEvent; import com.epam.ta.reportportal.core.remover.ContentRemover; -import com.epam.ta.reportportal.dao.AttachmentRepository; import com.epam.ta.reportportal.dao.IssueTypeRepository; import com.epam.ta.reportportal.dao.LogRepository; import com.epam.ta.reportportal.dao.ProjectRepository; @@ -111,62 +111,61 @@ void deleteNotExistProject() { @Test void deleteIndexOnNotExistProject() { - String projectName = "notExist"; + String projectKey = "notExist"; when(analyzerServiceClient.hasClients()).thenReturn(true); - when(projectRepository.findByName(projectName)).thenReturn(Optional.empty()); + when(projectRepository.findByKey(projectKey)).thenReturn(Optional.empty()); - ReportPortalException exception = assertThrows(ReportPortalException.class, () -> handler.deleteProjectIndex(projectName, "user")); + ReportPortalException exception = assertThrows(ReportPortalException.class, () -> handler.deleteProjectIndex(projectKey, "user")); assertEquals("Project 'notExist' not found. Did you use correct project name?", exception.getMessage()); } @Test void deleteProjectIndexByNotExistUser() { - String projectName = "notExist"; + String projectKey = "notExist"; String userName = "user"; when(analyzerServiceClient.hasClients()).thenReturn(true); - when(projectRepository.findByName(projectName)).thenReturn(Optional.of(new Project())); + when(projectRepository.findByKey(projectKey)).thenReturn(Optional.of(new Project())); when(userRepository.findByLogin(userName)).thenReturn(Optional.empty()); - ReportPortalException exception = assertThrows(ReportPortalException.class, () -> handler.deleteProjectIndex(projectName, "user")); + ReportPortalException exception = assertThrows(ReportPortalException.class, () -> handler.deleteProjectIndex(projectKey, "user")); assertEquals("User 'user' not found.", exception.getMessage()); } @Test void deleteIndexWhenIndexingRunning() { - String projectName = "test_project"; String userName = "user"; Long projectId = 1L; when(analyzerServiceClient.hasClients()).thenReturn(true); - when(projectRepository.findByName(projectName)).thenReturn(Optional.of(getProjectWithAnalyzerAttributes(projectId, true))); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.of(getProjectWithAnalyzerAttributes(projectId, true))); when(userRepository.findByLogin(userName)).thenReturn(Optional.of(new User())); - ReportPortalException exception = assertThrows(ReportPortalException.class, () -> handler.deleteProjectIndex(projectName, "user")); + ReportPortalException exception = assertThrows(ReportPortalException.class, () -> handler.deleteProjectIndex(TEST_PROJECT_KEY, "user")); assertEquals("Forbidden operation. Index can not be removed until index generation proceeds.", exception.getMessage()); } @Test void deleteIndexWhenIndexingCacheNotInvalidated() { - String projectName = "test_project"; + String projectKey = TEST_PROJECT_KEY; String userName = "user"; Long projectId = 1L; when(analyzerServiceClient.hasClients()).thenReturn(true); - when(projectRepository.findByName(projectName)).thenReturn(Optional.of(getProjectWithAnalyzerAttributes(projectId, false))); + when(projectRepository.findByKey(projectKey)).thenReturn(Optional.of(getProjectWithAnalyzerAttributes(projectId, false))); when(userRepository.findByLogin(userName)).thenReturn(Optional.of(new User())); Cache<Long, Long> cache = CacheBuilder.newBuilder().build(); cache.put(2L, projectId); when(analyzerStatusCache.getAnalyzeStatus(AnalyzerStatusCache.AUTO_ANALYZER_KEY)).thenReturn(Optional.of(cache)); - ReportPortalException exception = assertThrows(ReportPortalException.class, () -> handler.deleteProjectIndex(projectName, "user")); + ReportPortalException exception = assertThrows(ReportPortalException.class, () -> handler.deleteProjectIndex(projectKey, "user")); assertEquals("Forbidden operation. Index can not be removed until index generation proceeds.", exception.getMessage()); } @Test void deleteIndexWhenThereAreNoAnalyzers() { - String projectName = "test_project"; + String projectName = TEST_PROJECT_KEY; when(analyzerServiceClient.hasClients()).thenReturn(false); ReportPortalException exception = assertThrows(ReportPortalException.class, () -> handler.deleteProjectIndex(projectName, "user")); @@ -176,29 +175,28 @@ void deleteIndexWhenThereAreNoAnalyzers() { @Test void happyDeleteIndex() { - String projectName = "test_project"; String userName = "user"; Long projectId = 1L; Project project = getProjectWithAnalyzerAttributes(projectId, false); - project.setName(projectName); - when(projectRepository.findByName(projectName)).thenReturn(Optional.of(project)); + project.setName(TEST_PROJECT_KEY); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.of(project)); when(userRepository.findByLogin(userName)).thenReturn(Optional.of(new User())); when(analyzerStatusCache.getAnalyzeStatus(AnalyzerStatusCache.AUTO_ANALYZER_KEY)).thenReturn(Optional.of(CacheBuilder.newBuilder() .build())); when(analyzerServiceClient.hasClients()).thenReturn(true); - OperationCompletionRS response = handler.deleteProjectIndex(projectName, "user"); + OperationCompletionRS response = handler.deleteProjectIndex(TEST_PROJECT_KEY, "user"); verify(logIndexer, times(1)).deleteIndex(projectId); verify(messageBus, times(1)).publishActivity(any(ProjectIndexEvent.class)); - assertEquals(response.getResultMessage(), "Project index with name = '" + projectName + "' is successfully deleted."); + assertEquals(response.getResultMessage(), "Project index with key = '" + TEST_PROJECT_KEY + "' is successfully deleted."); } @Test void deleteProjectTest() { - String projectName = "test_project"; + String projectName = TEST_PROJECT_KEY; Long projectId = 1L; Project project = getProjectWithAnalyzerAttributes(projectId, false); project.setName(projectName); @@ -243,4 +241,4 @@ private Attribute getAttribute(String name) { attribute.setName(name); return attribute; } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/project/impl/GetProjectHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/project/impl/GetProjectHandlerImplTest.java index 254b719e85..877ec3c1c7 100644 --- a/src/test/java/com/epam/ta/reportportal/core/project/impl/GetProjectHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/project/impl/GetProjectHandlerImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.project.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.commons.querygen.constant.UserCriteriaConstant.CRITERIA_ROLE; import static com.epam.ta.reportportal.util.TestProjectExtractor.extractProjectDetails; @@ -58,18 +59,18 @@ class GetProjectHandlerImplTest { void getUsersOnNotExistProject() { long projectId = 1L; - String projectName = "test_project"; - when(projectRepository.findByName(projectName)).thenReturn(Optional.empty()); + String projectKey = TEST_PROJECT_KEY; + when(projectRepository.findByKey(projectKey)).thenReturn(Optional.empty()); ReportPortalException exception = assertThrows(ReportPortalException.class, () -> { - handler.getProjectUsers(projectName, Filter.builder().withTarget(User.class).withCondition( + handler.getProjectUsers(projectKey, Filter.builder().withTarget(User.class).withCondition( FilterCondition.builder().eq(CRITERIA_ROLE, UserRole.USER.name()).build()).build(), PageRequest.of(0, 10) ); }); assertEquals( - "Project 'test_project' not found. Did you use correct project name?", + "Project 'o-slug-project-name' not found. Did you use correct project name?", exception.getMessage() ); } @@ -78,11 +79,11 @@ void getUsersOnNotExistProject() { void getEmptyUserList() { long projectId = 1L; - String projectName = "test_project"; - when(projectRepository.findByName(projectName)).thenReturn(Optional.of(new Project())); + String projectKey = TEST_PROJECT_KEY; + when(projectRepository.findByKey(projectKey)).thenReturn(Optional.of(new Project())); Iterable<UserResource> users = - handler.getProjectUsers(projectName, Filter.builder().withTarget(User.class).withCondition( + handler.getProjectUsers(projectKey, Filter.builder().withTarget(User.class).withCondition( FilterCondition.builder().eq(CRITERIA_ROLE, UserRole.USER.name()).build()).build(), PageRequest.of(0, 10) ); @@ -92,18 +93,18 @@ void getEmptyUserList() { @Test void getNotExistProject() { - String projectName = "not_exist"; + String projectKey = "not_exist"; long projectId = 1L; ReportPortalUser user = getRpUser("user", UserRole.USER, ProjectRole.PROJECT_MANAGER, projectId); - when(projectRepository.findByName(projectName)).thenReturn(Optional.empty()); + when(projectRepository.findByKey(projectKey)).thenReturn(Optional.empty()); ReportPortalException exception = - assertThrows(ReportPortalException.class, () -> handler.getResource(projectName, user)); + assertThrows(ReportPortalException.class, () -> handler.getResource(projectKey, user)); assertEquals( - "Project '" + projectName + "' not found. Did you use correct project name?", + "Project '" + projectKey + "' not found. Did you use correct project name?", exception.getMessage() ); } @@ -115,7 +116,7 @@ void getUserNamesByIncorrectTerm() { getRpUser("user", UserRole.USER, ProjectRole.PROJECT_MANAGER, projectId); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getUserNames(extractProjectDetails(user, "test_project"), "") + () -> handler.getUserNames(extractProjectDetails(user, TEST_PROJECT_KEY), "") ); assertEquals( @@ -128,8 +129,7 @@ void getUserNamesByIncorrectTerm() { void getUserNamesNegative() { ReportPortalException exception = assertThrows( ReportPortalException.class, () -> handler.getUserNames("", - new ReportPortalUser.ProjectDetails(1L, "superadmin_personal", - ProjectRole.PROJECT_MANAGER + new ReportPortalUser.ProjectDetails(1L, "superadmin_personal", ProjectRole.PROJECT_MANAGER, "project-key" ), PageRequest.of(0, 10) )); assertEquals( @@ -137,4 +137,4 @@ void getUserNamesNegative() { exception.getMessage() ); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/CreateProjectSettingsHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/CreateProjectSettingsHandlerImplTest.java index 3cd1ed4db7..41961054c6 100644 --- a/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/CreateProjectSettingsHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/CreateProjectSettingsHandlerImplTest.java @@ -16,7 +16,7 @@ package com.epam.ta.reportportal.core.project.settings.impl; -import static com.epam.ta.reportportal.ReportPortalUserUtil.TEST_PROJECT_NAME; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -61,13 +61,14 @@ void createSubtypeOnNotExistProject() { ReportPortalUser user = getRpUser("user", UserRole.USER, ProjectRole.PROJECT_MANAGER, projectId); - when(projectRepository.findByName(TEST_PROJECT_NAME)).thenReturn(Optional.empty()); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.empty()); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.createProjectIssueSubType(TEST_PROJECT_NAME, user, new CreateIssueSubTypeRQ()) + () -> handler.createProjectIssueSubType(TEST_PROJECT_KEY, user, new CreateIssueSubTypeRQ()) ); - assertEquals("Project 'test_project' not found. Did you use correct project name?", + assertEquals( + String.format("Project '%s' not found. Did you use correct project name?", TEST_PROJECT_KEY), exception.getMessage() ); } @@ -78,13 +79,13 @@ void createSubtypeWithWrongGroup() { ReportPortalUser user = getRpUser("user", UserRole.USER, ProjectRole.PROJECT_MANAGER, projectId); - when(projectRepository.findByName(TEST_PROJECT_NAME)).thenReturn(Optional.of(new Project())); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.of(new Project())); CreateIssueSubTypeRQ createIssueSubTypeRQ = new CreateIssueSubTypeRQ(); createIssueSubTypeRQ.setTypeRef("wrongType"); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.createProjectIssueSubType(TEST_PROJECT_NAME, user, createIssueSubTypeRQ) + () -> handler.createProjectIssueSubType(TEST_PROJECT_KEY, user, createIssueSubTypeRQ) ); assertEquals("Error in handled Request. Please, check specified parameters: 'wrongType'", @@ -101,13 +102,13 @@ void maxSubtypesCount() { ReportPortalUser user = getRpUser("user", UserRole.USER, ProjectRole.PROJECT_MANAGER, projectId); - when(projectRepository.findByName(TEST_PROJECT_NAME)).thenReturn(Optional.of(project)); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.of(project)); CreateIssueSubTypeRQ createIssueSubTypeRQ = new CreateIssueSubTypeRQ(); createIssueSubTypeRQ.setTypeRef("product_bug"); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.createProjectIssueSubType(TEST_PROJECT_NAME, user, createIssueSubTypeRQ) + () -> handler.createProjectIssueSubType(TEST_PROJECT_KEY, user, createIssueSubTypeRQ) ); assertEquals("Incorrect Request. Sub Issues count is bound of size limit", @@ -127,4 +128,4 @@ private Set<ProjectIssueType> getSubTypes() { } return subTypes; } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/DeleteProjectSettingsHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/DeleteProjectSettingsHandlerImplTest.java index 1a1b02a4bc..0503a6594b 100644 --- a/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/DeleteProjectSettingsHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/DeleteProjectSettingsHandlerImplTest.java @@ -16,7 +16,7 @@ package com.epam.ta.reportportal.core.project.settings.impl; -import static com.epam.ta.reportportal.ReportPortalUserUtil.TEST_PROJECT_NAME; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -53,13 +53,14 @@ void deleteSubtypeOnNotExistProject() { ReportPortalUser user = getRpUser("user", UserRole.USER, ProjectRole.PROJECT_MANAGER, projectId); - when(projectRepository.findByName(TEST_PROJECT_NAME)).thenReturn(Optional.empty()); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.empty()); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.deleteProjectIssueSubType(TEST_PROJECT_NAME, user, 1L) + () -> handler.deleteProjectIssueSubType(TEST_PROJECT_KEY, user, 1L) ); - assertEquals("Project 'test_project' not found. Did you use correct project name?", + assertEquals( + String.format("Project '%s' not found. Did you use correct project name?", TEST_PROJECT_KEY), exception.getMessage()); } @@ -69,13 +70,13 @@ void deleteNotExistSubtype() { ReportPortalUser user = getRpUser("user", UserRole.USER, ProjectRole.PROJECT_MANAGER, projectId); - when(projectRepository.findByName(TEST_PROJECT_NAME)).thenReturn(Optional.of(new Project())); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.of(new Project())); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.deleteProjectIssueSubType(TEST_PROJECT_NAME, user, 1L) + () -> handler.deleteProjectIssueSubType(TEST_PROJECT_KEY, user, 1L) ); assertEquals("Issue Type '1' not found.", exception.getMessage()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/GetProjectSettingsHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/GetProjectSettingsHandlerImplTest.java index 8ad3cb5261..137c0b58ef 100644 --- a/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/GetProjectSettingsHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/GetProjectSettingsHandlerImplTest.java @@ -16,7 +16,7 @@ package com.epam.ta.reportportal.core.project.settings.impl; -import static com.epam.ta.reportportal.ReportPortalUserUtil.TEST_PROJECT_NAME; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.when; @@ -45,12 +45,12 @@ class GetProjectSettingsHandlerImplTest { @Test void getProjectSettingOnNotExistProject() { - when(repository.findByName(TEST_PROJECT_NAME)).thenReturn(Optional.empty()); + when(repository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.empty()); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.getProjectSettings(TEST_PROJECT_NAME)); + () -> handler.getProjectSettings(TEST_PROJECT_KEY)); - assertEquals("Project 'test_project' not found. Did you use correct project name?", + assertEquals("Project 'o-slug-project-name' not found. Did you use correct project name?", exception.getMessage()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/UpdateProjectSettingsHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/UpdateProjectSettingsHandlerImplTest.java index 08588f7001..78da3fe0e1 100644 --- a/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/UpdateProjectSettingsHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/project/settings/impl/UpdateProjectSettingsHandlerImplTest.java @@ -16,7 +16,8 @@ package com.epam.ta.reportportal.core.project.settings.impl; -import static com.epam.ta.reportportal.ReportPortalUserUtil.TEST_PROJECT_NAME; + +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -58,7 +59,7 @@ void emptyRequest() { updateIssueSubTypeRQ.setIds(Collections.emptyList()); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.updateProjectIssueSubType("test_project", user, updateIssueSubTypeRQ) + () -> handler.updateProjectIssueSubType(TEST_PROJECT_KEY, user, updateIssueSubTypeRQ) ); assertEquals("Forbidden operation. Please specify at least one item data for update.", exception.getMessage() @@ -74,12 +75,12 @@ void updateSubtypeOnNotExistProject() { UpdateIssueSubTypeRQ updateIssueSubTypeRQ = new UpdateIssueSubTypeRQ(); updateIssueSubTypeRQ.setIds(Collections.singletonList(new UpdateOneIssueSubTypeRQ())); - when(projectRepository.findByName(TEST_PROJECT_NAME)).thenReturn(Optional.empty()); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.empty()); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.updateProjectIssueSubType(TEST_PROJECT_NAME, user, updateIssueSubTypeRQ) + () -> handler.updateProjectIssueSubType(TEST_PROJECT_KEY, user, updateIssueSubTypeRQ) ); - assertEquals("Project 'test_project' not found. Did you use correct project name?", + assertEquals("Project 'o-slug-project-name' not found. Did you use correct project name?", exception.getMessage() ); } @@ -95,10 +96,10 @@ void updateSubtypeWithIncorrectGroup() { oneIssueSubTypeRQ.setTypeRef("wrongType"); updateIssueSubTypeRQ.setIds(Collections.singletonList(oneIssueSubTypeRQ)); - when(projectRepository.findByName(TEST_PROJECT_NAME)).thenReturn(Optional.of(new Project())); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.of(new Project())); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.updateProjectIssueSubType(TEST_PROJECT_NAME, user, updateIssueSubTypeRQ) + () -> handler.updateProjectIssueSubType(TEST_PROJECT_KEY, user, updateIssueSubTypeRQ) ); assertEquals("Issue Type 'wrongType' not found.", exception.getMessage()); } @@ -115,11 +116,11 @@ void updateNotExistSubtype() { oneIssueSubTypeRQ.setLocator("locator"); updateIssueSubTypeRQ.setIds(Collections.singletonList(oneIssueSubTypeRQ)); - when(projectRepository.findByName(TEST_PROJECT_NAME)).thenReturn(Optional.of(new Project())); + when(projectRepository.findByKey(TEST_PROJECT_KEY)).thenReturn(Optional.of(new Project())); ReportPortalException exception = assertThrows(ReportPortalException.class, - () -> handler.updateProjectIssueSubType(TEST_PROJECT_NAME, user, updateIssueSubTypeRQ) + () -> handler.updateProjectIssueSubType(TEST_PROJECT_KEY, user, updateIssueSubTypeRQ) ); assertEquals("Issue Type 'locator' not found.", exception.getMessage()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/core/user/impl/CreateUserHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/user/impl/CreateUserHandlerImplTest.java index 848fa55dca..06ec6f34b7 100644 --- a/src/test/java/com/epam/ta/reportportal/core/user/impl/CreateUserHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/user/impl/CreateUserHandlerImplTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.core.user.impl; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static com.epam.ta.reportportal.core.user.impl.CreateUserHandlerImpl.BID_TYPE; import static com.epam.ta.reportportal.core.user.impl.CreateUserHandlerImpl.INTERNAL_BID_TYPE; @@ -223,7 +224,7 @@ void createByAdminWithExistedEmailUppercase() { void createUserBid() { final ReportPortalUser rpUser = getRpUser("admin", UserRole.ADMINISTRATOR, ProjectRole.MEMBER, 1L); - final String projectName = "test_project"; + final String projectName = TEST_PROJECT_KEY; final String email = "email@mail.com"; final String role = ProjectRole.MEMBER.name(); @@ -329,7 +330,7 @@ public void createUserWithIncorrectLogin() { @Test void createUserWithIncorrectEmail() { final UserCreationBid bid = new UserCreationBid(); - bid.setProjectName("test_project"); + bid.setProjectName(TEST_PROJECT_KEY); when(userCreationBidRepository.findByUuidAndType("uuid", INTERNAL_BID_TYPE)).thenReturn( Optional.of(bid)); when(userRepository.findByLogin("test")).thenReturn(Optional.empty()); @@ -348,7 +349,7 @@ void createUserWithIncorrectEmail() { @Test void createUserWithExistedEmail() { final UserCreationBid bid = new UserCreationBid(); - bid.setProjectName("test_project"); + bid.setProjectName(TEST_PROJECT_KEY); when(userCreationBidRepository.findByUuidAndType("uuid", INTERNAL_BID_TYPE)).thenReturn( Optional.of(bid)); when(userRepository.findByLogin("test")).thenReturn(Optional.empty()); @@ -364,4 +365,4 @@ void createUserWithExistedEmail() { exception.getMessage() ); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/util/TestProjectExtractor.java b/src/test/java/com/epam/ta/reportportal/util/TestProjectExtractor.java index 25e803fdd6..206cf65e37 100644 --- a/src/test/java/com/epam/ta/reportportal/util/TestProjectExtractor.java +++ b/src/test/java/com/epam/ta/reportportal/util/TestProjectExtractor.java @@ -10,8 +10,8 @@ public class TestProjectExtractor { public static ReportPortalUser.ProjectDetails extractProjectDetails(ReportPortalUser user, - String projectName) { - final String normalizedProjectName = normalizeId(projectName); + String projectKey) { + final String normalizedProjectName = normalizeId(projectKey); return Optional.ofNullable(user.getProjectDetails().get(normalizedProjectName)) .orElseThrow(() -> new ReportPortalException(ErrorType.ACCESS_DENIED, "Please check the list of your available projects." diff --git a/src/test/java/com/epam/ta/reportportal/ws/controller/FileStorageControllerTest.java b/src/test/java/com/epam/ta/reportportal/ws/controller/FileStorageControllerTest.java index b7fcbbda08..4df75da52b 100644 --- a/src/test/java/com/epam/ta/reportportal/ws/controller/FileStorageControllerTest.java +++ b/src/test/java/com/epam/ta/reportportal/ws/controller/FileStorageControllerTest.java @@ -16,12 +16,21 @@ package com.epam.ta.reportportal.ws.controller; +import static com.epam.ta.reportportal.util.MultipartFileUtils.getMultipartFile; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + import com.epam.ta.reportportal.binary.AttachmentBinaryDataService; import com.epam.ta.reportportal.commons.BinaryDataMetaInfo; import com.epam.ta.reportportal.dao.AttachmentRepository; import com.epam.ta.reportportal.entity.attachment.Attachment; import com.epam.ta.reportportal.entity.attachment.AttachmentMetaInfo; import com.epam.ta.reportportal.ws.BaseMvcTest; +import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.util.Optional; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; @@ -31,16 +40,6 @@ import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import java.nio.charset.StandardCharsets; -import java.time.LocalDateTime; -import java.util.Optional; - -import static com.epam.ta.reportportal.util.MultipartFileUtils.getMultipartFile; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - /** * @author <a href="mailto:ihar_kahadouski@epam.com">Ihar Kahadouski</a> */ @@ -152,4 +151,4 @@ void getNotExistUserPhoto() throws Exception { mockMvc.perform(get("/v1/data/userphoto?id=not_exist").with(token(oAuthHelper.getSuperadminToken()))) .andExpect(status().isNotFound()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/ws/controller/IntegrationControllerTest.java b/src/test/java/com/epam/ta/reportportal/ws/controller/IntegrationControllerTest.java index 2227dfdf60..92730e3f41 100644 --- a/src/test/java/com/epam/ta/reportportal/ws/controller/IntegrationControllerTest.java +++ b/src/test/java/com/epam/ta/reportportal/ws/controller/IntegrationControllerTest.java @@ -23,8 +23,8 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import com.epam.ta.reportportal.ws.BaseMvcTest; import com.epam.ta.reportportal.model.integration.IntegrationRQ; +import com.epam.ta.reportportal.ws.BaseMvcTest; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.Map; @@ -277,4 +277,4 @@ void deleteAllProjectIntegrations() throws Exception { token(oAuthHelper.getDefaultToken()))) .andExpect(status().isOk()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/ws/controller/LaunchAsyncControllerTest.java b/src/test/java/com/epam/ta/reportportal/ws/controller/LaunchAsyncControllerTest.java index 1f80859eec..21d73ae7a6 100644 --- a/src/test/java/com/epam/ta/reportportal/ws/controller/LaunchAsyncControllerTest.java +++ b/src/test/java/com/epam/ta/reportportal/ws/controller/LaunchAsyncControllerTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.ws.controller; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; @@ -84,14 +85,14 @@ void startLaunch() { when(projectExtractor.extractProjectDetails(any(ReportPortalUser.class), anyString() - )).thenReturn(user.getProjectDetails().get("test_project")); + )).thenReturn(user.getProjectDetails().get(TEST_PROJECT_KEY)); - launchAsyncController.startLaunch("test_project", startLaunchRQ, user); + launchAsyncController.startLaunch(TEST_PROJECT_KEY, startLaunchRQ, user); verify(startLaunchHandler).startLaunch(userArgumentCaptor.capture(), projectDetailsArgumentCaptor.capture(), requestArgumentCaptor.capture() ); assertEquals(user, userArgumentCaptor.getValue()); - assertEquals(user.getProjectDetails().get("test_project"), + assertEquals(user.getProjectDetails().get(TEST_PROJECT_KEY), projectDetailsArgumentCaptor.getValue() ); assertEquals(startLaunchRQ, requestArgumentCaptor.getValue()); @@ -117,11 +118,11 @@ void finishLaunch() { when(projectExtractor.extractProjectDetails(any(ReportPortalUser.class), anyString() - )).thenReturn(user.getProjectDetails().get("test_project")); + )).thenReturn(user.getProjectDetails().get(TEST_PROJECT_KEY)); when(httpServletRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost:8080")); when(httpServletRequest.getHeaderNames()).thenReturn(new Enumerator<>(Lists.newArrayList())); - launchAsyncController.finishLaunch("test_project", launchId, finishExecutionRQ, user, + launchAsyncController.finishLaunch(TEST_PROJECT_KEY, launchId, finishExecutionRQ, user, httpServletRequest ); verify(finishLaunchHandler).finishLaunch(launchIdArgumentCaptor.capture(), @@ -129,7 +130,7 @@ void finishLaunch() { userArgumentCaptor.capture(), urlArgumentCaptor.capture() ); assertEquals(user, userArgumentCaptor.getValue()); - assertEquals(user.getProjectDetails().get("test_project"), + assertEquals(user.getProjectDetails().get(TEST_PROJECT_KEY), projectDetailsArgumentCaptor.getValue() ); assertEquals(finishExecutionRQ, requestArgumentCaptor.getValue()); @@ -151,16 +152,16 @@ void mergeLaunch() { when(projectExtractor.extractProjectDetails(any(ReportPortalUser.class), anyString() - )).thenReturn(user.getProjectDetails().get("test_project")); + )).thenReturn(user.getProjectDetails().get(TEST_PROJECT_KEY)); - launchAsyncController.mergeLaunches("test_project", mergeLaunchesRQ, user); + launchAsyncController.mergeLaunches(TEST_PROJECT_KEY, mergeLaunchesRQ, user); verify(mergeLaunchHandler).mergeLaunches(projectDetailsArgumentCaptor.capture(), userArgumentCaptor.capture(), requestArgumentCaptor.capture() ); assertEquals(user, userArgumentCaptor.getValue()); - assertEquals(user.getProjectDetails().get("test_project"), + assertEquals(user.getProjectDetails().get(TEST_PROJECT_KEY), projectDetailsArgumentCaptor.getValue() ); assertEquals(mergeLaunchesRQ, requestArgumentCaptor.getValue()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/ws/controller/LogAsyncControllerTest.java b/src/test/java/com/epam/ta/reportportal/ws/controller/LogAsyncControllerTest.java index 4edba9ed06..46a9c81829 100644 --- a/src/test/java/com/epam/ta/reportportal/ws/controller/LogAsyncControllerTest.java +++ b/src/test/java/com/epam/ta/reportportal/ws/controller/LogAsyncControllerTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.ws.controller; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; @@ -75,16 +76,16 @@ void createLog() { when(projectExtractor.extractProjectDetails(any(ReportPortalUser.class), anyString())).thenReturn(user.getProjectDetails() - .get("test_project")); + .get(TEST_PROJECT_KEY)); - logAsyncController.createLog("test_project", saveLogRQ, user); + logAsyncController.createLog(TEST_PROJECT_KEY, saveLogRQ, user); verify(createLogHandler).createLog(requestArgumentCaptor.capture(), fileArgumentCaptor.capture(), projectDetailsArgumentCaptor.capture()); verify(validator).validate(requestArgumentCaptor.capture()); requestArgumentCaptor.getAllValues().forEach(rq -> assertEquals(saveLogRQ, rq)); assertEquals(null, fileArgumentCaptor.getValue()); - assertEquals(user.getProjectDetails().get("test_project"), + assertEquals(user.getProjectDetails().get(TEST_PROJECT_KEY), projectDetailsArgumentCaptor.getValue()); } @@ -102,16 +103,16 @@ void createLogEntry() { when(projectExtractor.extractProjectDetails(any(ReportPortalUser.class), anyString())).thenReturn(user.getProjectDetails() - .get("test_project")); + .get(TEST_PROJECT_KEY)); - logAsyncController.createLogEntry("test_project", saveLogRQ, user); + logAsyncController.createLogEntry(TEST_PROJECT_KEY, saveLogRQ, user); verify(createLogHandler).createLog(requestArgumentCaptor.capture(), fileArgumentCaptor.capture(), projectDetailsArgumentCaptor.capture()); verify(validator).validate(requestArgumentCaptor.capture()); requestArgumentCaptor.getAllValues().forEach(rq -> assertEquals(saveLogRQ, rq)); assertEquals(null, fileArgumentCaptor.getValue()); - assertEquals(user.getProjectDetails().get("test_project"), + assertEquals(user.getProjectDetails().get(TEST_PROJECT_KEY), projectDetailsArgumentCaptor.getValue()); } @@ -130,9 +131,9 @@ void createLogs() { when(projectExtractor.extractProjectDetails(any(ReportPortalUser.class), anyString())).thenReturn(user.getProjectDetails() - .get("test_project")); + .get(TEST_PROJECT_KEY)); - logAsyncController.createLog("test_project", saveLogRQs, httpServletRequest, user); + logAsyncController.createLog(TEST_PROJECT_KEY, saveLogRQs, httpServletRequest, user); verify(validator, times(4)).validate(requestArgumentCaptor.capture()); verify(createLogHandler, times(2)).createLog(requestArgumentCaptor.capture(), fileArgumentCaptor.capture(), projectDetailsArgumentCaptor.capture()); @@ -144,6 +145,6 @@ void createLogs() { requestArgumentCaptor.getAllValues().forEach(arg -> assertEquals(saveLogRQ, arg)); fileArgumentCaptor.getAllValues().forEach(arg -> assertEquals(null, arg)); projectDetailsArgumentCaptor.getAllValues() - .forEach(arg -> assertEquals(user.getProjectDetails().get("test_project"), arg)); + .forEach(arg -> assertEquals(user.getProjectDetails().get(TEST_PROJECT_KEY), arg)); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/ws/controller/OrganizationControllerTest.java b/src/test/java/com/epam/ta/reportportal/ws/controller/OrganizationControllerTest.java new file mode 100644 index 0000000000..22ea6371c3 --- /dev/null +++ b/src/test/java/com/epam/ta/reportportal/ws/controller/OrganizationControllerTest.java @@ -0,0 +1,41 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.ws.controller; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import com.epam.ta.reportportal.ws.BaseMvcTest; +import org.junit.jupiter.api.Test; + +/** + * @author Andrei Piankouski + */ +public class OrganizationControllerTest extends BaseMvcTest { + + @Test + void getOrganization() throws Exception { + mockMvc.perform(get("/organization/1").with(token(oAuthHelper.getSuperadminToken()))) + .andExpect(status().isOk()); + } + + @Test + void getAllOrganizations() throws Exception { + mockMvc.perform(get("/organization/list").with(token(oAuthHelper.getSuperadminToken()))) + .andExpect(status().isOk()); + } +} diff --git a/src/test/java/com/epam/ta/reportportal/ws/controller/ProjectControllerTest.java b/src/test/java/com/epam/ta/reportportal/ws/controller/ProjectControllerTest.java index 4ddfa28f0d..bb6ee31f0a 100644 --- a/src/test/java/com/epam/ta/reportportal/ws/controller/ProjectControllerTest.java +++ b/src/test/java/com/epam/ta/reportportal/ws/controller/ProjectControllerTest.java @@ -16,14 +16,30 @@ package com.epam.ta.reportportal.ws.controller; +import static java.util.Collections.singletonList; +import static org.hamcrest.Matchers.hasSize; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.springframework.http.MediaType.APPLICATION_JSON; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + import com.epam.ta.reportportal.core.events.activity.ProjectIndexEvent; import com.epam.ta.reportportal.dao.ProjectRepository; import com.epam.ta.reportportal.entity.enums.LogicalOperator; import com.epam.ta.reportportal.entity.project.Project; import com.epam.ta.reportportal.entity.project.ProjectAttribute; -import com.epam.ta.reportportal.ws.BaseMvcTest; import com.epam.ta.reportportal.model.DeleteBulkRQ; -import com.epam.ta.reportportal.ws.model.attribute.ItemAttributeResource; import com.epam.ta.reportportal.model.project.AssignUsersRQ; import com.epam.ta.reportportal.model.project.CreateProjectRQ; import com.epam.ta.reportportal.model.project.UnassignUsersRQ; @@ -31,12 +47,20 @@ import com.epam.ta.reportportal.model.project.config.ProjectConfigurationUpdate; import com.epam.ta.reportportal.model.project.email.ProjectNotificationConfigDTO; import com.epam.ta.reportportal.model.project.email.SenderCaseDTO; +import com.epam.ta.reportportal.ws.BaseMvcTest; +import com.epam.ta.reportportal.ws.model.attribute.ItemAttributeResource; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.rabbitmq.http.client.Client; import com.rabbitmq.http.client.domain.ExchangeInfo; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; @@ -48,18 +72,6 @@ import org.springframework.test.context.jdbc.Sql; import org.springframework.test.web.servlet.ResultActions; -import java.util.*; - -import static java.util.Collections.singletonList; -import static org.hamcrest.Matchers.hasSize; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; -import static org.springframework.http.MediaType.APPLICATION_JSON; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - /** * @author <a href="mailto:ihar_kahadouski@epam.com">Ihar Kahadouski</a> */ @@ -90,6 +102,8 @@ void createProjectPositive() throws Exception { CreateProjectRQ rq = new CreateProjectRQ(); rq.setProjectName("TestProject"); rq.setEntryType("INTERNAL"); + rq.setOrganizationId(1L); + mockMvc.perform(post("/v1/project").content(objectMapper.writeValueAsBytes(rq)) .contentType(APPLICATION_JSON) .with(token(oAuthHelper.getSuperadminToken()))).andExpect(status().isCreated()); @@ -140,7 +154,7 @@ void updateProjectPositive() throws Exception { .contentType(APPLICATION_JSON) .with(token(oAuthHelper.getSuperadminToken()))).andExpect(status().isOk()); - Project project = projectRepository.findByName("test_project").get(); + Project project = projectRepository.findByKey("test_project").get(); projectAttributes.forEach((key, value) -> { Optional<ProjectAttribute> pa = project.getProjectAttributes() .stream() diff --git a/src/test/java/com/epam/ta/reportportal/ws/controller/TestItemAsyncControllerTest.java b/src/test/java/com/epam/ta/reportportal/ws/controller/TestItemAsyncControllerTest.java index d0618eabc4..a8f92d3975 100644 --- a/src/test/java/com/epam/ta/reportportal/ws/controller/TestItemAsyncControllerTest.java +++ b/src/test/java/com/epam/ta/reportportal/ws/controller/TestItemAsyncControllerTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.ws.controller; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_PROJECT_KEY; import static com.epam.ta.reportportal.ReportPortalUserUtil.getRpUser; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; @@ -73,15 +74,15 @@ void startRootItem() { when(projectExtractor.extractProjectDetails(any(ReportPortalUser.class), anyString())).thenReturn(user.getProjectDetails() - .get("test_project")); + .get(TEST_PROJECT_KEY)); - testItemAsyncController.startRootItem("test_project", user, startTestItemRQ); + testItemAsyncController.startRootItem(TEST_PROJECT_KEY, user, startTestItemRQ); verify(startTestItemHandler).startRootItem(userArgumentCaptor.capture(), projectDetailsArgumentCaptor.capture(), requestArgumentCaptor.capture() ); assertEquals(user, userArgumentCaptor.getValue()); - assertEquals(user.getProjectDetails().get("test_project"), + assertEquals(user.getProjectDetails().get(TEST_PROJECT_KEY), projectDetailsArgumentCaptor.getValue()); assertEquals(startTestItemRQ, requestArgumentCaptor.getValue()); } @@ -104,16 +105,16 @@ void startChildItem() { when(projectExtractor.extractProjectDetails(any(ReportPortalUser.class), anyString())).thenReturn(user.getProjectDetails() - .get("test_project")); + .get(TEST_PROJECT_KEY)); - testItemAsyncController.startChildItem("test_project", user, parentItem, startTestItemRQ); + testItemAsyncController.startChildItem(TEST_PROJECT_KEY, user, parentItem, startTestItemRQ); verify(startTestItemHandler).startChildItem(userArgumentCaptor.capture(), projectDetailsArgumentCaptor.capture(), requestArgumentCaptor.capture(), parentArgumentCaptor.capture() ); assertEquals(user, userArgumentCaptor.getValue()); - assertEquals(user.getProjectDetails().get("test_project"), + assertEquals(user.getProjectDetails().get(TEST_PROJECT_KEY), projectDetailsArgumentCaptor.getValue()); assertEquals(startTestItemRQ, requestArgumentCaptor.getValue()); } @@ -137,17 +138,17 @@ void finishTestItem() { when(projectExtractor.extractProjectDetails(any(ReportPortalUser.class), anyString())).thenReturn(user.getProjectDetails() - .get("test_project")); + .get(TEST_PROJECT_KEY)); - testItemAsyncController.finishTestItem("test_project", user, testItemId, finishTestItemRQ); + testItemAsyncController.finishTestItem(TEST_PROJECT_KEY, user, testItemId, finishTestItemRQ); verify(finishTestItemHandler).finishTestItem(userArgumentCaptor.capture(), projectDetailsArgumentCaptor.capture(), testItemCaptor.capture(), requestArgumentCaptor.capture() ); assertEquals(user, userArgumentCaptor.getValue()); - assertEquals(user.getProjectDetails().get("test_project"), + assertEquals(user.getProjectDetails().get(TEST_PROJECT_KEY), projectDetailsArgumentCaptor.getValue()); assertEquals(finishTestItemRQ, requestArgumentCaptor.getValue()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/ws/controller/UserControllerTest.java b/src/test/java/com/epam/ta/reportportal/ws/controller/UserControllerTest.java index 7807873e40..64cf3a1199 100644 --- a/src/test/java/com/epam/ta/reportportal/ws/controller/UserControllerTest.java +++ b/src/test/java/com/epam/ta/reportportal/ws/controller/UserControllerTest.java @@ -16,6 +16,20 @@ package com.epam.ta.reportportal.ws.controller; +import static com.epam.ta.reportportal.commons.EntityUtils.normalizeId; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.when; +import static org.springframework.http.MediaType.APPLICATION_JSON; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + import com.epam.ta.reportportal.dao.IssueTypeRepository; import com.epam.ta.reportportal.dao.ProjectRepository; import com.epam.ta.reportportal.dao.UserRepository; @@ -24,13 +38,24 @@ import com.epam.ta.reportportal.entity.item.issue.IssueType; import com.epam.ta.reportportal.entity.project.Project; import com.epam.ta.reportportal.entity.project.ProjectIssueType; -import com.epam.ta.reportportal.ws.BaseMvcTest; import com.epam.ta.reportportal.model.DeleteBulkRQ; import com.epam.ta.reportportal.model.Page; +import com.epam.ta.reportportal.model.user.ChangePasswordRQ; +import com.epam.ta.reportportal.model.user.CreateUserBidRS; +import com.epam.ta.reportportal.model.user.CreateUserRQ; +import com.epam.ta.reportportal.model.user.CreateUserRQConfirm; +import com.epam.ta.reportportal.model.user.CreateUserRQFull; +import com.epam.ta.reportportal.model.user.CreateUserRS; +import com.epam.ta.reportportal.model.user.EditUserRQ; +import com.epam.ta.reportportal.model.user.ResetPasswordRQ; +import com.epam.ta.reportportal.model.user.RestorePasswordRQ; +import com.epam.ta.reportportal.ws.BaseMvcTest; import com.epam.ta.reportportal.ws.model.ValidationConstraints; -import com.epam.ta.reportportal.model.user.*; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Lists; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; @@ -39,19 +64,6 @@ import org.springframework.test.context.jdbc.Sql; import org.springframework.test.web.servlet.MvcResult; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -import static com.epam.ta.reportportal.commons.EntityUtils.normalizeId; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.when; -import static org.springframework.http.MediaType.APPLICATION_JSON; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - /** * @author <a href="mailto:ihar_kahadouski@epam.com">Ihar Kahadouski</a> */ @@ -376,4 +388,4 @@ void exportUsers() throws Exception { mockMvc.perform(get("/v1/user/export").with(token(oAuthHelper.getSuperadminToken()))) .andExpect(status().isOk()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/epam/ta/reportportal/ws/converter/converters/OrganizationConverterTest.java b/src/test/java/com/epam/ta/reportportal/ws/converter/converters/OrganizationConverterTest.java new file mode 100644 index 0000000000..a71a58320b --- /dev/null +++ b/src/test/java/com/epam/ta/reportportal/ws/converter/converters/OrganizationConverterTest.java @@ -0,0 +1,53 @@ +/* + * Copyright 2024 EPAM Systems + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.epam.ta.reportportal.ws.converter.converters; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import com.epam.ta.reportportal.entity.enums.OrganizationType; +import com.epam.ta.reportportal.entity.organization.Organization; +import com.epam.ta.reportportal.model.OrganizationResource; +import java.time.LocalDateTime; +import org.junit.jupiter.api.Test; + +/** + * @author Andrei Piankouski + */ +class OrganizationConverterTest { + + @Test + void testNull() { + assertThrows(NullPointerException.class, + () -> OrganizationConverter.TO_ORGANIZATION_RESOURCE.apply(null)); + } + + @Test + void testConvert() { + final Organization org = new Organization(1L, + LocalDateTime.now(), + "my-org-name", + OrganizationType.INTERNAL, + "my-org-slug"); + + final OrganizationResource organizationResource = OrganizationConverter.TO_ORGANIZATION_RESOURCE.apply(org); + + assertEquals(organizationResource.getOrganizationId(), org.getId()); + assertEquals(organizationResource.getOrganizationName(), org.getName()); + assertEquals(organizationResource.getOrganizationSlug(), org.getSlug()); + } +} diff --git a/src/test/java/com/epam/ta/reportportal/ws/converter/converters/UserConverterTest.java b/src/test/java/com/epam/ta/reportportal/ws/converter/converters/UserConverterTest.java index 9cc250ff48..1ed79706d0 100644 --- a/src/test/java/com/epam/ta/reportportal/ws/converter/converters/UserConverterTest.java +++ b/src/test/java/com/epam/ta/reportportal/ws/converter/converters/UserConverterTest.java @@ -16,6 +16,7 @@ package com.epam.ta.reportportal.ws.converter.converters; +import static com.epam.ta.reportportal.OrganizationUtil.TEST_ORG; import static org.assertj.core.api.Java6Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -49,8 +50,7 @@ void toResource() { assertEquals(resource.getUserRole(), user.getRole().name()); assertEquals(resource.getAccountType(), user.getUserType().name()); assertEquals(resource.getPhotoId(), user.getAttachment()); - assertThat((HashMap<String, Object>) resource.getMetadata()).containsAllEntriesOf( - getMetadata()); + assertThat((HashMap<String, Object>) resource.getMetadata()).containsAllEntriesOf(getMetadata()); assertThat(resource.getAssignedProjects()).containsKeys("project1", "project2"); } @@ -78,17 +78,24 @@ private static User getUser() { user.setExpired(false); final HashMap<String, Object> metadata = getMetadata(); user.setMetadata(new Metadata(metadata)); + final Project project1 = new Project(); project1.setName("project1"); + project1.setKey("project1"); project1.setProjectType(ProjectType.INTERNAL); + project1.setOrganization(TEST_ORG); final ProjectUser projectUser1 = new ProjectUser().withProject(project1).withProjectRole(ProjectRole.MEMBER).withUser(user); + final Project project2 = new Project(); project2.setName("project2"); + project2.setKey("project2"); project2.setProjectType(ProjectType.INTERNAL); + project2.setOrganization(TEST_ORG); final ProjectUser projectUser2 = new ProjectUser().withProject(project2).withProjectRole(ProjectRole.PROJECT_MANAGER) .withUser(user); + user.setProjects(Sets.newHashSet(projectUser1, projectUser2)); return user; } @@ -99,4 +106,4 @@ private static HashMap<String, Object> getMetadata() { metadata.put("key2", "value2"); return metadata; } -} \ No newline at end of file +} diff --git a/src/test/resources/db/migration/V001004__add_organizations.sql b/src/test/resources/db/migration/V001004__add_organizations.sql new file mode 100644 index 0000000000..507a0cca0a --- /dev/null +++ b/src/test/resources/db/migration/V001004__add_organizations.sql @@ -0,0 +1,24 @@ +-- Update 'project' table +INSERT INTO public.organization (name, slug, organization_type) + VALUES ('My org', 'my-org', 'INTERNAL'); + +UPDATE public.project AS prj SET + "organization_id" = 1, + "key" = slugify(name), + "slug" = slugify(name); + +INSERT INTO organization_user (user_id, organization_id, organization_role) +(SELECT pu.user_id, (SELECT o.id FROM organization o LIMIT 1), (SELECT 'MEMBER'::public."organization_role_enum") +FROM project_user pu +WHERE pu."project_role" IN + ('OPERATOR'::public."project_role_enum", + 'CUSTOMER'::public."project_role_enum", + 'MEMBER'::public."project_role_enum" + ) +); + + +INSERT INTO organization_user (user_id, organization_id, organization_role ) +(SELECT pu.user_id, (SELECT o.id FROM organization o LIMIT 1), (SELECT 'MANAGER'::public."organization_role_enum") +FROM project_user pu +WHERE pu.project_role = 'PROJECT_MANAGER'::public."project_role_enum"); diff --git a/src/test/resources/db/project/project-fill.sql b/src/test/resources/db/project/project-fill.sql index 576a09817f..d3b4b75224 100644 --- a/src/test/resources/db/project/project-fill.sql +++ b/src/test/resources/db/project/project-fill.sql @@ -1,5 +1,8 @@ -insert into project (id, name, project_type, organization, creation_date) -values (3, 'test_project', 'INTERNAL', 'org', now()); +INSERT INTO public.organization (id, name, slug, organization_type) + VALUES (101, 'test Org', 'org', 'INTERNAL'); + +insert into project (id, name, project_type, organization, organization_id, key, slug, creation_date) +values (3, 'test_project', 'INTERNAL', 'org', 101, 'test_project', 'test_project', now()); INSERT INTO project_attribute (attribute_id, value, project_id) VALUES (1, '1 day', 3), @@ -164,4 +167,4 @@ insert into launch(id, uuid, project_id, user_id, name, description, start_time, values (3, 'uuid3', 1, 1, 'empty launch', 'desc', now(), null, 2, now(), 'DEFAULT', 'FAILED', false); alter sequence project_id_seq restart with 4; -alter sequence users_id_seq restart with 4; \ No newline at end of file +alter sequence users_id_seq restart with 4;