Browse Source

SONAR-21821 Add monorepo related project 'CreationMethod's

tags/10.5.0.89998
Wojtek Wajerowicz 1 month ago
parent
commit
0720dee972

+ 5
- 1
server/sonar-db-dao/src/main/java/org/sonar/db/project/CreationMethod.java View File

LOCAL_BROWSER(Category.LOCAL, true, true), LOCAL_BROWSER(Category.LOCAL, true, true),
ALM_IMPORT_API(Category.ALM_IMPORT, false, false), ALM_IMPORT_API(Category.ALM_IMPORT, false, false),
ALM_IMPORT_BROWSER(Category.ALM_IMPORT, true, false), ALM_IMPORT_BROWSER(Category.ALM_IMPORT, true, false),
ALM_IMPORT_MONOREPO_API(Category.ALM_IMPORT_MONOREPO, false, false),
ALM_IMPORT_MONOREPO_BROWSER(Category.ALM_IMPORT_MONOREPO, true, false),
SCANNER_API(Category.SCANNER, false, true), SCANNER_API(Category.SCANNER, false, true),
SCANNER_API_DEVOPS_AUTO_CONFIG(Category.SCANNER, false, false); SCANNER_API_DEVOPS_AUTO_CONFIG(Category.SCANNER, false, false);


return isLocal; return isLocal;
} }


public enum Category {UNKNOWN, LOCAL, ALM_IMPORT, SCANNER}
public enum Category {
UNKNOWN, LOCAL, ALM_IMPORT, ALM_IMPORT_MONOREPO, SCANNER
}
} }

+ 12
- 9
server/sonar-db-dao/src/test/java/org/sonar/db/project/CreationMethodTest.java View File

import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsProvider;
import org.junit.jupiter.params.provider.ArgumentsSource; import org.junit.jupiter.params.provider.ArgumentsSource;
import org.sonar.db.project.CreationMethod.Category;


import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;


static class CreationMethodProvider implements ArgumentsProvider { static class CreationMethodProvider implements ArgumentsProvider {
@Override @Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) { public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
return Stream.of(Arguments.of(CreationMethod.Category.UNKNOWN, true, CreationMethod.UNKNOWN),
Arguments.of(CreationMethod.Category.UNKNOWN, false, CreationMethod.UNKNOWN),
Arguments.of(CreationMethod.Category.LOCAL, true, CreationMethod.LOCAL_BROWSER),
Arguments.of(CreationMethod.Category.LOCAL, false, CreationMethod.LOCAL_API),
Arguments.of(CreationMethod.Category.ALM_IMPORT, true, CreationMethod.ALM_IMPORT_BROWSER),
Arguments.of(CreationMethod.Category.ALM_IMPORT, false, CreationMethod.ALM_IMPORT_API),
Arguments.of(CreationMethod.Category.SCANNER, true, CreationMethod.UNKNOWN),
Arguments.of(CreationMethod.Category.SCANNER, false, CreationMethod.SCANNER_API));
return Stream.of(Arguments.of(Category.UNKNOWN, true, CreationMethod.UNKNOWN),
Arguments.of(Category.UNKNOWN, false, CreationMethod.UNKNOWN),
Arguments.of(Category.LOCAL, true, CreationMethod.LOCAL_BROWSER),
Arguments.of(Category.LOCAL, false, CreationMethod.LOCAL_API),
Arguments.of(Category.ALM_IMPORT, true, CreationMethod.ALM_IMPORT_BROWSER),
Arguments.of(Category.ALM_IMPORT, false, CreationMethod.ALM_IMPORT_API),
Arguments.of(Category.ALM_IMPORT_MONOREPO, true, CreationMethod.ALM_IMPORT_MONOREPO_BROWSER),
Arguments.of(Category.ALM_IMPORT_MONOREPO, false, CreationMethod.ALM_IMPORT_MONOREPO_API),
Arguments.of(Category.SCANNER, true, CreationMethod.UNKNOWN),
Arguments.of(Category.SCANNER, false, CreationMethod.SCANNER_API));
} }
} }


