Coverage for test / test_vars_annotation_processor.py: 100%
56 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-23 05:22 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-23 05:22 +0000
1from unittest.mock import patch
3from application.vars.vars_annotation_processor import VarsAnnotationProcessor
4from application.util.functions import parse_datetime
5from test.data.vars_responses import ex_23060001
6from test.util.mock_response import MockResponse
9def mocked_requests_get(*args, **kwargs):
10 return MockResponse(url=kwargs.get('url'))
13class TestVarsAnnotationProcessor:
14 def test_init(self):
15 annotation_processor = VarsAnnotationProcessor(
16 sequence_names=['Deep Discoverer 23060001'],
17 vars_charybdis_url=MockResponse.VARS_CHARYBDIS_URL,
18 vars_kb_url=MockResponse.VARS_KB_URL,
19 )
20 assert annotation_processor.vessel_name == 'Deep Discoverer'
21 assert annotation_processor.sequence_names == ['Deep Discoverer 23060001']
22 assert annotation_processor.highest_id_ref == 0
23 assert annotation_processor.videos == []
24 assert annotation_processor.working_records == []
25 assert annotation_processor.final_records == []
26 assert len(annotation_processor.phylogeny.data.keys()) > 0
28 @patch('requests.get', side_effect=mocked_requests_get)
29 def test_fetch_media(self, mock_get):
30 annotation_processor = VarsAnnotationProcessor(
31 sequence_names=['Deep Discoverer 23060001'],
32 vars_charybdis_url=MockResponse.VARS_CHARYBDIS_URL,
33 vars_kb_url=MockResponse.VARS_KB_URL,
34 )
35 annotation_processor.process_sequences()
36 assert annotation_processor.videos == [
37 {
38 'start_timestamp': parse_datetime('2023-08-24T18:30:00Z'),
39 'uri': 'https://hurlvideo.soest.hawaii.edu/D2/2023/EX2306_01/EX2306_01_20230824T183000Z.m4v',
40 'sequence_name': 'Deep Discoverer 23060001',
41 'video_reference_uuid': 'dda3dc62-9f78-4dbb-91cd-5015026e0434',
42 'duration_millis': 7199993,
43 },
44 {
45 'start_timestamp': parse_datetime('2023-08-24T20:30:00Z'),
46 'uri': 'https://hurlvideo.soest.hawaii.edu/D2/2023/EX2306_01/EX2306_01_20230824T203000Z.m4v',
47 'sequence_name': 'Deep Discoverer 23060001',
48 'video_reference_uuid': 'd955c4ef-94e0-4f0d-83f5-d0144a09a933',
49 'duration_millis': 7199993,
50 },
51 ]
53 # TODO move to PhylogenyCache test
54 @patch('requests.get', side_effect=mocked_requests_get)
55 def test_fetch_vars_phylogeny(self, mock_get):
56 annotation_processor = VarsAnnotationProcessor(
57 sequence_names=['Deep Discoverer 23060001'],
58 vars_charybdis_url=MockResponse.VARS_CHARYBDIS_URL,
59 vars_kb_url=MockResponse.VARS_KB_URL,
60 )
61 annotation_processor.phylogeny.fetch_vars(
62 concept_name='Pomacentridae',
63 vars_kb_url=MockResponse.VARS_KB_URL,
64 no_match_records=set()
65 )
66 assert annotation_processor.phylogeny.data['Pomacentridae'] == {
67 'phylum': 'Chordata',
68 'subphylum': 'Vertebrata',
69 'superclass': 'Pisces',
70 'class': 'Actinopterygii',
71 'order': 'Perciformes',
72 'family': 'Pomacentridae',
73 }
75 def test_get_image_url_only_one(self): # only one image to choose from
76 assert VarsAnnotationProcessor.get_image_url(ex_23060001['annotations'][1]) \
77 == 'https://hurlimage.soest.hawaii.edu/SupplementalPhotos/Hphotos/NA138photos/H1920/cam1_20220419064757.png'
79 def test_get_image_url_png(self): # multiple images to choose from, get the png
80 assert VarsAnnotationProcessor.get_image_url(ex_23060001['annotations'][0]) \
81 == 'https://hurlimage.soest.hawaii.edu/Hercules/images/1381920/20220418T202402.015Z--542830a8-ec69-4ee5-a57d-9de66a412dba.png'
83 @patch('requests.get', side_effect=mocked_requests_get)
84 def test_get_video(self, mock_get):
85 annotation_processor = VarsAnnotationProcessor(
86 sequence_names=['Deep Discoverer 23060001'],
87 vars_charybdis_url=MockResponse.VARS_CHARYBDIS_URL,
88 vars_kb_url=MockResponse.VARS_KB_URL,
89 )
90 annotation_processor.process_sequences()
91 assert annotation_processor.get_video(ex_23060001['annotations'][0])['uri'] \
92 == 'https://hurlvideo.soest.hawaii.edu/D2/2023/EX2306_01/EX2306_01_20230824T183000Z.m4v#t=374'
94 @patch('requests.get', side_effect=mocked_requests_get)
95 def test_get_video_url_second_media(self, mock_get):
96 annotation_processor = VarsAnnotationProcessor(
97 sequence_names=['Deep Discoverer 23060001'],
98 vars_charybdis_url=MockResponse.VARS_CHARYBDIS_URL,
99 vars_kb_url=MockResponse.VARS_KB_URL,
100 )
101 annotation_processor.process_sequences()
102 assert annotation_processor.get_video(ex_23060001['annotations'][1])['uri'] \
103 == 'https://hurlvideo.soest.hawaii.edu/D2/2023/EX2306_01/EX2306_01_20230824T203000Z.m4v#t=3505'
105 @patch('requests.get', side_effect=mocked_requests_get)
106 def test_process_images(self, mock_get):
107 annotation_processor = VarsAnnotationProcessor(
108 sequence_names=['Deep Discoverer 23060001'],
109 vars_charybdis_url=MockResponse.VARS_CHARYBDIS_URL,
110 vars_kb_url=MockResponse.VARS_KB_URL,
111 )
112 annotation_processor.process_sequences()
113 assert annotation_processor.process_working_records() == [
114 {
115 'observation_uuid': '0059f860-4799-485f-c06c-5830e5ddd31e',
116 'concept': 'Pomacentridae',
117 'associations': ex_23060001['annotations'][0]['associations'],
118 'identity_reference': '12',
119 'image_url': 'https://hurlimage.soest.hawaii.edu/Hercules/images/1381920/20220418T202402.015Z--542830a8-ec69-4ee5-a57d-9de66a412dba.png',
120 'video_url': 'https://hurlvideo.soest.hawaii.edu/D2/2023/EX2306_01/EX2306_01_20230824T183000Z.m4v#t=374',
121 'recorded_timestamp': '2023-08-24T18:36:14.245Z',
122 'video_sequence_name': 'Deep Discoverer 23060001',
123 'annotator': 'Nikki Cunanan',
124 'depth': 668,
125 'phylum': 'Chordata',
126 'subphylum': 'Vertebrata',
127 'superclass': 'Pisces',
128 'class': 'Actinopterygii',
129 'order': 'Perciformes',
130 'family': 'Pomacentridae',
131 'activity': None,
132 },
133 {
134 'observation_uuid': '0d9133d7-1d49-47d5-4b6d-6e4fb25dd41e',
135 'concept': 'Pomacentridae',
136 'associations': ex_23060001['annotations'][1]['associations'],
137 'identity_reference': '13',
138 'image_url': 'https://hurlimage.soest.hawaii.edu/SupplementalPhotos/Hphotos/NA138photos/H1920/cam1_20220419064757.png',
139 'video_url': 'https://hurlvideo.soest.hawaii.edu/D2/2023/EX2306_01/EX2306_01_20230824T203000Z.m4v#t=3505',
140 'recorded_timestamp': '2023-08-24T21:28:25.675Z',
141 'video_sequence_name': 'Deep Discoverer 23060001',
142 'annotator': 'Meagan Putts',
143 'depth': 668,
144 'phylum': 'Chordata',
145 'subphylum': 'Vertebrata',
146 'superclass': 'Pisces',
147 'class': 'Actinopterygii',
148 'order': 'Perciformes',
149 'family': 'Pomacentridae',
150 'activity': 'cruise',
151 },
152 {
153 'observation_uuid': '0059f860-4799-485f-c06c-asdfasdfadsf',
154 'concept': 'Pomacentridae',
155 'identity_reference': '12',
156 'associations': ex_23060001['annotations'][5]['associations'],
157 'annotator': 'Nikki Cunanan',
158 'depth': 668,
159 'phylum': 'Chordata',
160 'subphylum': 'Vertebrata',
161 'superclass': 'Pisces',
162 'class': 'Actinopterygii',
163 'order': 'Perciformes',
164 'family': 'Pomacentridae',
165 'image_url': 'https://hurlimage.soest.hawaii.edu/Hercules/images/1381920/20220418T202402.015Z--542830a8-ec69-4ee5-a57d-9de66a412dba.png',
166 'video_url': 'https://hurlvideo.soest.hawaii.edu/D2/2023/EX2306_01/EX2306_01_20230824T183000Z.m4v#t=913',
167 'recorded_timestamp': '2023-08-24T18:45:13Z',
168 'video_sequence_name': 'Deep Discoverer 23060001',
169 'activity': None,
170 },
171 ]
173 @patch('requests.get', side_effect=mocked_requests_get)
174 def test_sort_records(self, mock_get):
175 annotation_processor = VarsAnnotationProcessor(
176 sequence_names=['Deep Discoverer 23060001'],
177 vars_charybdis_url=MockResponse.VARS_CHARYBDIS_URL,
178 vars_kb_url=MockResponse.VARS_KB_URL,
179 )
180 annotation_processor.process_sequences()
181 assert annotation_processor.final_records == [
182 {
183 'observation_uuid': '0059f860-4799-485f-c06c-5830e5ddd31e',
184 'concept': 'Pomacentridae',
185 'identity_reference': '12',
186 'associations': ex_23060001['annotations'][0]['associations'],
187 'annotator': 'Nikki Cunanan',
188 'depth': 668,
189 'phylum': 'Chordata',
190 'class': 'Actinopterygii',
191 'order': 'Perciformes',
192 'family': 'Pomacentridae',
193 'genus': None,
194 'species': None,
195 'image_url': 'https://hurlimage.soest.hawaii.edu/Hercules/images/1381920/20220418T202402.015Z--542830a8-ec69-4ee5-a57d-9de66a412dba.png',
196 'video_url': 'https://hurlvideo.soest.hawaii.edu/D2/2023/EX2306_01/EX2306_01_20230824T183000Z.m4v#t=374',
197 'recorded_timestamp': '24 Aug 23 18:36:14 UTC',
198 'video_sequence_name': 'Deep Discoverer 23060001',
199 'activity': None,
200 },
201 {
202 'observation_uuid': '0059f860-4799-485f-c06c-asdfasdfadsf',
203 'concept': 'Pomacentridae',
204 'identity_reference': '12',
205 'associations': ex_23060001['annotations'][5]['associations'],
206 'annotator': 'Nikki Cunanan',
207 'depth': 668,
208 'phylum': 'Chordata',
209 'class': 'Actinopterygii',
210 'order': 'Perciformes',
211 'family': 'Pomacentridae',
212 'genus': None,
213 'species': None,
214 'image_url': 'https://hurlimage.soest.hawaii.edu/Hercules/images/1381920/20220418T202402.015Z--542830a8-ec69-4ee5-a57d-9de66a412dba.png',
215 'video_url': 'https://hurlvideo.soest.hawaii.edu/D2/2023/EX2306_01/EX2306_01_20230824T183000Z.m4v#t=913',
216 'recorded_timestamp': '24 Aug 23 18:45:13 UTC',
217 'video_sequence_name': 'Deep Discoverer 23060001',
218 'activity': None,
219 },
220 {
221 'observation_uuid': '0d9133d7-1d49-47d5-4b6d-6e4fb25dd41e',
222 'concept': 'Pomacentridae',
223 'associations': ex_23060001['annotations'][1]['associations'],
224 'identity_reference': '13',
225 'annotator': 'Meagan Putts',
226 'depth': 668,
227 'phylum': 'Chordata',
228 'class': 'Actinopterygii',
229 'order': 'Perciformes',
230 'family': 'Pomacentridae',
231 'genus': None,
232 'species': None,
233 'image_url': 'https://hurlimage.soest.hawaii.edu/SupplementalPhotos/Hphotos/NA138photos/H1920/cam1_20220419064757.png',
234 'video_url': 'https://hurlvideo.soest.hawaii.edu/D2/2023/EX2306_01/EX2306_01_20230824T203000Z.m4v#t=3505',
235 'recorded_timestamp': '24 Aug 23 21:28:25 UTC',
236 'video_sequence_name': 'Deep Discoverer 23060001',
237 'activity': 'cruise',
238 },
240 ]
242 @patch('requests.get', side_effect=mocked_requests_get)
243 def test_find_highest_id_refs(self, mock_get):
244 annotation_processor = VarsAnnotationProcessor(
245 sequence_names=['Deep Discoverer 23060001'],
246 vars_charybdis_url=MockResponse.VARS_CHARYBDIS_URL,
247 vars_kb_url=MockResponse.VARS_KB_URL,
248 )
249 annotation_processor.process_sequences()
250 assert annotation_processor.highest_id_ref == 13