aboutsummaryrefslogtreecommitdiff
path: root/backend/tests/test_gen_reduced_trees.py
blob: 99cbd92d4fcfb137b3dde54b118cb7ed7a3b421e (plain)
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
import unittest
import tempfile
import os

from tests.common import createTestFile, createTestDbTable, readTestDbTable
from tol_data.gen_reduced_trees import genData

class TestGenData(unittest.TestCase):
	def test_gen(self):
		with tempfile.TemporaryDirectory() as tempDir:
			# Create temp tree-of-life db
				# Test tree (P/I/L/D means picked/image/linked_image/desc):
					# one -> two -> threeI -> four
					#            -> fiveP
					#     -> [seven + eight] -> sevenD
					#                        -> eightP
					#     -> nine -> tenI
					#     -> elevenL
			dbFile = os.path.join(tempDir, 'data.db')
			createTestDbTable(
				dbFile,
				'CREATE TABLE nodes (name TEXT PRIMARY KEY, id TEXT UNIQUE, tips INT)',
				'INSERT INTO nodes VALUES (?, ?, ?)',
				{
					('one', 'ott1', 6),
					('two', 'ott2', 2),
					('three', 'ott3', 1),
					('four', 'ott4', 1),
					('five', 'ott5', 1),
					('[seven + eight]', 'ott6', 2),
					('seven', 'ott7', 1),
					('eight', 'ott8', 1),
					('nine', 'ott9', 1),
					('ten', 'ott10', 1),
					('eleven', 'ott11', 1),
				}
			)
			createTestDbTable(
				dbFile,
				'CREATE TABLE edges (parent TEXT, child TEXT, p_support INT, PRIMARY KEY (parent, child))',
				'INSERT INTO edges VALUES (?, ?, ?)',
				{
					('one', 'two', 1),
					('two', 'three', 1),
					('three', 'four', 0),
					('two', 'five', 0),
					('one', '[seven + eight]', 1),
					('[seven + eight]', 'seven', 0),
					('[seven + eight]', 'eight', 1),
					('one', 'nine', 1),
					('nine', 'ten', 0),
					('one', 'eleven', 1),
				}
			)
			createTestDbTable(
				dbFile,
				'CREATE TABLE names(name TEXT, alt_name TEXT, pref_alt INT, src TEXT, PRIMARY KEY(name, alt_name))',
				'INSERT INTO names VALUES (?, ?, ?, ?)',
				{
					('eight', 'VIII', 1, 'eol'),
				}
			)
			createTestDbTable(
				dbFile,
				'CREATE TABLE wiki_ids (name TEXT PRIMARY KEY, id INT)',
				'INSERT INTO wiki_ids VALUES (?, ?)',
				{
					('seven', 10),
				}
			)
			createTestDbTable(
				dbFile,
				'CREATE TABLE descs (wiki_id INT PRIMARY KEY, desc TEXT, from_dbp INT)',
				'INSERT INTO descs VALUES (?, ?, ?)',
				{
					(10, 'Seven prefers orange juice', 1),
				}
			)
			createTestDbTable(
				dbFile,
				'CREATE TABLE node_imgs (name TEXT PRIMARY KEY, img_id INT, src TEXT)',
				'INSERT INTO node_imgs VALUES (?, ?, ?)',
				{
					('three', 1, 'eol'),
					('ten', 10, 'enwiki'),
				}
			)
			createTestDbTable(
				dbFile,
				'CREATE TABLE linked_imgs (name TEXT PRIMARY KEY, otol_ids TEXT)',
				'INSERT INTO linked_imgs VALUES (?, ?)',
				{
					('eleven', 'ott3'),
				}
			)
			# Create temp picked-nodes file
			pickedNodesFile = os.path.join(tempDir, 'picked_nodes.txt')
			createTestFile(pickedNodesFile, (
				'five\n'
				'VIII\n'
			))

			# Run
			genData(None, dbFile, pickedNodesFile)

			# Check
			self.assertEqual(
				readTestDbTable(dbFile, 'SELECT name, id, tips from nodes_p'),
				{
					('one', 'ott1', 3),
					('five', 'ott5', 1),
					('eight', 'ott8', 1),
					('eleven', 'ott11', 1),
				}
			)
			self.assertEqual(
				readTestDbTable(dbFile, 'SELECT parent, child, p_support from edges_p'),
				{
					('one', 'five', 0),
					('one', 'eight', 1),
					('one', 'eleven', 1),
				}
			)
			self.assertEqual(
				readTestDbTable(dbFile, 'SELECT name, id, tips from nodes_i'),
				{
					('one', 'ott1', 4),
					('two', 'ott2', 2),
					('three', 'ott3', 1),
					('five', 'ott5', 1),
					('eight', 'ott8', 1),
					('ten', 'ott10', 1),
				}
			)
			self.assertEqual(
				readTestDbTable(dbFile, 'SELECT parent, child, p_support from edges_i'),
				{
					('one', 'two', 1),
					('two', 'three', 1),
					('two', 'five', 0),
					('one', 'eight', 1),
					('one', 'ten', 0),
				}
			)
			self.assertEqual(
				readTestDbTable(dbFile, 'SELECT name, id, tips from nodes_t'),
				{
					('one', 'ott1', 5),
					('two', 'ott2', 2),
					('three', 'ott3', 1),
					('five', 'ott5', 1),
					('[seven + eight]', 'ott6', 2),
					('seven', 'ott7', 1),
					('eight', 'ott8', 1),
					('ten', 'ott10', 1),
				}
			)
			self.assertEqual(
				readTestDbTable(dbFile, 'SELECT parent, child, p_support from edges_t'),
				{
					('one', 'two', 1),
					('two', 'three', 1),
					('two', 'five', 0),
					('one', '[seven + eight]', 1),
					('[seven + eight]', 'seven', 0),
					('[seven + eight]', 'eight', 1),
					('one', 'ten', 0),
				}
			)