diff --git a/app/routes/report/kbMatches.js b/app/routes/report/kbMatches.js index ee420eb9e..1edabd652 100644 --- a/app/routes/report/kbMatches.js +++ b/app/routes/report/kbMatches.js @@ -59,7 +59,7 @@ router.route('/:kbMatch([A-z0-9-]{36})') router.route('/') .get(async (req, res) => { - const {query: {matchedCancer, approvedTherapy, category}} = req; + const {query: {matchedCancer, approvedTherapy, category, iprEvidenceLevel}} = req; // Check cache const key = generateKey(`/reports/${req.report.ident}/kb-matches`, req.query); @@ -79,6 +79,7 @@ router.route('/') const results = await db.models.kbMatches.scope('public').findAll({ where: { reportId: req.report.id, + ...((iprEvidenceLevel) ? {iprEvidenceLevel: {[Op.in]: iprEvidenceLevel.split(',')}} : {}), ...((category) ? {category: {[Op.in]: category.split(',')}} : {}), ...((typeof matchedCancer === 'boolean') ? {matchedCancer} : {}), ...((typeof approvedTherapy === 'boolean') ? {approvedTherapy} : {}), diff --git a/app/routes/swagger/swagger.json b/app/routes/swagger/swagger.json index de192cee7..e504b53c8 100644 --- a/app/routes/swagger/swagger.json +++ b/app/routes/swagger/swagger.json @@ -4421,16 +4421,21 @@ } }, { - "name": "rapidTable", + "name": "category", "in": "query", "required": false, - "description": "Filter according to chosen rapidTable", + "description": "Filter by category field. Comma separated field", "schema": { - "type": "string", - "enum": [ - "therapeuticAssociation", - "cancerRelevance" - ] + "type": "string" + } + }, + { + "name": "iprEvidenceLevel", + "in": "query", + "required": false, + "description": "Filter by iprEvidenceLevel field. Comma separated field", + "schema": { + "type": "string" } } ], diff --git a/test/routes/report/kbMatches.test.js b/test/routes/report/kbMatches.test.js index d56ab0ecd..adb4c0285 100644 --- a/test/routes/report/kbMatches.test.js +++ b/test/routes/report/kbMatches.test.js @@ -46,6 +46,7 @@ describe('/reports/{REPORTID}/kb-matches', () => { let variant; let kbMatch; let createData; + let createDataFilteringTest; beforeAll(async () => { // Get genomic template @@ -69,9 +70,19 @@ describe('/reports/{REPORTID}/kb-matches', () => { variantId: variant.id, category: 'unknown', variantType: 'cnv', + iprEvidenceLevel: 'IPR-A', + }; + + createDataFilteringTest = { + reportId: report.id, + variantId: variant.id, + category: 'unknown', + variantType: 'cnv', + iprEvidenceLevel: 'IPR-B', }; kbMatch = await db.models.kbMatches.create(createData); + await db.models.kbMatches.create(createDataFilteringTest); }, LONGER_TIMEOUT); describe('GET', () => { @@ -86,6 +97,19 @@ describe('/reports/{REPORTID}/kb-matches', () => { checkKbMatch(res.body[0]); }); + test('Filtering kb-matches is ok', async () => { + const res = await request + .get(`/api/reports/${report.ident}/kb-matches`) + .query({iprEvidenceLevel: 'IPR-A,IPR-C'}) + .auth(username, password) + .type('json') + .expect(HTTP_STATUS.OK); + + expect(Array.isArray(res.body)).toBe(true); + checkKbMatch(res.body[0]); + res.body.every((match) => {return expect(match.iprEvidenceLevel).toEqual('IPR-A');}); + }); + test('Getting a specific kb-match is ok', async () => { const res = await request .get(`/api/reports/${report.ident}/kb-matches/${kbMatch.ident}`)