File: test_node_data_reader.py

package info (click to toggle)
augur 24.4.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 25,312 kB
  • sloc: python: 14,253; sh: 227; makefile: 35
file content (122 lines) | stat: -rw-r--r-- 3,317 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
from augur.util_support.node_data_reader import NodeDataReader

import pytest


@pytest.fixture()
def prepare_file(tmpdir):
    def _prepare_file(name, contents):
        with open(f"{tmpdir}/{name}", "w") as file:
            file.write(contents)

    return _prepare_file


class TestNodeDataFile:
    def test_read(self, tmpdir, prepare_file):
        prepare_file(
            "file1.json",
            """
            {
                "a": 5,
                "nodes": {
                    "NODE_1": { "x": 5 },
                    "NODE_2": { "x": 6 },
                    "NODE_3": { "x": 7 }
                }
            }
            """,
        )
        prepare_file(
            "file2.json",
            """
            {
                "nodes": {
                    "NODE_3": { "y": 8 },
                    "NODE_4": { "x": 9 }
                }
            }
            """,
        )

        node_data = NodeDataReader(
            [f"{tmpdir}/file1.json", f"{tmpdir}/file2.json"]
        ).read()
        assert node_data == {
            "a": 5,
            "nodes": {
                "NODE_1": {"x": 5},
                "NODE_2": {"x": 6},
                "NODE_3": {"x": 7, "y": 8},
                "NODE_4": {"x": 9},
            },
        }

    def test_read_bad_file(self):
        NodeDataReader(["/does/not/exist.json"])

    def test_read_dict_nonuniformity(self, tmpdir, prepare_file):
        prepare_file(
            "file1.json",
            """
            {
                "nodes": {"node_name": "some_value"},
                "a": {}
            }
            """,
        )
        prepare_file(
            "file2.json",
            """
            {
                "nodes": {"node_name": "some_other_value"},
                "a": "nah"
            }
            """,
        )
        with pytest.raises(SystemExit):
            NodeDataReader([f"{tmpdir}/file1.json", f"{tmpdir}/file2.json"]).read()

    def test_read_check_against_tree(self, tmpdir, prepare_file):
        prepare_file(
            "file1.json",
            """
            {
                "a": 5,
                "nodes": {
                    "NODE_1": { "x": 5 },
                    "NODE_2": { "x": 6 },
                    "NODE_3": { "x": 7 }
                }
            }
            """,
        )
        prepare_file("tree.newick", "(NODE_1, NODE_2) NODE_3")

        NodeDataReader([f"{tmpdir}/file1.json"], f"{tmpdir}/tree.newick").read()

    def test_read_check_against_tree_bad(self, tmpdir, prepare_file):
        prepare_file(
            "file1.json",
            """
            {
                "a": 5,
                "nodes": {
                    "NODE_1": { "x": 5 },
                    "NODE_2": { "x": 6 },
                    "NODE_3": { "x": 7 }
                }
            }
            """,
        )
        prepare_file("tree.newick", "Noooooooooope")

        with pytest.raises(SystemExit):
            NodeDataReader([f"{tmpdir}/file1.json"], f"{tmpdir}/tree.newick").read()

    def test_read_check_against_missing_tree(self, tmpdir):
        with pytest.raises(SystemExit):
            node_names_from_tree = NodeDataReader(
                [f"{tmpdir}/file1.json"],
                f"{tmpdir}/missing_file.txt"
            ).node_names_from_tree_file