}
public ComponentDto insertPrivateProject() {
- return insertComponentImpl(ComponentTesting.newPrivateProjectDto(db.getDefaultOrganization()), true, noExtraConfiguration());
+ return insertComponentImpl(newPrivateProjectDto(db.getDefaultOrganization()), true, noExtraConfiguration());
}
public ComponentDto insertPublicProject() {
@SafeVarargs
public final ComponentDto insertPrivateProject(Consumer<ComponentDto>... dtoPopulators) {
- return insertComponentImpl(ComponentTesting.newPrivateProjectDto(db.getDefaultOrganization()), true, dtoPopulators);
+ return insertComponentImpl(newPrivateProjectDto(db.getDefaultOrganization()), true, dtoPopulators);
}
@SafeVarargs
@SafeVarargs
public final ComponentDto insertPrivateProject(OrganizationDto organizationDto, Consumer<ComponentDto>... dtoPopulators) {
- return insertComponentImpl(ComponentTesting.newPrivateProjectDto(organizationDto), true, dtoPopulators);
+ return insertComponentImpl(newPrivateProjectDto(organizationDto), true, dtoPopulators);
}
@SafeVarargs
}
public ComponentDto insertPrivateProject(OrganizationDto organizationDto) {
- return insertComponentImpl(ComponentTesting.newPrivateProjectDto(organizationDto), true, noExtraConfiguration());
+ return insertComponentImpl(newPrivateProjectDto(organizationDto), true, noExtraConfiguration());
}
public ComponentDto insertPublicProject(OrganizationDto organizationDto) {
db.commit();
}
+ @SafeVarargs
+ public final ComponentDto insertMainBranch(Consumer<ComponentDto>... dtoPopulators) {
+ return insertMainBranch(db.getDefaultOrganization(), dtoPopulators);
+ }
+
+ @SafeVarargs
+ public final ComponentDto insertMainBranch(OrganizationDto organization, Consumer<ComponentDto>... dtoPopulators) {
+ ComponentDto project = newPrivateProjectDto(organization);
+ BranchDto branchDto = new BranchDto()
+ .setKey(null)
+ .setUuid(project.uuid())
+ .setProjectUuid(project.projectUuid())
+ .setKeeType(BRANCH)
+ .setBranchType(LONG);
+ Arrays.stream(dtoPopulators).forEach(dtoPopulator -> dtoPopulator.accept(project));
+ insertComponent(project);
+ dbClient.branchDao().insert(dbSession, branchDto);
+ db.commit();
+ return project;
+ }
+
@SafeVarargs
public final ComponentDto insertProjectBranch(ComponentDto project, Consumer<BranchDto>... dtoPopulators) {
String uuid = Uuids.createFast();
}
private static void addToProtobuf(WsBranches.ListWsResponse.Builder response, BranchDto branch, Map<String, BranchDto> mergeBranchesByUuid) {
- WsBranches.ListWsResponse.Branch.Builder builder = response.addBranchesBuilder();
+ WsBranches.Branch.Builder builder = response.addBranchesBuilder();
setNullable(branch.getKey(), builder::setName);
builder.setIsMain(branch.isMain());
- builder.setType(WsBranches.ListWsResponse.BranchType.valueOf(branch.getBranchType().name()));
+ builder.setType(WsBranches.Branch.BranchType.valueOf(branch.getBranchType().name()));
String mergeBranchUuid = branch.getMergeBranchUuid();
if (mergeBranchUuid != null) {
- BranchDto megeBranch = mergeBranchesByUuid.get(mergeBranchUuid);
- checkState(megeBranch != null, "Component uuid '%s' cannot be found", megeBranch);
- setNullable(megeBranch.getKey(), builder::setMergeBranch);
+ BranchDto mergeBranch = mergeBranchesByUuid.get(mergeBranchUuid);
+ checkState(mergeBranch != null, "Component uuid '%s' cannot be found", mergeBranch);
+ setNullable(mergeBranch.getKey(), builder::setMergeBranch);
}
builder.build();
}
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.WsActionTester;
import org.sonarqube.ws.MediaTypes;
+import org.sonarqube.ws.WsBranches.Branch;
import org.sonarqube.ws.WsBranches.ListWsResponse;
-import org.sonarqube.ws.WsBranches.ListWsResponse.Branch;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.tuple;
.execute();
}
+ @Test
+ public void main_branch() {
+ ComponentDto project = db.components().insertMainBranch();
+ userSession.logIn().addProjectPermission(UserRole.USER, project);
+
+ ListWsResponse response = tester.newRequest()
+ .setParam("project", project.getDbKey())
+ .executeProtobuf(ListWsResponse.class);
+
+ assertThat(response.getBranchesList())
+ .extracting(Branch::hasName, Branch::getIsMain, Branch::getType)
+ .containsExactlyInAnyOrder(tuple(false, true, Branch.BranchType.LONG));
+ }
+
@Test
public void test_project_with_zero_branches() {
ComponentDto project = db.components().insertPrivateProject();
@Test
public void test_project_with_branches() {
- ComponentDto project = db.components().insertPrivateProject();
+ ComponentDto project = db.components().insertMainBranch();
db.components().insertProjectBranch(project, b -> b.setKey("feature/bar"));
db.components().insertProjectBranch(project, b -> b.setKey("feature/foo"));
userSession.logIn().addProjectPermission(UserRole.USER, project);
assertThat(response.getBranchesList())
.extracting(Branch::getName, Branch::getType)
.containsExactlyInAnyOrder(
- tuple("feature/foo", ListWsResponse.BranchType.LONG),
- tuple("feature/bar", ListWsResponse.BranchType.LONG));
+ tuple("", Branch.BranchType.LONG),
+ tuple("feature/foo", Branch.BranchType.LONG),
+ tuple("feature/bar", Branch.BranchType.LONG));
}
@Test
public void short_living_branches() {
- ComponentDto project = db.components().insertPrivateProject();
+ ComponentDto project = db.components().insertMainBranch();
userSession.logIn().addProjectPermission(UserRole.USER, project);
ComponentDto longLivingBranch = db.components().insertProjectBranch(project,
b -> b.setKey("long").setBranchType(BranchType.LONG));
assertThat(response.getBranchesList())
.extracting(Branch::getName, Branch::getType, Branch::getMergeBranch)
.containsExactlyInAnyOrder(
- tuple(longLivingBranch.getBranch(), ListWsResponse.BranchType.LONG, ""),
- tuple(shortLivingBranch.getBranch(), ListWsResponse.BranchType.SHORT, longLivingBranch.getBranch()),
- tuple(shortLivingBranchOnMaster.getBranch(), ListWsResponse.BranchType.SHORT, ""));
+ tuple("", Branch.BranchType.LONG, ""),
+ tuple(longLivingBranch.getBranch(), Branch.BranchType.LONG, ""),
+ tuple(shortLivingBranch.getBranch(), Branch.BranchType.SHORT, longLivingBranch.getBranch()),
+ tuple(shortLivingBranchOnMaster.getBranch(), Branch.BranchType.SHORT, ""));
}
@Test
// WS api/project_branches/list
message ListWsResponse {
repeated Branch branches = 1;
+}
- message Branch {
- optional string name = 1;
- optional bool isMain = 2;
- optional BranchType type = 3;
- // Merge branch is only present if it's a short living branch
- optional string mergeBranch = 4;
+message Branch {
+ optional string name = 1;
+ optional string project = 2;
+ optional bool isMain = 3;
+ optional BranchType type = 4;
+ // Merge branch is only present for short living branch
+ optional string mergeBranch = 5;
+ optional Status status = 6;
+
+ message Status {
+ // Quality gate status is only present for long living branch
+ optional string qualityGateStatus = 1;
+ // Merge bugs, vulnerabilities and codeSmell are only present for short living branch
+ optional string bugs = 2;
+ optional string vulnerabilities = 3;
+ optional string codeSmell = 4;
}
enum BranchType {
LONG = 1;
SHORT = 2;
}
-
}