1+ from unittest .mock import patch
2+
13import pytest
2- from geographic_distance import calculate_distance_and_time
4+ from geographic_distance import calculate_distance_and_time , main
35
46
57def test_calculate_distance_and_time ():
@@ -21,15 +23,6 @@ def test_calculate_distance_and_time_invalid_speed():
2123 calculate_distance_and_time (coord1 , coord2 , avg_speed )
2224
2325
24- def test_calculate_distance_and_time_invalid_coordinates ():
25- # Test with invalid coordinates (not tuples)
26- coord1 = "40.7128, -74.006"
27- coord2 = "37.7749, -122.4194"
28- avg_speed = 60
29- with pytest .raises (ValueError ):
30- calculate_distance_and_time (coord1 , coord2 , avg_speed )
31-
32-
3326def test_calculate_distance_and_time_same_coordinates ():
3427 # Test with same coordinates
3528 coord1 = (40.7128 , - 74.006 )
@@ -38,3 +31,42 @@ def test_calculate_distance_and_time_same_coordinates():
3831 distance , travel_time = calculate_distance_and_time (coord1 , coord2 , avg_speed )
3932 assert distance == 0
4033 assert travel_time == 0
34+
35+
36+ @pytest .fixture
37+ def mock_input ():
38+ with patch ('builtins.input' , side_effect = ['40.7128, -74.006' , '37.7749, -122.4194' , '60' ]):
39+ yield
40+
41+
42+ def test_main (mock_input , capsys ):
43+ main ()
44+ captured = capsys .readouterr ()
45+ assert 'Distance between the two coordinates:' in captured .out
46+ assert 'Estimated travel time:' in captured .out
47+
48+
49+ def test_main_invalid_coordinates (mock_input , capsys ):
50+ with patch ('builtins.input' , side_effect = ['abc, def' , '37.7749, -122.4194' , '60' ]):
51+ with pytest .raises (ValueError ):
52+ main ()
53+
54+
55+ def test_main_invalid_speed (mock_input , capsys ):
56+ with patch ('builtins.input' , side_effect = ['40.7128, -74.006' , '37.7749, -122.4194' , 'abc' ]):
57+ with pytest .raises (ValueError ):
58+ main ()
59+
60+
61+ def test_main_zero_speed (mock_input , capsys ):
62+ with patch ('builtins.input' , side_effect = ['40.7128, -74.006' , '37.7749, -122.4194' , '0' ]):
63+ with pytest .raises (ValueError ):
64+ main ()
65+
66+
67+ def test_main_same_coordinates (mock_input , capsys ):
68+ with patch ('builtins.input' , side_effect = ['40.7128, -74.006' , '40.7128, -74.006' , '60' ]):
69+ main ()
70+ captured = capsys .readouterr ()
71+ assert 'Distance between the two coordinates: 0.00 kilometers' in captured .out
72+ assert 'Estimated travel time: 0.00 hours' in captured .out
0 commit comments