1+ import unittest
2+ from unittest .mock import patch , Mock
3+ import pydeepskylog .deepskylog_interface as dsl
4+
5+ class TestDeepskylogInterface (unittest .TestCase ):
6+ def setUp (self ):
7+ # Clear cache before each test
8+ dsl ._DSL_API_CACHE .clear ()
9+
10+ @patch ('pydeepskylog.deepskylog_interface.requests.get' )
11+ def test_dsl_instruments_success (self , mock_get ):
12+ mock_get .return_value = Mock (
13+ status_code = 200 ,
14+ json = Mock (return_value = {'1' : {'id' : 1 , 'name' : 'Scope' }})
15+ )
16+ result = dsl .dsl_instruments ('user' )
17+ self .assertIn ('1' , result )
18+ self .assertEqual (result ['1' ]['name' ], 'Scope' )
19+
20+ @patch ('pydeepskylog.deepskylog_interface.requests.get' )
21+ def test_dsl_eyepieces_success (self , mock_get ):
22+ mock_get .return_value = Mock (
23+ status_code = 200 ,
24+ json = Mock (return_value = {'2' : {'id' : 2 , 'name' : 'Plossl' }})
25+ )
26+ result = dsl .dsl_eyepieces ('user' )
27+ self .assertIn ('2' , result )
28+ self .assertEqual (result ['2' ]['name' ], 'Plossl' )
29+
30+ @patch ('pydeepskylog.deepskylog_interface.requests.get' )
31+ def test_api_authentication_error (self , mock_get ):
32+ mock_get .return_value = Mock (status_code = 401 , raise_for_status = Mock ())
33+ with self .assertRaises (PermissionError ):
34+ dsl .dsl_instruments ('user' )
35+
36+ @patch ('pydeepskylog.deepskylog_interface.requests.get' )
37+ def test_api_connection_error (self , mock_get ):
38+ mock_get .side_effect = dsl .requests .exceptions .ConnectionError
39+ with self .assertRaises (ConnectionError ):
40+ dsl .dsl_instruments ('user' )
41+
42+ @patch ('pydeepskylog.deepskylog_interface.requests.get' )
43+ def test_api_timeout (self , mock_get ):
44+ mock_get .side_effect = dsl .requests .exceptions .Timeout
45+ with self .assertRaises (ConnectionError ):
46+ dsl .dsl_instruments ('user' )
47+
48+ @patch ('pydeepskylog.deepskylog_interface.requests.get' )
49+ def test_api_malformed_json (self , mock_get ):
50+ mock_get .return_value = Mock (status_code = 200 , json = Mock (side_effect = ValueError ))
51+ with self .assertRaises (RuntimeError ):
52+ dsl .dsl_instruments ('user' )
53+
54+ def test_calculate_magnifications (self ):
55+ instrument = {"fixedMagnification" : None , "diameter" : 100 , "fd" : 8 }
56+ eyepieces = [
57+ {"eyepieceactive" : True , "focal_length_mm" : 20 },
58+ {"eyepieceactive" : False , "focal_length_mm" : 10 },
59+ {"eyepieceactive" : True , "focal_length_mm" : 10 },
60+ ]
61+ mags = dsl .calculate_magnifications (instrument , eyepieces )
62+ self .assertEqual (mags , [40.0 , 80.0 ])
63+
64+ def test_calculate_magnifications_fixed (self ):
65+ instrument = {"fixedMagnification" : 50 , "diameter" : 100 , "fd" : 8 }
66+ eyepieces = [
67+ {"eyepieceactive" : True , "focal_length_mm" : 20 },
68+ ]
69+ mags = dsl .calculate_magnifications (instrument , eyepieces )
70+ self .assertEqual (mags , [50 ])
71+
72+ if __name__ == '__main__' :
73+ unittest .main ()
0 commit comments