Utility class for accessing ENCODE3's submit / data warehouse server.
[htsworkflow.git] / htsworkflow / submission / test / test_encoded.py
1 import json
2 import os
3 from pprint import pprint
4 from unittest2 import TestCase, TestSuite, defaultTestLoader, skip
5
6 from htsworkflow.submission.encoded import ENCODED
7
8 class TestEncoded(TestCase):
9     def test_prepare_url(self):
10         encode = ENCODED('test.encodedcc.edu')
11
12         tests = [
13             ('/experiments', 'http://test.encodedcc.edu/experiments'),
14             ('/experiments/ENCLB045ZZZ',
15              'http://test.encodedcc.edu/experiments/ENCLB045ZZZ'),
16             ('http://submit.encodedcc.edu/experiments/ENCLB045ZZZ',
17              'http://submit.encodedcc.edu/experiments/ENCLB045ZZZ'),
18         ]
19         for url, result in tests:
20             self.assertEqual(encode.prepare_url(url), result)
21
22     def test_validate(self):
23         """Test validation
24         """
25         schema_file = os.path.join(os.path.dirname(__file__), 'library.json')
26         schema = json.loads(open(schema_file, 'r').read())
27
28         obj = {u'@id': u'/libraries/ENCLB045ZZZ/',
29                u'@type': [u'library', u'item'],
30                u'accession': u'ENCLB045ZZZ',
31                u'aliases': [],
32                u'alternate_accessions': [],
33                u'award': u'/awards/U54HG006998/',
34                u'biosample': u'/biosamples/ENCBS089RNA/',
35                u'date_created': u'2014-01-14T19:44:51.061770+00:00',
36                u'depleted_in_term_id': [],
37                u'depleted_in_term_name': [],
38                u'documents': [],
39                u'extraction_method': u'Ambion mirVana',
40                u'fragmentation_method': u'Illumina/Nextera tagmentation',
41                u'lab': u'/labs/barbara-wold/',
42                u'library_size_selection_method': u'SPRI beads',
43                u'lysis_method': u'Ambion mirVana',
44                u'nucleic_acid_term_id': u'SO:0000871',
45                u'nucleic_acid_term_name': u'polyadenylated mRNA',
46                u'paired_ended': False,
47                u'schema_version': u'2',
48                u'size_range': u'>200',
49                u'status': u'CURRENT',
50                u'strand_specificity': False,
51                u'submitted_by': u'/users/0e3dde9b-aaf9-42dd-87f7-975a85072ed2/',
52                u'treatments': [],
53                u'uuid': u'42c46028-708f-4347-a3df-2c82dfb021c4'}
54         encode = ENCODED('submit.encodedcc.org')
55         encode.schemas[u'library'] = schema
56         encode.validate(obj)
57         self.assertTrue('@id' in obj)
58
59     def test_add_context(self):
60         """Checking to make sure nested @base and @vocab urls are set correctly
61         """
62         obj = {
63             "nucleic_acid_term_name": "RNA",
64             "accession": "ENCLB044ZZZ",
65             "@id": "/libraries/ENCLB044ZZZ/",
66             "schema_version": "1",
67             "@type": [
68                 "library",
69                 "item"
70             ],
71             "lysis_method": "Ambion mirVana",
72             "nucleic_acid_term_id": "SO:0000356",
73             "biosample": {
74                 "biosample_term_name": "GM12878",
75                 "description": "B-lymphocyte, lymphoblastoid, International HapMap Project - CEPH/Utah - European Caucasion, Epstein-Barr Virus",
76                 "accession": "ENCBS090RNA",
77                 "date_created": "2013-10-29T21:15:29.144260+00:00",
78                 "@id": "/biosamples/ENCBS090RNA/",
79                 "aliases": [
80                 "brenton-graveley:GM12878-2",
81                 "thomas-gingeras:191WC"
82                 ],
83                 "organism": "/organisms/human/",
84                 "@type": [
85                 "biosample",
86                 "item"
87                 ]
88             },
89         }
90
91         encode = ENCODED('test.encodedcc.org')
92         bio_base = encode.prepare_url(obj['biosample']['@id'])
93
94         url = encode.prepare_url('/libraries/ENCLB044ZZZ/?format=json&embed=False')
95         schema_url = encode.get_schema_url(obj)
96         encode.add_jsonld_context(obj, encode.context, url)
97
98         self.assertEqual(obj['biosample']['@context']['@base'], bio_base)
99         self.assertEqual(obj['@context']['@vocab'], schema_url)
100
101
102 def suite():
103     suite = TestSuite()
104     suite.addTests(
105         defaultTestLoader.loadTestsFromTestCase(TestEncoded))
106     return suite
107
108 if __name__ == "__main__":
109     from unittest2 import main
110     main(defaultTest='suite')