Skip to content

Commit 9f32eda

Browse files
committed
story #1234010: add query param to get coverage url for the new query for work items
1 parent 183ebd3 commit 9f32eda

File tree

4 files changed

+36
-14
lines changed

4 files changed

+36
-14
lines changed

src/main/java/com/microfocus/octane/plugins/configuration/OctaneRestManager.java

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@
3131
import org.slf4j.LoggerFactory;
3232

3333
import javax.net.ssl.SSLHandshakeException;
34+
import java.io.UnsupportedEncodingException;
35+
import java.net.URLEncoder;
3436
import java.net.UnknownHostException;
37+
import java.nio.charset.StandardCharsets;
3538
import java.util.*;
3639
import java.util.concurrent.ExecutionException;
3740
import java.util.concurrent.TimeUnit;
@@ -107,14 +110,22 @@ private static String getQueryParam(OctaneEntity octaneEntity, OctaneEntityTypeD
107110
}
108111

109112
private static String getQueryForWorkItemNewVersion(OctaneEntity octaneEntity, OctaneEntityTypeDescriptor typeDescriptor) {
110-
//http://localhost:8080/api/shared_spaces/1001/workspaces/1002/runs/groups?&query="((work_items_of_last_run={(id='2348')})||(work_items_of_last_run={path='0000000001OT0001OU000212*'}))"&group_by=status
113+
//http://localhost:8080/api/shared_spaces/1001/workspaces/1002/runs/groups?query="((work_items_of_last_run={(id='1005')})||(work_items_of_last_run={(subtype+IN+'story','defect','feature';path='0000000000TH0000TJ*')}))"&group_by=status
111114

112-
OctaneQueryBuilder queryBuilder = OctaneQueryBuilder.create()
113-
.addGroupBy("status")
114-
.addQueryCondition(new CrossQueryPhrase("work_items_of_last_run", new RawTextQueryPhrase("id='" + octaneEntity.getId() + "'")))
115-
.addQueryCondition(new CrossQueryPhrase("work_items_of_last_run", createGetEntityCondition(octaneEntity)));
115+
String coverageFieldName = typeDescriptor.getIndirectCoveringTestsField();
116+
String queryParamValue = String.format("\"((%s={(id='%s')})||(%s={(subtype IN 'story','defect','feature';path='%s')}))\"",
117+
coverageFieldName,
118+
octaneEntity.getId(),
119+
coverageFieldName,
120+
octaneEntity.getString(PluginConstants.PATH) + "*");
116121

117-
return queryBuilder.build();
122+
try {
123+
queryParamValue = URLEncoder.encode(queryParamValue, StandardCharsets.UTF_8.name());
124+
} catch (UnsupportedEncodingException e) {
125+
throw new RuntimeException("Failed to encode params.", e);
126+
}
127+
128+
return "query=" + queryParamValue + "&group_by=status";
118129
}
119130

