Coverage for tests/test_decorators.py: 93%

43 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-27 22:07 +0000

1import unittest 

2from unittest.mock import Mock, patch 

3 

4from webapp.decorators import redirect_uppercase_to_lowercase 

5 

6 

7class TestDecorators(unittest.TestCase): 

8 def setUp(self): 

9 self.mock_get_env = patch("webapp.decorators.os.getenv").start() 

10 self.mock_flask = patch("webapp.decorators.flask").start() 

11 

12 def tearDown(self): 

13 patch.stopall() 

14 

15 def test_redirect_uppercase_to_lowercase_random_url(self): 

16 """ 

17 Test that the decorator redirects the path to lowercase 

18 """ 

19 self.mock_flask.request.url.lower.return_value = ( 

20 "http://example.com/test" 

21 ) 

22 self.mock_flask.abort.return_value = Mock() 

23 self.mock_get_env.return_value = "devel" 

24 

25 @redirect_uppercase_to_lowercase 

26 def test_func(entity_name): 

27 pass 

28 

29 test_func(entity_name="Test") 

30 

31 self.assertEqual(self.mock_flask.redirect.called, False) 

32 self.assertEqual(self.mock_flask.abort.called, True) 

33 

34 def test_redirect_uppercase_to_lowercase_localhost(self): 

35 """ 

36 Test that the decorator redirects the path to lowercase 

37 """ 

38 self.mock_flask.request.url.lower.return_value = ( 

39 "http://localhost:1234/test" 

40 ) 

41 self.mock_get_env.return_value = "devel" 

42 

43 @redirect_uppercase_to_lowercase 

44 def test_func(entity_name): 

45 pass 

46 

47 test_func(entity_name="Test") 

48 self.mock_flask.redirect.assert_called_once_with( 

49 "http://localhost:1234/test" 

50 ) 

51 

52 def test_redirect_uppercase_to_lowercase_staging(self): 

53 """ 

54 Test that the decorator redirects the path to lowercase 

55 """ 

56 self.mock_flask.request.url.lower.return_value = ( 

57 "https://staging.charmhub.io/test" 

58 ) 

59 self.mock_get_env.return_value = "staging" 

60 

61 @redirect_uppercase_to_lowercase 

62 def test_func(entity_name): 

63 pass 

64 

65 test_func(entity_name="Test") 

66 self.mock_flask.redirect.assert_called_once_with( 

67 "https://staging.charmhub.io/test" 

68 ) 

69 

70 def test_redirect_uppercase_to_lowercase_production(self): 

71 """ 

72 Test that the decorator redirects the path to lowercase 

73 """ 

74 self.mock_flask.request.url.lower.return_value = ( 

75 "https://charmhub.io/test" 

76 ) 

77 self.mock_get_env.return_value = "production" 

78 

79 @redirect_uppercase_to_lowercase 

80 def test_func(entity_name): 

81 pass 

82 

83 test_func(entity_name="Test") 

84 self.mock_flask.redirect.assert_called_once_with( 

85 "https://charmhub.io/test" 

86 )