Skip to content

Commit

Permalink
DEV: finish unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
beardymcjohnface committed Jun 22, 2023
1 parent aa5ddbe commit c6a2969
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 1 deletion.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

[![](https://img.shields.io/static/v1?label=Licence&message=MIT&color=black)](https://opensource.org/license/mit/)
[![install with PyPI](https://img.shields.io/badge/Install%20with-PyPI-brightgreen.svg?style=flat-square)](https://pypi.org/project/metasnek/)
[![codecov](https://codecov.io/gh/beardymcjohnface/metasnek/branch/main/graph/badge.svg?token=lCyqJhuiCN)](https://codecov.io/gh/beardymcjohnface/metasnek)

Misc functions for metagenomic pipelines

Expand Down
90 changes: 89 additions & 1 deletion tests/test_fastq_finder.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import warnings
import pytest
import shutil
from metasnek.fastq_finder import parse_directory, parse_tsv_file, parse_samples
from metasnek.fastq_finder import parse_directory, parse_tsv_file, parse_samples, convert_to_dictionary, parse_samples_to_dictionary, write_samples_tsv


@pytest.fixture(scope="session")
Expand Down Expand Up @@ -145,3 +145,91 @@ def test_parse_samples(temp_directory, create_sample_tsv):

with pytest.raises(ValueError):
parse_samples(invalid_tsv_file)


def test_convert_to_dictionary():
paired_reads = {("sample1", "sample1_R1.fastq", "sample1_R2.fastq"), ("sample2", "sample2_R1.fastq", "sample2_R2.fastq")}
unpaired_reads = {("sample3", "sample3_R1.fastq"), ("sample4", "sample4_R1.fastq")}

expected_dictionary = {
"sample1": {"R1": "sample1_R1.fastq", "R2": "sample1_R2.fastq"},
"sample2": {"R1": "sample2_R1.fastq", "R2": "sample2_R2.fastq"},
"sample3": {"R1": "sample3_R1.fastq", "R2": None},
"sample4": {"R1": "sample4_R1.fastq", "R2": None},
}

assert convert_to_dictionary(paired_reads, unpaired_reads) == expected_dictionary


@pytest.mark.filterwarnings("ignore:Orphaned paired")
def test_parse_samples_to_dictionary(temp_directory, create_sample_tsv):
# Test parsing a directory
directory_dictionary = {
"sample1": {"R1": os.path.join(temp_directory, "sample1_R1.fastq"), "R2": os.path.join(temp_directory, "sample1_R2.fastq")},
"sample2": {"R1": os.path.join(temp_directory, "sample2_R1_001.fastq.gz"), "R2": os.path.join(temp_directory, "sample2_R2_001.fastq.gz")},
"sample3": {"R1": os.path.join(temp_directory, "sample3.fastq"), "R2": None},
"sample4_R2": {"R1": os.path.join(temp_directory, "sample4_R2.fastq"), "R2": None},
"sample5": {"R1": os.path.join(temp_directory, "sample5.fasta.gz"), "R2": None},
"sample6": {"R1": os.path.join(temp_directory, "sample6.fastq.gz"), "R2": None},
}

assert parse_samples_to_dictionary(temp_directory) == directory_dictionary

# Test parsing a TSV file
tsv_dictionary = {
"sample1": {"R1": os.path.join(temp_directory, "sample1_R1.fastq"), "R2": os.path.join(temp_directory, "sample1_R2.fastq")},
"sample2": {"R1": os.path.join(temp_directory, "sample2_R1_001.fastq.gz"), "R2": os.path.join(temp_directory, "sample2_R2_001.fastq.gz")},
"sample3": {"R1": os.path.join(temp_directory, "sample3.fastq"), "R2": None},
"sample4_R2": {"R1": os.path.join(temp_directory, "sample4_R2.fastq"), "R2": None},
"sample5": {"R1": os.path.join(temp_directory, "sample5.fasta.gz"), "R2": None},
"sample6": {"R1": os.path.join(temp_directory, "sample6.fastq.gz"), "R2": None},
}

assert parse_samples_to_dictionary(create_sample_tsv) == tsv_dictionary

# Test parsing an invalid file or directory
invalid_path = os.path.join(temp_directory, "nonexistent_file.tsv")
with pytest.raises(ValueError):
parse_samples_to_dictionary(invalid_path)

invalid_path = os.path.join(temp_directory, "nonexistent_directory")
with pytest.raises(ValueError):
parse_samples_to_dictionary(invalid_path)

# Test parsing a TSV file with FileNotFoundError
invalid_tsv_file = os.path.join(temp_directory, "invalid_reads.tsv")
invalid_tsv_content = "sample1\tnonexistent_R1.fastq\t"

with open(invalid_tsv_file, "w") as tsv_file:
tsv_file.write(invalid_tsv_content)

with pytest.raises(ValueError):
parse_samples_to_dictionary(invalid_tsv_file)


def test_write_samples_tsv(temp_directory):
samples_dictionary = {
"sample1": {"R1": os.path.join(temp_directory, "sample1_R1.fastq"), "R2": os.path.join(temp_directory, "sample1_R2.fastq")},
"sample2": {"R1": os.path.join(temp_directory, "sample2_R1_001.fastq.gz"), "R2": os.path.join(temp_directory, "sample2_R2_001.fastq.gz")},
"sample3": {"R1": os.path.join(temp_directory, "sample3.fastq"), "R2": None},
"sample4_R2": {"R1": os.path.join(temp_directory, "sample4_R2.fastq"), "R2": None},
"sample5": {"R1": os.path.join(temp_directory, "sample5.fasta.gz"), "R2": None},
"sample6": {"R1": os.path.join(temp_directory, "sample6.fastq.gz"), "R2": None},
}

output_file = os.path.join(temp_directory, "output.tsv")
write_samples_tsv(samples_dictionary, output_file)

with open(output_file, "r") as file:
content = file.read()

expected_content = (
"sample1\t" + os.path.join(temp_directory, "sample1_R1.fastq") + "\t" + os.path.join(temp_directory, "sample1_R2.fastq") + "\n"
"sample2\t" + os.path.join(temp_directory, "sample2_R1_001.fastq.gz") + "\t" + os.path.join(temp_directory, "sample2_R2_001.fastq.gz") + "\n"
"sample3\t" + os.path.join(temp_directory, "sample3.fastq") + "\tNone\n"
"sample4_R2\t" + os.path.join(temp_directory, "sample4_R2.fastq") + "\tNone\n"
"sample5\t" + os.path.join(temp_directory, "sample5.fasta.gz") + "\tNone\n"
"sample6\t" + os.path.join(temp_directory, "sample6.fastq.gz") + "\tNone\n"
)

assert content == expected_content

0 comments on commit c6a2969

Please sign in to comment.