@ParameterizedTest() @ParameterizedTest()
@ArgumentsSource(CreationMethodProvider.class) @ArgumentsSource(CreationMethodProvider.class)
void getCreationMethod_returnsCorrectCreationMethod(CreationMethod.Category category, boolean isCreatedViaBrowser,
void getCreationMethod_returnsCorrectCreationMethod(Category category, boolean isCreatedViaBrowser,
CreationMethod expectedCreationMethod) { CreationMethod expectedCreationMethod) {
CreationMethod creationMethod = CreationMethod.getCreationMethod(category, isCreatedViaBrowser); CreationMethod creationMethod = CreationMethod.getCreationMethod(category, isCreatedViaBrowser);
assertThat(creationMethod).isEqualTo(expectedCreationMethod); assertThat(creationMethod).isEqualTo(expectedCreationMethod);

+ 10
- 2
server/sonar-webserver-common/src/main/java/org/sonar/server/common/project/ImportProjectService.java View File

import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;


import static java.lang.String.format; import static java.lang.String.format;
import static org.sonar.db.project.CreationMethod.getCreationMethod;
import static org.sonar.db.project.CreationMethod.Category.ALM_IMPORT; import static org.sonar.db.project.CreationMethod.Category.ALM_IMPORT;
import static org.sonar.db.project.CreationMethod.Category.ALM_IMPORT_MONOREPO;
import static org.sonar.server.common.newcodeperiod.NewCodeDefinitionResolver.checkNewCodeDefinitionParam; import static org.sonar.server.common.newcodeperiod.NewCodeDefinitionResolver.checkNewCodeDefinitionParam;


@ServerSide @ServerSide
DevOpsProjectCreator projectCreator = devOpsProjectCreatorFactory.getDevOpsProjectCreator(almSetting, projectDescriptor) DevOpsProjectCreator projectCreator = devOpsProjectCreatorFactory.getDevOpsProjectCreator(almSetting, projectDescriptor)
.orElseThrow(() -> new IllegalArgumentException(format("Platform %s not supported", almSetting.getAlm().name()))); .orElseThrow(() -> new IllegalArgumentException(format("Platform %s not supported", almSetting.getAlm().name())));


CreationMethod creationMethod = getCreationMethod(ALM_IMPORT, userSession.isAuthenticatedBrowserSession());
CreationMethod creationMethod = getCreationMethod(request.monorepo());
ComponentCreationData componentCreationData = projectCreator.createProjectAndBindToDevOpsPlatform( ComponentCreationData componentCreationData = projectCreator.createProjectAndBindToDevOpsPlatform(
dbSession, dbSession,
creationMethod, creationMethod,
} }
} }


private CreationMethod getCreationMethod(boolean monorepo) {
if (monorepo) {
return CreationMethod.getCreationMethod(ALM_IMPORT_MONOREPO, userSession.isAuthenticatedBrowserSession());
} else {
return CreationMethod.getCreationMethod(ALM_IMPORT, userSession.isAuthenticatedBrowserSession());
}
}

} }

+ 8
- 5
server/sonar-webserver-common/src/test/java/org/sonar/server/common/project/ImportProjectServiceTest.java View File

import org.sonar.db.alm.setting.AlmSettingDto; import org.sonar.db.alm.setting.AlmSettingDto;
import org.sonar.db.alm.setting.ProjectAlmSettingDto; import org.sonar.db.alm.setting.ProjectAlmSettingDto;
import org.sonar.db.component.BranchDto; import org.sonar.db.component.BranchDto;
import org.sonar.db.project.CreationMethod;
import org.sonar.db.project.ProjectDto; import org.sonar.db.project.ProjectDto;
import org.sonar.server.common.almsettings.DevOpsProjectCreator; import org.sonar.server.common.almsettings.DevOpsProjectCreator;
import org.sonar.server.common.almsettings.DevOpsProjectCreatorFactory; import org.sonar.server.common.almsettings.DevOpsProjectCreatorFactory;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static org.sonar.db.permission.GlobalPermission.PROVISION_PROJECTS; import static org.sonar.db.permission.GlobalPermission.PROVISION_PROJECTS;
import static org.sonar.db.project.CreationMethod.ALM_IMPORT_API;
import static org.sonar.db.project.CreationMethod.ALM_IMPORT_MONOREPO_API;


