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

1from unittest.mock import patch 

2 

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 

7 

8 

9def mocked_requests_get(*args, **kwargs): 

10 return MockResponse(url=kwargs.get('url')) 

11 

12 

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 

27 

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 ] 

52 

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 } 

74 

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' 

78 

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' 

82 

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' 

93 

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' 

104 

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 ] 

172 

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 }, 

239 

240 ] 

241 

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