Skip to content

Commit b9513bc

Browse files
API: fix bug on remove quickstarters (deleted quickstarter still returned) - master (#703)
* fix bug on remove quickstarters * verify repo size is untouched
1 parent 046c072 commit b9513bc

File tree

3 files changed

+43
-17
lines changed

3 files changed

+43
-17
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
- Improve authorization of quickstarter endpoint ([#572](https://github.com/opendevstack/ods-provisioning-app/issues/572))
3939
- Unknown exception (e.g. existing JIRA project) raised in REST create project endpoint / addProject causes removal of existing projects ([#514](https://github.com/opendevstack/ods-provisioning-app/issues/514))
4040
- Logging in debug level shows too much jwt details ([#486](https://github.com/opendevstack/ods-provisioning-app/issues/486))
41+
- DELETE_COMPONENTS API stores and returns project with deleted quickstarter([#702](https://github.com/opendevstack/ods-provisioning-app/issues/702))
4142

4243
## [3.0] - 2020-08-11
4344

src/main/java/org/opendevstack/provision/model/OpenProjectData.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,28 @@ public List<Map<String, String>> getQuickstarters() {
118118

119119
public List<Map<String, String>> removeQuickstartersFromProject(
120120
List<Map<String, String>> quickstartersToRemove) {
121+
List<Map<String, String>> removedQuickstarters = new ArrayList<Map<String, String>>();
121122
if (quickstartersToRemove == null) {
122-
return this.quickstarters;
123+
return removedQuickstarters;
123124
}
124-
for (Map<String, String> quickstarter : quickstartersToRemove) {
125-
quickstarters.remove(quickstarter);
125+
for (Map<String, String> quickStarterToRemove : quickstartersToRemove) {
126+
if (quickStarterToRemove.get(COMPONENT_ID_KEY) == null) {
127+
throw new NullPointerException("Cannot delete quickstarter with id null!");
128+
}
129+
// loop over the currently provisioned quickstarters, and find the
130+
// one with similar id - to then remove it.
131+
List<Map<String, String>> currentQuickstarters = getQuickstarters();
132+
for (int i = 0; i < currentQuickstarters.size(); i++) {
133+
Map<String, String> currentQuickstarter = currentQuickstarters.get(i);
134+
if (currentQuickstarter
135+
.get(COMPONENT_ID_KEY)
136+
.equalsIgnoreCase(quickStarterToRemove.get(COMPONENT_ID_KEY))) {
137+
quickstarters.remove(i);
138+
removedQuickstarters.add(currentQuickstarter);
139+
}
140+
}
126141
}
127-
return quickstarters;
142+
return removedQuickstarters;
128143
}
129144

130145
@Override

src/test/java/org/opendevstack/provision/controller/E2EProjectAPIControllerTest.java

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -685,16 +685,12 @@ public void testQuickstarterProvisionOnNewOpenProjectInclDeleteWholeProject() th
685685
assertNotNull(createdProjectIncludingQuickstarters.getQuickstarters());
686686
assertEquals(1, createdProjectIncludingQuickstarters.getQuickstarters().size());
687687

688-
OpenProjectData toClean = new OpenProjectData();
689-
toClean.setProjectKey(createdProjectIncludingQuickstarters.getProjectKey());
690-
toClean.setQuickstarters(createdProjectIncludingQuickstarters.getQuickstarters());
691-
692688
mockExecuteAdminJob("ods", "delete-projects", "testp");
693689

694690
// verify project is there ..
695691
mockMvc
696692
.perform(
697-
get("/api/v2/project/" + toClean.getProjectKey())
693+
get("/api/v2/project/" + createdProjectIncludingQuickstarters.getProjectKey())
698694
.contentType(MediaType.APPLICATION_JSON)
699695
.with(httpBasic(TEST_ADMIN_USERNAME, TEST_VALID_CREDENTIAL))
700696
.accept(MediaType.APPLICATION_JSON))
@@ -705,7 +701,7 @@ public void testQuickstarterProvisionOnNewOpenProjectInclDeleteWholeProject() th
705701
// org.opendevstack.provision.controller.ProjectApiController.deleteProject
706702
mockMvc
707703
.perform(
708-
delete("/api/v2/project/" + toClean.getProjectKey())
704+
delete("/api/v2/project/" + createdProjectIncludingQuickstarters.getProjectKey())
709705
.contentType(MediaType.APPLICATION_JSON)
710706
.with(httpBasic(TEST_ADMIN_USERNAME, TEST_VALID_CREDENTIAL))
711707
.accept(MediaType.APPLICATION_JSON))
@@ -715,7 +711,7 @@ public void testQuickstarterProvisionOnNewOpenProjectInclDeleteWholeProject() th
715711
// verify project really deleted - and not found
716712
mockMvc
717713
.perform(
718-
get("/api/v2/project/" + toClean.getProjectKey())
714+
get("/api/v2/project/" + createdProjectIncludingQuickstarters.getProjectKey())
719715
.contentType(MediaType.APPLICATION_JSON)
720716
.with(httpBasic(TEST_ADMIN_USERNAME, TEST_VALID_CREDENTIAL))
721717
.accept(MediaType.APPLICATION_JSON))
@@ -735,20 +731,27 @@ public void testQuickstarterProvisionOnNewOpenProjectInclDeleteSingleComponent()
735731
assertNotNull(createdProjectIncludingQuickstarters.getQuickstarters());
736732
assertEquals(1, createdProjectIncludingQuickstarters.getQuickstarters().size());
737733

738-
OpenProjectData toClean = new OpenProjectData();
734+
// take the same data as in the request to create the quickstarter
735+
OpenProjectData toClean =
736+
readTestData("ods-update-project-python-qs-request", OpenProjectData.class);
737+
739738
toClean.setProjectKey(createdProjectIncludingQuickstarters.getProjectKey());
740-
toClean.setQuickstarters(createdProjectIncludingQuickstarters.getQuickstarters());
741739

742740
String prefix =
743-
createdProjectIncludingQuickstarters.getQuickstarters().get(0).get("component_id");
741+
createdProjectIncludingQuickstarters
742+
.getQuickstarters()
743+
.get(0)
744+
.get(OpenProjectData.COMPONENT_ID_KEY);
745+
746+
int currentRepositorySize = createdProjectIncludingQuickstarters.getRepositories().size();
747+
int currentQuickstarterSize = createdProjectIncludingQuickstarters.getQuickstarters().size();
744748

745-
int currentQuickstarterSize = toClean.getQuickstarters().size();
746749
e2eLogger.info(
747750
"4 delete, current Quickstarters: "
748751
+ currentQuickstarterSize
749752
+ " project: "
750753
+ toClean.getProjectKey()
751-
+ "\n"
754+
+ "\n to clean: "
752755
+ toClean.getQuickstarters());
753756

754757
mockExecuteDeleteComponentAdminJob(
@@ -772,15 +775,19 @@ public void testQuickstarterProvisionOnNewOpenProjectInclDeleteSingleComponent()
772775
.andReturn();
773776

774777
e2eLogger.info(
775-
"Delete response: " + resultProjectGetResponse.getResponse().getContentAsString());
778+
"Delete response (qs): " + resultProjectGetResponse.getResponse().getContentAsString());
776779

777780
OpenProjectData resultProject =
778781
new ObjectMapper()
779782
.readValue(
780783
resultProjectGetResponse.getResponse().getContentAsString(), OpenProjectData.class);
781784

785+
// quickstarter size decreased by 1
782786
assertEquals((currentQuickstarterSize - 1), resultProject.getQuickstarters().size());
787+
// repos MUST stay untouched
788+
assertEquals(currentRepositorySize, resultProject.getRepositories().size());
783789

790+
// retrieve the project again
784791
resultProjectGetResponse =
785792
mockMvc
786793
.perform(
@@ -798,6 +805,7 @@ public void testQuickstarterProvisionOnNewOpenProjectInclDeleteSingleComponent()
798805
resultProjectGetResponse.getResponse().getContentAsString(), OpenProjectData.class);
799806

800807
assertEquals(toClean.getProjectKey(), resultProject.getProjectKey());
808+
// verify old (before cleaning) quickstarters are now -1
801809
assertEquals((currentQuickstarterSize - 1), resultProject.getQuickstarters().size());
802810
assertTrue(resultProject.getQuickstarters().isEmpty());
803811
}
@@ -956,6 +964,8 @@ public OpenProjectData testQuickstarterProvisionOnNewOpenProject(boolean fail) t
956964

957965
List<Map<String, String>> createdQuickstarters = resultProject.getQuickstarters();
958966

967+
e2eLogger.info("Provisioned quickstarter{}", createdQuickstarters);
968+
959969
assertNotNull(createdQuickstarters);
960970
assertEquals(1, createdQuickstarters.size());
961971

0 commit comments

Comments
 (0)