Skip to content

Commit bf3ef7f

Browse files
committed
add ability to get engagement uuid / project id pairs without pulling enagement.json
1 parent 99a0938 commit bf3ef7f

File tree

5 files changed

+78
-14
lines changed

5 files changed

+78
-14
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.redhat.labs.lodestar.models;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
@Data
9+
@Builder
10+
@NoArgsConstructor
11+
@AllArgsConstructor
12+
/**
13+
* A class to return an uuid - project id pair
14+
*
15+
*/
16+
public class EngagementProject {
17+
private static final String descriptionPrefixFormat = "engagement UUID: ";
18+
19+
private long projectId;
20+
private String uuid;
21+
22+
public static class EngagementProjectBuilder {
23+
public EngagementProjectBuilder uuid(String uuid) {
24+
if(uuid != null && uuid.startsWith(descriptionPrefixFormat)) {
25+
this.uuid = uuid.substring(descriptionPrefixFormat.length());
26+
}
27+
return this;
28+
}
29+
}
30+
}
31+

src/main/java/com/redhat/labs/lodestar/resource/EngagementResource.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.slf4j.LoggerFactory;
2929

3030
import com.redhat.labs.lodestar.models.Engagement;
31+
import com.redhat.labs.lodestar.models.EngagementProject;
3132
import com.redhat.labs.lodestar.models.Status;
3233
import com.redhat.labs.lodestar.models.gitlab.Commit;
3334
import com.redhat.labs.lodestar.models.gitlab.Hook;
@@ -182,7 +183,7 @@ public Response deleteAllHooks() {
182183
}
183184

184185
@GET
185-
@Path("project/{uuid}")
186+
@Path("projects/{uuid}")
186187
@Counted(name = "project-by-uuid", description = "Count of project-by-uuid requests")
187188
@Timed(name = "performedProjectByUuidGet", description = "Time to get project", unit = MetricUnits.MILLISECONDS)
188189
@Tag(name = "Projects", description = "Project retrieval")
@@ -195,5 +196,16 @@ public Response getProjectByUuid(@PathParam("uuid") String uuid) {
195196

196197
return Response.ok(p.get()).build();
197198
}
199+
200+
@GET
201+
@Path("projects")
202+
@Counted(name = "engagment-uuid-project-id", description = "Count of engagment-uuid-project-id requests")
203+
@Timed(name = "performedEngagementUuidProjectPairsGet", description = "Time to get all projects engagement uuid", unit = MetricUnits.MILLISECONDS)
204+
@Tag(name = "Projects", description = "Project retrieval")
205+
public Response getEngagementUuidProjectPairs() {
206+
List<EngagementProject> projects = engagementService.getEngagementProjectIdList();
207+
208+
return Response.ok(projects).build();
209+
}
198210

199211
}

src/main/java/com/redhat/labs/lodestar/service/EngagementService.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.redhat.labs.lodestar.config.JsonMarshaller;
2323
import com.redhat.labs.lodestar.exception.UnexpectedGitLabResponseException;
2424
import com.redhat.labs.lodestar.models.Engagement;
25+
import com.redhat.labs.lodestar.models.EngagementProject;
2526
import com.redhat.labs.lodestar.models.EngagementUser;
2627
import com.redhat.labs.lodestar.models.Status;
2728
import com.redhat.labs.lodestar.models.events.DeleteEngagementEvent;
@@ -224,6 +225,14 @@ public Optional<Project> getProject(String customerName, String engagementName)
224225
public Optional<Project> getProjectByUuid(String engagementUuid) {
225226
return projectService.getProjectByEngagementUuid(engagementRepositoryId, engagementUuid);
226227
}
228+
229+
public List<EngagementProject> getEngagementProjectIdList() {
230+
List<Project> projects = projectService.getProjectsByGroup(engagementRepositoryId, true);
231+
List<EngagementProject> eprojects = new ArrayList<>();
232+
projects.forEach(p -> eprojects.add(EngagementProject.builder().uuid(p.getDescription()).projectId(p.getId()).build()));
233+
234+
return eprojects;
235+
}
227236

