1 # Copyright (C) The Arvados Authors. All rights reserved.
3 # SPDX-License-Identifier: Apache-2.0
9 from arvados import api, vocabulary
11 class VocabularyTest(unittest.TestCase):
18 {'label': 'Creature'},
24 {'label': 'Homo sapiens'},
29 {'label': 'Elephant'},
30 {'label': 'Loxodonta'},
38 {'label': 'Importance'},
39 {'label': 'Priority'},
45 {'label': 'High priority'},
51 {'label': 'Medium priority'},
57 {'label': 'Low priority'},
66 self.api = arvados.api('v1')
67 self.voc = vocabulary.Vocabulary(self.EXAMPLE_VOC)
68 self.api.vocabulary = mock.MagicMock(return_value=self.EXAMPLE_VOC)
70 def test_vocabulary_keys(self):
71 self.assertEqual(self.voc.strict_keys, False)
73 self.voc.key_aliases.keys(),
74 set(['idtaganimals', 'creature', 'animal',
75 'idtagimportances', 'importance', 'priority'])
78 vk = self.voc.key_aliases['creature']
79 self.assertEqual(vk.strict, False)
80 self.assertEqual(vk.identifier, 'IDTAGANIMALS')
81 self.assertEqual(vk.aliases, ['Animal', 'Creature'])
82 self.assertEqual(vk.preferred_label, 'Animal')
84 vk.value_aliases.keys(),
85 set(['idvalanimal1', 'human', 'homo sapiens',
86 'idvalanimal2', 'elephant', 'loxodonta'])
89 def test_vocabulary_values(self):
90 vk = self.voc.key_aliases['creature']
91 vv = vk.value_aliases['human']
92 self.assertEqual(vv.identifier, 'IDVALANIMAL1')
93 self.assertEqual(vv.aliases, ['Human', 'Homo sapiens'])
94 self.assertEqual(vv.preferred_label, 'Human')
96 def test_vocabulary_indexing(self):
97 self.assertEqual(self.voc['creature']['human'].identifier, 'IDVALANIMAL1')
98 self.assertEqual(self.voc['Creature']['Human'].identifier, 'IDVALANIMAL1')
99 self.assertEqual(self.voc['CREATURE']['HUMAN'].identifier, 'IDVALANIMAL1')
100 with self.assertRaises(KeyError):
101 inexistant = self.voc['foo']
103 def test_empty_vocabulary(self):
104 voc = vocabulary.Vocabulary({})
105 self.assertEqual(voc.strict_keys, False)
106 self.assertEqual(voc.key_aliases, {})
108 def test_load_vocabulary_with_api(self):
109 voc = vocabulary.load_vocabulary(self.api)
110 self.assertEqual(voc['creature']['human'].identifier, 'IDVALANIMAL1')
111 self.assertEqual(voc['Creature']['Human'].identifier, 'IDVALANIMAL1')
112 self.assertEqual(voc['CREATURE']['HUMAN'].identifier, 'IDVALANIMAL1')
114 def test_convert_to_identifiers(self):
116 {'IDTAGIMPORTANCES': 'IDVALIMPORTANCE1'},
117 {'IDTAGIMPORTANCES': 'High'},
118 {'importance': 'IDVALIMPORTANCE1'},
119 {'priority': 'high priority'},
123 self.voc.convert_to_identifiers(case),
124 {'IDTAGIMPORTANCES': 'IDVALIMPORTANCE1'},
125 "failing test case: {}".format(case)
128 def test_convert_to_identifiers_multiple_pairs(self):
130 {'IDTAGIMPORTANCES': 'IDVALIMPORTANCE1', 'IDTAGANIMALS': 'IDVALANIMAL1'},
131 {'IDTAGIMPORTANCES': 'High', 'IDTAGANIMALS': 'IDVALANIMAL1'},
132 {'importance': 'IDVALIMPORTANCE1', 'animal': 'IDVALANIMAL1'},
133 {'priority': 'high priority', 'animal': 'IDVALANIMAL1'},
137 self.voc.convert_to_identifiers(case),
138 {'IDTAGIMPORTANCES': 'IDVALIMPORTANCE1', 'IDTAGANIMALS': 'IDVALANIMAL1'},
139 "failing test case: {}".format(case)
142 def test_convert_to_identifiers_unknown_key(self):
143 # Non-strict vocabulary
144 self.assertEqual(self.voc.strict_keys, False)
145 self.assertEqual(self.voc.convert_to_identifiers({'foo': 'bar'}), {'foo': 'bar'})
147 strict_voc = arvados.vocabulary.Vocabulary(self.EXAMPLE_VOC)
148 strict_voc.strict_keys = True
149 with self.assertRaises(KeyError):
150 strict_voc.convert_to_identifiers({'foo': 'bar'})
152 def test_convert_to_identifiers_unknown_value(self):
154 self.assertEqual(self.voc['animal'].strict, False)
155 self.assertEqual(self.voc.convert_to_identifiers({'Animal': 'foo'}), {'IDTAGANIMALS': 'foo'})
157 self.assertEqual(self.voc['priority'].strict, True)
158 with self.assertRaises(ValueError):
159 self.voc.convert_to_identifiers({'Priority': 'foo'})
161 def test_convert_to_labels(self):
163 {'IDTAGIMPORTANCES': 'IDVALIMPORTANCE1'},
164 {'IDTAGIMPORTANCES': 'High'},
165 {'importance': 'IDVALIMPORTANCE1'},
166 {'priority': 'high priority'},
170 self.voc.convert_to_labels(case),
171 {'Importance': 'High'},
172 "failing test case: {}".format(case)
175 def test_convert_to_labels_multiple_pairs(self):
177 {'IDTAGIMPORTANCES': 'IDVALIMPORTANCE1', 'IDTAGANIMALS': 'IDVALANIMAL1'},
178 {'IDTAGIMPORTANCES': 'High', 'IDTAGANIMALS': 'IDVALANIMAL1'},
179 {'importance': 'IDVALIMPORTANCE1', 'animal': 'IDVALANIMAL1'},
180 {'priority': 'high priority', 'animal': 'IDVALANIMAL1'},
184 self.voc.convert_to_labels(case),
185 {'Importance': 'High', 'Animal': 'Human'},
186 "failing test case: {}".format(case)
189 def test_convert_to_labels_unknown_key(self):
190 # Non-strict vocabulary
191 self.assertEqual(self.voc.strict_keys, False)
192 self.assertEqual(self.voc.convert_to_labels({'foo': 'bar'}), {'foo': 'bar'})
194 strict_voc = arvados.vocabulary.Vocabulary(self.EXAMPLE_VOC)
195 strict_voc.strict_keys = True
196 with self.assertRaises(KeyError):
197 strict_voc.convert_to_labels({'foo': 'bar'})
199 def test_convert_to_labels_unknown_value(self):
201 self.assertEqual(self.voc['animal'].strict, False)
202 self.assertEqual(self.voc.convert_to_labels({'IDTAGANIMALS': 'foo'}), {'Animal': 'foo'})
204 self.assertEqual(self.voc['priority'].strict, True)
205 with self.assertRaises(ValueError):
206 self.voc.convert_to_labels({'IDTAGIMPORTANCES': 'foo'})