def test_bad_bamfile_path_raises_exception(self): self.module.subprocess = mock.Mock() p = Params() p.add(gtf='/path/to/GTF/mock.gtf') p.add(feature_counts='/path/to/bin/featureCounts') p.add(feature_counts_file_extension='counts') p.add(feature_counts_output_dir='/path/to/final/featureCounts') p.add(paired_alignment=False) s1 = Sample('A', 'X') s1.bamfiles = [ '/path/to/bamdir/A.bam', '/path/to/bamdir/A.primary.bam', '/path/to/bamdir/A.primary.dedup.bam' ] s2 = Sample('B', 'X') s2.bamfiles = ['/path/to/bamdir/B.bam', '/bad/path/B.sort.bam'] project = Project() project.add_parameters(p) project.add_samples([s1, s2]) m = mock.MagicMock(side_effect=[True, True, True, True, False]) path = self.module.os.path with mock.patch.object(path, 'isfile', m): with self.assertRaises(self.module.MissingBamFileException): self.module.execute_counting(project, util_methods)
def test_system_calls_single_end_experiment(self): self.module.subprocess = mock.Mock() p = Params() p.add(gtf='/path/to/GTF/mock.gtf') p.add(feature_counts='/path/to/bin/featureCounts') p.add(feature_counts_file_extension='counts') p.add(feature_counts_output_dir='/path/to/final/featureCounts') p.add(paired_alignment=False) s1 = Sample('A', 'X') s1.bamfiles = [ '/path/to/bamdir/A.bam', '/path/to/bamdir/A.primary.bam', '/path/to/bamdir/A.primary.dedup.bam' ] project = Project() project.add_parameters(p) project.add_samples([s1]) m = mock.MagicMock(side_effect=[True, True, True]) path = self.module.os.path with mock.patch.object(path, 'isfile', m): self.module.execute_counting(project, util_methods) calls = [ mock.call( '/path/to/bin/featureCounts -a /path/to/GTF/mock.gtf -t exon -g gene_name -o /path/to/final/featureCounts/A.counts /path/to/bamdir/A.bam', shell=True), mock.call( '/path/to/bin/featureCounts -a /path/to/GTF/mock.gtf -t exon -g gene_name -o /path/to/final/featureCounts/A.primary.counts /path/to/bamdir/A.primary.bam', shell=True), mock.call( '/path/to/bin/featureCounts -a /path/to/GTF/mock.gtf -t exon -g gene_name -o /path/to/final/featureCounts/A.primary.dedup.counts /path/to/bamdir/A.primary.dedup.bam', shell=True) ] self.module.subprocess.check_call.assert_has_calls(calls) # check that the sample contains paths to the new count files in the correct locations: expected_files = [ os.path.join('/path/to/final/featureCounts', re.sub('bam', 'counts', os.path.basename(f))) for f in s1.bamfiles ] actual_files = s1.countfiles self.assertEqual(actual_files, expected_files)
def test_system_calls_paired_experiment(self): mock_process = mock.Mock(name='mock_process') mock_process.communicate.return_value = (('', '')) mock_process.returncode = 0 mock_popen = mock.Mock(name='mock_popen') mock_popen.return_value = mock_process self.module.subprocess = mock.Mock() self.module.subprocess.Popen = mock_popen self.module.subprocess.STDOUT = '' self.module.subprocess.PIPE = '' p = Params() cp = Params() p.add(gtf='/path/to/GTF/mock.gtf') cp.add(feature_counts='/path/to/bin/featureCounts') cp.add(feature_counts_file_extension='counts') cp.add(feature_counts_output_dir='/path/to/final/featureCounts') p.add(paired_alignment=True) s1 = Sample('A', 'X') s1.bamfiles = [ '/path/to/bamdir/A.bam', '/path/to/bamdir/A.primary.bam', '/path/to/bamdir/A.primary.dedup.bam' ] project = Project() project.add_parameters(p) project.add_samples([s1]) m = mock.MagicMock(side_effect=[True, True, True]) path = self.module.os.path with mock.patch.object(path, 'isfile', m): self.module.execute_counting(project, cp, util_methods) calls = [ mock.call( '/path/to/bin/featureCounts -a /path/to/GTF/mock.gtf -t exon -g gene_name -p -o /path/to/final/featureCounts/A.counts /path/to/bamdir/A.bam', shell=True, stderr=self.module.subprocess.STDOUT, stdout=self.module.subprocess.PIPE), mock.call( '/path/to/bin/featureCounts -a /path/to/GTF/mock.gtf -t exon -g gene_name -p -o /path/to/final/featureCounts/A.primary.counts /path/to/bamdir/A.primary.bam', shell=True, stderr=self.module.subprocess.STDOUT, stdout=self.module.subprocess.PIPE), mock.call( '/path/to/bin/featureCounts -a /path/to/GTF/mock.gtf -t exon -g gene_name -p -o /path/to/final/featureCounts/A.primary.dedup.counts /path/to/bamdir/A.primary.dedup.bam', shell=True, stderr=self.module.subprocess.STDOUT, stdout=self.module.subprocess.PIPE) ] mock_popen.assert_has_calls(calls) # check that the sample contains paths to the new count files in the correct locations: expected_files = [ os.path.join('/path/to/final/featureCounts', re.sub('bam', 'counts', os.path.basename(f))) for f in s1.bamfiles ] actual_files = s1.countfiles self.assertEqual(actual_files, expected_files)