228237
/**
229238
* Gets all engagements from the base group Structure is BaseGroup - customer

src/test/java/com/redhat/labs/lodestar/resource/EngagementResourceTest.java

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.redhat.labs.lodestar.resource;
22

33
import static io.restassured.RestAssured.given;
4-
import static org.hamcrest.CoreMatchers.is;
54
import static org.hamcrest.CoreMatchers.equalTo;
5+
import static org.hamcrest.CoreMatchers.hasItem;
6+
import static org.hamcrest.CoreMatchers.is;
67

78
import java.util.ArrayList;
8-
import java.util.Arrays;
99
import java.util.List;
1010
import java.util.Optional;
1111
import java.util.concurrent.TimeUnit;
@@ -48,7 +48,7 @@ void testGetAllEngagementsSuccess() {
4848
// get engagements by group
4949
List<Project> projects = new ArrayList<>();
5050
projects.add(Project.builder().id(20).name("iac").build());
51-
MockUtils.setGetProjectsByGroupMock(gitLabService, 20, projects, false);
51+
MockUtils.setGetProjectsByGroupMock(gitLabService, projects);
5252

5353
// get status file
5454
MockUtils.setProjectTreeNodeList(gitLabService, "status.json");
@@ -227,7 +227,7 @@ void testCreateProjectHookFailNoProject() {
227227
@Test
228228
void testDeleteHooksNoProjects() {
229229

230-
MockUtils.setGetProjectsByGroupMock(gitLabService, 2, Lists.newArrayList(), false);
230+
MockUtils.setGetProjectsByGroupMock(gitLabService);
231231

232232
given().when().contentType(ContentType.JSON).delete("/api/v1/engagements/hooks").then().statusCode(200);
233233

@@ -236,7 +236,7 @@ void testDeleteHooksNoProjects() {
236236
@Test
237237
void testDeleteHooksHasProjectNoHooks() {
238238

239-
MockUtils.setGetProjectsByGroupMock(gitLabService, 2, Lists.newArrayList(), true);
239+
MockUtils.setGetProjectsByGroupMock(gitLabService);
240240
MockUtils.setGetProjectHookMock(gitLabService, 4444);
241241

242242
given().when().contentType(ContentType.JSON).delete("/api/v1/engagements/hooks").then().statusCode(200);
@@ -246,7 +246,7 @@ void testDeleteHooksHasProjectNoHooks() {
246246
@Test
247247
void testDeleteHooksHasProjectAndHooks() {
248248

249-
MockUtils.setGetProjectsByGroupMock(gitLabService, 2, Lists.newArrayList(), true);
249+
MockUtils.setGetProjectsByGroupMock(gitLabService);
250250

251251
given().when().contentType(ContentType.JSON).delete("/api/v1/engagements/hooks").then().statusCode(200);
252252

@@ -392,7 +392,7 @@ void testDeleteEngagement() throws InterruptedException {
392392
MockUtils.setGetSubgroupsMock(gitLabService, Optional.empty(), false);
393393
MockUtils.setGetGroupByIdOrPathMock(gitLabService, "customer1", "project1");
394394

395-
MockUtils.setGetProjectsByGroupMock(gitLabService, project.getId(), Arrays.asList(), false);
395+
MockUtils.setGetProjectsByGroupMock(gitLabService);
396396
MockUtils.setDeleteGroupById(gitLabService);
397397
MockUtils.setDeleteProjectById(gitLabService);
398398

@@ -550,9 +550,19 @@ void testGetEngagementsPaged() {
550550
void testGetProjectByUuid() {
551551

552552
MockUtils.setFindProjectByEngagementId(gitLabService, 2, "abcd", Project.builder().id(1).build());
553-
given().when().get("/api/v1/engagements/project/abcd").then().statusCode(200).body("id", equalTo(1));
553+
given().when().get("/api/v1/engagements/projects/abcd").then().statusCode(200).body("id", equalTo(1));
554+
555+
given().when().get("/api/v1/engagements/projects/eeee").then().statusCode(404);
556+
}
557+
558+
@Test
559+
void testGetEngagementUuidProjectId() {
560+
List<Project> projects = new ArrayList<>();
561+
projects.add(Project.builder().id(99).name("iac").description("engagement UUID: 99uuid").build());
562+
MockUtils.setGetProjectsByGroupMock(gitLabService, projects);
554563

555-
given().when().get("/api/v1/engagements/project/eeee").then().statusCode(404);
564+
given().when().get("/api/v1/engagements/projects").then().statusCode(200).body("size()", is(1)).body("project_id", hasItem(99))
565+
.body("uuid", hasItem("99uuid"));
556566
}
557567

558568
}

src/test/java/com/redhat/labs/lodestar/utils/MockUtils.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,13 @@ public static ProjectTreeNode mockProjectTreeNode(String name) {
6868
}
6969

7070
// get projects by group
71-
public static void setGetProjectsByGroupMock(GitLabService gitLabService, Integer projectId, List<Project> projects,
72-
boolean hasProject) {
71+
public static void setGetProjectsByGroupMock(GitLabService gitLabService) {
72+
setGetProjectsByGroupMock(gitLabService, Lists.newArrayList());
73+
}
74+
75+
public static void setGetProjectsByGroupMock(GitLabService gitLabService, List<Project> projects) {
7376
ResponseBuilder r = Response.ok(projects).header("X-Total-Pages", 1);
74-
if (hasProject) {
75-
r.entity(Lists.newArrayList(mockIacProject()));
77+
if (!projects.isEmpty()) {
7678
BDDMockito.given(gitLabService.getProjectsbyGroup(2, true, 100, 1)).willReturn(r.build());
7779
} else {
7880
BDDMockito.given(gitLabService.getProjectsbyGroup(Mockito.anyInt(), Mockito.anyBoolean(), Mockito.eq(100),

0 commit comments

Comments
 (0)