diff --git a/modules.json b/modules.json
index 0145244f..8f3be88a 100644
--- a/modules.json
+++ b/modules.json
@@ -7,77 +7,77 @@
"nf-core": {
"bwa/index": {
"branch": "master",
- "git_sha": "911696ea0b62df80e900ef244d7867d177971f73",
+ "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5",
"installed_by": ["modules"]
},
"cat/fastq": {
"branch": "master",
- "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e",
+ "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5",
"installed_by": ["modules"]
},
"custom/dumpsoftwareversions": {
"branch": "master",
- "git_sha": "bba7e362e4afead70653f84d8700588ea28d0f9e",
+ "git_sha": "37dee863936732fe7e05dc598bf6e183a8e7ef73",
"installed_by": ["modules"]
},
"fastqc": {
"branch": "master",
- "git_sha": "65ad3e0b9a4099592e1102e92e10455dc661cf53",
+ "git_sha": "617777a807a1770f73deb38c80004bac06807eef",
"installed_by": ["modules"]
},
"minimap2/align": {
"branch": "master",
- "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220",
+ "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c",
"installed_by": ["modules"]
},
"multiqc": {
"branch": "master",
- "git_sha": "4ab13872435962dadc239979554d13709e20bf29",
+ "git_sha": "642a0d8afe373ac45244a7947fb8a6c0a5a312d4",
"installed_by": ["modules"]
},
"picard/markduplicates": {
"branch": "master",
- "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1",
+ "git_sha": "20b0918591d4ba20047d7e13e5094bcceba81447",
"installed_by": ["bam_markduplicates_picard", "modules"]
},
"samtools/faidx": {
"branch": "master",
- "git_sha": "bf8ff98531167f8245ba5c44ce7d781503ddf936",
+ "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c",
"installed_by": ["modules"]
},
"samtools/flagstat": {
"branch": "master",
- "git_sha": "911696ea0b62df80e900ef244d7867d177971f73",
- "installed_by": ["modules", "bam_stats_samtools"]
+ "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c",
+ "installed_by": ["bam_stats_samtools", "modules"]
},
"samtools/idxstats": {
"branch": "master",
- "git_sha": "911696ea0b62df80e900ef244d7867d177971f73",
- "installed_by": ["modules", "bam_stats_samtools"]
+ "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c",
+ "installed_by": ["bam_stats_samtools", "modules"]
},
"samtools/index": {
"branch": "master",
- "git_sha": "911696ea0b62df80e900ef244d7867d177971f73",
+ "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c",
"installed_by": ["bam_markduplicates_picard", "modules"]
},
"samtools/sort": {
"branch": "master",
- "git_sha": "911696ea0b62df80e900ef244d7867d177971f73",
+ "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c",
"installed_by": ["modules"]
},
"samtools/stats": {
"branch": "master",
- "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1",
- "installed_by": ["modules", "bam_stats_samtools"]
+ "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c",
+ "installed_by": ["bam_stats_samtools", "modules"]
},
"samtools/view": {
"branch": "master",
- "git_sha": "3ffae3598260a99e8db3207dead9f73f87f90d1f",
+ "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c",
"installed_by": ["modules"]
},
"trimgalore": {
"branch": "master",
- "git_sha": "911696ea0b62df80e900ef244d7867d177971f73",
+ "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5",
"installed_by": ["modules"]
}
}
@@ -86,12 +86,12 @@
"nf-core": {
"bam_markduplicates_picard": {
"branch": "master",
- "git_sha": "a9784afdd5dcda23b84e64db75dc591065d64653",
+ "git_sha": "eeb9d37c6c8b0ab864b8fe68aa6531c5b2beba01",
"installed_by": ["subworkflows"]
},
"bam_stats_samtools": {
"branch": "master",
- "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1",
+ "git_sha": "a64788f5ad388f1d2ac5bd5f1f3f8fc81476148c",
"installed_by": ["bam_markduplicates_picard", "subworkflows"]
}
}
diff --git a/modules/nf-core/bwa/index/environment.yml b/modules/nf-core/bwa/index/environment.yml
new file mode 100644
index 00000000..5d3cb323
--- /dev/null
+++ b/modules/nf-core/bwa/index/environment.yml
@@ -0,0 +1,7 @@
+name: bwa_index
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::bwa=0.7.17
diff --git a/modules/nf-core/bwa/index/main.nf b/modules/nf-core/bwa/index/main.nf
index 8d2e56d9..24b5a2ea 100644
--- a/modules/nf-core/bwa/index/main.nf
+++ b/modules/nf-core/bwa/index/main.nf
@@ -2,7 +2,7 @@ process BWA_INDEX {
tag "$fasta"
label 'process_single'
- conda "bioconda::bwa=0.7.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/bwa:0.7.17--hed695b0_7' :
'biocontainers/bwa:0.7.17--hed695b0_7' }"
@@ -18,13 +18,14 @@ process BWA_INDEX {
task.ext.when == null || task.ext.when
script:
- def args = task.ext.args ?: ''
+ def prefix = task.ext.prefix ?: "${fasta.baseName}"
+ def args = task.ext.args ?: ''
"""
mkdir bwa
bwa \\
index \\
$args \\
- -p bwa/${fasta.baseName} \\
+ -p bwa/${prefix} \\
$fasta
cat <<-END_VERSIONS > versions.yml
@@ -34,14 +35,15 @@ process BWA_INDEX {
"""
stub:
+ def prefix = task.ext.prefix ?: "${fasta.baseName}"
"""
mkdir bwa
- touch bwa/genome.amb
- touch bwa/genome.ann
- touch bwa/genome.bwt
- touch bwa/genome.pac
- touch bwa/genome.sa
+ touch bwa/${prefix}.amb
+ touch bwa/${prefix}.ann
+ touch bwa/${prefix}.bwt
+ touch bwa/${prefix}.pac
+ touch bwa/${prefix}.sa
cat <<-END_VERSIONS > versions.yml
"${task.process}":
diff --git a/modules/nf-core/bwa/index/meta.yml b/modules/nf-core/bwa/index/meta.yml
index 2c6cfcd7..730628d0 100644
--- a/modules/nf-core/bwa/index/meta.yml
+++ b/modules/nf-core/bwa/index/meta.yml
@@ -40,3 +40,6 @@ output:
authors:
- "@drpatelh"
- "@maxulysse"
+maintainers:
+ - "@drpatelh"
+ - "@maxulysse"
diff --git a/modules/nf-core/bwa/index/tests/main.nf.test b/modules/nf-core/bwa/index/tests/main.nf.test
new file mode 100644
index 00000000..5fc8d496
--- /dev/null
+++ b/modules/nf-core/bwa/index/tests/main.nf.test
@@ -0,0 +1,33 @@
+nextflow_process {
+
+ name "Test Process BWA_INDEX"
+ tag "modules_nfcore"
+ tag "modules"
+ tag "bwa"
+ tag "bwa/index"
+ script "../main.nf"
+ process "BWA_INDEX"
+
+ test("BWA index") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [id: 'test'],
+ file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+
+ }
+
+}
diff --git a/modules/nf-core/bwa/index/tests/main.nf.test.snap b/modules/nf-core/bwa/index/tests/main.nf.test.snap
new file mode 100644
index 00000000..e51ad5bf
--- /dev/null
+++ b/modules/nf-core/bwa/index/tests/main.nf.test.snap
@@ -0,0 +1,43 @@
+{
+ "BWA index": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test"
+ },
+ [
+ "genome.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e",
+ "genome.ann:md5,c32e11f6c859f166c7525a9c1d583567",
+ "genome.bwt:md5,0469c30a1e239dd08f68afe66fde99da",
+ "genome.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66",
+ "genome.sa:md5,ab3952cabf026b48cd3eb5bccbb636d1"
+ ]
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,0f20525da90e7489a7ebb02adca3265f"
+ ],
+ "index": [
+ [
+ {
+ "id": "test"
+ },
+ [
+ "genome.amb:md5,3a68b8b2287e07dd3f5f95f4344ba76e",
+ "genome.ann:md5,c32e11f6c859f166c7525a9c1d583567",
+ "genome.bwt:md5,0469c30a1e239dd08f68afe66fde99da",
+ "genome.pac:md5,983e3d2cd6f36e2546e6d25a0da78d66",
+ "genome.sa:md5,ab3952cabf026b48cd3eb5bccbb636d1"
+ ]
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,0f20525da90e7489a7ebb02adca3265f"
+ ]
+ }
+ ],
+ "timestamp": "2023-10-17T17:20:20.180927714"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/bwa/index/tests/tags.yml b/modules/nf-core/bwa/index/tests/tags.yml
new file mode 100644
index 00000000..28bb483c
--- /dev/null
+++ b/modules/nf-core/bwa/index/tests/tags.yml
@@ -0,0 +1,2 @@
+bwa/index:
+ - modules/nf-core/bwa/index/**
diff --git a/modules/nf-core/cat/fastq/environment.yml b/modules/nf-core/cat/fastq/environment.yml
new file mode 100644
index 00000000..bff93add
--- /dev/null
+++ b/modules/nf-core/cat/fastq/environment.yml
@@ -0,0 +1,7 @@
+name: cat_fastq
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - conda-forge::sed=4.7
diff --git a/modules/nf-core/cat/fastq/main.nf b/modules/nf-core/cat/fastq/main.nf
index 5021e6fc..3d963784 100644
--- a/modules/nf-core/cat/fastq/main.nf
+++ b/modules/nf-core/cat/fastq/main.nf
@@ -2,7 +2,7 @@ process CAT_FASTQ {
tag "$meta.id"
label 'process_single'
- conda "conda-forge::sed=4.7"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/ubuntu:20.04' :
'nf-core/ubuntu:20.04' }"
diff --git a/modules/nf-core/cat/fastq/meta.yml b/modules/nf-core/cat/fastq/meta.yml
index 8a39e309..db4ac3c7 100644
--- a/modules/nf-core/cat/fastq/meta.yml
+++ b/modules/nf-core/cat/fastq/meta.yml
@@ -34,7 +34,9 @@ output:
type: file
description: File containing software versions
pattern: "versions.yml"
-
authors:
- "@joseespinosa"
- "@drpatelh"
+maintainers:
+ - "@joseespinosa"
+ - "@drpatelh"
diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test b/modules/nf-core/cat/fastq/tests/main.nf.test
new file mode 100644
index 00000000..f5f94182
--- /dev/null
+++ b/modules/nf-core/cat/fastq/tests/main.nf.test
@@ -0,0 +1,143 @@
+nextflow_process {
+
+ name "Test Process CAT_FASTQ"
+ script "../main.nf"
+ process "CAT_FASTQ"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "cat"
+ tag "cat/fastq"
+
+ test("test_cat_fastq_single_end") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:true ], // meta map
+ [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test2_1_fastq_gz'], checkIfExists: true) ]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out.reads).match() },
+ { assert path(process.out.versions.get(0)).getText().contains("cat") }
+ )
+ }
+ }
+
+ test("test_cat_fastq_paired_end") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test2_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test2_2_fastq_gz'], checkIfExists: true) ]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out.reads).match() },
+ { assert path(process.out.versions.get(0)).getText().contains("cat") }
+ )
+ }
+ }
+
+ test("test_cat_fastq_single_end_same_name") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:true ], // meta map
+ [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out.reads).match() },
+ { assert path(process.out.versions.get(0)).getText().contains("cat") }
+ )
+ }
+ }
+
+ test("test_cat_fastq_paired_end_same_name") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out.reads).match() },
+ { assert path(process.out.versions.get(0)).getText().contains("cat") }
+ )
+ }
+ }
+
+ test("test_cat_fastq_single_end_single_file") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:true ], // meta map
+ [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out.reads).match() },
+ { assert path(process.out.versions.get(0)).getText().contains("cat") }
+ )
+ }
+ }
+}
diff --git a/modules/nf-core/cat/fastq/tests/main.nf.test.snap b/modules/nf-core/cat/fastq/tests/main.nf.test.snap
new file mode 100644
index 00000000..ec2342e5
--- /dev/null
+++ b/modules/nf-core/cat/fastq/tests/main.nf.test.snap
@@ -0,0 +1,78 @@
+{
+ "test_cat_fastq_single_end": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.merged.fastq.gz:md5,f9cf5e375f7de81a406144a2c70cc64d"
+ ]
+ ]
+ ],
+ "timestamp": "2023-10-17T23:19:12.990284837"
+ },
+ "test_cat_fastq_single_end_same_name": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.merged.fastq.gz:md5,63f817db7a29a03eb538104495556f66"
+ ]
+ ]
+ ],
+ "timestamp": "2023-10-17T23:19:31.554568147"
+ },
+ "test_cat_fastq_single_end_single_file": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.merged.fastq.gz:md5,e325ef7deb4023447a1f074e285761af"
+ ]
+ ]
+ ],
+ "timestamp": "2023-10-17T23:19:49.629360033"
+ },
+ "test_cat_fastq_paired_end_same_name": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test_1.merged.fastq.gz:md5,63f817db7a29a03eb538104495556f66",
+ "test_2.merged.fastq.gz:md5,fe9f266f43a6fc3dcab690a18419a56e"
+ ]
+ ]
+ ]
+ ],
+ "timestamp": "2023-10-17T23:19:40.711617539"
+ },
+ "test_cat_fastq_paired_end": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test_1.merged.fastq.gz:md5,f9cf5e375f7de81a406144a2c70cc64d",
+ "test_2.merged.fastq.gz:md5,77c8e966e130d8c6b6ec9be52fcb2bda"
+ ]
+ ]
+ ]
+ ],
+ "timestamp": "2023-10-18T07:53:20.923560211"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/cat/fastq/tests/tags.yml b/modules/nf-core/cat/fastq/tests/tags.yml
new file mode 100644
index 00000000..6ac43614
--- /dev/null
+++ b/modules/nf-core/cat/fastq/tests/tags.yml
@@ -0,0 +1,2 @@
+cat/fastq:
+ - modules/nf-core/cat/fastq/**
diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf
index ebc87273..7685b33c 100644
--- a/modules/nf-core/custom/dumpsoftwareversions/main.nf
+++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf
@@ -2,10 +2,10 @@ process CUSTOM_DUMPSOFTWAREVERSIONS {
label 'process_single'
// Requires `pyyaml` which does not have a dedicated container but is in the MultiQC container
- conda "bioconda::multiqc=1.14"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' :
- 'biocontainers/multiqc:1.14--pyhdfd78af_0' }"
+ 'https://depot.galaxyproject.org/singularity/multiqc:1.17--pyhdfd78af_0' :
+ 'biocontainers/multiqc:1.17--pyhdfd78af_0' }"
input:
path versions
diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test
index eec1db10..b1e1630b 100644
--- a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test
+++ b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test
@@ -31,7 +31,12 @@ nextflow_process {
then {
assertAll(
{ assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(
+ process.out.versions,
+ file(process.out.mqc_yml[0]).readLines()[0..10],
+ file(process.out.yml[0]).readLines()[0..7]
+ ).match()
+ }
)
}
}
diff --git a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap
index 4274ed57..29e72446 100644
--- a/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap
+++ b/modules/nf-core/custom/dumpsoftwareversions/tests/main.nf.test.snap
@@ -1,27 +1,33 @@
{
"Should run without failures": {
"content": [
- {
- "0": [
- "software_versions.yml:md5,1c851188476409cda5752ce971b20b58"
- ],
- "1": [
- "software_versions_mqc.yml:md5,2570f4ba271ad08357b0d3d32a9cf84d"
- ],
- "2": [
- "versions.yml:md5,3843ac526e762117eedf8825b40683df"
- ],
- "mqc_yml": [
- "software_versions_mqc.yml:md5,2570f4ba271ad08357b0d3d32a9cf84d"
- ],
- "versions": [
- "versions.yml:md5,3843ac526e762117eedf8825b40683df"
- ],
- "yml": [
- "software_versions.yml:md5,1c851188476409cda5752ce971b20b58"
- ]
- }
+ [
+ "versions.yml:md5,3843ac526e762117eedf8825b40683df"
+ ],
+ [
+ "data: \"\\n
\\n \\n \\n Process Name | \\n \\",
+ " \\ Software | \\n Version | \\n
\\n \\n\\",
+ " \\n\\n\\n CUSTOM_DUMPSOFTWAREVERSIONS | \\n python | \\n\\",
+ " \\ 3.12.0 | \\n
\\n\\n\\n | \\n \\",
+ " \\ yaml | \\n 6.0.1 | \\n
\\n\\n\\n\\",
+ " \\n\\n TOOL1 | \\n tool1 | \\n\\",
+ " \\ 0.11.9 | \\n
\\n\\n\\n\\n\\n TOOL2 | \\n\\",
+ " \\ tool2 | \\n 1.9 | \\n
\\n\\n\\n\\",
+ " \\n\\n Workflow | \\n Nextflow | \\n\\"
+ ],
+ [
+ "CUSTOM_DUMPSOFTWAREVERSIONS:",
+ " python: 3.12.0",
+ " yaml: 6.0.1",
+ "TOOL1:",
+ " tool1: 0.11.9",
+ "TOOL2:",
+ " tool2: '1.9'",
+ "Workflow:"
+ ]
],
- "timestamp": "2023-11-03T14:43:22.157011"
+ "timestamp": "2024-01-05T00:18:43.461970077"
}
-}
+}
\ No newline at end of file
diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf
index 07d5e433..9e19a74c 100644
--- a/modules/nf-core/fastqc/main.nf
+++ b/modules/nf-core/fastqc/main.nf
@@ -2,10 +2,10 @@ process FASTQC {
tag "$meta.id"
label 'process_medium'
- conda "bioconda::fastqc=0.11.9"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0' :
- 'biocontainers/fastqc:0.11.9--0' }"
+ 'https://depot.galaxyproject.org/singularity/fastqc:0.12.1--hdfd78af_0' :
+ 'biocontainers/fastqc:0.12.1--hdfd78af_0' }"
input:
tuple val(meta), path(reads)
@@ -29,11 +29,15 @@ process FASTQC {
printf "%s %s\\n" $rename_to | while read old_name new_name; do
[ -f "\${new_name}" ] || ln -s \$old_name \$new_name
done
- fastqc $args --threads $task.cpus $renamed_files
+
+ fastqc \\
+ $args \\
+ --threads $task.cpus \\
+ $renamed_files
cat <<-END_VERSIONS > versions.yml
"${task.process}":
- fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" )
+ fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' )
END_VERSIONS
"""
@@ -45,7 +49,7 @@ process FASTQC {
cat <<-END_VERSIONS > versions.yml
"${task.process}":
- fastqc: \$( fastqc --version | sed -e "s/FastQC v//g" )
+ fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' )
END_VERSIONS
"""
}
diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test
index b9e8f926..ad9bc54f 100644
--- a/modules/nf-core/fastqc/tests/main.nf.test
+++ b/modules/nf-core/fastqc/tests/main.nf.test
@@ -3,23 +3,21 @@ nextflow_process {
name "Test Process FASTQC"
script "../main.nf"
process "FASTQC"
+
tag "modules"
tag "modules_nfcore"
tag "fastqc"
- test("Single-Read") {
+ test("sarscov2 single-end [fastq]") {
when {
- params {
- outdir = "$outputDir"
- }
process {
"""
input[0] = [
- [ id: 'test', single_end:true ],
- [
- file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)
- ]
+ [ id: 'test', single_end:true ],
+ [
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)
+ ]
]
"""
}
@@ -28,82 +26,195 @@ nextflow_process {
then {
assertAll (
{ assert process.success },
+
// NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it.
// looks like this:
// https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039
- { assert process.out.html.get(0).get(1) ==~ ".*/test_fastqc.html" },
- { assert path(process.out.html.get(0).get(1)).getText().contains("
File type | Conventional base calls |
") },
- { assert snapshot(process.out.versions).match("versions") },
- { assert process.out.zip.get(0).get(1) ==~ ".*/test_fastqc.zip" }
+
+ { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" },
+ { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" },
+ { assert path(process.out.html[0][1]).text.contains("File type | Conventional base calls |
") },
+
+ { assert snapshot(process.out.versions).match("versions") }
+ )
+ }
+ }
+
+ test("sarscov2 paired-end [fastq]") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [id: 'test', single_end: false], // meta map
+ [
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+
+ { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" },
+ { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" },
+ { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" },
+ { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" },
+ { assert path(process.out.html[0][1][0]).text.contains("File type | Conventional base calls |
") },
+ { assert path(process.out.html[0][1][1]).text.contains("File type | Conventional base calls |
") },
+
+ { assert snapshot(process.out.versions).match("versions") }
+ )
+ }
+ }
+
+ test("sarscov2 interleaved [fastq]") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [id: 'test', single_end: false], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_interleaved_fastq_gz'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+
+ { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" },
+ { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" },
+ { assert path(process.out.html[0][1]).text.contains("File type | Conventional base calls |
") },
+
+ { assert snapshot(process.out.versions).match("versions") }
+ )
+ }
+ }
+
+ test("sarscov2 paired-end [bam]") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [id: 'test', single_end: false], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+
+ { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" },
+ { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" },
+ { assert path(process.out.html[0][1]).text.contains("File type | Conventional base calls |
") },
+
+ { assert snapshot(process.out.versions).match("versions") }
)
}
}
-// TODO
-// //
-// // Test with paired-end data
-// //
-// workflow test_fastqc_paired_end {
-// input = [
-// [id: 'test', single_end: false], // meta map
-// [
-// file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
-// file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true)
-// ]
-// ]
-
-// FASTQC ( input )
-// }
-
-// //
-// // Test with interleaved data
-// //
-// workflow test_fastqc_interleaved {
-// input = [
-// [id: 'test', single_end: false], // meta map
-// file(params.test_data['sarscov2']['illumina']['test_interleaved_fastq_gz'], checkIfExists: true)
-// ]
-
-// FASTQC ( input )
-// }
-
-// //
-// // Test with bam data
-// //
-// workflow test_fastqc_bam {
-// input = [
-// [id: 'test', single_end: false], // meta map
-// file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true)
-// ]
-
-// FASTQC ( input )
-// }
-
-// //
-// // Test with multiple samples
-// //
-// workflow test_fastqc_multiple {
-// input = [
-// [id: 'test', single_end: false], // meta map
-// [
-// file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
-// file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true),
-// file(params.test_data['sarscov2']['illumina']['test2_1_fastq_gz'], checkIfExists: true),
-// file(params.test_data['sarscov2']['illumina']['test2_2_fastq_gz'], checkIfExists: true)
-// ]
-// ]
-
-// FASTQC ( input )
-// }
-
-// //
-// // Test with custom prefix
-// //
-// workflow test_fastqc_custom_prefix {
-// input = [
-// [ id:'mysample', single_end:true ], // meta map
-// file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)
-// ]
-
-// FASTQC ( input )
-// }
+
+ test("sarscov2 multiple [fastq]") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [id: 'test', single_end: false], // meta map
+ [
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test2_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test2_2_fastq_gz'], checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+
+ { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" },
+ { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" },
+ { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" },
+ { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" },
+ { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" },
+ { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" },
+ { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" },
+ { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" },
+ { assert path(process.out.html[0][1][0]).text.contains("File type | Conventional base calls |
") },
+ { assert path(process.out.html[0][1][1]).text.contains("File type | Conventional base calls |
") },
+ { assert path(process.out.html[0][1][2]).text.contains("File type | Conventional base calls |
") },
+ { assert path(process.out.html[0][1][3]).text.contains("File type | Conventional base calls |
") },
+
+ { assert snapshot(process.out.versions).match("versions") }
+ )
+ }
+ }
+
+ test("sarscov2 custom_prefix") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id:'mysample', single_end:true ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+
+ { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" },
+ { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" },
+ { assert path(process.out.html[0][1]).text.contains("File type | Conventional base calls |
") },
+
+ { assert snapshot(process.out.versions).match("versions") }
+ )
+ }
+ }
+
+ test("sarscov2 single-end [fastq] - stub") {
+
+ options "-stub"
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id: 'test', single_end:true ],
+ [
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out.html.collect { file(it[1]).getName() } +
+ process.out.zip.collect { file(it[1]).getName() } +
+ process.out.versions ).match() }
+ )
+ }
+ }
+
}
diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap
index 636a32ce..5ef5afbd 100644
--- a/modules/nf-core/fastqc/tests/main.nf.test.snap
+++ b/modules/nf-core/fastqc/tests/main.nf.test.snap
@@ -1,10 +1,20 @@
{
+ "sarscov2 single-end [fastq] - stub": {
+ "content": [
+ [
+ "test.html",
+ "test.zip",
+ "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
+ ]
+ ],
+ "timestamp": "2023-12-29T02:48:05.126117287"
+ },
"versions": {
"content": [
[
"versions.yml:md5,e1cc25ca8af856014824abd842e93978"
]
],
- "timestamp": "2023-10-09T23:40:54+0000"
+ "timestamp": "2023-12-29T02:46:49.507942667"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/minimap2/align/environment.yml b/modules/nf-core/minimap2/align/environment.yml
new file mode 100644
index 00000000..de1f3811
--- /dev/null
+++ b/modules/nf-core/minimap2/align/environment.yml
@@ -0,0 +1,8 @@
+name: minimap2_align
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::minimap2=2.24
+ - bioconda::samtools=1.18
diff --git a/modules/nf-core/minimap2/align/main.nf b/modules/nf-core/minimap2/align/main.nf
index 4da47c18..47cd420c 100644
--- a/modules/nf-core/minimap2/align/main.nf
+++ b/modules/nf-core/minimap2/align/main.nf
@@ -3,14 +3,14 @@ process MINIMAP2_ALIGN {
label 'process_medium'
// Note: the versions here need to match the versions used in the mulled container below and minimap2/index
- conda "bioconda::minimap2=2.24 bioconda::samtools=1.14"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/mulled-v2-66534bcbb7031a148b13e2ad42583020b9cd25c4:1679e915ddb9d6b4abda91880c4b48857d471bd8-0' :
- 'biocontainers/mulled-v2-66534bcbb7031a148b13e2ad42583020b9cd25c4:1679e915ddb9d6b4abda91880c4b48857d471bd8-0' }"
+ 'https://depot.galaxyproject.org/singularity/mulled-v2-66534bcbb7031a148b13e2ad42583020b9cd25c4:365b17b986c1a60c1b82c6066a9345f38317b763-0' :
+ 'biocontainers/mulled-v2-66534bcbb7031a148b13e2ad42583020b9cd25c4:365b17b986c1a60c1b82c6066a9345f38317b763-0' }"
input:
tuple val(meta), path(reads)
- path reference
+ tuple val(meta2), path(reference)
val bam_format
val cigar_paf_format
val cigar_bam
diff --git a/modules/nf-core/minimap2/align/meta.yml b/modules/nf-core/minimap2/align/meta.yml
index 991b39a0..408522d5 100644
--- a/modules/nf-core/minimap2/align/meta.yml
+++ b/modules/nf-core/minimap2/align/meta.yml
@@ -25,6 +25,11 @@ input:
description: |
List of input FASTA or FASTQ files of size 1 and 2 for single-end
and paired-end data, respectively.
+ - meta2:
+ type: map
+ description: |
+ Groovy Map containing reference information
+ e.g. [ id:'test_ref']
- reference:
type: file
description: |
@@ -63,3 +68,8 @@ authors:
- "@sofstam"
- "@sateeshperi"
- "@jfy133"
+maintainers:
+ - "@heuermh"
+ - "@sofstam"
+ - "@sateeshperi"
+ - "@jfy133"
diff --git a/modules/nf-core/minimap2/align/tests/main.nf.test b/modules/nf-core/minimap2/align/tests/main.nf.test
new file mode 100644
index 00000000..b634468b
--- /dev/null
+++ b/modules/nf-core/minimap2/align/tests/main.nf.test
@@ -0,0 +1,145 @@
+nextflow_process {
+
+ name "Test Process MINIMAP2_ALIGN"
+ script "../main.nf"
+ process "MINIMAP2_ALIGN"
+
+ tag "modules"
+ tag "modules_nfcore"
+ tag "minimap2"
+ tag "minimap2/align"
+
+ test("sarscov2 - fastq, fasta, true, false, false") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:true ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)
+ ]
+ input[1] = [
+ [ id:'test_ref' ], // meta map
+ file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ input[2] = true
+ input[3] = false
+ input[4] = false
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.bam[0][1]).name,
+ process.out.versions
+ ).match() }
+ )
+ }
+
+ }
+
+ test("sarscov2 - [fastq1, fastq2], fasta, true, false, false") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ [
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true)
+ ]
+ ]
+ input[1] = [
+ [ id:'test_ref' ], // meta map
+ file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ input[2] = true
+ input[3] = false
+ input[4] = false
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.bam[0][1]).name,
+ process.out.versions
+ ).match() }
+ )
+ }
+
+ }
+
+ test("sarscov2 - fastq, [], true, false, false") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:true ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)
+ ]
+ input[1] = [
+ [ id:'test_ref' ], // meta map
+ []
+ ]
+ input[2] = true
+ input[3] = false
+ input[4] = false
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.bam[0][1]).name,
+ process.out.versions
+ ).match() }
+ )
+ }
+
+ }
+
+ test("sarscov2 - fastq, fasta, true, false, false - stub") {
+
+ options "-stub"
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:true ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true)
+ ]
+ input[1] = [
+ [ id:'test_ref' ], // meta map
+ file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ input[2] = true
+ input[3] = false
+ input[4] = false
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.bam[0][1]).name,
+ process.out.versions
+ ).match() }
+ )
+ }
+
+ }
+
+}
diff --git a/modules/nf-core/minimap2/align/tests/main.nf.test.snap b/modules/nf-core/minimap2/align/tests/main.nf.test.snap
new file mode 100644
index 00000000..a39a1697
--- /dev/null
+++ b/modules/nf-core/minimap2/align/tests/main.nf.test.snap
@@ -0,0 +1,38 @@
+{
+ "sarscov2 - fastq, fasta, true, false, false": {
+ "content": [
+ "test.bam",
+ [
+ "versions.yml:md5,9e9eeae0002d466d580a9d6e0d003eb1"
+ ]
+ ],
+ "timestamp": "2023-12-04T12:07:06.01315354"
+ },
+ "sarscov2 - fastq, fasta, true, false, false - stub": {
+ "content": [
+ "test.bam",
+ [
+ "versions.yml:md5,9e9eeae0002d466d580a9d6e0d003eb1"
+ ]
+ ],
+ "timestamp": "2023-12-04T12:07:24.487175659"
+ },
+ "sarscov2 - [fastq1, fastq2], fasta, true, false, false": {
+ "content": [
+ "test.bam",
+ [
+ "versions.yml:md5,9e9eeae0002d466d580a9d6e0d003eb1"
+ ]
+ ],
+ "timestamp": "2023-12-04T12:07:12.50816279"
+ },
+ "sarscov2 - fastq, [], true, false, false": {
+ "content": [
+ "test.bam",
+ [
+ "versions.yml:md5,9e9eeae0002d466d580a9d6e0d003eb1"
+ ]
+ ],
+ "timestamp": "2023-12-04T12:07:18.414974788"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/minimap2/align/tests/tags.yml b/modules/nf-core/minimap2/align/tests/tags.yml
new file mode 100644
index 00000000..39dba374
--- /dev/null
+++ b/modules/nf-core/minimap2/align/tests/tags.yml
@@ -0,0 +1,2 @@
+minimap2/align:
+ - "modules/nf-core/minimap2/align/**"
diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf
index 1fc387be..70708f33 100644
--- a/modules/nf-core/multiqc/main.nf
+++ b/modules/nf-core/multiqc/main.nf
@@ -1,10 +1,10 @@
process MULTIQC {
label 'process_single'
- conda "bioconda::multiqc=1.14"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' :
- 'biocontainers/multiqc:1.14--pyhdfd78af_0' }"
+ 'https://depot.galaxyproject.org/singularity/multiqc:1.18--pyhdfd78af_0' :
+ 'biocontainers/multiqc:1.18--pyhdfd78af_0' }"
input:
path multiqc_files, stageAs: "?/*"
@@ -25,12 +25,14 @@ process MULTIQC {
def args = task.ext.args ?: ''
def config = multiqc_config ? "--config $multiqc_config" : ''
def extra_config = extra_multiqc_config ? "--config $extra_multiqc_config" : ''
+ def logo = multiqc_logo ? /--cl-config 'custom_logo: "${multiqc_logo}"'/ : ''
"""
multiqc \\
--force \\
$args \\
$config \\
$extra_config \\
+ $logo \\
.
cat <<-END_VERSIONS > versions.yml
@@ -41,7 +43,7 @@ process MULTIQC {
stub:
"""
- touch multiqc_data
+ mkdir multiqc_data
touch multiqc_plots
touch multiqc_report.html
diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml
index f1aa660e..45a9bc35 100644
--- a/modules/nf-core/multiqc/meta.yml
+++ b/modules/nf-core/multiqc/meta.yml
@@ -1,4 +1,3 @@
-# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json
name: multiqc
description: Aggregate results from bioinformatics analyses across many samples into a single report
keywords:
diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test
index c2dad217..d0438eda 100644
--- a/modules/nf-core/multiqc/tests/main.nf.test
+++ b/modules/nf-core/multiqc/tests/main.nf.test
@@ -7,12 +7,9 @@ nextflow_process {
tag "modules_nfcore"
tag "multiqc"
- test("MULTIQC: FASTQC") {
+ test("sarscov2 single-end [fastqc]") {
when {
- params {
- outdir = "$outputDir"
- }
process {
"""
input[0] = Channel.of([file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz_fastqc_zip'], checkIfExists: true)])
@@ -26,20 +23,17 @@ nextflow_process {
then {
assertAll(
{ assert process.success },
- { assert path(process.out.report.get(0)).exists() },
- { assert path(process.out.data.get(0)).exists() },
- { assert path(process.out.versions.get(0)).getText().contains("multiqc") }
+ { assert process.out.report[0] ==~ ".*/multiqc_report.html" },
+ { assert process.out.data[0] ==~ ".*/multiqc_data" },
+ { assert snapshot(process.out.versions).match("versions") }
)
}
}
- test("MULTIQC: FASTQC and a config file") {
+ test("sarscov2 single-end [fastqc] [config]") {
when {
- params {
- outdir = "$outputDir"
- }
process {
"""
input[0] = Channel.of([file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz_fastqc_zip'], checkIfExists: true)])
@@ -53,9 +47,35 @@ nextflow_process {
then {
assertAll(
{ assert process.success },
- { assert path(process.out.report.get(0)).exists() },
- { assert path(process.out.data.get(0)).exists() },
- { assert path(process.out.versions.get(0)).getText().contains("multiqc") }
+ { assert process.out.report[0] ==~ ".*/multiqc_report.html" },
+ { assert process.out.data[0] ==~ ".*/multiqc_data" },
+ { assert snapshot(process.out.versions).match("versions") }
+ )
+ }
+ }
+
+ test("sarscov2 single-end [fastqc] - stub") {
+
+ options "-stub"
+
+ when {
+ process {
+ """
+ input[0] = Channel.of([file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz_fastqc_zip'], checkIfExists: true)])
+ input[1] = []
+ input[2] = []
+ input[3] = []
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out.report.collect { file(it).getName() } +
+ process.out.data.collect { file(it).getName() } +
+ process.out.plots.collect { file(it).getName() } +
+ process.out.versions ).match() }
)
}
diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap
new file mode 100644
index 00000000..d087a9df
--- /dev/null
+++ b/modules/nf-core/multiqc/tests/main.nf.test.snap
@@ -0,0 +1,21 @@
+{
+ "versions": {
+ "content": [
+ [
+ "versions.yml:md5,f81e19ab3a8e2b6f2b5d22078117df71"
+ ]
+ ],
+ "timestamp": "2023-12-30T00:26:14.048089591"
+ },
+ "sarscov2 single-end [fastqc] - stub": {
+ "content": [
+ [
+ "multiqc_report.html",
+ "multiqc_data",
+ "multiqc_plots",
+ "versions.yml:md5,f81e19ab3a8e2b6f2b5d22078117df71"
+ ]
+ ],
+ "timestamp": "2023-12-30T00:26:52.963964055"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/picard/markduplicates/environment.yml b/modules/nf-core/picard/markduplicates/environment.yml
new file mode 100644
index 00000000..58b795f5
--- /dev/null
+++ b/modules/nf-core/picard/markduplicates/environment.yml
@@ -0,0 +1,7 @@
+name: picard_markduplicates
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::picard=3.1.1
diff --git a/modules/nf-core/picard/markduplicates/main.nf b/modules/nf-core/picard/markduplicates/main.nf
index facd7efb..80930cc4 100644
--- a/modules/nf-core/picard/markduplicates/main.nf
+++ b/modules/nf-core/picard/markduplicates/main.nf
@@ -2,10 +2,10 @@ process PICARD_MARKDUPLICATES {
tag "$meta.id"
label 'process_medium'
- conda "bioconda::picard=3.0.0"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' :
- 'biocontainers/picard:3.0.0--hdfd78af_1' }"
+ 'https://depot.galaxyproject.org/singularity/picard:3.1.1--hdfd78af_0' :
+ 'biocontainers/picard:3.1.1--hdfd78af_0' }"
input:
tuple val(meta), path(bam)
@@ -30,6 +30,9 @@ process PICARD_MARKDUPLICATES {
} else {
avail_mem = (task.memory.mega*0.8).intValue()
}
+
+ if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!"
+
"""
picard \\
-Xmx${avail_mem}M \\
@@ -48,6 +51,7 @@ process PICARD_MARKDUPLICATES {
stub:
def prefix = task.ext.prefix ?: "${meta.id}"
+ if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!"
"""
touch ${prefix}.bam
touch ${prefix}.bam.bai
diff --git a/modules/nf-core/picard/markduplicates/meta.yml b/modules/nf-core/picard/markduplicates/meta.yml
index f7693d2f..1ab90c07 100644
--- a/modules/nf-core/picard/markduplicates/meta.yml
+++ b/modules/nf-core/picard/markduplicates/meta.yml
@@ -69,3 +69,7 @@ authors:
- "@drpatelh"
- "@projectoriented"
- "@ramprasadn"
+maintainers:
+ - "@drpatelh"
+ - "@projectoriented"
+ - "@ramprasadn"
diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test b/modules/nf-core/picard/markduplicates/tests/main.nf.test
new file mode 100644
index 00000000..b2bba094
--- /dev/null
+++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test
@@ -0,0 +1,111 @@
+nextflow_process {
+
+ name "Test Process PICARD_MARKDUPLICATES"
+ script "../main.nf"
+ process "PICARD_MARKDUPLICATES"
+ config "./nextflow.config"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "picard"
+ tag "picard/markduplicates"
+
+ test("sarscov2 - bam, fasta, fai - sorted bam") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true)
+ ]
+ input[1] = [
+ [ id:'genome' ],
+ file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ input[2] = [
+ [ id:'genome' ],
+ file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.bam[0][1]).name,
+ path(process.out.metrics.get(0).get(1)).readLines()[0..2],
+ process.out.versions
+ ).match() }
+ )
+ }
+ }
+
+ test("sarscov2 - bam, fasta, fai - unsorted bam") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true)
+ ]
+ input[1] = [
+ [ id:'genome' ],
+ file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ input[2] = [
+ [ id:'genome' ],
+ file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.bam[0][1]).name,
+ path(process.out.metrics.get(0).get(1)).readLines()[0..2],
+ process.out.versions
+ ).match() }
+ )
+ }
+ }
+
+ test("homo_sapiens - cram, fasta, fai") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true)
+ ]
+ input[1] = [
+ [ id:'genome' ],
+ file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ input[2] = [
+ [ id:'genome' ],
+ file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.bam[0][1]).name,
+ path(process.out.metrics.get(0).get(1)).readLines()[0..2],
+ process.out.versions
+ ).match() }
+ )
+ }
+ }
+
+}
diff --git a/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap
new file mode 100644
index 00000000..cd788a4d
--- /dev/null
+++ b/modules/nf-core/picard/markduplicates/tests/main.nf.test.snap
@@ -0,0 +1,44 @@
+{
+ "sarscov2 - bam, fasta, fai - unsorted bam": {
+ "content": [
+ "test.marked.bam",
+ [
+ "## htsjdk.samtools.metrics.StringHeader",
+ "# MarkDuplicates --INPUT test.paired_end.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false",
+ "## htsjdk.samtools.metrics.StringHeader"
+ ],
+ [
+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17"
+ ]
+ ],
+ "timestamp": "2023-11-28T10:50:37.735339781"
+ },
+ "homo_sapiens - cram, fasta, fai": {
+ "content": [
+ "test.marked.bam",
+ [
+ "## htsjdk.samtools.metrics.StringHeader",
+ "# MarkDuplicates --INPUT test.paired_end.sorted.cram --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false",
+ "## htsjdk.samtools.metrics.StringHeader"
+ ],
+ [
+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17"
+ ]
+ ],
+ "timestamp": "2023-11-28T10:50:48.897954543"
+ },
+ "sarscov2 - bam, fasta, fai - sorted bam": {
+ "content": [
+ "test.marked.bam",
+ [
+ "## htsjdk.samtools.metrics.StringHeader",
+ "# MarkDuplicates --INPUT test.paired_end.sorted.bam --OUTPUT test.marked.bam --METRICS_FILE test.marked.MarkDuplicates.metrics.txt --ASSUME_SORT_ORDER queryname --REFERENCE_SEQUENCE genome.fasta --MAX_SEQUENCES_FOR_DISK_READ_ENDS_MAP 50000 --MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 8000 --SORTING_COLLECTION_SIZE_RATIO 0.25 --TAG_DUPLICATE_SET_MEMBERS false --REMOVE_SEQUENCING_DUPLICATES false --TAGGING_POLICY DontTag --CLEAR_DT true --DUPLEX_UMI false --FLOW_MODE false --FLOW_QUALITY_SUM_STRATEGY false --USE_END_IN_UNPAIRED_READS false --USE_UNPAIRED_CLIPPED_END false --UNPAIRED_END_UNCERTAINTY 0 --FLOW_SKIP_FIRST_N_FLOWS 0 --FLOW_Q_IS_KNOWN_END false --FLOW_EFFECTIVE_QUALITY_THRESHOLD 15 --ADD_PG_TAG_TO_READS true --REMOVE_DUPLICATES false --ASSUME_SORTED false --DUPLICATE_SCORING_STRATEGY SUM_OF_BASE_QUALITIES --PROGRAM_RECORD_ID MarkDuplicates --PROGRAM_GROUP_NAME MarkDuplicates --READ_NAME_REGEX --OPTICAL_DUPLICATE_PIXEL_DISTANCE 100 --MAX_OPTICAL_DUPLICATE_SET_SIZE 300000 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false",
+ "## htsjdk.samtools.metrics.StringHeader"
+ ],
+ [
+ "versions.yml:md5,b699af51b1956f3810f8a7c066e0ab17"
+ ]
+ ],
+ "timestamp": "2023-11-28T10:50:26.591387512"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/picard/markduplicates/tests/nextflow.config b/modules/nf-core/picard/markduplicates/tests/nextflow.config
new file mode 100644
index 00000000..02818dd6
--- /dev/null
+++ b/modules/nf-core/picard/markduplicates/tests/nextflow.config
@@ -0,0 +1,6 @@
+process {
+ withName: PICARD_MARKDUPLICATES {
+ ext.prefix = { "${meta.id}.marked" }
+ ext.args = '--ASSUME_SORT_ORDER queryname'
+ }
+}
diff --git a/modules/nf-core/picard/markduplicates/tests/tags.yml b/modules/nf-core/picard/markduplicates/tests/tags.yml
new file mode 100644
index 00000000..4f213d62
--- /dev/null
+++ b/modules/nf-core/picard/markduplicates/tests/tags.yml
@@ -0,0 +1,2 @@
+picard/markduplicates:
+ - modules/nf-core/picard/markduplicates/**
diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml
new file mode 100644
index 00000000..01ccbcc7
--- /dev/null
+++ b/modules/nf-core/samtools/faidx/environment.yml
@@ -0,0 +1,7 @@
+name: samtools_faidx
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::samtools=1.18
diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf
index c1e8ef3a..d3461627 100644
--- a/modules/nf-core/samtools/faidx/main.nf
+++ b/modules/nf-core/samtools/faidx/main.nf
@@ -2,10 +2,10 @@ process SAMTOOLS_FAIDX {
tag "$fasta"
label 'process_single'
- conda "bioconda::samtools=1.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' :
- 'biocontainers/samtools:1.17--h00cdaf9_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' :
+ 'biocontainers/samtools:1.18--h50ea8bc_1' }"
input:
tuple val(meta), path(fasta)
@@ -35,8 +35,12 @@ process SAMTOOLS_FAIDX {
"""
stub:
+ def match = (task.ext.args =~ /-o(?:utput)?\s(.*)\s?/).findAll()
+ def fastacmd = match[0] ? "touch ${match[0][1]}" : ''
"""
+ ${fastacmd}
touch ${fasta}.fai
+
cat <<-END_VERSIONS > versions.yml
"${task.process}":
diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml
index 957b25e5..e189af28 100644
--- a/modules/nf-core/samtools/faidx/meta.yml
+++ b/modules/nf-core/samtools/faidx/meta.yml
@@ -55,3 +55,7 @@ authors:
- "@drpatelh"
- "@ewels"
- "@phue"
+maintainers:
+ - "@drpatelh"
+ - "@ewels"
+ - "@phue"
diff --git a/modules/nf-core/samtools/flagstat/environment.yml b/modules/nf-core/samtools/flagstat/environment.yml
new file mode 100644
index 00000000..5efae053
--- /dev/null
+++ b/modules/nf-core/samtools/flagstat/environment.yml
@@ -0,0 +1,7 @@
+name: samtools_flagstat
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::samtools=1.18
diff --git a/modules/nf-core/samtools/flagstat/main.nf b/modules/nf-core/samtools/flagstat/main.nf
index eb7e72fc..f1893d7c 100644
--- a/modules/nf-core/samtools/flagstat/main.nf
+++ b/modules/nf-core/samtools/flagstat/main.nf
@@ -2,10 +2,10 @@ process SAMTOOLS_FLAGSTAT {
tag "$meta.id"
label 'process_single'
- conda "bioconda::samtools=1.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' :
- 'biocontainers/samtools:1.17--h00cdaf9_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' :
+ 'biocontainers/samtools:1.18--h50ea8bc_1' }"
input:
tuple val(meta), path(bam), path(bai)
@@ -32,4 +32,15 @@ process SAMTOOLS_FLAGSTAT {
samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
END_VERSIONS
"""
+
+ stub:
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ """
+ touch ${prefix}.flagstat
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
+ END_VERSIONS
+ """
}
diff --git a/modules/nf-core/samtools/flagstat/meta.yml b/modules/nf-core/samtools/flagstat/meta.yml
index 954225df..97991358 100644
--- a/modules/nf-core/samtools/flagstat/meta.yml
+++ b/modules/nf-core/samtools/flagstat/meta.yml
@@ -47,3 +47,5 @@ output:
pattern: "versions.yml"
authors:
- "@drpatelh"
+maintainers:
+ - "@drpatelh"
diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test b/modules/nf-core/samtools/flagstat/tests/main.nf.test
new file mode 100644
index 00000000..c8dd8dc9
--- /dev/null
+++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test
@@ -0,0 +1,36 @@
+nextflow_process {
+
+ name "Test Process SAMTOOLS_FLAGSTAT"
+ script "../main.nf"
+ process "SAMTOOLS_FLAGSTAT"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "samtools"
+ tag "samtools/flagstat"
+
+ test("BAM") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out.flagstat).match() },
+ { assert path(process.out.versions.get(0)).getText().contains("samtools") }
+ )
+ }
+ }
+}
diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap
new file mode 100644
index 00000000..880019f2
--- /dev/null
+++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap
@@ -0,0 +1,16 @@
+{
+ "BAM": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-14T15:49:22.577133"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/flagstat/tests/tags.yml b/modules/nf-core/samtools/flagstat/tests/tags.yml
new file mode 100644
index 00000000..2d2b7255
--- /dev/null
+++ b/modules/nf-core/samtools/flagstat/tests/tags.yml
@@ -0,0 +1,2 @@
+samtools/flagstat:
+ - modules/nf-core/samtools/flagstat/**
diff --git a/modules/nf-core/samtools/idxstats/environment.yml b/modules/nf-core/samtools/idxstats/environment.yml
new file mode 100644
index 00000000..2401db0f
--- /dev/null
+++ b/modules/nf-core/samtools/idxstats/environment.yml
@@ -0,0 +1,7 @@
+name: samtools_idxstats
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::samtools=1.18
diff --git a/modules/nf-core/samtools/idxstats/main.nf b/modules/nf-core/samtools/idxstats/main.nf
index a257d700..00d916bb 100644
--- a/modules/nf-core/samtools/idxstats/main.nf
+++ b/modules/nf-core/samtools/idxstats/main.nf
@@ -2,10 +2,10 @@ process SAMTOOLS_IDXSTATS {
tag "$meta.id"
label 'process_single'
- conda "bioconda::samtools=1.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' :
- 'biocontainers/samtools:1.17--h00cdaf9_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' :
+ 'biocontainers/samtools:1.18--h50ea8bc_1' }"
input:
tuple val(meta), path(bam), path(bai)
@@ -33,4 +33,16 @@ process SAMTOOLS_IDXSTATS {
samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
END_VERSIONS
"""
+
+ stub:
+ def prefix = task.ext.prefix ?: "${meta.id}"
+
+ """
+ touch ${prefix}.idxstats
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
+ END_VERSIONS
+ """
}
diff --git a/modules/nf-core/samtools/idxstats/meta.yml b/modules/nf-core/samtools/idxstats/meta.yml
index dda87e1e..344e92a3 100644
--- a/modules/nf-core/samtools/idxstats/meta.yml
+++ b/modules/nf-core/samtools/idxstats/meta.yml
@@ -48,3 +48,5 @@ output:
pattern: "versions.yml"
authors:
- "@drpatelh"
+maintainers:
+ - "@drpatelh"
diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test b/modules/nf-core/samtools/idxstats/tests/main.nf.test
new file mode 100644
index 00000000..f6c92150
--- /dev/null
+++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test
@@ -0,0 +1,36 @@
+nextflow_process {
+
+ name "Test Process SAMTOOLS_IDXSTATS"
+ script "../main.nf"
+ process "SAMTOOLS_IDXSTATS"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "samtools"
+ tag "samtools/idxstats"
+
+ test("BAM") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out.idxstats).match() },
+ { assert path(process.out.versions.get(0)).getText().contains("samtools") }
+ )
+ }
+ }
+}
diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap
new file mode 100644
index 00000000..4c6c12bd
--- /dev/null
+++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap
@@ -0,0 +1,16 @@
+{
+ "BAM": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-14T15:52:19.875194"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/idxstats/tests/tags.yml b/modules/nf-core/samtools/idxstats/tests/tags.yml
new file mode 100644
index 00000000..d3057c61
--- /dev/null
+++ b/modules/nf-core/samtools/idxstats/tests/tags.yml
@@ -0,0 +1,2 @@
+samtools/idxstats:
+ - modules/nf-core/samtools/idxstats/**
diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml
new file mode 100644
index 00000000..296ed99e
--- /dev/null
+++ b/modules/nf-core/samtools/index/environment.yml
@@ -0,0 +1,7 @@
+name: samtools_index
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::samtools=1.18
diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf
index 0b20aa4b..8ad18fdc 100644
--- a/modules/nf-core/samtools/index/main.nf
+++ b/modules/nf-core/samtools/index/main.nf
@@ -2,10 +2,10 @@ process SAMTOOLS_INDEX {
tag "$meta.id"
label 'process_low'
- conda "bioconda::samtools=1.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' :
- 'biocontainers/samtools:1.17--h00cdaf9_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' :
+ 'biocontainers/samtools:1.18--h50ea8bc_1' }"
input:
tuple val(meta), path(input)
diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml
index 8bd2fa6f..01a4ee03 100644
--- a/modules/nf-core/samtools/index/meta.yml
+++ b/modules/nf-core/samtools/index/meta.yml
@@ -51,3 +51,7 @@ authors:
- "@drpatelh"
- "@ewels"
- "@maxulysse"
+maintainers:
+ - "@drpatelh"
+ - "@ewels"
+ - "@maxulysse"
diff --git a/modules/nf-core/samtools/index/tests/csi.nextflow.config b/modules/nf-core/samtools/index/tests/csi.nextflow.config
new file mode 100644
index 00000000..0ed260ef
--- /dev/null
+++ b/modules/nf-core/samtools/index/tests/csi.nextflow.config
@@ -0,0 +1,7 @@
+process {
+
+ withName: SAMTOOLS_INDEX {
+ ext.args = '-c'
+ }
+
+}
diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test
new file mode 100644
index 00000000..c76a9169
--- /dev/null
+++ b/modules/nf-core/samtools/index/tests/main.nf.test
@@ -0,0 +1,87 @@
+nextflow_process {
+
+ name "Test Process SAMTOOLS_INDEX"
+ script "../main.nf"
+ process "SAMTOOLS_INDEX"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "samtools"
+ tag "samtools/index"
+
+ test("sarscov2 [BAI]") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test' ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out.bai).match("bai") },
+ { assert path(process.out.versions.get(0)).getText().contains("samtools") }
+ )
+ }
+ }
+
+ test("homo_sapiens [CRAI]") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test' ], // meta map
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out.crai).match("crai") },
+ { assert path(process.out.versions.get(0)).getText().contains("samtools") }
+ )
+ }
+ }
+
+ test("homo_sapiens [CSI]") {
+
+ config "./csi.nextflow.config"
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test' ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert path(process.out.csi.get(0).get(1)).exists() },
+ { assert path(process.out.versions.get(0)).getText().contains("samtools") }
+ )
+ }
+ }
+}
diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap
new file mode 100644
index 00000000..b3baee7f
--- /dev/null
+++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap
@@ -0,0 +1,28 @@
+{
+ "crai": {
+ "content": [
+ [
+ [
+ {
+ "id": "test"
+ },
+ "test.paired_end.recalibrated.sorted.cram.crai:md5,14bc3bd5c89cacc8f4541f9062429029"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-15T15:17:37.30801"
+ },
+ "bai": {
+ "content": [
+ [
+ [
+ {
+ "id": "test"
+ },
+ "test.paired_end.sorted.bam.bai:md5,704c10dd1326482448ca3073fdebc2f4"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-15T15:17:30.869234"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/index/tests/tags.yml b/modules/nf-core/samtools/index/tests/tags.yml
new file mode 100644
index 00000000..e0f58a7a
--- /dev/null
+++ b/modules/nf-core/samtools/index/tests/tags.yml
@@ -0,0 +1,2 @@
+samtools/index:
+ - modules/nf-core/samtools/index/**
diff --git a/modules/nf-core/samtools/sort/environment.yml b/modules/nf-core/samtools/sort/environment.yml
new file mode 100644
index 00000000..cd50868c
--- /dev/null
+++ b/modules/nf-core/samtools/sort/environment.yml
@@ -0,0 +1,7 @@
+name: samtools_sort
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::samtools=1.18
diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf
index 1e5181d4..4a666d42 100644
--- a/modules/nf-core/samtools/sort/main.nf
+++ b/modules/nf-core/samtools/sort/main.nf
@@ -2,10 +2,10 @@ process SAMTOOLS_SORT {
tag "$meta.id"
label 'process_medium'
- conda "bioconda::samtools=1.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' :
- 'biocontainers/samtools:1.17--h00cdaf9_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' :
+ 'biocontainers/samtools:1.18--h50ea8bc_1' }"
input:
tuple val(meta), path(bam)
@@ -21,13 +21,11 @@ process SAMTOOLS_SORT {
script:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
- def sort_memory = (task.memory.mega/task.cpus).intValue()
if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!"
"""
samtools sort \\
$args \\
-@ $task.cpus \\
- -m ${sort_memory}M \\
-o ${prefix}.bam \\
-T $prefix \\
$bam
diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml
index 07328431..2200de72 100644
--- a/modules/nf-core/samtools/sort/meta.yml
+++ b/modules/nf-core/samtools/sort/meta.yml
@@ -46,3 +46,6 @@ output:
authors:
- "@drpatelh"
- "@ewels"
+maintainers:
+ - "@drpatelh"
+ - "@ewels"
diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test b/modules/nf-core/samtools/sort/tests/main.nf.test
new file mode 100644
index 00000000..abb80978
--- /dev/null
+++ b/modules/nf-core/samtools/sort/tests/main.nf.test
@@ -0,0 +1,73 @@
+nextflow_process {
+
+ name "Test Process SAMTOOLS_SORT"
+ script "../main.nf"
+ process "SAMTOOLS_SORT"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "samtools"
+ tag "samtools/sort"
+
+ test("test_samtools_sort") {
+
+ config "./nextflow.config"
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ],
+ [
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+
+ }
+
+ test("test_samtools_sort_stub") {
+
+ config "./nextflow.config"
+ options "-stub-run"
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ],
+ [
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.bam[0][1]).name,
+ process.out.versions
+ ).match() }
+ )
+ }
+
+ }
+
+}
diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap
new file mode 100644
index 00000000..ff722259
--- /dev/null
+++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap
@@ -0,0 +1,48 @@
+{
+ "test_samtools_sort": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.sorted.bam:md5,ea6a0fef94eb534e901f107a05a33a06"
+ ]
+ ],
+ "1": [
+
+ ],
+ "2": [
+ "versions.yml:md5,33b6a403dc19a0d28e4219ccab0a1d80"
+ ],
+ "bam": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.sorted.bam:md5,ea6a0fef94eb534e901f107a05a33a06"
+ ]
+ ],
+ "csi": [
+
+ ],
+ "versions": [
+ "versions.yml:md5,33b6a403dc19a0d28e4219ccab0a1d80"
+ ]
+ }
+ ],
+ "timestamp": "2023-12-04T11:11:22.005628301"
+ },
+ "test_samtools_sort_stub": {
+ "content": [
+ "test.sorted.bam",
+ [
+ "versions.yml:md5,33b6a403dc19a0d28e4219ccab0a1d80"
+ ]
+ ],
+ "timestamp": "2023-12-04T17:47:22.314445935"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/sort/tests/nextflow.config b/modules/nf-core/samtools/sort/tests/nextflow.config
new file mode 100644
index 00000000..d0f35086
--- /dev/null
+++ b/modules/nf-core/samtools/sort/tests/nextflow.config
@@ -0,0 +1,7 @@
+process {
+
+ withName: SAMTOOLS_SORT {
+ ext.prefix = { "${meta.id}.sorted" }
+ }
+
+}
diff --git a/modules/nf-core/samtools/sort/tests/tags.yml b/modules/nf-core/samtools/sort/tests/tags.yml
new file mode 100644
index 00000000..cd63ea20
--- /dev/null
+++ b/modules/nf-core/samtools/sort/tests/tags.yml
@@ -0,0 +1,3 @@
+samtools/sort:
+ - modules/nf-core/samtools/sort/**
+ - tests/modules/nf-core/samtools/sort/**
diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml
new file mode 100644
index 00000000..b89ce647
--- /dev/null
+++ b/modules/nf-core/samtools/stats/environment.yml
@@ -0,0 +1,7 @@
+name: samtools_stats
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::samtools=1.18
diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf
index 4a2607de..7539140a 100644
--- a/modules/nf-core/samtools/stats/main.nf
+++ b/modules/nf-core/samtools/stats/main.nf
@@ -2,10 +2,10 @@ process SAMTOOLS_STATS {
tag "$meta.id"
label 'process_single'
- conda "bioconda::samtools=1.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' :
- 'biocontainers/samtools:1.17--h00cdaf9_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' :
+ 'biocontainers/samtools:1.18--h50ea8bc_1' }"
input:
tuple val(meta), path(input), path(input_index)
diff --git a/modules/nf-core/samtools/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml
index 90e6345f..735ff812 100644
--- a/modules/nf-core/samtools/stats/meta.yml
+++ b/modules/nf-core/samtools/stats/meta.yml
@@ -57,3 +57,7 @@ authors:
- "@drpatelh"
- "@FriederikeHanssen"
- "@ramprasadn"
+maintainers:
+ - "@drpatelh"
+ - "@FriederikeHanssen"
+ - "@ramprasadn"
diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test b/modules/nf-core/samtools/stats/tests/main.nf.test
new file mode 100644
index 00000000..20c3efe1
--- /dev/null
+++ b/modules/nf-core/samtools/stats/tests/main.nf.test
@@ -0,0 +1,78 @@
+nextflow_process {
+
+ name "Test Process SAMTOOLS_STATS"
+ script "../main.nf"
+ process "SAMTOOLS_STATS"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "samtools"
+ tag "samtools/stats"
+
+ test("SAMTOOLS STATS Should run without failures") {
+
+ when {
+ params {
+
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ // define inputs of the process here.
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true)
+
+ ]
+ input[1] = [[],[]]
+ """
+
+ }
+ }
+
+ then {
+ assertAll(
+ {assert process.success},
+ {assert snapshot(process.out).match()}
+ )
+ }
+
+ }
+
+ test("SAMTOOLS CRAM Should run without failures") {
+
+ when {
+ params {
+
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ // define inputs of the process here
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram'], checkIfExists: true),
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_recalibrated_sorted_cram_crai'], checkIfExists: true)
+
+ ]
+ input[1] = [
+ [ id:'genome' ],
+ file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ """
+ }
+
+
+ }
+
+ then {
+ assertAll(
+ {assert process.success},
+ {assert snapshot(process.out).match()}
+ )
+ }
+
+ }
+
+
+}
diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test.snap b/modules/nf-core/samtools/stats/tests/main.nf.test.snap
new file mode 100644
index 00000000..025c83a5
--- /dev/null
+++ b/modules/nf-core/samtools/stats/tests/main.nf.test.snap
@@ -0,0 +1,64 @@
+{
+ "SAMTOOLS STATS Should run without failures": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.stats:md5,045a48208b1c6f5b8af4347fe31f4def"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,650a365c6635001436008350ae83337c"
+ ],
+ "stats": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.stats:md5,045a48208b1c6f5b8af4347fe31f4def"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,650a365c6635001436008350ae83337c"
+ ]
+ }
+ ],
+ "timestamp": "2023-12-04T11:07:28.26821485"
+ },
+ "SAMTOOLS CRAM Should run without failures": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.stats:md5,dfbfa130d4a6925ddd1931dcd8354a43"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,650a365c6635001436008350ae83337c"
+ ],
+ "stats": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.stats:md5,dfbfa130d4a6925ddd1931dcd8354a43"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,650a365c6635001436008350ae83337c"
+ ]
+ }
+ ],
+ "timestamp": "2023-12-04T11:07:50.356233402"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/stats/tests/tags.yml b/modules/nf-core/samtools/stats/tests/tags.yml
new file mode 100644
index 00000000..7c28e30f
--- /dev/null
+++ b/modules/nf-core/samtools/stats/tests/tags.yml
@@ -0,0 +1,2 @@
+samtools/stats:
+ - modules/nf-core/samtools/stats/**
diff --git a/modules/nf-core/samtools/view/environment.yml b/modules/nf-core/samtools/view/environment.yml
new file mode 100644
index 00000000..99aa69d0
--- /dev/null
+++ b/modules/nf-core/samtools/view/environment.yml
@@ -0,0 +1,7 @@
+name: samtools_view
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::samtools=1.18
diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf
index cb91facf..0b5a2912 100644
--- a/modules/nf-core/samtools/view/main.nf
+++ b/modules/nf-core/samtools/view/main.nf
@@ -2,10 +2,10 @@ process SAMTOOLS_VIEW {
tag "$meta.id"
label 'process_low'
- conda "bioconda::samtools=1.17"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' :
- 'biocontainers/samtools:1.17--h00cdaf9_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.18--h50ea8bc_1' :
+ 'biocontainers/samtools:1.18--h50ea8bc_1' }"
input:
tuple val(meta), path(input), path(index)
@@ -53,10 +53,19 @@ process SAMTOOLS_VIEW {
"""
stub:
+ def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
+ def file_type = args.contains("--output-fmt sam") ? "sam" :
+ args.contains("--output-fmt bam") ? "bam" :
+ args.contains("--output-fmt cram") ? "cram" :
+ input.getExtension()
+ if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!"
+
+ def index = args.contains("--write-index") ? "touch ${prefix}.csi" : ""
+
"""
- touch ${prefix}.bam
- touch ${prefix}.cram
+ touch ${prefix}.${file_type}
+ ${index}
cat <<-END_VERSIONS > versions.yml
"${task.process}":
diff --git a/modules/nf-core/samtools/view/meta.yml b/modules/nf-core/samtools/view/meta.yml
index 3b05450b..3dadafae 100644
--- a/modules/nf-core/samtools/view/meta.yml
+++ b/modules/nf-core/samtools/view/meta.yml
@@ -82,3 +82,8 @@ authors:
- "@joseespinosa"
- "@FriederikeHanssen"
- "@priyanka-surana"
+maintainers:
+ - "@drpatelh"
+ - "@joseespinosa"
+ - "@FriederikeHanssen"
+ - "@priyanka-surana"
diff --git a/modules/nf-core/samtools/view/tests/bam.config b/modules/nf-core/samtools/view/tests/bam.config
new file mode 100644
index 00000000..c10d1081
--- /dev/null
+++ b/modules/nf-core/samtools/view/tests/bam.config
@@ -0,0 +1,3 @@
+process {
+ ext.args = "--output-fmt bam"
+}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/view/tests/bam_index.config b/modules/nf-core/samtools/view/tests/bam_index.config
new file mode 100644
index 00000000..771ae033
--- /dev/null
+++ b/modules/nf-core/samtools/view/tests/bam_index.config
@@ -0,0 +1,3 @@
+process {
+ ext.args = "--output-fmt bam --write-index"
+}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/view/tests/main.nf.test b/modules/nf-core/samtools/view/tests/main.nf.test
new file mode 100644
index 00000000..89ed3555
--- /dev/null
+++ b/modules/nf-core/samtools/view/tests/main.nf.test
@@ -0,0 +1,231 @@
+nextflow_process {
+
+ name "Test Process SAMTOOLS_VIEW"
+ script "../main.nf"
+ process "SAMTOOLS_VIEW"
+
+ tag "modules"
+ tag "modules_nfcore"
+ tag "samtools"
+ tag "samtools/view"
+
+ test("sarscov2 - [bam, []], [], []") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true),
+ []
+ ]
+ input[1] = [[],[]]
+ input[2] = []
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.bam[0][1]).name,
+ process.out.cram,
+ process.out.sam,
+ process.out.bai,
+ process.out.crai,
+ process.out.csi,
+ process.out.versions
+ ).match() }
+ )
+ }
+
+ }
+
+ test("homo_sapiens - [cram, crai], fasta, []") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id: 'test' ], // meta map
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true),
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true)
+ ]
+ input[1] = [
+ [ id:'genome' ],
+ file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ input[2] = []
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.cram[0][1]).name,
+ process.out.bam,
+ process.out.sam,
+ process.out.bai,
+ process.out.crai,
+ process.out.csi,
+ process.out.versions
+ ).match() }
+ )
+ }
+
+ }
+
+ test("homo_sapiens - [cram, []], fasta, [] - bam output") {
+
+ config "./bam.config"
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id: 'test' ], // meta map
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true),
+ []
+ ]
+ input[1] = [
+ [ id:'genome' ],
+ file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ input[2] = []
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.bam[0][1]).name,
+ process.out.cram,
+ process.out.sam,
+ process.out.bai,
+ process.out.crai,
+ process.out.csi,
+ process.out.versions
+ ).match() }
+ )
+ }
+
+ }
+
+ test("homo_sapiens - [cram, []], fasta, [] - bam & index output") {
+
+ config "./bam_index.config"
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id: 'test' ], // meta map
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true),
+ []
+ ]
+ input[1] = [
+ [ id:'genome' ],
+ file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ input[2] = []
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.bam[0][1]).name,
+ process.out.cram,
+ process.out.sam,
+ file(process.out.csi[0][1]).name,
+ process.out.crai,
+ process.out.bai,
+ process.out.versions
+ ).match() }
+ )
+ }
+
+ }
+
+ test("homo_sapiens - [cram, []], fasta, qname - bam & index output") {
+
+ config "./bam_index.config"
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id: 'test' ], // meta map
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true),
+ []
+ ]
+ input[1] = [
+ [ id:'genome' ],
+ file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ input[2] = Channel.of("testN:2817", "testN:2814").collectFile(name: "readnames.list", newLine: true)
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.bam[0][1]).name,
+ process.out.cram,
+ process.out.sam,
+ file(process.out.csi[0][1]).name,
+ process.out.crai,
+ process.out.bai,
+ process.out.versions
+ ).match() }
+ )
+ }
+
+ }
+
+ test("sarscov2 - [bam, []], [], [] - stub") {
+
+ options "-stub"
+ config "./bam_index.config"
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_bam'], checkIfExists: true),
+ []
+ ]
+ input[1] = [[],[]]
+ input[2] = []
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.bam[0][1]).name,
+ process.out.cram,
+ process.out.sam,
+ file(process.out.csi[0][1]).name,
+ process.out.crai,
+ process.out.bai,
+ process.out.versions
+ ).match() }
+ )
+ }
+
+ }
+
+}
diff --git a/modules/nf-core/samtools/view/tests/main.nf.test.snap b/modules/nf-core/samtools/view/tests/main.nf.test.snap
new file mode 100644
index 00000000..83427491
--- /dev/null
+++ b/modules/nf-core/samtools/view/tests/main.nf.test.snap
@@ -0,0 +1,140 @@
+{
+ "homo_sapiens - [cram, []], fasta, [] - bam output": {
+ "content": [
+ "test.bam",
+ [
+
+ ],
+ [
+
+ ],
+ [
+
+ ],
+ [
+
+ ],
+ [
+
+ ],
+ [
+ "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b"
+ ]
+ ],
+ "timestamp": "2023-12-04T17:41:17.563069206"
+ },
+ "sarscov2 - [bam, []], [], []": {
+ "content": [
+ "test.bam",
+ [
+
+ ],
+ [
+
+ ],
+ [
+
+ ],
+ [
+
+ ],
+ [
+
+ ],
+ [
+ "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b"
+ ]
+ ],
+ "timestamp": "2023-12-04T17:41:03.206994564"
+ },
+ "homo_sapiens - [cram, []], fasta, qname - bam & index output": {
+ "content": [
+ "test.bam",
+ [
+
+ ],
+ [
+
+ ],
+ "test.bam.csi",
+ [
+
+ ],
+ [
+
+ ],
+ [
+ "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b"
+ ]
+ ],
+ "timestamp": "2023-12-04T17:44:39.165289759"
+ },
+ "homo_sapiens - [cram, []], fasta, [] - bam & index output": {
+ "content": [
+ "test.bam",
+ [
+
+ ],
+ [
+
+ ],
+ "test.bam.csi",
+ [
+
+ ],
+ [
+
+ ],
+ [
+ "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b"
+ ]
+ ],
+ "timestamp": "2023-12-04T17:44:32.25731224"
+ },
+ "sarscov2 - [bam, []], [], [] - stub": {
+ "content": [
+ "test.bam",
+ [
+
+ ],
+ [
+
+ ],
+ "test.csi",
+ [
+
+ ],
+ [
+
+ ],
+ [
+ "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b"
+ ]
+ ],
+ "timestamp": "2023-12-04T17:44:45.81037195"
+ },
+ "homo_sapiens - [cram, crai], fasta, []": {
+ "content": [
+ "test.cram",
+ [
+
+ ],
+ [
+
+ ],
+ [
+
+ ],
+ [
+
+ ],
+ [
+
+ ],
+ [
+ "versions.yml:md5,06b9049228b111e7bed5c52fe8a98d9b"
+ ]
+ ],
+ "timestamp": "2023-12-04T17:41:10.730011823"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/view/tests/tags.yml b/modules/nf-core/samtools/view/tests/tags.yml
new file mode 100644
index 00000000..4fdf1dd1
--- /dev/null
+++ b/modules/nf-core/samtools/view/tests/tags.yml
@@ -0,0 +1,2 @@
+samtools/view:
+ - "modules/nf-core/samtools/view/**"
diff --git a/modules/nf-core/trimgalore/environment.yml b/modules/nf-core/trimgalore/environment.yml
new file mode 100644
index 00000000..6cd0f51b
--- /dev/null
+++ b/modules/nf-core/trimgalore/environment.yml
@@ -0,0 +1,7 @@
+name: trimgalore
+channels:
+ - conda-forge
+ - bioconda
+ - defaults
+dependencies:
+ - bioconda::trim-galore=0.6.7
diff --git a/modules/nf-core/trimgalore/main.nf b/modules/nf-core/trimgalore/main.nf
index dcb77ae7..24ead871 100644
--- a/modules/nf-core/trimgalore/main.nf
+++ b/modules/nf-core/trimgalore/main.nf
@@ -2,7 +2,7 @@ process TRIMGALORE {
tag "$meta.id"
label 'process_high'
- conda "bioconda::trim-galore=0.6.7"
+ conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
'https://depot.galaxyproject.org/singularity/trim-galore:0.6.7--hdfd78af_0' :
'biocontainers/trim-galore:0.6.7--hdfd78af_0' }"
diff --git a/modules/nf-core/trimgalore/meta.yml b/modules/nf-core/trimgalore/meta.yml
index f84c4d77..e649088c 100644
--- a/modules/nf-core/trimgalore/meta.yml
+++ b/modules/nf-core/trimgalore/meta.yml
@@ -62,3 +62,7 @@ authors:
- "@drpatelh"
- "@ewels"
- "@FelixKrueger"
+maintainers:
+ - "@drpatelh"
+ - "@ewels"
+ - "@FelixKrueger"
diff --git a/modules/nf-core/trimgalore/tests/main.nf.test b/modules/nf-core/trimgalore/tests/main.nf.test
new file mode 100644
index 00000000..bc6812cc
--- /dev/null
+++ b/modules/nf-core/trimgalore/tests/main.nf.test
@@ -0,0 +1,105 @@
+nextflow_process {
+
+ name "Test Process TRIMGALORE"
+ script "../main.nf"
+ process "TRIMGALORE"
+ tag "modules"
+ tag "modules_nfcore"
+ tag "trimgalore"
+
+ test("test_trimgalore_single_end") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [ [ id:'test', single_end:true ], // meta map
+ [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) ]
+ ]
+ """
+ }
+ }
+
+ then {
+ def read_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1",
+ "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT",
+ "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE
+ { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) }
+ }
+ },
+ { report1_lines.each { report1_line ->
+ { assert path(process.out.log.get(0).get(1)).getText().contains(report1_line) }
+ }
+ }
+ )
+ }
+ }
+
+ test("test_trimgalore_paired_end") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ process {
+ """
+ input[0] = [ [ id:'test', single_end:false ], // meta map
+ [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_2_fastq_gz'], checkIfExists: true) ]
+ ]
+ """
+ }
+ }
+
+ then {
+ def read1_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1",
+ "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT",
+ "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE
+ { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) }
+ }
+ },
+ { read2_lines.each { read2_line ->
+ { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) }
+ }
+ },
+ { report1_lines.each { report1_line ->
+ { assert path(process.out.log.get(0).get(1).get(0)).getText().contains(report1_line) }
+ }
+ },
+ { report2_lines.each { report2_line ->
+ { assert path(process.out.log.get(0).get(1).get(1)).getText().contains(report2_line) }
+ }
+ }
+ )
+ }
+ }
+}
diff --git a/modules/nf-core/trimgalore/tests/main.nf.test.snap b/modules/nf-core/trimgalore/tests/main.nf.test.snap
new file mode 100644
index 00000000..84feacca
--- /dev/null
+++ b/modules/nf-core/trimgalore/tests/main.nf.test.snap
@@ -0,0 +1,148 @@
+{
+ "test_trimgalore_single_end": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test_trimmed.fq.gz:md5,e0a7516b8ea8d6467d6306acb2cd13c4"
+ ]
+ ],
+ "1": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.fastq.gz_trimming_report.txt:md5,a1ab3958205f1ddf48af623242b5b429"
+ ]
+ ],
+ "2": [
+
+ ],
+ "3": [
+
+ ],
+ "4": [
+
+ ],
+ "5": [
+ "versions.yml:md5,47d966cbb31c80eb8f7fe860d55659b7"
+ ],
+ "html": [
+
+ ],
+ "log": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.fastq.gz_trimming_report.txt:md5,a1ab3958205f1ddf48af623242b5b429"
+ ]
+ ],
+ "reads": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test_trimmed.fq.gz:md5,e0a7516b8ea8d6467d6306acb2cd13c4"
+ ]
+ ],
+ "unpaired": [
+
+ ],
+ "versions": [
+ "versions.yml:md5,47d966cbb31c80eb8f7fe860d55659b7"
+ ],
+ "zip": [
+
+ ]
+ }
+ ],
+ "timestamp": "2023-10-17T15:24:57.782141441"
+ },
+ "test_trimgalore_paired_end": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test_1_val_1.fq.gz:md5,e0a7516b8ea8d6467d6306acb2cd13c4",
+ "test_2_val_2.fq.gz:md5,f3d61189e6d10202da7b8686f1dbb71b"
+ ]
+ ]
+ ],
+ "1": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test_1.fastq.gz_trimming_report.txt:md5,315d40465412f9909bbaabf52269274d",
+ "test_2.fastq.gz_trimming_report.txt:md5,34436303da1c78811103427a2fb57f7b"
+ ]
+ ]
+ ],
+ "2": [
+
+ ],
+ "3": [
+
+ ],
+ "4": [
+
+ ],
+ "5": [
+ "versions.yml:md5,47d966cbb31c80eb8f7fe860d55659b7"
+ ],
+ "html": [
+
+ ],
+ "log": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test_1.fastq.gz_trimming_report.txt:md5,315d40465412f9909bbaabf52269274d",
+ "test_2.fastq.gz_trimming_report.txt:md5,34436303da1c78811103427a2fb57f7b"
+ ]
+ ]
+ ],
+ "reads": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test_1_val_1.fq.gz:md5,e0a7516b8ea8d6467d6306acb2cd13c4",
+ "test_2_val_2.fq.gz:md5,f3d61189e6d10202da7b8686f1dbb71b"
+ ]
+ ]
+ ],
+ "unpaired": [
+
+ ],
+ "versions": [
+ "versions.yml:md5,47d966cbb31c80eb8f7fe860d55659b7"
+ ],
+ "zip": [
+
+ ]
+ }
+ ],
+ "timestamp": "2023-10-17T15:25:08.513589909"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/trimgalore/tests/tags.yml b/modules/nf-core/trimgalore/tests/tags.yml
new file mode 100644
index 00000000..e9937691
--- /dev/null
+++ b/modules/nf-core/trimgalore/tests/tags.yml
@@ -0,0 +1,2 @@
+trimgalore:
+ - modules/nf-core/trimgalore/**
diff --git a/subworkflows/nf-core/bam_markduplicates_picard/meta.yml b/subworkflows/nf-core/bam_markduplicates_picard/meta.yml
index d5e71609..fe63068e 100644
--- a/subworkflows/nf-core/bam_markduplicates_picard/meta.yml
+++ b/subworkflows/nf-core/bam_markduplicates_picard/meta.yml
@@ -6,14 +6,13 @@ keywords:
- bam
- sam
- cram
-
-modules:
+components:
- picard/markduplicates
- samtools/index
- samtools/stats
- samtools/idxstats
- samtools/flagstat
-
+ - bam_stats_samtools
input:
- ch_bam:
description: |
@@ -59,3 +58,6 @@ output:
authors:
- "@dmarron"
- "@drpatelh"
+maintainers:
+ - "@dmarron"
+ - "@drpatelh"
diff --git a/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test b/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test
new file mode 100644
index 00000000..e721f30c
--- /dev/null
+++ b/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test
@@ -0,0 +1,92 @@
+nextflow_workflow {
+
+ name "Test Workflow BAM_MARKDUPLICATES_PICARD"
+ script "../main.nf"
+ workflow "BAM_MARKDUPLICATES_PICARD"
+
+ tag "picard"
+ tag "picard/markduplicates"
+ tag "subworkflows"
+ tag "subworkflows_nfcore"
+ tag "bam_markduplicates_picard"
+ tag "subworkflows/bam_markduplicates_picard"
+ tag "subworkflows/bam_stats_samtools"
+ tag "bam_stats_samtools"
+ tag "samtools"
+ tag "samtools/flagstat"
+ tag "samtools/idxstats"
+ tag "samtools/index"
+ tag "samtools/stats"
+
+ test("homo_sapiens - bam") {
+
+ when {
+ workflow {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true)
+ ]
+ input[1] = [
+ [ id:'genome' ],
+ file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ input[2] = [
+ [ id:'genome' ],
+ file(params.test_data['sarscov2']['genome']['genome_fasta_fai'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert workflow.success},
+ { assert snapshot(
+ path(workflow.out.bam[0][1]),
+ path(workflow.out.bai[0][1]),
+ path(workflow.out.flagstat[0][1]),
+ path(workflow.out.idxstats[0][1]),
+ path(workflow.out.stats[0][1]),
+ ).match("homo_sapiens - bam") },
+ { assert path(workflow.out.metrics.get(0).get(1)).getText().contains("97") }
+ )
+ }
+ }
+
+ test("homo_sapiens - cram") {
+
+ when {
+ workflow {
+ """
+ input[0] = [
+ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true)
+ ]
+ input[1] = [ [ id:'genome' ],
+ file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ input[2] = [
+ [ id:'genome' ],
+ file(params.test_data['homo_sapiens']['genome']['genome_fasta_fai'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert workflow.success},
+ { assert snapshot(
+ path(workflow.out.bam[0][1]),
+ path(workflow.out.bai[0][1]),
+ path(workflow.out.flagstat[0][1]),
+ path(workflow.out.idxstats[0][1]),
+ path(workflow.out.stats[0][1]),
+ ).match("homo_sapiens - cram") },
+ { assert path(workflow.out.metrics.get(0).get(1)).getText().contains("0.999986") }
+ )
+ }
+ }
+
+}
diff --git a/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test.snap b/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test.snap
new file mode 100644
index 00000000..b1907385
--- /dev/null
+++ b/subworkflows/nf-core/bam_markduplicates_picard/tests/main.nf.test.snap
@@ -0,0 +1,22 @@
+{
+ "homo_sapiens - cram": {
+ "content": [
+ "test.bam:md5,6641dc05efa8384a061f378d86d922cd",
+ "test.bam.bai:md5,c41c60d8a94adebe53b6df80b6e90d38",
+ "test.flagstat:md5,93b0ef463df947ede1f42ff60396c34d",
+ "test.idxstats:md5,e179601fa7b8ebce81ac3765206f6c15",
+ "test.stats:md5,0035ac8900d85e9a790f4c1f48b76947"
+ ],
+ "timestamp": "2023-12-05T17:45:12.484869"
+ },
+ "homo_sapiens - bam": {
+ "content": [
+ "test.bam:md5,3091fe6ba1b7530f382fe40b9fd8f45b",
+ "test.bam.bai:md5,4d3ae8d013444b55e17aa0149a2ab404",
+ "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783",
+ "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2",
+ "test.stats:md5,e32e7e49dce1fbe327a89e0fb7bc01b1"
+ ],
+ "timestamp": "2023-12-05T17:43:58.582652"
+ }
+}
\ No newline at end of file
diff --git a/subworkflows/nf-core/bam_markduplicates_picard/tests/tags.yml b/subworkflows/nf-core/bam_markduplicates_picard/tests/tags.yml
new file mode 100644
index 00000000..10b85270
--- /dev/null
+++ b/subworkflows/nf-core/bam_markduplicates_picard/tests/tags.yml
@@ -0,0 +1,2 @@
+subworkflows/bam_markduplicates_picard:
+ - subworkflows/nf-core/bam_markduplicates_picard/**
diff --git a/subworkflows/nf-core/bam_stats_samtools/meta.yml b/subworkflows/nf-core/bam_stats_samtools/meta.yml
index b05086bc..809bf736 100644
--- a/subworkflows/nf-core/bam_stats_samtools/meta.yml
+++ b/subworkflows/nf-core/bam_stats_samtools/meta.yml
@@ -7,7 +7,7 @@ keywords:
- bam
- sam
- cram
-modules:
+components:
- samtools/stats
- samtools/idxstats
- samtools/flagstat
@@ -39,3 +39,5 @@ output:
Structure: [ path(versions.yml) ]
authors:
- "@drpatelh"
+maintainers:
+ - "@drpatelh"
diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test
new file mode 100644
index 00000000..97210890
--- /dev/null
+++ b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test
@@ -0,0 +1,102 @@
+nextflow_workflow {
+
+ name "Test Workflow BAM_STATS_SAMTOOLS"
+ script "../main.nf"
+ workflow "BAM_STATS_SAMTOOLS"
+ tag "subworkflows"
+ tag "subworkflows_nfcore"
+ tag "bam_stats_samtools"
+ tag "subworkflows/bam_stats_samtools"
+ tag "samtools"
+ tag "samtools/flagstat"
+ tag "samtools/idxstats"
+ tag "samtools/stats"
+
+ test("test_bam_stats_samtools_single_end") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ workflow {
+ """
+ input[0] = [ [ id:'test', single_end:true ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_single_end_sorted_bam_bai'], checkIfExists: true)
+ ]
+ input[1] = [ [ id:'genome' ],
+ file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert workflow.success},
+ { assert snapshot(workflow.out.stats).match("test_bam_stats_samtools_single_end_stats") },
+ { assert snapshot(workflow.out.flagstat).match("test_bam_stats_samtools_single_end_flagstats") },
+ { assert snapshot(workflow.out.idxstats).match("test_bam_stats_samtools_single_end_idxstats") }
+ )
+ }
+ }
+
+ test("test_bam_stats_samtools_paired_end") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ workflow {
+ """
+ input[0] = [ [ id:'test', single_end:true ], // meta map
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam'], checkIfExists: true),
+ file(params.test_data['sarscov2']['illumina']['test_paired_end_sorted_bam_bai'], checkIfExists: true)
+ ]
+ input[1] = [ [ id:'genome' ],
+ file(params.test_data['sarscov2']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert workflow.success },
+ { assert snapshot(workflow.out.stats).match("test_bam_stats_samtools_paired_end_stats") },
+ { assert snapshot(workflow.out.flagstat).match("test_bam_stats_samtools_paired_end_flagstats") },
+ { assert snapshot(workflow.out.idxstats).match("test_bam_stats_samtools_paired_end_idxstats") }
+ )
+ }
+ }
+
+ test("test_bam_stats_samtools_paired_end_cram") {
+
+ when {
+ params {
+ outdir = "$outputDir"
+ }
+ workflow {
+ """
+ input[0] = [ [ id:'test', single_end:false ], // meta map
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram'], checkIfExists: true),
+ file(params.test_data['homo_sapiens']['illumina']['test_paired_end_sorted_cram_crai'], checkIfExists: true)
+ ]
+ input[1] = [ [ id:'genome' ],
+ file(params.test_data['homo_sapiens']['genome']['genome_fasta'], checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert workflow.success},
+ { assert snapshot(workflow.out.stats).match("test_bam_stats_samtools_paired_end_cram_stats") },
+ { assert snapshot(workflow.out.flagstat).match("test_bam_stats_samtools_paired_end_cram_flagstats") },
+ { assert snapshot(workflow.out.idxstats).match("test_bam_stats_samtools_paired_end_cram_idxstats") }
+ )
+ }
+ }
+
+}
diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap
new file mode 100644
index 00000000..d3af1376
--- /dev/null
+++ b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap
@@ -0,0 +1,128 @@
+{
+ "test_bam_stats_samtools_paired_end_cram_flagstats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.flagstat:md5,a53f3d26e2e9851f7d528442bbfe9781"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-06T09:31:26.194017574"
+ },
+ "test_bam_stats_samtools_paired_end_stats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.stats:md5,49e2b43344ff92bc4c02463a58f7ba4a"
+ ]
+ ]
+ ],
+ "timestamp": "2023-12-04T11:07:13.965061942"
+ },
+ "test_bam_stats_samtools_paired_end_flagstats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-06T09:31:11.668517251"
+ },
+ "test_bam_stats_samtools_single_end_flagstats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.flagstat:md5,2191911d72575a2358b08b1df64ccb53"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-06T09:26:10.340046381"
+ },
+ "test_bam_stats_samtools_paired_end_cram_idxstats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.idxstats:md5,e179601fa7b8ebce81ac3765206f6c15"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-06T09:31:26.207052003"
+ },
+ "test_bam_stats_samtools_single_end_stats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.stats:md5,5a6667d97806e5002731e9cf23674fad"
+ ]
+ ]
+ ],
+ "timestamp": "2023-12-04T11:07:06.676820877"
+ },
+ "test_bam_stats_samtools_paired_end_idxstats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-06T09:31:11.68246157"
+ },
+ "test_bam_stats_samtools_single_end_idxstats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.idxstats:md5,613e048487662c694aa4a2f73ca96a20"
+ ]
+ ]
+ ],
+ "timestamp": "2023-11-06T09:26:10.349439801"
+ },
+ "test_bam_stats_samtools_paired_end_cram_stats": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.stats:md5,2cf2fe93596ee3d74f946097b204a629"
+ ]
+ ]
+ ],
+ "timestamp": "2023-12-04T11:07:22.30295557"
+ }
+}
\ No newline at end of file
diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/tags.yml b/subworkflows/nf-core/bam_stats_samtools/tests/tags.yml
new file mode 100644
index 00000000..ec2f2d68
--- /dev/null
+++ b/subworkflows/nf-core/bam_stats_samtools/tests/tags.yml
@@ -0,0 +1,2 @@
+subworkflows/bam_stats_samtools:
+ - subworkflows/nf-core/bam_stats_samtools/**