class ImportProjectServiceTest { class ImportProjectServiceTest {




DevOpsProjectCreator devOpsProjectCreator = mockDevOpsProjectCreator(almSetting); DevOpsProjectCreator devOpsProjectCreator = mockDevOpsProjectCreator(almSetting);


ComponentCreationData componentCreationData = mockProjectCreation(devOpsProjectCreator, dbSession);
ComponentCreationData componentCreationData = mockProjectCreation(devOpsProjectCreator, ALM_IMPORT_MONOREPO_API, true, dbSession);


ProjectDto projectDto = mockProjectDto(componentCreationData); ProjectDto projectDto = mockProjectDto(componentCreationData);
when(componentCreationData.mainBranchDto()).thenReturn(mock(BranchDto.class)); when(componentCreationData.mainBranchDto()).thenReturn(mock(BranchDto.class));


DevOpsProjectCreator devOpsProjectCreator = mockDevOpsProjectCreator(almSetting); DevOpsProjectCreator devOpsProjectCreator = mockDevOpsProjectCreator(almSetting);


ComponentCreationData componentCreationData = mockProjectCreation(devOpsProjectCreator, dbSession);
ComponentCreationData componentCreationData = mockProjectCreation(devOpsProjectCreator, ALM_IMPORT_API, false, dbSession);


ProjectDto projectDto = mockProjectDto(componentCreationData); ProjectDto projectDto = mockProjectDto(componentCreationData);
mockBranchDto(componentCreationData); mockBranchDto(componentCreationData);


ProjectAlmSettingDto projectAlmSettingDto = mockProjectAlmSetting(dbSession, projectDto); ProjectAlmSettingDto projectAlmSettingDto = mockProjectAlmSetting(dbSession, projectDto);


ImportProjectRequest request = new ImportProjectRequest(PROJECT_KEY, PROJECT_NAME, ALM_SETTING_ID, DOP_REPOSITORY_ID, DOP_PROJECT_ID, "NUMBER_OF_DAYS", "10", true);
ImportProjectRequest request = new ImportProjectRequest(PROJECT_KEY, PROJECT_NAME, ALM_SETTING_ID, DOP_REPOSITORY_ID, DOP_PROJECT_ID, "NUMBER_OF_DAYS", "10", false);


ImportedProject importedProject = importProjectService.importProject(request); ImportedProject importedProject = importProjectService.importProject(request);


return devOpsProjectCreator; return devOpsProjectCreator;
} }


private static ComponentCreationData mockProjectCreation(DevOpsProjectCreator devOpsProjectCreator, DbSession dbSession) {
private static ComponentCreationData mockProjectCreation(DevOpsProjectCreator devOpsProjectCreator, CreationMethod creationMethod, boolean monorepo, DbSession dbSession) {
ComponentCreationData componentCreationData = mock(ComponentCreationData.class); ComponentCreationData componentCreationData = mock(ComponentCreationData.class);
when(devOpsProjectCreator.createProjectAndBindToDevOpsPlatform(eq(dbSession), any(), eq(true), eq(PROJECT_KEY), eq(PROJECT_NAME)))
when(devOpsProjectCreator.createProjectAndBindToDevOpsPlatform(dbSession, creationMethod, monorepo, PROJECT_KEY, PROJECT_NAME))
.thenReturn(componentCreationData); .thenReturn(componentCreationData);
return componentCreationData; return componentCreationData;
} }

Loading…
Cancel
Save