Skip to content

Commit f3dd674

Browse files
authored
Merge pull request #486 from bcgsc/feature/DEVSU-2804-add-variant-fks-genomic-alterations
Feature/devsu 2804 add variant fks genomic alterations
2 parents 537c0f8 + 0d5d71c commit f3dd674

4 files changed

Lines changed: 58 additions & 45 deletions

File tree

app/models/reports/genomic/summary/genomicAlterationsIdentified.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ module.exports = (sequelize, Sq) => {
3737
scopes: {
3838
public: {
3939
attributes: {
40-
exclude: ['id', 'reportId', 'deletedAt', 'updatedBy'],
40+
exclude: ['id', 'reportId', 'variantId', 'deletedAt', 'updatedBy'],
4141
},
4242
},
4343
},

app/routes/report/summary/genomicAlterationsIdentified.js

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ const {REPORT_CREATE_BASE_URI, REPORT_UPDATE_BASE_URI} = require('../../../const
1515

1616
// Generate schemas
1717
const createSchema = schemaGenerator(db.models.genomicAlterationsIdentified, {
18-
baseUri: REPORT_CREATE_BASE_URI,
18+
baseUri: REPORT_CREATE_BASE_URI, additionalProperties: true,
1919
});
2020
const updateSchema = schemaGenerator(db.models.genomicAlterationsIdentified, {
21-
baseUri: REPORT_UPDATE_BASE_URI, nothingRequired: true,
21+
baseUri: REPORT_UPDATE_BASE_URI, nothingRequired: true, additionalProperties: true,
2222
});
2323

2424
// Middleware for genomic alterations
@@ -40,7 +40,15 @@ router.route('/:alteration([A-z0-9-]{36})')
4040
}
4141

4242
try {
43-
await req.alteration.update(req.body, {userId: req.user.id});
43+
let variantId;
44+
if (req.body.variantIdent) {
45+
const modelName = KB_PIVOT_MAPPING[req.body.variantType];
46+
const variant = await db.models[modelName].findOne({
47+
where: {ident: req.body.variantIdent},
48+
});
49+
variantId = variant.id;
50+
}
51+
await req.alteration.update({...req.body, variantId}, {userId: req.user.id});
4452
return res.json(req.alteration.view('public'));
4553
} catch (error) {
4654
logger.error(`Unable to update genomic alterations ${error}`);
@@ -115,8 +123,15 @@ router.route('/')
115123

116124
try {
117125
req.body.reportId = req.report.id;
118-
119-
const result = await db.models.genomicAlterationsIdentified.create(req.body);
126+
let variantId;
127+
if (req.body.variantIdent) {
128+
const modelName = KB_PIVOT_MAPPING[req.body.variantType];
129+
const variant = await db.models[modelName].findOne({
130+
where: {ident: req.body.variantIdent},
131+
});
132+
variantId = variant.id;
133+
}
134+
const result = await db.models.genomicAlterationsIdentified.create({...req.body, variantId});
120135
return res.status(HTTP_STATUS.CREATED).json(result.view('public'));
121136
} catch (error) {
122137
logger.error(`Unable to create genomic alteration entry ${error}`);

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/routes/report/summary/genomicAlterationsIdentified.test.js

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,17 @@
11
const getPort = require('get-port');
22
const supertest = require('supertest');
33
const HTTP_STATUS = require('http-status-codes');
4-
54
const db = require('../../../../app/models');
5+
const {KB_PIVOT_MAPPING} = require('../../../../app/constants');
66
// get test user info
77
const CONFIG = require('../../../../app/config');
88
const {listen} = require('../../../../app');
99

1010
CONFIG.set('env', 'test');
1111
const {username, password} = CONFIG.get('testing');
1212

13-
const ALTERATION_DATA = {
14-
geneVariant: 'TEST GENE VARIANT',
15-
germline: true,
16-
};
17-
18-
const ALTERATION_UPDATE_DATA = {
19-
geneVariant: 'UPDATED GENE VARIANT',
20-
germline: false,
21-
};
22-
2313
const alterationProperties = [
24-
'ident', 'createdAt', 'geneVariant', 'germline',
14+
'ident', 'createdAt', 'geneVariant', 'germline', 'variantType',
2515
];
2616

2717
const checkAlteration = (alterationObject) => {
@@ -42,8 +32,23 @@ const checkAlterations = (alterations) => {
4232
});
4333
};
4434

35+
const CHECKING_DATA = {
36+
geneVariant: 'TEST GENE VARIANT',
37+
variantType: 'cnv',
38+
germline: true,
39+
};
40+
41+
const CHECKING_UPDATE_DATA = {
42+
geneVariant: 'UPDATED GENE VARIANT',
43+
variantType: 'cnv',
44+
germline: false,
45+
};
46+
4547
let server;
4648
let request;
49+
let variant;
50+
let ALTERATION_DATA;
51+
let ALTERATION_UPDATE_DATA;
4752

4853
// Start API
4954
beforeAll(async () => {
@@ -63,6 +68,23 @@ describe('/reports/{report}/summary/genomic-alterations-identified', () => {
6368
templateId: template.id,
6469
patientId: 'PROBE_TEST_PATIENT',
6570
});
71+
72+
// Find a random variant for testing
73+
const modelName = KB_PIVOT_MAPPING.cnv;
74+
variant = await db.models[modelName].findOne();
75+
ALTERATION_DATA = {
76+
geneVariant: 'TEST GENE VARIANT',
77+
variantType: 'cnv',
78+
variantIdent: variant.ident,
79+
germline: true,
80+
};
81+
82+
ALTERATION_UPDATE_DATA = {
83+
geneVariant: 'UPDATED GENE VARIANT',
84+
variantType: 'cnv',
85+
variantIdent: variant.ident,
86+
germline: false,
87+
};
6688
});
6789

6890
afterAll(async () => {
@@ -130,7 +152,7 @@ describe('/reports/{report}/summary/genomic-alterations-identified', () => {
130152
.expect(HTTP_STATUS.CREATED);
131153

132154
checkAlteration(res.body);
133-
expect(res.body).toEqual(expect.objectContaining(ALTERATION_DATA));
155+
expect(res.body).toEqual(expect.objectContaining(CHECKING_DATA));
134156

135157
// Check that record was created in the db
136158
const result = await db.models.genomicAlterationsIdentified.findOne({
@@ -142,18 +164,6 @@ describe('/reports/{report}/summary/genomic-alterations-identified', () => {
142164
await result.destroy({force: true});
143165
});
144166

145-
test('/ - 400 Bad Request - Additional Property', async () => {
146-
await request
147-
.post(`/api/reports/${report.ident}/summary/genomic-alterations-identified`)
148-
.send({
149-
...ALTERATION_UPDATE_DATA,
150-
additionalProperty: 'ADDITIONAL_PROPERTY',
151-
})
152-
.auth(username, password)
153-
.type('json')
154-
.expect(HTTP_STATUS.BAD_REQUEST);
155-
});
156-
157167
test('/ - 400 Bad Request - Incorrect field type', async () => {
158168
await request
159169
.post(`/api/reports/${report.ident}/summary/genomic-alterations-identified`)
@@ -201,19 +211,7 @@ describe('/reports/{report}/summary/genomic-alterations-identified', () => {
201211

202212
expect(res.body).not.toBeNull();
203213
checkAlteration(res.body);
204-
expect(res.body).toEqual(expect.objectContaining(ALTERATION_UPDATE_DATA));
205-
});
206-
207-
test('/{alteration} - 400 Bad Request - Additional Property', async () => {
208-
await request
209-
.put(`/api/reports/${report.ident}/summary/genomic-alterations-identified/${putAlteration.ident}`)
210-
.send({
211-
...ALTERATION_UPDATE_DATA,
212-
additionalProperty: 'ADDITIONAL_PROPERTY',
213-
})
214-
.auth(username, password)
215-
.type('json')
216-
.expect(HTTP_STATUS.BAD_REQUEST);
214+
expect(res.body).toEqual(expect.objectContaining(CHECKING_UPDATE_DATA));
217215
});
218216

219217
test('/{alteration} - 400 Bad Request - Incorrect field type', async () => {

0 commit comments

Comments
 (0)