44from astropy .time import Time
55from hermes_core .util import util
66
7+ time = "2024-04-06T12:06:21"
8+ time_formatted = "20240406_120621"
9+
10+
11+ # fmt: off
12+ @pytest .mark .parametrize (
13+ "instrument, time, level, version, result" ,
14+ [
15+ ("eea" , time , "l1" , "1.2.3" , "hermes_eea_l1_{}_v1.2.3.cdf" .format (time_formatted )),
16+ ("merit" , time , "l2" , "2.4.5" , "hermes_mrt_l2_{}_v2.4.5.cdf" .format (time_formatted )),
17+ ("nemisis" , time , "l2" , "1.3.5" , "hermes_nms_l2_{}_v1.3.5.cdf" .format (time_formatted )),
18+ ("spani" , time , "l3" , "2.4.5" , "hermes_spn_l3_{}_v2.4.5.cdf" .format (time_formatted )),
19+ ],
20+ )
21+ def test_science_filename_output_a (instrument , time , level , version , result ):
22+ """Test simple cases with expected output"""
23+ assert (
24+ util .create_science_filename (instrument , time , level = level , version = version )
25+ == result
26+ )
27+ # fmt: on
728
8- def test_science_filename_output ():
9- """Test expected output"""
10- time = "2024-04-06T12:06:21"
11- time_formatted = "20240406_120621"
1229
13- assert util .create_science_filename (
14- "eea" , time , level = "l0" , version = "1.2.3"
15- ) == "hermes_eea_l0_{}_v1.2.3" .format (time_formatted )
16- # merit
17- assert util .create_science_filename (
18- "merit" , time , level = "l2" , version = "2.4.5"
19- ) == "hermes_mrt_l2_{}_v2.4.5" .format (time_formatted )
20- # nemisis and version
21- assert util .create_science_filename (
22- "nemisis" , time , level = "l2" , version = "1.3.5"
23- ) == "hermes_nms_l2_{}_v1.3.5" .format (time_formatted )
24- # spani and level
25- assert util .create_science_filename (
26- "spani" , time , level = "l3" , version = "2.4.5"
27- ) == "hermes_spn_l3_{}_v2.4.5" .format (time_formatted )
30+ def test_science_filename_output_b ():
31+ """Test more complex cases of expected output"""
32+
2833 # mode
2934 assert util .create_science_filename (
3035 "spani" , time , level = "l3" , mode = "2s" , version = "2.4.5"
31- ) == "hermes_spn_2s_l3_{}_v2.4.5" .format (time_formatted )
36+ ) == "hermes_spn_2s_l3_{}_v2.4.5.cdf " .format (time_formatted )
3237 # test
3338 assert util .create_science_filename (
34- "spani" , time , level = "l0 " , version = "2.4.5" , test = True
35- ) == "hermes_spn_l0test_ {}_v2.4.5" .format (time_formatted )
39+ "spani" , time , level = "l1 " , version = "2.4.5" , test = True
40+ ) == "hermes_spn_l1test_ {}_v2.4.5.cdf " .format (time_formatted )
3641 # all options
3742 assert util .create_science_filename (
3843 "spani" ,
@@ -42,7 +47,7 @@ def test_science_filename_output():
4247 descriptor = "burst" ,
4348 version = "2.4.5" ,
4449 test = True ,
45- ) == "hermes_spn_2s_l3test_burst_{}_v2.4.5" .format (time_formatted )
50+ ) == "hermes_spn_2s_l3test_burst_{}_v2.4.5.cdf " .format (time_formatted )
4651 # Time object instead of str
4752 assert util .create_science_filename (
4853 "spani" ,
@@ -52,7 +57,7 @@ def test_science_filename_output():
5257 descriptor = "burst" ,
5358 version = "2.4.5" ,
5459 test = True ,
55- ) == "hermes_spn_2s_l3test_burst_{}_v2.4.5" .format (time_formatted )
60+ ) == "hermes_spn_2s_l3test_burst_{}_v2.4.5.cdf " .format (time_formatted )
5661 # Time object but created differently
5762 assert util .create_science_filename (
5863 "spani" ,
@@ -62,81 +67,7 @@ def test_science_filename_output():
6267 descriptor = "burst" ,
6368 version = "2.4.5" ,
6469 test = True ,
65- ) == "hermes_spn_2s_l3test_burst_{}_v2.4.5" .format (time_formatted )
66-
67-
68- def test_science_filename_exceptions ():
69- """Test for errors"""
70- good_time = "2025-06-02T12:04:01"
71- good_instrument = "eea"
72- good_level = "l0"
73- good_version = "1.3.4"
74- with pytest .raises (ValueError ):
75- # not enough depth to version number
76- util .create_science_filename (
77- good_instrument , good_time , level = good_level , version = "1.3"
78- )
79- util .create_science_filename (
80- good_instrument , good_time , level = good_level , version = "1"
81- )
82- util .create_science_filename (
83- good_instrument , good_time , level = good_level , version = "1.5.6.7"
84- )
85- util .create_science_filename (
86- good_instrument , good_time , level = good_level , version = "1.."
87- )
88- # a letter in version number
89- util .create_science_filename (
90- good_instrument , good_time , level = good_level , version = "a.5.6"
91- )
92-
93- # wrong level specification
94- util .create_science_filename (
95- good_instrument , good_time , level = "la" , version = good_version
96- )
97- util .create_science_filename (
98- good_instrument , good_time , level = "squirrel" , version = good_version
99- )
100-
101- # wrong instrument name
102- util .create_science_filename (
103- "eeb" , good_time , level = good_level , version = good_version
104- )
105- util .create_science_filename (
106- "fpi" , good_time , level = good_level , version = good_version
107- )
108- util .create_science_filename (
109- "potato" , good_time , level = good_level , version = good_version
110- )
111-
112- # bad time string
113- # non-existent time
114- util .create_science_filename (
115- good_instrument ,
116- "2023-13-04T12:06:21" ,
117- level = good_level ,
118- version = good_version ,
119- )
120- # not isot format
121- util .create_science_filename (
122- "eeb" , "2023/13/04 12:06:21" , level = good_level , version = good_version
123- )
124- # not valid input for time
125- util .create_science_filename (
126- "eeb" , time = 12345345 , level = good_level , version = good_version
127- )
128- # _ character in mode
129- util .create_science_filename (
130- "eeb" , time = 12345345 , level = good_level , version = good_version , mode = "o_o"
131- )
132- # _ character in descriptor
133- util .create_science_filename (
134- "eeb" ,
135- time = 12345345 ,
136- level = good_level ,
137- version = good_version ,
138- descriptor = "blue_green" ,
139- )
70+ ) == "hermes_spn_2s_l3test_burst_{}_v2.4.5.cdf" .format (time_formatted )
14071
14172
14273def test_parse_science_filename_output ():
@@ -224,8 +155,8 @@ def test_parse_science_filename_output():
224155 assert util .parse_science_filename (f ) == input
225156
226157
227- def test_parse_science_filename_errors ():
228- """Test for errors"""
158+ def test_parse_science_filename_errors_l1 ():
159+ """Test for errors in l1 and above files """
229160 with pytest .raises (ValueError ):
230161 # wrong mission name
231162 f = "veeger_spn_2s_l3test_burst_20240406_120621_v2.4.5"
@@ -234,3 +165,73 @@ def test_parse_science_filename_errors():
234165 # wrong instrument name
235166 f = "hermes_www_2s_l3test_burst_20240406_120621_v2.4.5"
236167 util .parse_science_filename (f )
168+
169+
170+ good_time = "2025-06-02T12:04:01"
171+ good_instrument = "eea"
172+ good_level = "l1"
173+ good_version = "1.3.4"
174+
175+
176+ # fmt: off
177+ @pytest .mark .parametrize (
178+ "instrument,time,level,version" ,
179+ [
180+ (good_instrument , good_time , good_level , "1.3" ), # bad version specifications
181+ (good_instrument , good_time , good_level , "1" ),
182+ (good_instrument , good_time , good_level , "1.5.6.7" ),
183+ (good_instrument , good_time , good_level , "1.." ),
184+ (good_instrument , good_time , good_level , "a.5.6" ),
185+ (good_instrument , good_time , "la" , good_version ), # wrong level specifications
186+ (good_instrument , good_time , "squirrel" , good_version ),
187+ (good_instrument , good_time , "l0" , good_version ),
188+ ("potato" , good_time , good_level , good_version ), # wrong instrument names
189+ ("eeb" , good_time , good_level , good_version ),
190+ ("fpi" , good_time , good_level , good_version ),
191+ (good_instrument , "2023-13-04T12:06:21" , good_level , good_version ), # non-existent time
192+ (good_instrument , "2023/13/04 12:06:21" , good_level , good_version ), # not isot format
193+ (good_instrument , "2023/13/04 12:06:21" , good_level , good_version ), # not isot format
194+ (good_instrument , "12345345" , good_level , good_version ), # not valid input for time
195+ ]
196+ )
197+ def test_science_filename_errors_l1_a (instrument , time , level , version ):
198+ """"""
199+ with pytest .raises (ValueError ) as e :
200+ util .create_science_filename (
201+ instrument , time , level = level , version = version
202+ )
203+ # fmt: on
204+
205+
206+ def test_science_filename_errors_l1_b ():
207+ with pytest .raises (ValueError ):
208+ # _ character in mode
209+ util .create_science_filename (
210+ "eeb" , time = "12345345" , level = good_level , version = good_version , mode = "o_o"
211+ )
212+ with pytest .raises (ValueError ):
213+ # _ character in descriptor
214+ util .create_science_filename (
215+ "eeb" ,
216+ time = "12345345" ,
217+ level = good_level ,
218+ version = good_version ,
219+ descriptor = "blue_green" ,
220+ )
221+
222+
223+ # fmt: off
224+ @pytest .mark .parametrize ("filename,instrument,time,level,version" , [
225+ ("hermes_MAG_l0_2024094-124603_v01.bin" , "nemisis" , "2024-04-03T12:46:03" , "l0" , "01" ),
226+ ("hermes_EEA_l0_2026337-124603_v11.bin" , "eea" , "2026-12-03T12:46:03" , "l0" , "11" ),
227+ ("hermes_MERIT_l0_2026215-124603_v21.bin" , "merit" , "2026-08-03T12:46:03" , "l0" , "21" ),
228+ ("hermes_SPANI_l0_2026337-065422_v11.bin" , "spani" , "2026-12-03T06:54:22" , "l0" , "11" ),
229+ ])
230+ def test_parse_l0_filenames (filename , instrument , time , level , version ):
231+ """Testing parsing of MOC-generated level 0 files."""
232+ result = util .parse_science_filename (filename )
233+ assert result ['instrument' ] == instrument
234+ assert result ['level' ] == level
235+ assert result ['version' ] == version
236+ assert result ['time' ] == Time (time )
237+ # fmt: on
0 commit comments