1 from __future__ import absolute_import, print_function
5 from pprint import pprint
6 from unittest import TestCase, TestSuite, defaultTestLoader, skip
8 from htsworkflow.submission.encoded import (ENCODED,
13 class TestEncoded(TestCase):
14 def test_prepare_url(self):
15 encode = ENCODED('test.encodedcc.edu')
18 ('/experiments', 'https://test.encodedcc.edu/experiments'),
19 ('/experiments/ENCLB045ZZZ',
20 'https://test.encodedcc.edu/experiments/ENCLB045ZZZ'),
21 ('https://www.encodedcc.edu/experiments/ENCLB045ZZZ',
22 'https://www.encodedcc.edu/experiments/ENCLB045ZZZ'),
24 for url, result in tests:
25 self.assertEqual(encode.prepare_url(url), result)
27 def test_validate(self):
30 schema_file = os.path.join(os.path.dirname(__file__), 'library.json')
31 schema = json.loads(open(schema_file, 'r').read())
33 obj = {u'@id': u'/libraries/ENCLB045ZZZ/',
34 u'@type': [u'library', u'item'],
35 u'accession': u'ENCLB045ZZZ',
37 u'alternate_accessions': [],
38 u'award': u'/awards/U54HG006998/',
39 u'biosample': u'/biosamples/ENCBS089RNA/',
40 u'date_created': u'2014-01-14T19:44:51.061770+00:00',
41 u'depleted_in_term_id': [],
42 u'depleted_in_term_name': [],
44 u'extraction_method': u'Ambion mirVana',
45 u'fragmentation_method': u'Illumina/Nextera tagmentation',
46 u'lab': u'/labs/barbara-wold/',
47 u'library_size_selection_method': u'SPRI beads',
48 u'lysis_method': u'Ambion mirVana',
49 u'nucleic_acid_term_id': u'SO:0000871',
50 u'nucleic_acid_term_name': u'polyadenylated mRNA',
51 u'paired_ended': False,
52 u'schema_version': u'2',
53 u'size_range': u'>200',
54 u'status': u'CURRENT',
55 u'strand_specificity': False,
56 u'submitted_by': u'/users/0e3dde9b-aaf9-42dd-87f7-975a85072ed2/',
58 u'uuid': u'42c46028-708f-4347-a3df-2c82dfb021c4'}
59 encode = ENCODED('www.encodeproject.org')
60 encode.schemas[u'library'] = schema
62 self.assertTrue('@id' in obj)
64 def test_create_context(self):
65 linked_id = {'@type': '@id'}
66 library = { '@id': '/libraries/1234', '@type': ['library', 'item'] }
68 encode = ENCODED('test.encodedcc.org')
69 url = encode.prepare_url(library['@id'])
70 context = encode.create_jsonld_context(library, url)
71 self.assertEqual(context['@vocab'], 'https://test.encodedcc.org/profiles/library.json#')
72 self.assertEqual(context['award'], linked_id )
73 self._verify_context(context, 'library')
74 # namespaces not added yet.
75 self.assertRaises(AssertionError, self._verify_namespaces, context)
76 encode.add_jsonld_namespaces(context)
77 self._verify_namespaces(context)
79 def test_add_context(self):
80 """Checking to make sure nested @base and @vocab urls are set correctly
83 "nucleic_acid_term_name": "RNA",
84 "accession": "ENCLB044ZZZ",
85 "@id": "/libraries/ENCLB044ZZZ/",
86 "schema_version": "1",
91 "lysis_method": "Ambion mirVana",
92 "nucleic_acid_term_id": "SO:0000356",
94 "biosample_term_name": "GM12878",
95 "description": "B-lymphocyte, lymphoblastoid, International HapMap Project - CEPH/Utah - European Caucasion, Epstein-Barr Virus",
96 "accession": "ENCBS090RNA",
97 "date_created": "2013-10-29T21:15:29.144260+00:00",
98 "@id": "/biosamples/ENCBS090RNA/",
100 "brenton-graveley:GM12878-2",
101 "thomas-gingeras:191WC"
103 "organism": "/organisms/human/",
111 encode = ENCODED('test.encodedcc.org')
112 bio_base = encode.prepare_url(obj['biosample']['@id'])
114 url = encode.prepare_url('/libraries/ENCLB044ZZZ/?format=json&embed=False')
115 obj_type = encode.get_object_type(obj)
116 schema_url = encode.get_schema_url(obj_type)
117 encode.add_jsonld_context(obj, url)
119 self.assertEqual(obj['biosample']['@context']['@base'], bio_base)
120 self.assertEqual(obj['@context']['@vocab'], schema_url)
121 self._verify_context(obj['@context'], 'library')
122 self._verify_namespaces(obj['@context'])
123 self._verify_context(obj['biosample']['@context'], 'biosample')
124 self.assertEqual(obj['@context']['rdf'], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#')
125 self.assertEqual(obj['@context']['OBO'], 'http://purl.obolibrary.org/obo/')
128 def test_convert_search_to_jsonld(self):
129 example = {'count': {'biosamples': 2},
130 'portal_title': 'ENCODE',
132 'notification': 'Success',
134 '@id': '/search/?searchTerm=wold',
138 u'@id': u'/biosamples/ENCBS125ENC/',
139 u'@type': [u'biosample', u'item'],
140 u'accession': u'ENCBS125ENC',
141 u'award.rfa': u'ENCODE2-Mouse',
142 u'biosample_term_name': u'myocyte',
143 u'biosample_type': u'in vitro differentiated cells',
144 u'characterizations.length': [],
145 u'constructs.length': [],
146 u'lab.title': u'Barbara Wold, Caltech',
147 u'life_stage': u'unknown',
148 u'organism.name': u'mouse',
149 u'source.title': u'Barbara Wold',
150 u'status': u'CURRENT',
151 u'treatments.length': []},
152 {u'@id': u'/biosamples/ENCBS126ENC/',
153 u'@type': [u'biosample', u'item'],
154 u'accession': u'ENCBS126ENC',
155 u'award.rfa': u'ENCODE2-Mouse',
156 u'biosample_term_name': u'myocyte',
157 u'biosample_type': u'in vitro differentiated cells',
158 u'characterizations.length': [],
159 u'constructs.length': [],
160 u'lab.title': u'Barbara Wold, Caltech',
161 u'life_stage': u'unknown',
162 u'organism.name': u'mouse',
163 u'source.title': u'Barbara Wold',
164 u'status': u'CURRENT',
165 u'treatments.length': []},
168 encode = ENCODED('test.encodedcc.org')
169 result = encode.convert_search_to_jsonld(example)
170 for obj in result['@graph']:
171 self.assertNotIn('award.rfa', obj)
173 def _verify_context(self, context, obj_type):
174 for context_key in [None, obj_type]:
175 for k in ENCODED_CONTEXT[context_key]:
176 self.assertIn(k, context)
177 self.assertEqual(ENCODED_CONTEXT[context_key][k], context[k])
179 def _verify_namespaces(self, context):
180 for k in ENCODED_NAMESPACES:
181 self.assertIn(k, context)
182 self.assertEqual(ENCODED_NAMESPACES[k], context[k])
187 defaultTestLoader.loadTestsFromTestCase(TestEncoded))
190 if __name__ == "__main__":
191 from unittest import main
192 main(defaultTest='suite')