Fix RDF schema problems with lane_number and species.
[htsworkflow.git] / htsworkflow / frontend / samples / tests.py
index bfe4b0e2c7260c6a5f18893c72c93708f80fde11..4e0c2a3cb87736033c117c650167a6254d5558be 100644 (file)
@@ -141,6 +141,7 @@ class SampleWebTestCase(TestCase):
     def test_library_rdf(self):
         import RDF
         from htsworkflow.util.rdfhelp import get_model, \
+             dump_model, \
              fromTypedNode, \
              load_string_into_model, \
              rdfNS, \
@@ -172,12 +173,23 @@ class SampleWebTestCase(TestCase):
             self.assertEqual(fromTypedNode(r['made_by']), u'Igor')
 
         state = validate_xhtml(content)
-        if state is not None: self.assertTrue(state)
+        if state is not None:
+            self.assertTrue(state)
+
+        # validate a library page.
+        from htsworkflow.util.rdfhelp import add_default_schemas
+        from htsworkflow.util.rdfinfer import Infer
+        add_default_schemas(model)
+        inference = Infer(model)
+        ignored = {'Missing type for: http://localhost/'}
+        errmsgs = [msg for msg in inference.run_validation()
+                   if msg not in ignored ]
+        self.assertEqual(len(errmsgs), 0)
 
     def test_library_index_rdfa(self):
         from htsworkflow.util.rdfhelp import \
-             add_default_schemas, get_model, load_string_into_model
-
+             add_default_schemas, get_model, load_string_into_model, \
+             dump_model
         from htsworkflow.util.rdfinfer import Infer
 
         model = get_model()
@@ -188,24 +200,22 @@ class SampleWebTestCase(TestCase):
         self.assertEqual(response.status_code, 200)
         load_string_into_model(model, 'rdfa', response.content)
 
-        errmsgs = list(inference.run_validation())
-        self.assertEqual(len(errmsgs), 2)
-        # didn't feel like giving the index page a type since all
-        # its doing is showing a list of things.
-        for err in errmsgs:
-            self.assertEqual(err, 'Missing type for: http://localhost/')
+        ignored = {'Missing type for: http://localhost/'}
+        errmsgs = [msg for msg in inference.run_validation()
+                   if msg not in ignored ]
+        self.assertEqual(len(errmsgs), 0)
 
         body =  """prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
         prefix libns: <http://jumpgate.caltech.edu/wiki/LibraryOntology#>
 
-        select ?library ?library_id ?name ?species
+        select ?library ?library_id ?name ?species_name
         where {
            ?library a libns:Library .
            OPTIONAL { ?library libns:library_id ?library_id . }
-           OPTIONAL { ?library libns:species ?species . }
+           OPTIONAL { ?library libns:species_name ?species_name . }
            OPTIONAL { ?library libns:name ?name . }
         }"""
-        bindings = set(['library', 'library_id', 'name', 'species'])
+        bindings = set(['library', 'library_id', 'name', 'species_name'])
         query = RDF.SPARQLQuery(body)
         count = 0
         for r in query.execute(model):
@@ -218,6 +228,8 @@ class SampleWebTestCase(TestCase):
 
         state = validate_xhtml(response.content)
         if state is not None: self.assertTrue(state)
+
+            
 # The django test runner flushes the database between test suites not cases,
 # so to be more compatible with running via nose we flush the database tables
 # of interest before creating our sample data.
@@ -285,7 +297,7 @@ class TestRDFaLibrary(TestCase):
         self.check_literal_object(model, ['400'], p=libNS['gel_cut'])
         self.check_literal_object(model, ['Igor'], p=libNS['made_by'])
         self.check_literal_object(model, ['Paired End Multiplexed Sp-BAC'], p=libNS['name'])
-        self.check_literal_object(model, ['Drosophila melanogaster'], p=libNS['species'])
+        self.check_literal_object(model, ['Drosophila melanogaster'], p=libNS['species_name'])
 
         self.check_uri_object(model,
                               [u'http://localhost/lane/1193'],
@@ -319,4 +331,3 @@ def get_rdf_memory_model():
     storage = RDF.MemoryStorage()
     model = RDF.Model(storage)
     return model
-