Skip to content

Commit 1b7c6ee

Browse files
committed
Adds unit tests for deepskylog_interface
Introduces a suite of unit tests for the deepskylog_interface module. These tests cover successful API calls, error handling for various API failures (authentication, connection, timeout, and malformed JSON), and the magnification calculation functions. This ensures the reliability and robustness of the interface.
1 parent 825899c commit 1b7c6ee

1 file changed

Lines changed: 73 additions & 0 deletions

File tree

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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

Comments
 (0)