diff --git a/conf/test_alternativepreprocessing.config b/conf/test_alternativepreprocessing.config index bb958ca0..4b550fb8 100644 --- a/conf/test_alternativepreprocessing.config +++ b/conf/test_alternativepreprocessing.config @@ -20,11 +20,11 @@ process { } params { - config_profile_name = 'Test profile for adapterremoval' - config_profile_description = "Minimal test to check the alternative short-read QC function, adapterremoval" + config_profile_name = 'Test profile for alternative preprocessing tools' + config_profile_description = "Minimal test to check the alternative short-read and long-read processing and QC tools" // Input data - input = params.pipelines_testdata_base_path + 'taxprofiler/samplesheet.csv' + input = params.pipelines_testdata_base_path + 'taxprofiler/samplesheet_shortreadfastqpairsonly.csv' databases = params.pipelines_testdata_base_path + 'taxprofiler/database_v1.3.csv' perform_shortread_qc = true perform_longread_qc = true @@ -32,6 +32,7 @@ params { longread_adapterremoval_tool = 'porechop' longread_filter_tool = 'filtlong' perform_shortread_complexityfilter = true + shortread_complexityfilter_tool = 'prinseqplusplus' perform_shortread_hostremoval = true perform_longread_hostremoval = true perform_runmerging = true diff --git a/conf/test_prinseqplusplus.config b/conf/test_prinseqplusplus.config deleted file mode 100644 index 8662a83d..00000000 --- a/conf/test_prinseqplusplus.config +++ /dev/null @@ -1,74 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for running minimal tests -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines input files and everything required to run a fast and simple pipeline test. - - Use as follows: - nextflow run nf-core/taxprofiler -profile test_prinseqplusplus, --outdir - ----------------------------------------------------------------------------------------- -*/ - -process { - // Limit resources so that this can run on GitHub Actions - resourceLimits = [ - cpus: 4, - memory: '15.GB', - time: '6.h', - ] -} - -params { - config_profile_name = 'Test profile for prinseqplusplus' - config_profile_description = "Minimal test to check the alternative tool of short-read complexity filtering, prinseqplusplus" - - // Input data - input = params.pipelines_testdata_base_path + 'taxprofiler/samplesheet.csv' - databases = params.pipelines_testdata_base_path + 'taxprofiler/database_v1.3.csv' - perform_shortread_qc = true - perform_longread_qc = true - perform_shortread_redundancyestimation = false - perform_shortread_complexityfilter = true - shortread_complexityfilter_tool = 'prinseqplusplus' - perform_shortread_hostremoval = false - perform_longread_hostremoval = false - perform_runmerging = false - hostremoval_reference = params.pipelines_testdata_base_path + 'modules/data/genomics/homo_sapiens/genome/genome.fasta' - run_kaiju = true - run_kraken2 = true - run_bracken = false - run_malt = false - run_metaphlan = false - run_centrifuge = false - run_diamond = false - run_krakenuniq = false - run_motus = false - run_ganon = false - run_kmcp = false - run_sylph = false - run_melon = false -} - -process { - withName: MALT_RUN { - tag = { "${meta.db_name}|${meta.id}" } - maxForks = 1 - ext.args = { "${meta.db_params} -m ${params.malt_mode} -J-Xmx12G" } - ext.prefix = { "${meta.db_name}" } - publishDir = [ - path: { "${params.outdir}/malt/${meta.db_name}/" }, - mode: params.publish_dir_mode, - pattern: '*.{rma6,log,sam}', - ] - } - withName: NONPAREIL_NONPAREIL { - ext.args = { "-k 5" } - ext.prefix = { "${meta.id}_${meta.run_accession}" } - publishDir = [ - path: { "${params.outdir}/nonpareil/" }, - mode: params.publish_dir_mode, - pattern: '*.np{a,c,l,o}', - ] - } -} diff --git a/nextflow.config b/nextflow.config index c8e93180..eb51fb37 100644 --- a/nextflow.config +++ b/nextflow.config @@ -355,9 +355,6 @@ profiles { test_falcobbduk { includeConfig 'conf/test_falcobbduk.config' } - test_prinseqplusplus { - includeConfig 'conf/test_prinseqplusplus.config' - } metaval { includeConfig 'conf/metaval.config' } diff --git a/tests/.nftignore b/tests/.nftignore index 5ce77302..c3db6548 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -23,6 +23,16 @@ multiqc/multiqc_data/multiqc_software_versions.txt multiqc/multiqc_data/multiqc_sources.txt multiqc/multiqc_plots/{svg,pdf,png}/*.{svg,pdf,png} multiqc/multiqc_report.html +bbduk/*.log +centrifuge/*.{fastq.gz,txt} +diamond/*/*.{tsv,log} +fastp/*.{html,zip,json,log} +fastqc/*/*_fastqc.{html,zip} +ganon/*/*.log +kaiju/*/*.{tsv,txt} +kraken2/*/*.{fastq.gz,txt} +krona/*.html +metaphlan/*/*.{biom,txt,sam} nonpareil/*.{npa,npc,npl,npo,png,csv,json,pdf} nonpareil/nonpareil_all_samples.tsv pipeline_info/*.{html,json,txt,yml} diff --git a/tests/default.nf.test b/tests/default.nf.test index 7767d7ee..bd189572 100644 --- a/tests/default.nf.test +++ b/tests/default.nf.test @@ -16,86 +16,72 @@ nextflow_pipeline { then { - def stable_name_all = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) - - //BBDuk - def stable_content_bbduk = getAllFilesFromDir("$outputDir/bbduk", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - //bracken - def stable_content_bracken = getAllFilesFromDir("$outputDir/bracken", relative: false, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - //bowtie2 - def stable_content_bowtie2 = getAllFilesFromDir("$outputDir/bowtie2/align", relative: false, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - //centrifuge - def stable_content_centrifuge = getAllFilesFromDir("$outputDir/centrifuge", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - //diamond - def stable_content_diamond = getAllFilesFromDir("$outputDir/diamond", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - //fastp - def stable_content_fastp = getAllFilesFromDir("$outputDir/fastp", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - //ganon - def stable_content_ganon = getAllFilesFromDir("$outputDir/ganon", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - //kraken2 - def stable_content_kraken2 = getAllFilesFromDir("$outputDir/kraken2", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - //kmcp + def stable_name_all = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + def stable_content_bbduk = getAllFilesFromDir("$outputDir/bbduk", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) + def stable_content_bowtie2 = getAllFilesFromDir("$outputDir/bowtie2/align", relative: false, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) + def stable_content_bracken = getAllFilesFromDir("$outputDir/bracken", relative: false, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) + def stable_content_centrifuge = getAllFilesFromDir("$outputDir/centrifuge", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) + def stable_content_diamond = getAllFilesFromDir("$outputDir/diamond", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) + def stable_content_fastp = getAllFilesFromDir("$outputDir/fastp", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) + // fastqc: no stable files, see stable_name_all + def stable_content_ganon = getAllFilesFromDir("$outputDir/ganon", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) + // kaiju: no stable files, see stable_name_all + def stable_content_kraken2 = getAllFilesFromDir("$outputDir/kraken2", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) def stable_content_kmcp = getAllFilesFromDir("$outputDir/kmcp", relative: false, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - //krona - def stable_content_krona = getAllFilesFromDir("$outputDir/krona", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - //metaphlan - def stable_content_metaphlan = getAllFilesFromDir("$outputDir/metaphlan", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - def sam_files = getAllFilesFromDir("$outputDir/metaphlan", include: ['**/*.sam']) - - //nanoq - def stable_content_nanoq = getAllFilesFromDir("$outputDir/nanoq", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - //nonpareil - def stable_content_nonpareil = getAllFilesFromDir("$outputDir/nonpareil", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - //porechop_abi - def stable_content_porechopabi = getAllFilesFromDir("$outputDir/porechop_abi", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - //samtools - def stable_content_samtools = getAllFilesFromDir("$outputDir/samtools", relative: false, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - //taxpasta - def stable_content_taxpasta = getAllFilesFromDir("$outputDir/taxpasta", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - // melon + def stable_content_krona = getAllFilesFromDir("$outputDir/krona", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) + def stable_content_metaphlan = getAllFilesFromDir("$outputDir/metaphlan", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) + def metaphlan_sam_files = getAllFilesFromDir("$outputDir/metaphlan", include: ['**/*.sam']) + def stable_content_nanoq = getAllFilesFromDir("$outputDir/nanoq", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) + def stable_content_nonpareil = getAllFilesFromDir("$outputDir/nonpareil", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) + def stable_content_porechopabi = getAllFilesFromDir("$outputDir/porechop_abi", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) + def stable_content_samtools = getAllFilesFromDir("$outputDir/samtools", relative: false, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) + def stable_content_taxpasta = getAllFilesFromDir("$outputDir/taxpasta", relative: true, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) def stable_content_melon = getAllFilesFromDir("$outputDir/melon", relative: false, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) - - // sylph def stable_content_sylph = getAllFilesFromDir("$outputDir/sylph", relative: false, includeDir: false, ignore: null, ignoreFile: 'tests/.nftignore', include: ['*','**/*']) assertAll( + + // Workflow success { assert workflow.success}, + + // Versions { assert snapshot( // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions removeNextflowVersion("$outputDir/pipeline_info/nf_core_taxprofiler_software_mqc_versions.yml"), ).match() }, - { assert new File("$outputDir/pipeline_info/nf_core_taxprofiler_software_mqc_versions.yml").exists() }, + + // MultiQC report { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, + // All file list { assert snapshot ( stable_name_all ).match("all_files") }, + + //bbduk { assert snapshot( getAllFilesFromDir("$outputDir/bbduk", include: ['*.bbduk.log']).collect{file -> file.getName() + ' contains string:' + file.text.contains("Reads Processed:") }, - stable_content_bbduk).match("bbduk")}, + stable_content_bbduk + ).match("bbduk") + }, + + //bowtie2 { assert snapshot (stable_content_bowtie2).match("bowtie2")}, + + //bracken { assert snapshot (stable_content_bracken).match("bracken")}, + + // centrifuge { assert snapshot( getAllFilesFromDir("$outputDir/centrifuge", include: ['*.txt', '**/*.txt']).collect{file -> file.getName() + ' contains string:' + (file.text.contains("Homo sapiens") || file.text.contains("unclassified")) }, file("$outputDir/centrifuge/db3/2612_db3.centrifuge.mapped.fastq.gz").getName() + " contains string '@ERR5766176.5733':" + path("$outputDir/centrifuge/db3/2612_db3.centrifuge.mapped.fastq.gz").linesGzip.findAll { l -> l.contains('@ERR5766176.5733') }, file("$outputDir/centrifuge/db3/2612_db3.centrifuge.unmapped.fastq.gz").getName() + " contains string '@ERR5766176.191984':" + path("$outputDir/centrifuge/db3/2612_db3.centrifuge.unmapped.fastq.gz").linesGzip.findAll { l -> l.contains('@ERR5766176.191984') }, file("$outputDir/centrifuge/db3/2613_db3.centrifuge.mapped.fastq.gz").getName() + " contains string '@ERR5766181.3868':" + path("$outputDir/centrifuge/db3/2613_db3.centrifuge.mapped.fastq.gz").linesGzip.findAll { l -> l.contains('@ERR5766181.3868') }, file("$outputDir/centrifuge/db3/2613_db3.centrifuge.unmapped.fastq.gz").getName() + " contains string '@ERR5766181.537239':" + path("$outputDir/centrifuge/db3/2613_db3.centrifuge.unmapped.fastq.gz").linesGzip.findAll { l -> l.contains('@ERR5766181.537239') }, - stable_content_centrifuge).match("centrifuge") }, - { assert snapshot( getAllFilesFromDir("$outputDir/diamond", include: ['**/*diamond.log']).collect{file -> file.getName() + ' contains string:' + file.text.contains("queries aligned") }, + stable_content_centrifuge + ).match("centrifuge") + }, + + // DIAMOND + { assert snapshot( getAllFilesFromDir("$outputDir/diamond", include: ['**/*diamond.log']).collect{file -> file.getName() + ' contains string:' + file.text.contains("queries aligned") }, file("$outputDir/diamond/db1/2611_db1.diamond.tsv").getName() + " contains string 'ERR5766174.77':" + file("$outputDir/diamond/db1/2611_db1.diamond.tsv").text.contains("ERR5766174.77"), file("$outputDir/diamond/db1/2612_db1.diamond.tsv").getName() + " contains string 'ERR5766180.773':" + file("$outputDir/diamond/db1/2612_db1.diamond.tsv").text.contains("ERR5766180.773"), file("$outputDir/diamond/db1/2613_db1.diamond.tsv").getName() + " contains string 'ERR5766181.59':" + file("$outputDir/diamond/db1/2613_db1.diamond.tsv").text.contains("ERR5766181.59"), @@ -106,15 +92,27 @@ nextflow_pipeline { file("$outputDir/diamond/db3/2613_db3.diamond.tsv").getName() + " contains string 'ERR5766181.59':" + file("$outputDir/diamond/db3/2613_db3.diamond.tsv").text.contains("ERR5766181.59"), file("$outputDir/diamond/db3/2614_db3.diamond.tsv").getName() + " contains string 'ERR3201952.882919':" +file("$outputDir/diamond/db3/2614_db3.diamond.tsv").text.contains("ERR3201952.882919"), file("$outputDir/diamond/db3/ERR3201952_db3.diamond.tsv").getName() + " contains string 'ERR3201952.882919':" +file("$outputDir/diamond/db3/ERR3201952_db3.diamond.tsv").text.contains("ERR3201952.882919"), - stable_content_diamond).match("diamond") }, + stable_content_diamond + ).match("diamond") + }, + + //fastp { assert snapshot(getAllFilesFromDir("$outputDir/fastp", include: ['*.fastp.json']).collect { file -> file.getName() + ' contains string:' + file.text.contains("fastp_version")}, - getAllFilesFromDir("$outputDir/fastp", include: ['*.fastp.log']).collect { file -> file.getName() + ' contains string:' + file.text.contains("Detecting adapter sequence")}, - stable_content_fastp).match("fastp") }, + getAllFilesFromDir("$outputDir/fastp", include: ['*.fastp.log']).collect { file -> file.getName() + ' contains string:' + file.text.contains("Detecting adapter sequence")}, + stable_content_fastp + ).match("fastp") + }, + + // ganon { assert snapshot(getAllFilesFromDir("$outputDir/ganon", include: ['**/*.ganon.log']).collect { file -> file.getName() + ' contains string:' + file.text.contains("entries reported")}, - getAllFilesFromDir("$outputDir/ganon", include: ['**/*.ganon.rep']).collect { file -> file.getName() + ' contains string:' + file.text.contains("NC_001148.4")}, - getAllFilesFromDir("$outputDir/ganon", include: ['**/*.tre']).collect { file -> file.getName() + ' contains string:' + file.text.contains("root")}, - file("$outputDir/ganon/ganon_db1_combined_reports.txt").getName() + " contains string 'root':" + file("$outputDir/ganon/ganon_db1_combined_reports.txt").text.contains("root"), - stable_content_ganon).match("ganon") }, + getAllFilesFromDir("$outputDir/ganon", include: ['**/*.ganon.rep']).collect { file -> file.getName() + ' contains string:' + file.text.contains("NC_001148.4")}, + getAllFilesFromDir("$outputDir/ganon", include: ['**/*.tre']).collect { file -> file.getName() + ' contains string:' + file.text.contains("root")}, + file("$outputDir/ganon/ganon_db1_combined_reports.txt").getName() + " contains string 'root':" + file("$outputDir/ganon/ganon_db1_combined_reports.txt").text.contains("root"), + stable_content_ganon + ).match("ganon") + }, + + // kaiju { assert snapshot( file("$outputDir/kaiju/db5/2611_db5.kaijutable.txt").getName() + " contains string '10239':" +file("$outputDir/kaiju/db5/2611_db5.kaijutable.txt").text.contains("10239"), file("$outputDir/kaiju/db5/2611_db5.kaiju.tsv").getName()+ " contains string 'ERR5766174.4':" + file("$outputDir/kaiju/db5/2611_db5.kaiju.tsv").text.contains("ERR5766174.4"), file("$outputDir/kaiju/db5/2612_db5.kaijutable.txt").getName()+ " contains string '10239':" + file("$outputDir/kaiju/db5/2612_db5.kaijutable.txt").text.contains("10239"), @@ -137,9 +135,16 @@ nextflow_pipeline { file("$outputDir/kaiju/db7/2614_db7.kaiju.tsv").getName() + " contains string 'ERR3201952.1794060':" + file("$outputDir/kaiju/db7/2614_db7.kaiju.tsv").text.contains("ERR3201952.1794060"), file("$outputDir/kaiju/db7/ERR3201952_db7.kaijutable.txt").getName() + " contains string '10239':" + file("$outputDir/kaiju/db7/ERR3201952_db7.kaijutable.txt").text.contains("10239"), file("$outputDir/kaiju/db7/ERR3201952_db7.kaiju.tsv").getName() + " contains string 'ERR3201952.1159044':" + file("$outputDir/kaiju/db7/ERR3201952_db7.kaiju.tsv").text.contains("ERR3201952.1159044"), - file("$outputDir/kaiju/kaiju_db7_combined_reports.txt").getName() + " contains string '10239':" + file("$outputDir/kaiju/kaiju_db7_combined_reports.txt").text.contains("10239")).match("kaiju") }, + file("$outputDir/kaiju/kaiju_db7_combined_reports.txt").getName() + " contains string '10239':" + file("$outputDir/kaiju/kaiju_db7_combined_reports.txt").text.contains("10239") + ).match("kaiju") + }, + + // kmcp { assert snapshot (stable_content_kmcp).match("kmcp")}, - { assert snapshot(file("$outputDir/kraken2/db2/2611_db2.kraken2.kraken2.report.txt").getName() + " contains string:'Homo sapiens':" + file("$outputDir/kraken2/db2/2611_db2.kraken2.kraken2.report.txt").text.contains("Homo sapiens"), + + // kraken2 + { assert snapshot ( + file("$outputDir/kraken2/db2/2611_db2.kraken2.kraken2.report.txt").getName() + " contains string:'Homo sapiens':" + file("$outputDir/kraken2/db2/2611_db2.kraken2.kraken2.report.txt").text.contains("Homo sapiens"), file("$outputDir/kraken2/db2/2611_db2.kraken2.classified.fastq.gz").getName() + " contains string 'ERR5766174.15494 kraken:taxid|559292':" + path("$outputDir/kraken2/db2/2611_db2.kraken2.classified.fastq.gz").linesGzip.findAll { l -> l.contains('ERR5766174.15494 kraken:taxid|559292') }, file("$outputDir/kraken2/db2/2611_db2.kraken2.unclassified.fastq.gz").getName() + " contains string '>ERR5766174.184799':" + path("$outputDir/kraken2/db2/2611_db2.kraken2.unclassified.fastq.gz").linesGzip.findAll { l -> l.contains('>ERR5766174.184799') }, file("$outputDir/kraken2/db2/2612_db2.kraken2.kraken2.report.txt").getName() + " contains string:'Saccharomyces cerevisiae S288C':" + file("$outputDir/kraken2/db2/2612_db2.kraken2.kraken2.report.txt").text.contains("Saccharomyces cerevisiae S288C"), @@ -150,16 +155,28 @@ nextflow_pipeline { file("$outputDir/kraken2/db2/2613_db2.kraken2.unclassified.fastq.gz").getName() + " contains string:'@ERR5766181.108601':" + path("$outputDir/kraken2/db2/2613_db2.kraken2.unclassified.fastq.gz").linesGzip.findAll { l -> l.contains('@ERR5766181.108601') }, file("$outputDir/kraken2/kraken2_db1-bracken_combined_reports.txt").getName() + " contains string:'Saccharomyces cerevisiae S288C':" + file("$outputDir/kraken2/kraken2_db1-bracken_combined_reports.txt").text.contains("Saccharomyces cerevisiae S288C"), file("$outputDir/kraken2/kraken2_db2_combined_reports.txt").getName() + " contains string:'Saccharomyces cerevisiae S288C':" + file("$outputDir/kraken2/kraken2_db2_combined_reports.txt").text.contains("Saccharomyces cerevisiae S288C"), - stable_content_kraken2).match("kraken2") }, + stable_content_kraken2 + ).match("kraken2") + }, + + // krona { assert snapshot(getAllFilesFromDir("$outputDir/krona", include: ['*.html']).collect { file -> file.getName() + " exists:"+ file.exists() }, stable_content_krona).match("krona") }, + + // metaphlan { assert snapshot(getAllFilesFromDir("$outputDir/metaphlan", include: ['**/*.metaphlan.biom']).collect { file -> file.getName() + ' contains string:' + file.text.contains("generated_by")}, getAllFilesFromDir("$outputDir/metaphlan", include: ['**/*.metaphlan.bowtie2out.txt']).collect { file -> file.getName() + ' contains string:' + file.text.contains("avg_read_length")}, getAllFilesFromDir("$outputDir/metaphlan", include: ['**/*_profile.txt']).collect { file -> file.getName() + ' contains string:' + file.text.contains("clade_name")}, file("$outputDir/metaphlan/metaphlan_metaphlan3_combined_reports.txt").getName() + " contains string: 'UNCLASSIFIED':" + file("$outputDir/metaphlan/metaphlan_metaphlan3_combined_reports.txt").text.contains("UNCLASSIFIED"), file("$outputDir/metaphlan/metaphlan_metaphlan4_combined_reports.txt").getName() + " contains string: 't__SGB4933_group':" + file("$outputDir/metaphlan/metaphlan_metaphlan4_combined_reports.txt").text.contains("t__SGB4933_group"), - //sam_files.isEmpty() ? 'No SAM files' : sam_files.collect { file -> file.getName() + ":md5," + sam(file).getHeaderMD5() }, - stable_content_metaphlan).match("metaphlan") }, + //metaphlan_sam_files.isEmpty() ? 'No SAM files' : metaphlan_sam_files.collect { file -> file.getName() + ":md5," + sam(file).getHeaderMD5() }, + stable_content_metaphlan + ).match("metaphlan") + }, + + // nanoq { assert snapshot (stable_content_nanoq).match("nanoq")}, + + // nonpareil { assert snapshot(getAllFilesFromDir("$outputDir/nonpareil", include: ['*.npa']).collect { file -> file.getName() + ' contains string:' + file.text.contains("0.00")}, getAllFilesFromDir("$outputDir/nonpareil", include: ['*.npl']).collect { file -> file.getName() + ' contains string:' + file.text.contains("Average read length")}, getAllFilesFromDir("$outputDir/nonpareil", include: ['*.npo']).collect { file -> file.getName() + ' contains string:' + file.text.contains("@version:")}, @@ -176,10 +193,20 @@ nextflow_pipeline { "File nonpareil_all_samples_mqc.png exists: " + file("$outputDir/nonpareil/nonpareil_all_samples_mqc.png").exists(), "File nonpareil_all_samples.pdf exists: " + file("$outputDir/nonpareil/nonpareil_all_samples.pdf").exists(), file("$outputDir/nonpareil/nonpareil_all_samples.tsv").getName() + " contains string:'diversity':" + file("$outputDir/nonpareil/nonpareil_all_samples.tsv").text.contains("diversity"), - stable_content_nonpareil).match("nonpareil") }, + stable_content_nonpareil + ).match("nonpareil") + }, + + // porechop_abi { assert snapshot (file("$outputDir/porechop_abi/ERR3201952_ERR3201952_porechop_abi.log").getName() + " contains string: 'Looking for known adapter':" + file("$outputDir/porechop_abi/ERR3201952_ERR3201952_porechop_abi.log").text.contains("Looking for known adapter"), - stable_content_porechopabi).match("porechop_abi")}, + stable_content_porechopabi + ).match("porechop_abi") + }, + + // samtools { assert snapshot (stable_content_samtools).match("samtools")}, + + // taxpasta { assert snapshot(file("$outputDir/taxpasta/bracken_db1.tsv").getName() + " contains string:'9606':" + file("$outputDir/taxpasta/bracken_db1.tsv").text.contains("9606"), file("$outputDir/taxpasta/centrifuge_db3.tsv").getName() + " contains string:'131567':" + file("$outputDir/taxpasta/centrifuge_db3.tsv").text.contains("131567"), file("$outputDir/taxpasta/diamond_db1.tsv").getName() + " contains string:'8058':" + file("$outputDir/taxpasta/diamond_db1.tsv").text.contains("8058"), @@ -194,8 +221,14 @@ nextflow_pipeline { file("$outputDir/taxpasta/kraken2_db2.tsv").getName() + " contains string:'131567':" + file("$outputDir/taxpasta/kraken2_db2.tsv").text.contains("131567"), file("$outputDir/taxpasta/metaphlan_metaphlan3.tsv").getName() + " contains string:'taxonomy_id':" + file("$outputDir/taxpasta/metaphlan_metaphlan3.tsv").text.contains("taxonomy_id"), file("$outputDir/taxpasta/metaphlan_metaphlan4.tsv").getName() + " contains string:'1239':" + file("$outputDir/taxpasta/metaphlan_metaphlan4.tsv").text.contains("1239"), - stable_content_taxpasta).match("taxpasta") }, + stable_content_taxpasta + ).match("taxpasta") + }, + + // melon { assert snapshot (stable_content_melon).match("melon")}, + + // sylph { assert snapshot (stable_content_sylph).match("sylph") }, ) } diff --git a/tests/test_alternativepreprocessing.nf.test b/tests/test_alternativepreprocessing.nf.test new file mode 100644 index 00000000..fdcd3a2c --- /dev/null +++ b/tests/test_alternativepreprocessing.nf.test @@ -0,0 +1,101 @@ +nextflow_pipeline { + + name "Test alternative preprocessing" + script "../main.nf" + tag "pipeline" + tag "test_alternativepreprocessing" + profile "test_alternativepreprocessing" + + test("-profile test_alternativepreprocessing") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + def stable_name_all = getAllFilesFromDir(params.outdir, relative: true , includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + def stable_content_adapterremoval = getAllFilesFromDir(params.outdir, relative: false, includeDir: false, include: ["adapterremoval/**"], ignoreFile: 'tests/.nftignore') + def stable_content_bowtie2 = getAllFilesFromDir(params.outdir, relative: false, includeDir: false, include: ["bowtie2/**"] , ignoreFile: 'tests/.nftignore') + // fastqc: all unstable files, see stable_name_all + def stable_content_filtlong = getAllFilesFromDir(params.outdir, relative: false, includeDir: false, include: ["filtlong/**"] , ignoreFile: 'tests/.nftignore') + // kaiju: partly unstable files, see custom assertions + def stable_content_kraken2 = getAllFilesFromDir(params.outdir, relative: false, includeDir: false, include: ["kraken2/**"] , ignoreFile: 'tests/.nftignore') + // multiqc: all unstable files, see custom assertions from template at top + // porechop: partly unstable files, see custom assertions + // pipeline_info: all unstable files, custom assertions from template at top + def stable_content_prinseqplusplus = getAllFilesFromDir(params.outdir, relative: false, includeDir: false, include: ["prinseqplusplus/**"], ignoreFile: 'tests/.nftignore') + def stable_content_samtools = getAllFilesFromDir(params.outdir, relative: false, includeDir: false, include: ["samtools/**"] , ignoreFile: 'tests/.nftignore') + + assertAll( + { assert workflow.success}, + { assert snapshot( + // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions + removeNextflowVersion("$outputDir/pipeline_info/nf_core_taxprofiler_software_mqc_versions.yml"), + ).match() }, + + { assert new File("$outputDir/pipeline_info/nf_core_taxprofiler_software_mqc_versions.yml").exists() }, + { assert new File("$outputDir/multiqc/multiqc_report.html").exists() }, + + { assert snapshot ( stable_name_all ).match("all_files") }, + + // adapterremoval + { assert snapshot ( stable_content_adapterremoval ).match("adapterremoval") }, + + // bowtie2 + { assert snapshot ( stable_content_bowtie2 ).match("bowtie2") }, + + // filtlong + { assert snapshot ( stable_content_filtlong ).match("filtlong") }, + + // kaiju + { assert snapshot ( + file("$outputDir/kaiju/db5/2611_db5.kaijutable.txt").getName() + " contains string '10239':" +file("$outputDir/kaiju/db5/2611_db5.kaijutable.txt").text.contains("10239"), + file("$outputDir/kaiju/db5/2611_db5.kaiju.tsv").getName()+ " contains string 'ERR5766174.4':" + file("$outputDir/kaiju/db5/2611_db5.kaiju.tsv").text.contains("ERR5766174.4"), + file("$outputDir/kaiju/db5/2612_db5.kaijutable.txt").getName()+ " contains string '10239':" + file("$outputDir/kaiju/db5/2612_db5.kaijutable.txt").text.contains("10239"), + file("$outputDir/kaiju/db5/2612_db5.kaiju.tsv").getName() + " contains string 'ERR5766176.2':" + file("$outputDir/kaiju/db5/2612_db5.kaiju.tsv").text.contains("ERR5766176.2"), + file("$outputDir/kaiju/db5/2613_db5.kaijutable.txt").getName() + " contains string '10239':" + file("$outputDir/kaiju/db5/2613_db5.kaijutable.txt").text.contains("10239"), + file("$outputDir/kaiju/db5/2613_db5.kaiju.tsv").getName() + " contains string 'ERR5766181.1':" + file("$outputDir/kaiju/db5/2613_db5.kaiju.tsv").text.contains("ERR5766181.1"), + file("$outputDir/kaiju/db6/2614_db6.kaijutable.txt").getName() + " contains string '10239':" + file("$outputDir/kaiju/db6/2614_db6.kaijutable.txt").text.contains("10239"), + file("$outputDir/kaiju/db6/2614_db6.kaiju.tsv").getName() + " contains string 'ERR3201952.1794060':" + file("$outputDir/kaiju/db6/2614_db6.kaiju.tsv").text.contains("ERR3201952.1794060"), + file("$outputDir/kaiju/db6/ERR3201952_db6.kaijutable.txt").getName() + " contains string 'Viruses':" + file("$outputDir/kaiju/db6/ERR3201952_db6.kaijutable.txt").text.contains("Viruses"), + file("$outputDir/kaiju/db6/ERR3201952_db6.kaiju.tsv").getName() + " contains string 'ERR3201952.1159044':" + file("$outputDir/kaiju/db6/ERR3201952_db6.kaiju.tsv").text.contains("ERR3201952.1159044"), + file("$outputDir/kaiju/db7/2611_db7.kaijutable.txt").getName() + " contains string '10239':" + file("$outputDir/kaiju/db7/2611_db7.kaijutable.txt").text.contains("10239"), + file("$outputDir/kaiju/db7/2611_db7.kaiju.tsv").getName() + " contains string 'ERR5766174.4':" + file("$outputDir/kaiju/db7/2611_db7.kaiju.tsv").text.contains("ERR5766174.4"), + file("$outputDir/kaiju/db7/2612_db7.kaijutable.txt").getName() + " contains string '10239':" + file("$outputDir/kaiju/db7/2612_db7.kaijutable.txt").text.contains("10239"), + file("$outputDir/kaiju/db7/2612_db7.kaiju.tsv").getName() + " contains string 'ERR5766176.3':" + file("$outputDir/kaiju/db7/2612_db7.kaiju.tsv").text.contains("ERR5766176.3"), + file("$outputDir/kaiju/db7/2613_db7.kaijutable.txt").getName() + " contains string '10239':" + file("$outputDir/kaiju/db7/2613_db7.kaijutable.txt").text.contains("10239"), + file("$outputDir/kaiju/db7/2613_db7.kaiju.tsv").getName() + " contains string 'ERR5766181.2':" + file("$outputDir/kaiju/db7/2613_db7.kaiju.tsv").text.contains("ERR5766181.2"), + file("$outputDir/kaiju/db7/2614_db7.kaijutable.txt").getName() + " contains string '10239':" + file("$outputDir/kaiju/db7/2614_db7.kaijutable.txt").text.contains("10239"), + file("$outputDir/kaiju/db7/2614_db7.kaiju.tsv").getName() + " contains string 'ERR3201952.1794060':" + file("$outputDir/kaiju/db7/2614_db7.kaiju.tsv").text.contains("ERR3201952.1794060"), + file("$outputDir/kaiju/db7/ERR3201952_db7.kaijutable.txt").getName() + " contains string '10239':" + file("$outputDir/kaiju/db7/ERR3201952_db7.kaijutable.txt").text.contains("10239"), + file("$outputDir/kaiju/db7/ERR3201952_db7.kaiju.tsv").getName() + " contains string 'ERR3201952.1159044':" + file("$outputDir/kaiju/db7/ERR3201952_db7.kaiju.tsv").text.contains("ERR3201952.1159044") + ).match("kaiju") + }, + + // Kraken2 + { assert snapshot ( + stable_content_kraken2, + file("$outputDir/kraken2/db2/2611_db2.kraken2.kraken2.report.txt").getName() + " contains string 'Saccharomyces cerevisiae S288C': " + file("$outputDir/kraken2/db2/2611_db2.kraken2.kraken2.report.txt").text.contains("Saccharomyces cerevisiae S288C"), + file("$outputDir/kraken2/db2/2612_db2.kraken2.kraken2.report.txt").getName() + " contains string 'Saccharomyces cerevisiae S288C': " + file("$outputDir/kraken2/db2/2612_db2.kraken2.kraken2.report.txt").text.contains("Saccharomyces cerevisiae S288C"), + file("$outputDir/kraken2/db2/2613_db2.kraken2.kraken2.report.txt").getName() + " contains string 'Saccharomyces cerevisiae S288C': " + file("$outputDir/kraken2/db2/2613_db2.kraken2.kraken2.report.txt").text.contains("Saccharomyces cerevisiae S288C") + ).match("kraken2") + }, + + // porechop + { assert snapshot ( + file("$outputDir/porechop/ERR3201952_ERR3201952_porechop.log").getName() + " contains string '7 / 10,000': " + file("$outputDir/porechop/ERR3201952_ERR3201952_porechop.log").text.contains("7 / 10,000"), + ).match("porechop") + }, + + // prinseqplusplus + { assert snapshot ( stable_content_prinseqplusplus ).match("prinseqplusplus") }, + + // samtools + { assert snapshot ( stable_content_samtools ).match("samtools") }, + ) + + } + } +} diff --git a/tests/test_alternativepreprocessing.nf.test.snap b/tests/test_alternativepreprocessing.nf.test.snap new file mode 100644 index 00000000..b1c0f4cc --- /dev/null +++ b/tests/test_alternativepreprocessing.nf.test.snap @@ -0,0 +1,532 @@ +{ + "-profile test_alternativepreprocessing": { + "content": [ + { + "ADAPTERREMOVAL_PAIRED": { + "adapterremoval": "2.3.2" + }, + "BOWTIE2_ALIGN": { + "bowtie2": "2.5.4", + "samtools": 1.21, + "pigz": 2.8 + }, + "BOWTIE2_BUILD": { + "bowtie2": "2.5.4" + }, + "FASTQC": { + "fastqc": "0.12.1" + }, + "FASTQC_PROCESSED": { + "fastqc": "0.12.1" + }, + "FILTLONG": { + "filtlong": "0.2.1" + }, + "KAIJU_KAIJU2TABLE_SINGLE": { + "kaiju": "1.10.0" + }, + "KAIJU_KAIJU": { + "kaiju": "1.10.0" + }, + "KRAKEN2_KRAKEN2": { + "kraken2": "2.1.5", + "pigz": 2.8 + }, + "MERGE_RUNS": { + "cat": 9.5 + }, + "MINIMAP2_ALIGN": { + "minimap2": "2.29-r1283", + "samtools": 1.21 + }, + "MINIMAP2_INDEX": { + "minimap2": "2.29-r1283" + }, + "PORECHOP_PORECHOP": { + "porechop": "0.2.4" + }, + "PRINSEQPLUSPLUS": { + "prinseqplusplus": 1.2 + }, + "SAMTOOLS_FASTQ": { + "samtools": "1.22.1" + }, + "SAMTOOLS_INDEX": { + "samtools": "1.22.1" + }, + "SAMTOOLS_STATS": { + "samtools": "1.22.1" + }, + "SAMTOOLS_VIEW": { + "samtools": "1.22.1" + }, + "UNTAR": { + "untar": 1.34 + }, + "Workflow": { + "nf-core/taxprofiler": "v1.2.7dev" + } + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T09:11:43.67531342" + }, + "all_files": { + "content": [ + [ + "adapterremoval", + "adapterremoval/2612_ERR5766176.settings", + "adapterremoval/2612_ERR5766176_B.settings", + "adapterremoval/2613_ERR5766181.settings", + "bowtie2", + "bowtie2/align", + "bowtie2/align/2612_ERR5766176.bowtie2.log", + "bowtie2/align/2612_ERR5766176_B.bowtie2.log", + "bowtie2/align/2613_ERR5766181.bowtie2.log", + "fastqc", + "fastqc/processed", + "fastqc/processed/2612_ERR5766176_B_processed_1_fastqc.html", + "fastqc/processed/2612_ERR5766176_B_processed_1_fastqc.zip", + "fastqc/processed/2612_ERR5766176_B_processed_2_fastqc.html", + "fastqc/processed/2612_ERR5766176_B_processed_2_fastqc.zip", + "fastqc/processed/2612_ERR5766176_processed_1_fastqc.html", + "fastqc/processed/2612_ERR5766176_processed_1_fastqc.zip", + "fastqc/processed/2612_ERR5766176_processed_2_fastqc.html", + "fastqc/processed/2612_ERR5766176_processed_2_fastqc.zip", + "fastqc/processed/2613_ERR5766181_processed_1_fastqc.html", + "fastqc/processed/2613_ERR5766181_processed_1_fastqc.zip", + "fastqc/processed/2613_ERR5766181_processed_2_fastqc.html", + "fastqc/processed/2613_ERR5766181_processed_2_fastqc.zip", + "fastqc/processed/ERR3201952_ERR3201952_processed_fastqc.html", + "fastqc/processed/ERR3201952_ERR3201952_processed_fastqc.zip", + "fastqc/raw", + "fastqc/raw/2612_ERR5766176_B_raw_1_fastqc.html", + "fastqc/raw/2612_ERR5766176_B_raw_1_fastqc.zip", + "fastqc/raw/2612_ERR5766176_B_raw_2_fastqc.html", + "fastqc/raw/2612_ERR5766176_B_raw_2_fastqc.zip", + "fastqc/raw/2612_ERR5766176_raw_1_fastqc.html", + "fastqc/raw/2612_ERR5766176_raw_1_fastqc.zip", + "fastqc/raw/2612_ERR5766176_raw_2_fastqc.html", + "fastqc/raw/2612_ERR5766176_raw_2_fastqc.zip", + "fastqc/raw/2613_ERR5766181_raw_1_fastqc.html", + "fastqc/raw/2613_ERR5766181_raw_1_fastqc.zip", + "fastqc/raw/2613_ERR5766181_raw_2_fastqc.html", + "fastqc/raw/2613_ERR5766181_raw_2_fastqc.zip", + "fastqc/raw/ERR3201952_ERR3201952_raw_fastqc.html", + "fastqc/raw/ERR3201952_ERR3201952_raw_fastqc.zip", + "filtlong", + "filtlong/ERR3201952_ERR3201952_filtered.log", + "kaiju", + "kaiju/db5", + "kaiju/db5/2611_db5.kaiju.tsv", + "kaiju/db5/2611_db5.kaijutable.txt", + "kaiju/db5/2612_db5.kaiju.tsv", + "kaiju/db5/2612_db5.kaijutable.txt", + "kaiju/db5/2613_db5.kaiju.tsv", + "kaiju/db5/2613_db5.kaijutable.txt", + "kaiju/db6", + "kaiju/db6/2614_db6.kaiju.tsv", + "kaiju/db6/2614_db6.kaijutable.txt", + "kaiju/db6/ERR3201952_db6.kaiju.tsv", + "kaiju/db6/ERR3201952_db6.kaijutable.txt", + "kaiju/db7", + "kaiju/db7/2611_db7.kaiju.tsv", + "kaiju/db7/2611_db7.kaijutable.txt", + "kaiju/db7/2612_db7.kaiju.tsv", + "kaiju/db7/2612_db7.kaijutable.txt", + "kaiju/db7/2613_db7.kaiju.tsv", + "kaiju/db7/2613_db7.kaijutable.txt", + "kaiju/db7/2614_db7.kaiju.tsv", + "kaiju/db7/2614_db7.kaijutable.txt", + "kaiju/db7/ERR3201952_db7.kaiju.tsv", + "kaiju/db7/ERR3201952_db7.kaijutable.txt", + "kraken2", + "kraken2/db2", + "kraken2/db2/2611_db2.kraken2.kraken2.report.txt", + "kraken2/db2/2612_db2.kraken2.kraken2.report.txt", + "kraken2/db2/2613_db2.kraken2.kraken2.report.txt", + "multiqc", + "multiqc/multiqc_data", + "multiqc/multiqc_data/ar_length_count_plot_All.txt", + "multiqc/multiqc_data/ar_length_count_plot_Discarded.txt", + "multiqc/multiqc_data/ar_length_count_plot_Mate1.txt", + "multiqc/multiqc_data/ar_length_count_plot_Mate2.txt", + "multiqc/multiqc_data/ar_length_count_plot_Singleton.txt", + "multiqc/multiqc_data/ar_retained_plot.txt", + "multiqc/multiqc_data/bowtie2_pe_plot.txt", + "multiqc/multiqc_data/fastqc-1-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc-1_adapter_content_plot.txt", + "multiqc/multiqc_data/fastqc-1_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc-1_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc-1_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc-1_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc-1_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc-1_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc-1_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc-status-check-heatmap.txt", + "multiqc/multiqc_data/fastqc_adapter_content_plot.txt", + "multiqc/multiqc_data/fastqc_per_base_n_content_plot.txt", + "multiqc/multiqc_data/fastqc_per_base_sequence_quality_plot.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Counts.txt", + "multiqc/multiqc_data/fastqc_per_sequence_gc_content_plot_Percentages.txt", + "multiqc/multiqc_data/fastqc_per_sequence_quality_scores_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_counts_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_duplication_levels_plot.txt", + "multiqc/multiqc_data/fastqc_sequence_length_distribution_plot.txt", + "multiqc/multiqc_data/filtlong.txt", + "multiqc/multiqc_data/kaiju-topfive-plot.txt", + "multiqc/multiqc_data/kraken-top-n-plot_Class.txt", + "multiqc/multiqc_data/kraken-top-n-plot_Domain.txt", + "multiqc/multiqc_data/kraken-top-n-plot_Family.txt", + "multiqc/multiqc_data/kraken-top-n-plot_Genus.txt", + "multiqc/multiqc_data/kraken-top-n-plot_Kingdom.txt", + "multiqc/multiqc_data/kraken-top-n-plot_Order.txt", + "multiqc/multiqc_data/kraken-top-n-plot_Phylum.txt", + "multiqc/multiqc_data/kraken-top-n-plot_Species.txt", + "multiqc/multiqc_data/kraken-top-n-plot_Unclassified.txt", + "multiqc/multiqc_data/llms-full.txt", + "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc.parquet", + "multiqc/multiqc_data/multiqc_adapter_removal.txt", + "multiqc/multiqc_data/multiqc_bowtie2.txt", + "multiqc/multiqc_data/multiqc_citations.txt", + "multiqc/multiqc_data/multiqc_data.json", + "multiqc/multiqc_data/multiqc_fastqc.txt", + "multiqc/multiqc_data/multiqc_fastqc_fastqc-1.txt", + "multiqc/multiqc_data/multiqc_general_stats.txt", + "multiqc/multiqc_data/multiqc_kaiju_species.txt", + "multiqc/multiqc_data/multiqc_kraken.txt", + "multiqc/multiqc_data/multiqc_samtools_stats.txt", + "multiqc/multiqc_data/multiqc_software_versions.txt", + "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_data/porechop-endtrim-barplot.txt", + "multiqc/multiqc_data/porechop-middlesplit-barplot.txt", + "multiqc/multiqc_data/porechop-starttrim-barplot.txt", + "multiqc/multiqc_data/porechop_porechop.txt", + "multiqc/multiqc_data/samtools-stats-dp.txt", + "multiqc/multiqc_data/samtools_alignment_plot.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/ar_length_count_plot_All.pdf", + "multiqc/multiqc_plots/pdf/ar_length_count_plot_Discarded.pdf", + "multiqc/multiqc_plots/pdf/ar_length_count_plot_Mate1.pdf", + "multiqc/multiqc_plots/pdf/ar_length_count_plot_Mate2.pdf", + "multiqc/multiqc_plots/pdf/ar_length_count_plot_Singleton.pdf", + "multiqc/multiqc_plots/pdf/ar_retained_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/ar_retained_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/bowtie2_pe_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/bowtie2_pe_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_adapter_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc-1_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_adapter_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_n_content_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_base_sequence_quality_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Counts.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_gc_content_plot_Percentages.pdf", + "multiqc/multiqc_plots/pdf/fastqc_per_sequence_quality_scores_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_counts_plot-pct.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_duplication_levels_plot.pdf", + "multiqc/multiqc_plots/pdf/fastqc_sequence_length_distribution_plot.pdf", + "multiqc/multiqc_plots/pdf/kaiju-topfive-plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/kaiju-topfive-plot-pct.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Class-cnt.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Class-pct.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Domain-cnt.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Domain-pct.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Family-cnt.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Family-pct.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Genus-cnt.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Genus-pct.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Kingdom-cnt.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Kingdom-pct.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Order-cnt.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Order-pct.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Phylum-cnt.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Phylum-pct.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Species-cnt.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Species-pct.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Unclassified-cnt.pdf", + "multiqc/multiqc_plots/pdf/kraken-top-n-plot_Unclassified-pct.pdf", + "multiqc/multiqc_plots/pdf/porechop-endtrim-barplot-cnt.pdf", + "multiqc/multiqc_plots/pdf/porechop-endtrim-barplot-pct.pdf", + "multiqc/multiqc_plots/pdf/porechop-middlesplit-barplot-cnt.pdf", + "multiqc/multiqc_plots/pdf/porechop-middlesplit-barplot-pct.pdf", + "multiqc/multiqc_plots/pdf/porechop-starttrim-barplot-cnt.pdf", + "multiqc/multiqc_plots/pdf/porechop-starttrim-barplot-pct.pdf", + "multiqc/multiqc_plots/pdf/samtools-stats-dp.pdf", + "multiqc/multiqc_plots/pdf/samtools_alignment_plot-cnt.pdf", + "multiqc/multiqc_plots/pdf/samtools_alignment_plot-pct.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/ar_length_count_plot_All.png", + "multiqc/multiqc_plots/png/ar_length_count_plot_Discarded.png", + "multiqc/multiqc_plots/png/ar_length_count_plot_Mate1.png", + "multiqc/multiqc_plots/png/ar_length_count_plot_Mate2.png", + "multiqc/multiqc_plots/png/ar_length_count_plot_Singleton.png", + "multiqc/multiqc_plots/png/ar_retained_plot-cnt.png", + "multiqc/multiqc_plots/png/ar_retained_plot-pct.png", + "multiqc/multiqc_plots/png/bowtie2_pe_plot-cnt.png", + "multiqc/multiqc_plots/png/bowtie2_pe_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-1_adapter_content_plot.png", + "multiqc/multiqc_plots/png/fastqc-1_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc-1_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc-1_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc-1_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc-1_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc-1_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc-1_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc-1_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc_adapter_content_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_base_n_content_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_base_sequence_quality_plot.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Counts.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_gc_content_plot_Percentages.png", + "multiqc/multiqc_plots/png/fastqc_per_sequence_quality_scores_plot.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-cnt.png", + "multiqc/multiqc_plots/png/fastqc_sequence_counts_plot-pct.png", + "multiqc/multiqc_plots/png/fastqc_sequence_duplication_levels_plot.png", + "multiqc/multiqc_plots/png/fastqc_sequence_length_distribution_plot.png", + "multiqc/multiqc_plots/png/kaiju-topfive-plot-cnt.png", + "multiqc/multiqc_plots/png/kaiju-topfive-plot-pct.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Class-cnt.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Class-pct.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Domain-cnt.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Domain-pct.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Family-cnt.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Family-pct.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Genus-cnt.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Genus-pct.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Kingdom-cnt.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Kingdom-pct.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Order-cnt.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Order-pct.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Phylum-cnt.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Phylum-pct.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Species-cnt.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Species-pct.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Unclassified-cnt.png", + "multiqc/multiqc_plots/png/kraken-top-n-plot_Unclassified-pct.png", + "multiqc/multiqc_plots/png/porechop-endtrim-barplot-cnt.png", + "multiqc/multiqc_plots/png/porechop-endtrim-barplot-pct.png", + "multiqc/multiqc_plots/png/porechop-middlesplit-barplot-cnt.png", + "multiqc/multiqc_plots/png/porechop-middlesplit-barplot-pct.png", + "multiqc/multiqc_plots/png/porechop-starttrim-barplot-cnt.png", + "multiqc/multiqc_plots/png/porechop-starttrim-barplot-pct.png", + "multiqc/multiqc_plots/png/samtools-stats-dp.png", + "multiqc/multiqc_plots/png/samtools_alignment_plot-cnt.png", + "multiqc/multiqc_plots/png/samtools_alignment_plot-pct.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/ar_length_count_plot_All.svg", + "multiqc/multiqc_plots/svg/ar_length_count_plot_Discarded.svg", + "multiqc/multiqc_plots/svg/ar_length_count_plot_Mate1.svg", + "multiqc/multiqc_plots/svg/ar_length_count_plot_Mate2.svg", + "multiqc/multiqc_plots/svg/ar_length_count_plot_Singleton.svg", + "multiqc/multiqc_plots/svg/ar_retained_plot-cnt.svg", + "multiqc/multiqc_plots/svg/ar_retained_plot-pct.svg", + "multiqc/multiqc_plots/svg/bowtie2_pe_plot-cnt.svg", + "multiqc/multiqc_plots/svg/bowtie2_pe_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-1_adapter_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc-1_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc-1_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc-1_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc-1_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_adapter_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_n_content_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_base_sequence_quality_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Counts.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_gc_content_plot_Percentages.svg", + "multiqc/multiqc_plots/svg/fastqc_per_sequence_quality_scores_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-cnt.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_counts_plot-pct.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_duplication_levels_plot.svg", + "multiqc/multiqc_plots/svg/fastqc_sequence_length_distribution_plot.svg", + "multiqc/multiqc_plots/svg/kaiju-topfive-plot-cnt.svg", + "multiqc/multiqc_plots/svg/kaiju-topfive-plot-pct.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Class-cnt.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Class-pct.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Domain-cnt.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Domain-pct.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Family-cnt.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Family-pct.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Genus-cnt.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Genus-pct.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Kingdom-cnt.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Kingdom-pct.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Order-cnt.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Order-pct.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Phylum-cnt.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Phylum-pct.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Species-cnt.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Species-pct.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Unclassified-cnt.svg", + "multiqc/multiqc_plots/svg/kraken-top-n-plot_Unclassified-pct.svg", + "multiqc/multiqc_plots/svg/porechop-endtrim-barplot-cnt.svg", + "multiqc/multiqc_plots/svg/porechop-endtrim-barplot-pct.svg", + "multiqc/multiqc_plots/svg/porechop-middlesplit-barplot-cnt.svg", + "multiqc/multiqc_plots/svg/porechop-middlesplit-barplot-pct.svg", + "multiqc/multiqc_plots/svg/porechop-starttrim-barplot-cnt.svg", + "multiqc/multiqc_plots/svg/porechop-starttrim-barplot-pct.svg", + "multiqc/multiqc_plots/svg/samtools-stats-dp.svg", + "multiqc/multiqc_plots/svg/samtools_alignment_plot-cnt.svg", + "multiqc/multiqc_plots/svg/samtools_alignment_plot-pct.svg", + "multiqc/multiqc_report.html", + "pipeline_info", + "pipeline_info/nf_core_taxprofiler_software_mqc_versions.yml", + "porechop", + "porechop/ERR3201952_ERR3201952_porechop.log", + "prinseqplusplus", + "prinseqplusplus/2612_ERR5766176.log", + "prinseqplusplus/2612_ERR5766176_B.log", + "prinseqplusplus/2613_ERR5766181.log", + "samtools", + "samtools/stats", + "samtools/stats/2612_ERR5766176.stats", + "samtools/stats/2612_ERR5766176_B.stats", + "samtools/stats/2613_ERR5766181.stats", + "samtools/stats/ERR3201952_ERR3201952.stats" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T09:11:43.742710405" + }, + "filtlong": { + "content": [ + [ + "ERR3201952_ERR3201952_filtered.log:md5,513650c6b058af60a824f98e6a632e2d" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T09:11:43.957876537" + }, + "bowtie2": { + "content": [ + [ + "2612_ERR5766176.bowtie2.log:md5,93cf0b7f6cc9fdcc11ffbb305f3ba8a1", + "2612_ERR5766176_B.bowtie2.log:md5,93cf0b7f6cc9fdcc11ffbb305f3ba8a1", + "2613_ERR5766181.bowtie2.log:md5,26de2294e2e3de4c0458ef06e23395e9" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T09:11:43.903687862" + }, + "kraken2": { + "content": [ + [ + + ], + "2611_db2.kraken2.kraken2.report.txt contains string 'Saccharomyces cerevisiae S288C': true", + "2612_db2.kraken2.kraken2.report.txt contains string 'Saccharomyces cerevisiae S288C': true", + "2613_db2.kraken2.kraken2.report.txt contains string 'Saccharomyces cerevisiae S288C': true" + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T09:11:44.362584893" + }, + "porechop": { + "content": [ + "ERR3201952_ERR3201952_porechop.log contains string '7 / 10,000': true" + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T09:11:44.377728595" + }, + "samtools": { + "content": [ + [ + "2612_ERR5766176.stats:md5,058a9c8df01b2f114d859d9f8bc1f709", + "2612_ERR5766176_B.stats:md5,61547d1296cf569c2953c73384f9d075", + "2613_ERR5766181.stats:md5,86b9b4cfc5e6efc05985406451d20670", + "ERR3201952_ERR3201952.stats:md5,ea9e19c0ad0ebf6c02c6fd5f0f1ff7cf" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T09:11:44.48603885" + }, + "prinseqplusplus": { + "content": [ + [ + "2612_ERR5766176.log:md5,3c39b03a20cd482c53e826cf64e8dbc9", + "2612_ERR5766176_B.log:md5,3c39b03a20cd482c53e826cf64e8dbc9", + "2613_ERR5766181.log:md5,af5912aea0917f53d7bf98060b1992a8" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T09:11:43.853025033" + }, + "adapterremoval": { + "content": [ + [ + "2612_ERR5766176.settings:md5,26cec2a6c8e1210372464bacc0388c28", + "2612_ERR5766176_B.settings:md5,26cec2a6c8e1210372464bacc0388c28", + "2613_ERR5766181.settings:md5,30814271ddb4303ecca729fd725ba819" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T09:11:43.794710997" + }, + "kaiju": { + "content": [ + "2611_db5.kaijutable.txt contains string '10239':true", + "2611_db5.kaiju.tsv contains string 'ERR5766174.4':true", + "2612_db5.kaijutable.txt contains string '10239':true", + "2612_db5.kaiju.tsv contains string 'ERR5766176.2':true", + "2613_db5.kaijutable.txt contains string '10239':true", + "2613_db5.kaiju.tsv contains string 'ERR5766181.1':true", + "2614_db6.kaijutable.txt contains string '10239':true", + "2614_db6.kaiju.tsv contains string 'ERR3201952.1794060':true", + "ERR3201952_db6.kaijutable.txt contains string 'Viruses':true", + "ERR3201952_db6.kaiju.tsv contains string 'ERR3201952.1159044':true", + "2611_db7.kaijutable.txt contains string '10239':true", + "2611_db7.kaiju.tsv contains string 'ERR5766174.4':true", + "2612_db7.kaijutable.txt contains string '10239':true", + "2612_db7.kaiju.tsv contains string 'ERR5766176.3':true", + "2613_db7.kaijutable.txt contains string '10239':true", + "2613_db7.kaiju.tsv contains string 'ERR5766181.2':true", + "2614_db7.kaijutable.txt contains string '10239':true", + "2614_db7.kaiju.tsv contains string 'ERR3201952.1794060':true", + "ERR3201952_db7.kaijutable.txt contains string '10239':true", + "ERR3201952_db7.kaiju.tsv contains string 'ERR3201952.1159044':true" + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-19T09:11:44.347045748" + } +} \ No newline at end of file diff --git a/tests/test_fastpnonpareilkrakenuniq.nf.test b/tests/test_fastpnonpareilkrakenuniq.nf.test index 5dd081f2..6a94b9f6 100644 --- a/tests/test_fastpnonpareilkrakenuniq.nf.test +++ b/tests/test_fastpnonpareilkrakenuniq.nf.test @@ -20,10 +20,10 @@ nextflow_pipeline { // fastqc: all unstable files, see stable_name_all def stable_content_fastp = getAllFilesFromDir(params.outdir, relative: false, includeDir: false, include: ["fastp/**"] , ignoreFile: 'tests/.nftignore') def stable_content_krakenuniq = getAllFilesFromDir(params.outdir, relative: false, includeDir: false, include: ["krakenuniq/**"] , ignoreFile: 'tests/.nftignore') - // multiqc: all unstable files, see custom assertion + // multiqc: all unstable files, see custom assertions from template at top def stable_content_nanoq = getAllFilesFromDir(params.outdir, relative: false, includeDir: false, include: ["nanoq/**"] , ignoreFile: 'tests/.nftignore') def stable_content_nonpareil = getAllFilesFromDir(params.outdir, relative: false, includeDir: false, include: ["nonpareil/**"] , ignoreFile: 'tests/.nftignore') - // pipeline_info: all unstable files, see custom assertion + // pipeline_info: all unstable files, custom assertions from template at top def stable_content_porechopabi = getAllFilesFromDir(params.outdir, relative: false, includeDir: false, include: ["porechop_abi/**"] , ignoreFile: 'tests/.nftignore') def stable_content_samtools = getAllFilesFromDir(params.outdir, relative: false, includeDir: false, include: ["samtools/**"] , ignoreFile: 'tests/.nftignore') def stable_content_taxpasta = getAllFilesFromDir(params.outdir, relative: false, includeDir: false, include: ["taxpasta/**"] , ignoreFile: 'tests/.nftignore')