Utility class for accessing ENCODE3's submit / data warehouse server.
[htsworkflow.git] / htsworkflow / submission / test / test_encoded.py
diff --git a/htsworkflow/submission/test/test_encoded.py b/htsworkflow/submission/test/test_encoded.py
new file mode 100644 (file)
index 0000000..e5b2707
--- /dev/null
@@ -0,0 +1,110 @@
+import json
+import os
+from pprint import pprint
+from unittest2 import TestCase, TestSuite, defaultTestLoader, skip
+
+from htsworkflow.submission.encoded import ENCODED
+
+class TestEncoded(TestCase):
+    def test_prepare_url(self):
+        encode = ENCODED('test.encodedcc.edu')
+
+        tests = [
+            ('/experiments', 'http://test.encodedcc.edu/experiments'),
+            ('/experiments/ENCLB045ZZZ',
+             'http://test.encodedcc.edu/experiments/ENCLB045ZZZ'),
+            ('http://submit.encodedcc.edu/experiments/ENCLB045ZZZ',
+             'http://submit.encodedcc.edu/experiments/ENCLB045ZZZ'),
+        ]
+        for url, result in tests:
+            self.assertEqual(encode.prepare_url(url), result)
+
+    def test_validate(self):
+        """Test validation
+        """
+        schema_file = os.path.join(os.path.dirname(__file__), 'library.json')
+        schema = json.loads(open(schema_file, 'r').read())
+
+        obj = {u'@id': u'/libraries/ENCLB045ZZZ/',
+               u'@type': [u'library', u'item'],
+               u'accession': u'ENCLB045ZZZ',
+               u'aliases': [],
+               u'alternate_accessions': [],
+               u'award': u'/awards/U54HG006998/',
+               u'biosample': u'/biosamples/ENCBS089RNA/',
+               u'date_created': u'2014-01-14T19:44:51.061770+00:00',
+               u'depleted_in_term_id': [],
+               u'depleted_in_term_name': [],
+               u'documents': [],
+               u'extraction_method': u'Ambion mirVana',
+               u'fragmentation_method': u'Illumina/Nextera tagmentation',
+               u'lab': u'/labs/barbara-wold/',
+               u'library_size_selection_method': u'SPRI beads',
+               u'lysis_method': u'Ambion mirVana',
+               u'nucleic_acid_term_id': u'SO:0000871',
+               u'nucleic_acid_term_name': u'polyadenylated mRNA',
+               u'paired_ended': False,
+               u'schema_version': u'2',
+               u'size_range': u'>200',
+               u'status': u'CURRENT',
+               u'strand_specificity': False,
+               u'submitted_by': u'/users/0e3dde9b-aaf9-42dd-87f7-975a85072ed2/',
+               u'treatments': [],
+               u'uuid': u'42c46028-708f-4347-a3df-2c82dfb021c4'}
+        encode = ENCODED('submit.encodedcc.org')
+        encode.schemas[u'library'] = schema
+        encode.validate(obj)
+        self.assertTrue('@id' in obj)
+
+    def test_add_context(self):
+        """Checking to make sure nested @base and @vocab urls are set correctly
+        """
+        obj = {
+            "nucleic_acid_term_name": "RNA",
+            "accession": "ENCLB044ZZZ",
+            "@id": "/libraries/ENCLB044ZZZ/",
+            "schema_version": "1",
+            "@type": [
+                "library",
+                "item"
+            ],
+            "lysis_method": "Ambion mirVana",
+            "nucleic_acid_term_id": "SO:0000356",
+            "biosample": {
+                "biosample_term_name": "GM12878",
+                "description": "B-lymphocyte, lymphoblastoid, International HapMap Project - CEPH/Utah - European Caucasion, Epstein-Barr Virus",
+                "accession": "ENCBS090RNA",
+                "date_created": "2013-10-29T21:15:29.144260+00:00",
+                "@id": "/biosamples/ENCBS090RNA/",
+                "aliases": [
+                "brenton-graveley:GM12878-2",
+                "thomas-gingeras:191WC"
+                ],
+                "organism": "/organisms/human/",
+                "@type": [
+                "biosample",
+                "item"
+                ]
+            },
+        }
+
+        encode = ENCODED('test.encodedcc.org')
+        bio_base = encode.prepare_url(obj['biosample']['@id'])
+
+        url = encode.prepare_url('/libraries/ENCLB044ZZZ/?format=json&embed=False')
+        schema_url = encode.get_schema_url(obj)
+        encode.add_jsonld_context(obj, encode.context, url)
+
+        self.assertEqual(obj['biosample']['@context']['@base'], bio_base)
+        self.assertEqual(obj['@context']['@vocab'], schema_url)
+
+
+def suite():
+    suite = TestSuite()
+    suite.addTests(
+        defaultTestLoader.loadTestsFromTestCase(TestEncoded))
+    return suite
+
+if __name__ == "__main__":
+    from unittest2 import main
+    main(defaultTest='suite')