Coverage for tests/interfaces/test_interface_routes.py: 100%
57 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-27 22:07 +0000
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-27 22:07 +0000
1from unittest import TestCase
2from unittest.mock import patch, MagicMock
3from webapp.app import app
4from flask import url_for
7class TestIntegrationRoutes(TestCase):
8 def setUp(self):
9 self.app = app
10 self.app.config["TESTING"] = True
11 self.app.config["SERVER_NAME"] = "localhost.localdomain"
12 self.client = self.app.test_client()
13 self.context = self.app.app_context()
14 self.context.push()
16 def tearDown(self):
17 self.context.pop()
19 @patch("webapp.integrations.logic.Interfaces.get_interfaces")
20 @patch("webapp.integrations.logic.github_client.get_repo")
21 def test_get_interfaces(self, mock_get_repo, mock_get_interfaces):
22 mock_get_interfaces.return_value = [
23 {
24 "name": "test_interface",
25 "readme_path": "path/to/readme",
26 "status": "live",
27 }
28 ]
30 mock_repo = MagicMock()
31 mock_content = MagicMock()
32 readme_content = "Mock README content"
33 mock_content.decoded_content.decode.return_value = readme_content
34 mock_repo.get_contents.return_value = mock_content
35 mock_get_repo.return_value = mock_repo
37 response = self.client.get("/integrations.json")
38 self.assertEqual(response.status_code, 200)
39 json_data = response.json
41 self.assertIn("interfaces", json_data)
42 self.assertIsInstance(json_data["interfaces"], list)
44 self.assertEqual(
45 len(json_data["interfaces"]),
46 1,
47 "Expected 1 interface in the response",
48 )
49 if json_data["interfaces"]:
50 first_interface = json_data["interfaces"][0]
51 self.assertEqual(
52 first_interface["name"],
53 "test_interface",
54 "Interface name does not match expected value",
55 )
56 self.assertEqual(
57 first_interface["status"],
58 "live",
59 "Interface status does not match expected value",
60 )
62 @patch("webapp.integrations.views.get_single_interface")
63 def test_single_interface_success(self, mock_get_single_interface):
64 mock_response = MagicMock()
65 mock_response.data.decode.return_value = (
66 '{"interface": {"name": "test_interface"}, "status": "live"}'
67 )
68 mock_get_single_interface.return_value = mock_response
70 response = self.client.get(
71 url_for("integrations.single_interface", path="test_interface")
72 )
74 self.assertEqual(response.status_code, 200)
75 mock_get_single_interface.assert_called_with("test_interface", "")
77 @patch("webapp.integrations.views.get_single_interface")
78 def test_single_interface_draft_redirect(self, mock_get_single_interface):
79 mock_response = MagicMock()
80 mock_response.data.decode.return_value = (
81 '{"name": "test_interface","status": "draft"}'
82 )
83 mock_get_single_interface.return_value = mock_response
85 response = self.client.get(
86 url_for("integrations.single_interface", path="test_interface")
87 )
89 self.assertEqual(response.status_code, 302)
90 self.assertTrue(response.location.endswith("test_interface/draft"))
92 @patch("webapp.integrations.views.get_single_interface")
93 def test_single_interface_not_found(self, mock_get_single_interface):
94 mock_response = MagicMock()
95 mock_response.data.decode.return_value = (
96 '{"other_charms": {"providers": [], "requirers": []}}'
97 )
98 mock_get_single_interface.return_value = mock_response
100 response = self.client.get(
101 url_for(
102 "integrations.single_interface", path="nonexistent_interface"
103 )
104 )
105 self.assertEqual(response.status_code, 404)