comparison tests/test_imgt.py @ 56:7ae6b6b5d890 draft

"planemo upload commit 2d4cb6757e8eff095295550bbde6fd9e2ee0b73d"
author rhpvorderman
date Tue, 14 Dec 2021 12:45:47 +0000
parents
children 33412e85e669
comparison
equal deleted inserted replaced
55:2a7dc86d8f85 56:7ae6b6b5d890
1 # Copyright (c) 2021 Leiden University Medical Center
2 #
3 # Permission is hereby granted, free of charge, to any person obtaining a copy
4 # of this software and associated documentation files (the "Software"), to deal
5 # in the Software without restriction, including without limitation the rights
6 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 # copies of the Software, and to permit persons to whom the Software is
8 # furnished to do so, subject to the following conditions:
9 #
10 # The above copyright notice and this permission notice shall be included in
11 # all copies or substantial portions of the Software.
12 #
13 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 # SOFTWARE.
20
21 import os
22 import shutil
23 import subprocess
24 import tempfile
25 from pathlib import Path
26 from xml.etree import ElementTree
27 from xml.etree.ElementTree import Element
28
29 import pytest
30
31 GIT_ROOT = Path(__file__).parent.parent.absolute()
32 TEST_DIR = Path(__file__).parent
33 TEST_DATA_DIR = TEST_DIR / "data"
34 VALIDATION_DATA_DIR = TEST_DIR / "validation_data"
35 CONTROL_NWK377_PB_IGHC_MID1_40nt_2 = TEST_DATA_DIR / "CONTROL_NWK377_PB_IGHC_MID1_40nt_2.txz"
36
37
38 def get_container():
39 tool = ElementTree.parse(GIT_ROOT / "complete_immunerepertoire.xml").getroot()
40 requirements: Element = tool.find("requirements")
41 container = requirements.find("container")
42 return container.text
43
44
45 @pytest.fixture(scope="module")
46 def imgt_result():
47 temp_dir = Path(tempfile.mkdtemp())
48 tool_dir = temp_dir / "imgt"
49 shutil.copytree(GIT_ROOT, tool_dir)
50 working_dir = temp_dir / "working"
51 working_dir.mkdir(parents=True)
52 output_dir = temp_dir / "outputs"
53 output_dir.mkdir(parents=True)
54 wrapper = str(tool_dir / "complete.sh")
55 sample = CONTROL_NWK377_PB_IGHC_MID1_40nt_2
56 input = f"\"ID1\" {sample} {sample} \"ID2\" {sample}"
57 out_files_path = output_dir / "results"
58 out_files_path.mkdir(parents=True)
59 out_file = out_files_path / "result.html"
60 clonaltype = "none"
61 gene_selection = dict(species="Homo sapiens functional",
62 locus="TRA")
63 filterproductive = "yes"
64 clonality_method = "none"
65 cmd = [
66 "bash",
67 wrapper,
68 input,
69 str(out_file),
70 str(out_files_path),
71 clonaltype,
72 gene_selection["species"],
73 gene_selection["locus"],
74 filterproductive,
75 clonality_method
76 ]
77 docker_cmd = ["docker", "run", "-v", f"{temp_dir}:{temp_dir}",
78 "-v", f"{sample}:{sample}",
79 "-w", str(working_dir),
80 get_container()] + cmd
81 with open(temp_dir / "stderr", "wt") as stderr_file:
82 with open(temp_dir / "stdout", "wt") as stdout_file:
83 subprocess.run(docker_cmd, cwd=working_dir, stdout=stdout_file,
84 stderr=stderr_file, check=True)
85 yield Path(out_files_path)
86
87
88 def test_check_output(imgt_result):
89 assert imgt_result.exists()