Skip to content

Commit

Permalink
Simplify query generation and add test
Browse files Browse the repository at this point in the history
  • Loading branch information
ptoussai committed Jul 14, 2020
1 parent b36561d commit b450e81
Show file tree
Hide file tree
Showing 7 changed files with 7,127 additions and 2,865 deletions.
3 changes: 3 additions & 0 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"presets": ["next/babel"]
}
1 change: 1 addition & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"env": {
"browser": true,
"es2020": true,
"jest": true,
"node": true
},
"extends": ["eslint:recommended", "plugin:react/recommended"],
Expand Down
8 changes: 8 additions & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module.exports = {
collectCoverageFrom: ["**/*.{js,jsx}", "!**/node_modules/**"],
testPathIgnorePatterns: ["/node_modules/", "/.next/"],
transform: {
"^.+\\.(js|jsx)$": "<rootDir>/node_modules/babel-jest"
},
transformIgnorePatterns: ["/node_modules/"]
}
9,898 changes: 7,052 additions & 2,846 deletions package-lock.json

Large diffs are not rendered by default.

6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
{
"scripts": {
"dev": "next",
"build": "next build",
"build": "npm run lint && npm run test && next build",
"start": "next start",
"export": "next export",
"test": "jest",
"test:watch": "jest --watch",
"lint": "eslint src"
},
"dependencies": {
Expand All @@ -29,10 +31,12 @@
"unified": "^9.0.0"
},
"devDependencies": {
"babel-jest": "^26.1.0",
"bulma": "^0.9.0",
"eslint": "^7.3.1",
"eslint-plugin-react": "^7.20.3",
"http-proxy-middleware": "^1.0.4",
"jest": "^26.1.0",
"prettier": "2.0.5"
}
}
53 changes: 35 additions & 18 deletions src/api/bycon.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,28 +17,45 @@ export function useFilteringTerms(prefixes) {

/**
* When param is null no query will be triggered.
* TODO: better predefinition of the parameters being used or possible (no hard coding)
*/

export function useBeaconQuery(queryData) {
function buildQuery() {
const { datasetIds, assemblyId, requestType, referenceName, bioontology, variantType, referenceBases, alternateBases, start, end } = queryData
const datasetsQuery = datasetIds.map((d) => `datasetIds=${d}`).join("&")
const filtersQuery = bioontology.map((f) => `filters=${f}`).join("&")
// positions from the form have to be -1 adjusted (only first value if interval)
var starts = start.split("-")
starts[0] = starts[0] - 1
var ends = end.split("-")
if (ends[0] > 0) {
ends[0] = ends[0] - 1
}
const startsQuery = starts.map((s) => `start=${s}`).join("&")
const endsQuery = ends.map((e) => `end=${e}`).join("&")
// const requestType = `variantAlleleRequest`
return `${basePath}cgi/bycon/bin/byconplus.py?${datasetsQuery}&${filtersQuery}&${startsQuery}&${endsQuery}&assemblyId=${assemblyId}&referenceBases=${referenceBases}&alternateBases=${alternateBases}&includeDatasetResponses=ALL&requestType=${requestType}&variantType=${variantType}&referenceName=${referenceName}`
return useSWR(
queryData
? `${basePath}cgi/bycon/bin/byconplus.py?${buildQueryParameters(
queryData
)}`
: null
)
}

export function buildQueryParameters(queryData) {
const { start, end, ...otherParams } = queryData
// positions from the form have to be -1 adjusted (only first value if interval)
const starts = start.split("-")
starts[0] = starts[0] - 1
const ends = end.split("-")
if (ends[0] > 0) {
ends[0] = ends[0] - 1
}

return useSWR(queryData ? buildQuery() : null)
return new URLSearchParams(
flattenParams([
...Object.entries(otherParams),
["start", starts],
["end", ends]
])
).toString()
}

// Transforms [[k1, v1], [k2, [v2, v3]]] into [[k1, v1], [k2, v2], [k3, v3]]
function flattenParams(paramArray) {
return paramArray.flatMap(([key, value]) => {
if (Array.isArray(value)) {
return value.map((v) => [key, v])
} else {
return [[key, value]]
}
})
}

export function replaceWithProxy(url) {
Expand Down
23 changes: 23 additions & 0 deletions src/api/bycon.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const { buildQueryParameters } = require("./bycon")

test("build a query", () => {
expect(
buildQueryParameters({
datasetIds: ["arraymap", "dipg"],
assemblyId: "GRCh38",
includeDatasetResonses: "ALL",
requestType: "variantCNVrequest",
referenceName: "9",
variantType: "DEL",
start: "20000001",
end: "21967753-23000000",
referenceBases: "N",
alternateBases: "G",
bioontology: ["NCIT:C102872"],
materialtype: "EFO:0009656",
filters: "filter1"
})
).toBe(
"datasetIds=arraymap&datasetIds=dipg&assemblyId=GRCh38&includeDatasetResonses=ALL&requestType=variantCNVrequest&referenceName=9&variantType=DEL&referenceBases=N&alternateBases=G&bioontology=NCIT%3AC102872&materialtype=EFO%3A0009656&filters=filter1&start=20000000&end=21967752&end=23000000"
)
})

0 comments on commit b450e81

Please sign in to comment.