def test_pipeline(self): # Immediately validates and creates a sample management.call_command('samples', 'queue') # Synchronously work on queue worker1 = get_worker('variants') worker2 = get_worker('default') # Ensure sample-related entries are created.. self.assertEqual(Project.objects.count(), 1) self.assertEqual(Batch.objects.count(), 4) self.assertEqual(Sample.objects.count(), 15) # World and project cohort.. self.assertEqual(Cohort.objects.count(), 2) # Nothing published yet.. self.assertEqual(Sample.objects.filter(published=False).count(), 15) self.assertEqual( Cohort.objects.filter(count=0, published=False).count(), 2) self.assertEqual( Batch.objects.filter(count=0, published=False).count(), 4) # Manifests are stored self.assertEqual(SampleManifest.objects.count(), 15) for manifest in SampleManifest.objects.all(): self.assertNotEqual(manifest.content, '') self.assertFalse(manifest.content_has_changed()) # Work on variants... worker1.work(burst=True) self.assertEqual(Variant.objects.count(), 674) # Work on effects... worker2.work(burst=True) self.assertEqual(Gene.objects.count(), 104) self.assertEqual(Transcript.objects.count(), 255) self.assertEqual(VariantEffect.objects.count(), 1418) self.assertEqual(Sift.objects.count(), 0) self.assertEqual(PolyPhen2.objects.count(), 0) self.assertEqual(ThousandG.objects.count(), 0) self.assertEqual(EVS.objects.count(), 0) # Results loaded.. self.assertEqual(Result.objects.count(), 3436) # Batches are now published.. self.assertEqual(Batch.objects.filter(published=True).count(), 3) # Ensure the counts are accurate for each sample.. for pk, count in [(1, 289), (2, 281), (3, 268), (4, 295), (5, 296), (6, 293), (7, 264), (8, 289), (9, 264), (10, 293), (11, 289), (12, 315)]: sample = Sample.objects.get(pk=pk) self.assertTrue(sample.published) self.assertEqual(sample.count, count) # Batches are created with the samples, but are unpublished for pk, count in [(1, 5), (2, 3), (3, 4)]: batch = Batch.objects.get(pk=pk) self.assertTrue(batch.published) self.assertEqual(batch.count, count) # Ensure the state changes were logged.. system = System.get(Sample.objects.all()[0]) self.assertEqual(len(system), 3)
def test_pipeline(self): expected_counts = { 'batches': 2, 'cohorts': 2, 'genes': 65, 'projects': 1, 'results_per_sample': [ { 'batch': 'batch1', 'sample': 'NA12891', 'count': 1963, }, { 'batch': 'batch1', 'sample': 'NA12892', 'count': 1963, }, { 'batch': 'batch1', 'sample': 'NA12878', 'count': 1963, }, { 'batch': 'batch2', 'sample': 'NA12891', 'count': 2094, }, { 'batch': 'batch2', 'sample': 'NA12892', 'count': 2094, }, { 'batch': 'batch2', 'sample': 'NA12878', 'count': 2094, }, ], 'samples': 6, 'transcripts': 108, 'variant_effects': 8788, 'variants': 4057, 'samples_per_batch': [(1, 3), (2, 3)], } expected_counts['results'] = \ sum([x['count'] for x in expected_counts['results_per_sample']]) # Immediately validates and creates a sample management.call_command('samples', 'queue') # Synchronously work on queue worker1 = get_worker('variants') worker2 = get_worker('default') # Ensure sample-related entries are created.. self.assertEqual(Project.objects.count(), expected_counts['projects']) self.assertEqual(Batch.objects.count(), expected_counts['batches']) self.assertEqual(Sample.objects.count(), expected_counts['samples']) # World and project cohort.. self.assertEqual(Cohort.objects.count(), expected_counts['cohorts']) # Nothing published yet.. self.assertEqual( Sample.objects.filter(published=False).count(), expected_counts['samples']) self.assertEqual( Cohort.objects.filter(count=0, published=False).count(), expected_counts['cohorts']) self.assertEqual( Batch.objects.filter(count=0, published=False).count(), expected_counts['batches']) # Manifests are stored self.assertEqual(SampleManifest.objects.count(), expected_counts['samples']) for manifest in SampleManifest.objects.all(): self.assertNotEqual(manifest.content, '') self.assertFalse(manifest.content_has_changed()) # Work on variants... worker1.work(burst=True) self.assertEqual(Variant.objects.count(), expected_counts['variants']) # Work on effects... worker2.work(burst=True) self.assertEqual(Gene.objects.count(), expected_counts['genes']) self.assertEqual(Transcript.objects.count(), expected_counts['transcripts']) self.assertEqual(VariantEffect.objects.count(), expected_counts['variant_effects']) self.assertEqual(Sift.objects.count(), 0) self.assertEqual(PolyPhen2.objects.count(), 0) self.assertEqual(ThousandG.objects.count(), 0) self.assertEqual(EVS.objects.count(), 0) # Results loaded.. self.assertEqual(Result.objects.count(), expected_counts['results']) # Batches are now published.. self.assertEqual( Batch.objects.filter(published=True).count(), expected_counts['batches']) # Ensure the counts are accurate for each sample.. for ec in expected_counts['results_per_sample']: sample = Sample.objects.get(name=ec['sample'], batch__name=ec['batch']) self.assertTrue(sample.published) self.assertEqual(sample.count, ec['count']) # Batches are created with the samples, but are unpublished for pk, count in expected_counts['samples_per_batch']: batch = Batch.objects.get(pk=pk) self.assertTrue(batch.published) self.assertEqual(batch.count, count) # Ensure the state changes were logged.. system = System.get(Sample.objects.all()[0]) self.assertEqual(len(system), 3)
def test_pipeline(self): expected_counts = { 'batches': 2, 'cohorts': 2, 'genes': 65, 'projects': 1, 'results_per_sample': [ { 'batch': 'batch1', 'sample': 'NA12891', 'count': 1963, }, { 'batch': 'batch1', 'sample': 'NA12892', 'count': 1963, }, { 'batch': 'batch1', 'sample': 'NA12878', 'count': 1963, }, { 'batch': 'batch2', 'sample': 'NA12891', 'count': 2094, }, { 'batch': 'batch2', 'sample': 'NA12892', 'count': 2094, }, { 'batch': 'batch2', 'sample': 'NA12878', 'count': 2094, }, ], 'samples': 6, 'transcripts': 108, 'variant_effects': 8788, 'variants': 4057, 'samples_per_batch': [(1, 3), (2, 3)], } expected_counts['results'] = \ sum([x['count'] for x in expected_counts['results_per_sample']]) # Immediately validates and creates a sample management.call_command('samples', 'queue') # Synchronously work on queue worker1 = get_worker('variants') worker2 = get_worker('default') # Ensure sample-related entries are created.. self.assertEqual(Project.objects.count(), expected_counts['projects']) self.assertEqual(Batch.objects.count(), expected_counts['batches']) self.assertEqual(Sample.objects.count(), expected_counts['samples']) # World and project cohort.. self.assertEqual(Cohort.objects.count(), expected_counts['cohorts']) # Nothing published yet.. self.assertEqual(Sample.objects.filter(published=False).count(), expected_counts['samples']) self.assertEqual( Cohort.objects.filter(count=0, published=False).count(), expected_counts['cohorts']) self.assertEqual( Batch.objects.filter(count=0, published=False).count(), expected_counts['batches']) # Manifests are stored self.assertEqual(SampleManifest.objects.count(), expected_counts['samples']) for manifest in SampleManifest.objects.all(): self.assertNotEqual(manifest.content, '') self.assertFalse(manifest.content_has_changed()) # Work on variants... worker1.work(burst=True) self.assertEqual(Variant.objects.count(), expected_counts['variants']) # Work on effects... worker2.work(burst=True) self.assertEqual(Gene.objects.count(), expected_counts['genes']) self.assertEqual(Transcript.objects.count(), expected_counts['transcripts']) self.assertEqual(VariantEffect.objects.count(), expected_counts['variant_effects']) self.assertEqual(Sift.objects.count(), 0) self.assertEqual(PolyPhen2.objects.count(), 0) self.assertEqual(ThousandG.objects.count(), 0) self.assertEqual(EVS.objects.count(), 0) # Results loaded.. self.assertEqual(Result.objects.count(), expected_counts['results']) # Batches are now published.. self.assertEqual(Batch.objects.filter(published=True).count(), expected_counts['batches']) # Ensure the counts are accurate for each sample.. for ec in expected_counts['results_per_sample']: sample = Sample.objects.get(name=ec['sample'], batch__name=ec['batch']) self.assertTrue(sample.published) self.assertEqual(sample.count, ec['count']) # Batches are created with the samples, but are unpublished for pk, count in expected_counts['samples_per_batch']: batch = Batch.objects.get(pk=pk) self.assertTrue(batch.published) self.assertEqual(batch.count, count) # Ensure the state changes were logged.. system = System.get(Sample.objects.all()[0]) self.assertEqual(len(system), 3)