• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

knowledgepixels / nanopub-query / 17795838363

17 Sep 2025 11:17AM UTC coverage: 70.444% (-1.0%) from 71.466%
17795838363

push

github

tkuhn
feat: Cover multi placeholders in OpenAPI spec

206 of 318 branches covered (64.78%)

Branch coverage included in aggregate %.

571 of 785 relevant lines covered (72.74%)

3.65 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

75.41
src/main/java/com/knowledgepixels/query/OpenApiSpecPage.java
1
package com.knowledgepixels.query;
2

3
import java.util.ArrayList;
4
import java.util.HashMap;
5
import java.util.LinkedHashMap;
6
import java.util.List;
7
import java.util.Map;
8

9
import org.yaml.snakeyaml.DumperOptions;
10
import org.yaml.snakeyaml.Yaml;
11

12
import com.knowledgepixels.query.GrlcSpec.InvalidGrlcSpecException;
13

14
import io.vertx.core.MultiMap;
15

16
/**
17
 * Page for Open API compliant specification.
18
 */
19
public class OpenApiSpecPage {
20

21
    private Map<String, Object> dataMap = new LinkedHashMap<>();
5✔
22

23
    /**
24
     * Creates a new page instance.
25
     *
26
     * @param requestUrl The request URL
27
     * @param parameters The URL request parameters
28
     * @throws InvalidGrlcSpecException 
29
     */
30
    public OpenApiSpecPage(String requestUrl, MultiMap parameters) throws InvalidGrlcSpecException {
2✔
31
        GrlcSpec grlcSpec = new GrlcSpec(requestUrl, parameters);
6✔
32
        
33

34
        dataMap.put("openapi", "3.0.4");
6✔
35

36
        Map<String, Object> infoMap = new LinkedHashMap<>();
4✔
37
        infoMap.put("title", grlcSpec.getLabel());
6✔
38
        infoMap.put("description", "API definition source: <a target=\"_blank\" href=\"" + grlcSpec.getNanopub().getUri() +
9✔
39
                "\"><svg height=\"0.8em\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 8 8\"><path d=\"M5,8H8L3,0H0M8,4.8V0H5M0,3.2V8H3\"/></svg> " +
40
                grlcSpec.getArtifactCode().substring(0, 10) + "</a>");
5✔
41
        infoMap.put("version", grlcSpec.getArtifactCode().substring(0, 10));
9✔
42
        dataMap.put("info", infoMap);
6✔
43

44
        List<Object> serversList = new ArrayList<>();
4✔
45
        Map<String, Object> serverMap = new LinkedHashMap<>();
4✔
46
        serverMap.put("url", Utils.getEnvString("NANOPUB_QUERY_URL", "http://localhost:9393/") + "api/" + grlcSpec.getArtifactCode());
10✔
47
        serverMap.put("description", "This Nanopub Query instance");
5✔
48
        serversList.add(serverMap);
4✔
49
        dataMap.put("servers", serversList);
6✔
50

51
        Map<String, Object> pathsMap = new LinkedHashMap<>();
4✔
52
        Map<String, Object> rootPathMap = new LinkedHashMap<>();
4✔
53
        Map<String, Object> getOpMap = new LinkedHashMap<>();
4✔
54
        //getOpMap.put("summary", label);
55
        getOpMap.put("description", grlcSpec.getDescription());
6✔
56
        Map<String, Object> responsesMap = new LinkedHashMap<>();
4✔
57
        Map<String, Object> successrespMap = new LinkedHashMap<>();
4✔
58
        Map<String, Object> contentMap = new LinkedHashMap<>();
4✔
59
        contentMap.put("text/csv", new HashMap<>());
7✔
60
        contentMap.put("application/json", new HashMap<>());
7✔
61
        successrespMap.put("content", contentMap);
5✔
62
        successrespMap.put("description", "result table");
5✔
63
        responsesMap.put("200", successrespMap);
5✔
64
        List<Object> parametersList = new ArrayList<>();
4✔
65

66
        final Map<String, Object> stringType = new LinkedHashMap<>();
4✔
67
        stringType.put("type", "string");
5✔
68
        final Map<String, Object> stringListType = new LinkedHashMap<>();
4✔
69
        stringListType.put("type", "array");
5✔
70
        stringListType.put("items", stringType);
5✔
71

72
        for (String p : grlcSpec.getPlaceholdersList()) {
7!
73
            Map<String, Object> paramMap = new LinkedHashMap<>();
×
74
            paramMap.put("in", "query");
×
75
            String name = GrlcSpec.getParamName(p);
×
76
            paramMap.put("name", name);
×
77
            paramMap.put("required", GrlcSpec.isOptionalPlaceholder(p));
×
78
            if (GrlcSpec.isMultiPlaceholder(p)) {
×
79
                paramMap.put("style", "form");
×
80
                paramMap.put("explde", "true");
×
81
                paramMap.put("schema", stringListType);
×
82
            } else {
83
                paramMap.put("schema", stringType);
×
84
            }
85
            parametersList.add(paramMap);
×
86
        }
×
87
        getOpMap.put("parameters", parametersList);
5✔
88
        getOpMap.put("responses", responsesMap);
5✔
89
        rootPathMap.put("get", getOpMap);
5✔
90
        pathsMap.put("/" + grlcSpec.getQueryName(), rootPathMap);
7✔
91
        dataMap.put("paths", pathsMap);
6✔
92
    }
1✔
93

94
    /**
95
     * Returns the Open API spec as a string.
96
     *
97
     * @return Open API specification string
98
     */
99
    public String getSpec() {
100
        final DumperOptions options = new DumperOptions();
4✔
101
        options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
3✔
102
        options.setPrettyFlow(true);
3✔
103
        return new Yaml(options).dump(dataMap);
8✔
104
    }
105

106
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc