Coverage for mindsdb / integrations / handlers / ckan_handler / tests / test_ckan_handler.py: 0%
58 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-21 00:36 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-21 00:36 +0000
1import unittest
2from unittest.mock import patch, MagicMock
3from mindsdb.integrations.handlers.ckan_handler.ckan_handler import CkanHandler
4from mindsdb.api.executor.data_types.response_type import RESPONSE_TYPE
5from mindsdb_sql_parser import ast
8class CkanHandlerTest(unittest.TestCase):
9 def setUp(self):
10 self.handler = CkanHandler('test_ckan_handler', connection_data={
11 "url": "http://mock-ckan-url.com",
12 "api_key": "mock_api_key"
13 })
14 self.patcher = patch('mindsdb.integrations.handlers.ckan_handler.ckan_handler.RemoteCKAN')
15 self.mock_ckan = self.patcher.start()
16 self.mock_ckan_instance = MagicMock()
17 self.mock_ckan.return_value = self.mock_ckan_instance
19 def tearDown(self):
20 self.patcher.stop()
22 def test_check_connection(self):
23 self.mock_ckan_instance.action.site_read.return_value = True
24 response = self.handler.check_connection()
25 self.assertTrue(response.success)
27 def test_get_tables(self):
28 self.mock_ckan_instance.action.package_list.return_value = [
29 "package1",
30 "package2",
31 ]
32 result = self.handler.get_tables()
33 self.assertIsNotNone(result)
34 self.assertEqual(result.type, RESPONSE_TYPE.TABLE)
36 def test_query_package_ids(self):
37 mock_packages = [
38 {
39 "id": "pkg1",
40 "name": "Package 1",
41 "title": "Test Package 1",
42 "num_resources": 2,
43 },
44 {
45 "id": "pkg2",
46 "name": "Package 2",
47 "title": "Test Package 2",
48 "num_resources": 1,
49 },
50 ]
51 self.mock_ckan_instance.action.package_search.return_value = {
52 "results": mock_packages
53 }
55 query = ast.Select(
56 targets=[ast.Star()],
57 from_table=ast.Identifier("package_ids"),
58 limit=ast.Constant(10),
59 )
60 result = self.handler.query(query)
61 self.assertEqual(result.type, RESPONSE_TYPE.TABLE)
62 self.assertEqual(len(result.data_frame), 2)
64 def test_query_resource_ids(self):
65 mock_packages = [
66 {
67 "id": "pkg1",
68 "resources": [
69 {
70 "id": "res1",
71 "name": "Resource 1",
72 "format": "CSV",
73 "datastore_active": True,
74 },
75 {
76 "id": "res2",
77 "name": "Resource 2",
78 "format": "XSLX",
79 "datastore_active": False,
80 },
81 ],
82 },
83 {
84 "id": "pkg2",
85 "resources": [
86 {
87 "id": "res3",
88 "name": "Resource 3",
89 "format": "CSV",
90 "datastore_active": True,
91 }
92 ],
93 },
94 ]
95 self.mock_ckan_instance.action.package_search.return_value = {
96 "results": mock_packages
97 }
99 query = ast.Select(
100 targets=[ast.Star()],
101 from_table=ast.Identifier("resource_ids"),
102 limit=ast.Constant(10),
103 )
104 result = self.handler.query(query)
105 self.assertEqual(result.type, RESPONSE_TYPE.TABLE)
106 self.assertEqual(len(result.data_frame), 2)
108 def test_query_datastore_without_resource_id(self):
109 query = ast.Select(
110 targets=[ast.Star()],
111 from_table=ast.Identifier("datastore"),
112 limit=ast.Constant(10),
113 )
114 result = self.handler.query(query)
115 self.assertEqual(result.type, RESPONSE_TYPE.TABLE)
116 self.assertEqual(len(result.data_frame), 1)
117 self.assertIn("message", result.data_frame.columns)
119 def test_query_datastore_with_resource_id(self):
120 mock_records = [
121 {"id": 1, "name": "Record 1"},
122 {"id": 2, "name": "Record 2"},
123 {"id": 3, "name": "Record 3"},
124 ]
125 self.mock_ckan_instance.action.datastore_search.return_value = {
126 "records": mock_records
127 }
129 query = ast.Select(
130 targets=[ast.Star()],
131 from_table=ast.Identifier("datastore"),
132 where=ast.BinaryOperation(
133 "=",
134 args=[ast.Identifier("resource_id"), ast.Constant("test_resource_id")],
135 ),
136 limit=ast.Constant(10),
137 )
138 result = self.handler.query(query)
139 self.assertEqual(result.type, RESPONSE_TYPE.TABLE)
140 self.assertEqual(len(result.data_frame), 3)
142 def test_native_query(self):
143 self.mock_ckan_instance.action.package_list.return_value = [
144 "package1",
145 "package2",
146 "package3",
147 ]
149 query = "package_list:"
150 result = self.handler.native_query(query)
151 self.assertEqual(result.type, RESPONSE_TYPE.TABLE)
152 self.assertEqual(len(result.data_frame), 3)
155if __name__ == "__main__":
156 unittest.main()