1import pytest
2
3from astral import Observer
4
5
6class TestObserver:
7    def test_default(self):
8        obs = Observer()
9        assert obs.latitude == 51.4733
10        assert obs.longitude == -0.0008333
11        assert obs.elevation == 0.0
12
13    def test_from_float(self):
14        obs = Observer(1, 1, 1)
15        assert obs.latitude == 1.0
16        assert obs.longitude == 1.0
17        assert obs.elevation == 1.0
18
19    def test_from_string(self):
20        obs = Observer("1", "2", "3")
21        assert obs.latitude == 1.0
22        assert obs.longitude == 2.0
23        assert obs.elevation == 3.0
24
25    def test_from_dms(self):
26        obs = Observer("24°N", "22°30'S", "3")
27        assert obs.latitude == 24.0
28        assert obs.longitude == -22.5
29        assert obs.elevation == 3.0
30
31    def test_bad_latitude(self):
32        with pytest.raises(ValueError):
33            Observer("o", 1, 1)
34
35    def test_bad_longitude(self):
36        with pytest.raises(ValueError):
37            Observer(1, "o", 1)
38
39    def test_bad_elevation(self):
40        with pytest.raises(ValueError):
41            Observer(1, 1, "o")
42
43    def test_latitude_outside_limits(self):
44        obs = Observer(90.1, 0, 0)
45        assert obs.latitude == 90.0
46        obs = Observer(-90.1, 0, 0)
47        assert obs.latitude == -90.0
48
49    def test_longitude_outside_limits(self):
50        obs = Observer(0, 180.1, 0)
51        assert obs.longitude == 180.0
52        obs = Observer(0, -180.1, 0)
53        assert obs.longitude == -180.0
54