mdf-reader
Version:
Reads MDF YAML and returns helpful accessors
99 lines (86 loc) • 2.67 kB
JavaScript
let { MDFReader } = require('../dist/node/mdf-reader');
const fs = require('node:fs');
const gold_yaml = "tests/crdc_datahub_mdf.yml";
it('is imported', () => {
expect(typeof(MDFReader)).toBe("function");
});
let dta = fs.readFileSync(gold_yaml);
let mdf = new MDFReader(dta.toString());
it('yaml is parsed', () => {
expect(mdf.constructor.name)
.toBe("MDFReader");
});
it('there are 8 nodes', () => {
expect(mdf.nodes().length)
.toStrictEqual(8);
});
it('collection_method is a property', () => {
let pr = mdf.props()
.filter( (pr) => pr.handle == 'collection_method' );
expect(pr.length)
.toStrictEqual(1);
expect(pr[0].type[0])
.toStrictEqual('/path/to/collection/methods');
});
it('is_key is set/clear', () => {
let pr = mdf.nodes('diagnosis');
expect(pr.props('diagnosis_id').is_key)
.toBeTruthy();
expect(pr.props('transaction_date').is_key)
.toBeFalsy();
expect(pr.props('diagnosis').is_key)
.toBeFalsy();
});
it('list property with enum', () => {
let pr = mdf.nodes('study').props('study_data_types');
expect(pr.valueSet())
.toStrictEqual([ 'Genomic', 'Imaging', 'Clinical' ]);
expect(pr.item_type)
.toBe('value_set');
pr = mdf.nodes('study').props('study_data_types_enum');
expect(pr.valueSet())
.toStrictEqual([ 'Genomic', 'Imaging', 'Clinical' ]);
expect(pr.item_type)
.toBe('value_set');
});
it('is_strict is set/clear', () => {
let pr = mdf.nodes('study').props('adult_or_childhood_study');
expect(pr.is_strict)
.toBeFalsy();
pr = mdf.nodes('participant').props('race');
expect(pr.is_strict)
.toBeTruthy();
});
it('is_required is set/clear', () => {
let nd = mdf.nodes('diagnosis');
let prs = ['diagnosis','id','date','transaction_id','transaction_date']
.map(pr => [pr, nd.props(pr)]);
prs = Object.fromEntries(prs);
expect(prs.diagnosis.is_required == 'Preferred')
.toBeTruthy();
expect(prs.id.is_required)
.toBeTruthy();
expect(prs.date.is_required)
.toBeTruthy();
expect(prs.transaction_id.is_required)
.toBeFalsy();
expect(prs.transaction_date.is_required)
.toStrictEqual('No');
});
it('has composite_key_props', () => {
let ppt = mdf.nodes('participant');
let visit = mdf.nodes('visit');
let finding = mdf.nodes('finding');
expect(ppt.composite_key_props().length)
.toBe(0);
expect(visit.composite_key_props().length)
.toBe(2);
expect(finding.composite_key_props().length)
.toBe(4);
expect(visit.props('visit_id').is_key)
.toBeTruthy();
expect(finding.props('finding_id').is_key)
.toBeTruthy();
expect(finding.props('test_name').is_key)
.toBeFalsy();
});