120131
public static GroupEntityCollection getNativeStatusCoverageForRunsWithoutStatus(SpaceConfiguration sc, OctaneEntity octaneEntity, OctaneEntityTypeDescriptor typeDescriptor, long workspaceId) {
@@ -157,8 +168,8 @@ public static int getTotalTestsCount(SpaceConfiguration sc, OctaneEntity octaneE
157168
}
158169

159170
private static QueryPhrase createGetEntityCondition(OctaneEntity octaneEntity) {
160-
String path = octaneEntity.getString("path");
161-
return new LogicalQueryPhrase("path", path + "*");
171+
String path = octaneEntity.getString(PluginConstants.PATH);
172+
return new LogicalQueryPhrase(PluginConstants.PATH, path + "*");
162173
}
163174

164175
public static OctaneEntityCollection getEntitiesByCondition(SpaceConfiguration sc, long workspaceId, String collectionName, Collection<QueryPhrase> conditions, Collection<String> fields) {

src/main/java/com/microfocus/octane/plugins/configuration/PluginConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ public class PluginConstants {
44

55
public static final int SPACE_CONTEXT = -1;
66
public static final String PASSWORD_REPLACE = "__secret__password__"; // NON-NLS
7+
public static final String PATH = "path";
78

89
public static String URL_AUTHENTICATION = "/authentication/sign_in";
910

src/main/java/com/microfocus/octane/plugins/descriptors/OctaneEntityTypeDescriptor.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,14 @@ public class OctaneEntityTypeDescriptor {
5757
*/
5858
private String testReferenceField;
5959

60+
/**
61+
* Name of the field for indirect test covering
62+
*/
63+
private String indirectCoveringTestsField;
64+
6065
private static final String TESTS_URL_FOR_DEFECTS = "&configuration={\"tabName\":\"%s\",\"relation_name\":\"test_to_work_items-gherkin_test-scenario_test-test_automated-test_manual-test_suite-target\"}";
6166

62-
public OctaneEntityTypeDescriptor(String typeName, String alias, String typeAbbreviation, String label, String typeColor, String nameForNavigation, String testTabName, String testReferenceField) {
67+
public OctaneEntityTypeDescriptor(String typeName, String alias, String typeAbbreviation, String label, String typeColor, String nameForNavigation, String testTabName, String testReferenceField, String indirectCoveringTestsField) {
6368
this.typeName = typeName;
6469
this.alias = alias;
6570
this.label = label;
@@ -68,6 +73,7 @@ public OctaneEntityTypeDescriptor(String typeName, String alias, String typeAbbr
6873
this.nameForNavigation = nameForNavigation;
6974
this.testTabName = testTabName;
7075
this.testReferenceField = testReferenceField;
76+
this.indirectCoveringTestsField = indirectCoveringTestsField;
7177
}
7278

7379
public String getTypeAbbreviation() {
@@ -119,4 +125,8 @@ public String getLabel() {
119125
public String getAlias() {
120126
return alias;
121127
}
128+
129+
public String getIndirectCoveringTestsField() {
130+
return indirectCoveringTestsField;
131+
}
122132
}

src/main/java/com/microfocus/octane/plugins/descriptors/OctaneEntityTypeManager.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ public class OctaneEntityTypeManager {
2626

2727
static {
2828
//TYPE
29-
OctaneEntityTypeDescriptor featureType = new OctaneEntityTypeDescriptor("feature", null, "F", "Feature", "#e57828", "work_item", "tests_in_backlog", "covered_content");
30-
OctaneEntityTypeDescriptor storyType = new OctaneEntityTypeDescriptor("story", null, "US", "User Story", "#ffb000", "work_item", "tests_in_backlog", "covered_content");
31-
OctaneEntityTypeDescriptor defectType = new OctaneEntityTypeDescriptor("defect", null, "D", "Defect", "#b21646", "work_item", "relationships", "covered_content");
29+
OctaneEntityTypeDescriptor featureType = new OctaneEntityTypeDescriptor("feature", null, "F", "Feature", "#e57828", "work_item", "tests_in_backlog", "covered_content", "work_items_of_last_run");
30+
OctaneEntityTypeDescriptor storyType = new OctaneEntityTypeDescriptor("story", null, "US", "User Story", "#ffb000", "work_item", "tests_in_backlog", "covered_content", "work_items_of_last_run");
31+
OctaneEntityTypeDescriptor defectType = new OctaneEntityTypeDescriptor("defect", null, "D", "Defect", "#b21646", "work_item", "relationships", "covered_content", "work_items_of_last_run");
3232

33-
OctaneEntityTypeDescriptor requirementType = new OctaneEntityTypeDescriptor("requirement_document", null, "RD", "Requirement", "#0b8eac", "requirement", "tests_in_requirement", "covered_requirement");
34-
OctaneEntityTypeDescriptor applicationModuleType = new OctaneEntityTypeDescriptor("product_area", "application_module", "AM", "Application Module", "#43e4ff", "product_area", "tests-in-pa", "product_areas");
33+
OctaneEntityTypeDescriptor requirementType = new OctaneEntityTypeDescriptor("requirement_document", null, "RD", "Requirement", "#0b8eac", "requirement", "tests_in_requirement", "covered_requirement", null);
34+
OctaneEntityTypeDescriptor applicationModuleType = new OctaneEntityTypeDescriptor("product_area", "application_module", "AM", "Application Module", "#43e4ff", "product_area", "tests-in-pa", "product_areas", null);
3535

3636
Arrays.asList(applicationModuleType, featureType, storyType, requirementType, defectType).forEach(descriptor -> {
3737
typeDescriptorsByName.put(descriptor.getTypeName(), descriptor);

0 commit comments

Comments
 (0)