Improve samples_factory generated objects.
authorDiane Trout <diane@ghic.org>
Sat, 10 Jan 2015 00:16:54 +0000 (16:16 -0800)
committerDiane Trout <diane@ghic.org>
Sat, 10 Jan 2015 00:16:54 +0000 (16:16 -0800)
* Add LibraryType and MultiplexIndex factories.
* Use factoryboy's fuzzy tools to generate more interesting objects,
  especially to avoid problems with Unique=True fields.
* Use django_get_or_create to make it easier to deail with things
  like usernames
* Define field values for is_staff and is_superuser for the user model
* Unsurprisingly this required updating some test cases to
  be compatible with the changes.

samples/samples_factory.py
samples/test_samples.py

index e682a0ab306c3ab706e509d3785a771a7d84602f..fe0b210680a87c0708fa5d9ce4d5aabab9927b84 100644 (file)
@@ -2,13 +2,14 @@ import datetime
 
 import factory
 from factory.django import DjangoModelFactory
+from factory.fuzzy import FuzzyChoice, FuzzyText, FuzzyInteger
 from . import models
 
 class AffiliationFactory(DjangoModelFactory):
     class Meta:
         model = models.Affiliation
 
-    name = 'affiliation'
+    name = FuzzyText(prefix='affiliation ')
     contact = 'contact name'
     email = factory.LazyAttribute(lambda obj: '%s@example.com' % obj.name)
 
@@ -55,16 +56,20 @@ class ConditionFactory(DjangoModelFactory):
 class ExperimentTypeFactory(DjangoModelFactory):
     class Meta:
         model = models.ExperimentType
+        django_get_or_create = ('name',)
 
     name = 'experiment type name'
 
 class HTSUserFactory(DjangoModelFactory):
     class Meta:
         model = models.HTSUser
+        django_get_or_create = ('username',)
 
     username = 'username'
     email = factory.LazyAttribute(lambda obj: '%s@example.org' % obj.username)
-    
+    is_staff = False
+    is_superuser = False
+
 #class Tag
 
 class SpeciesFactory(DjangoModelFactory):
@@ -74,13 +79,28 @@ class SpeciesFactory(DjangoModelFactory):
     scientific_name = 'test sapiens'
     common_name = 'test human'
 
-        
+class LibraryTypeFactory(DjangoModelFactory):
+    class Meta:
+        model = models.LibraryType
+
+    is_paired_end = FuzzyChoice([True, False])
+    can_multiplex = FuzzyChoice([True, False])
+    name = FuzzyText(prefix='library type ')
+
+class MultiplexIndexFactory(DjangoModelFactory):
+    class Meta:
+        model = models.MultiplexIndex
+
+    adapter_type = factory.SubFactory(LibraryTypeFactory)
+    multiplex_id = factory.LazyAttribute(lambda o: 'N{}'.format(o.sequence))
+    sequence = FuzzyText(length=5, chars='AGCT')
+
 class LibraryFactory(DjangoModelFactory):
     class Meta:
         model = models.Library
 
-    id = '10001'
-    library_name = 'C1C1 test'
+    id = factory.Sequence(lambda n: str(10000 + n))
+    library_name = factory.LazyAttribute(lambda o: 'Library %s' % (o.id))
     library_species = factory.SubFactory(SpeciesFactory)
     experiment_type = factory.SubFactory(ExperimentTypeFactory)
     creation_date = datetime.datetime.now()
@@ -90,3 +110,4 @@ class LibraryFactory(DjangoModelFactory):
     stopping_point = '2A'
     undiluted_concentration = '5.01'
     hidden = False
+    library_type = factory.SubFactory(LibraryTypeFactory)
index 8518eec4f6c60fbf463677aa0fcca7fa5b24fd16..fb6d1fee93fe8b73f41adf5ef1fa9d343bc7a8f0 100644 (file)
@@ -74,7 +74,7 @@ class SampleWebTestCase(TestCase):
             self.failUnlessEqual(d['library_species'], library.library_species.scientific_name)
             self.failUnlessEqual(d['library_species_id'], library.library_species_id)
             self.failUnlessEqual(d['library_type_id'], library.library_type_id)
-            self.failUnlessEqual(d['library_type'], None)
+            self.assertTrue(d['library_type'].startswith('library type'))
             self.failUnlessEqual(d['made_for'], library.made_for)
             self.failUnlessEqual(d['made_by'], library.made_by)
             self.failUnlessEqual(d['notes'], library.notes)
@@ -305,22 +305,23 @@ class TestRDFaLibrary(TestCase):
         parser.parse_string_into_model(model,
                                        lib_response.content,
                                        'http://localhost'+url)
-        with open('/tmp/test.ttl', 'w') as outstream:
-            dump_model(model, outstream)
+        # help debugging rdf errrors
+        #with open('/tmp/test.ttl', 'w') as outstream:
+        #    dump_model(model, outstream)
         # http://jumpgate.caltech.edu/wiki/LibraryOntology#affiliation>
         self.check_literal_object(model, ['Bob'], p=libNS['affiliation'])
-        self.check_literal_object(model, 
-                                  ['experiment type name'], 
+        self.check_literal_object(model,
+                                  ['experiment type name'],
                                   p=libNS['experiment_type'])
         self.check_literal_object(model, ['400'], p=libNS['gel_cut'])
-        self.check_literal_object(model, 
-                                  ['microfluidics bot 7321'], 
+        self.check_literal_object(model,
+                                  ['microfluidics bot 7321'],
                                   p=libNS['made_by'])
-        self.check_literal_object(model, 
-                                  ['C1C1 test'], 
+        self.check_literal_object(model,
+                                  [lib_object.library_name],
                                   p=libNS['name'])
-        self.check_literal_object(model, 
-                                  ['test sapiens'], 
+        self.check_literal_object(model,
+                                  ['test sapiens'],
                                   p=libNS['species_name'])