77"""
88
99import re
10+ import os
1011import pytest
1112import pandas as pd
1213from unittest .mock import patch
2021 pystackql_test_setup
2122)
2223
23- @pytest .mark .usefixtures ("stackql_server" )
24+ # @pytest.mark.usefixtures("stackql_server")
2425class TestServerMode :
2526 """Tests for PyStackQL server mode functionality."""
2627
2728 StackQL = StackQL # For use with pystackql_test_setup decorator
28-
29+ server_available = False # Class-level flag to track server availability
30+
31+ # @pystackql_test_setup(server_mode=True)
32+ # def test_server_mode_connectivity(self):
33+ # """Test that server mode connects successfully."""
34+ # # Check server_mode flag is set correctly
35+ # assert self.stackql.server_mode, "StackQL should be in server mode"
36+
37+ # # Check server connection object exists
38+ # assert hasattr(self.stackql, 'server_connection'), "StackQL should have a server_connection attribute"
39+ # assert self.stackql.server_connection is not None, "Server connection object should not be None"
40+
41+ # # IMPORTANT: Actually test the connection works
42+ # connection_working = self.stackql.test_connection()
43+
44+ # # Print detailed results for debugging
45+ # if not connection_working:
46+ # print("⚠️ Server connection test failed: unable to execute a simple query")
47+ # print(f"Server address: {self.stackql.server_address}")
48+ # print(f"Server port: {self.stackql.server_port}")
49+ # print("\n❌ SERVER CONNECTION FAILED - SKIPPING REMAINING SERVER TESTS")
50+ # else:
51+ # # Set flag indicating server is available
52+ # TestServerMode.server_available = True
53+
54+ # print_test_result("Server mode connectivity test",
55+ # self.stackql.server_mode and
56+ # hasattr(self.stackql, 'server_connection') and
57+ # self.stackql.server_connection is not None and
58+ # connection_working, # Include connection check in the pass criteria
59+ # True)
60+
61+ # # Add additional output about the actual connection status
62+ # print(f" - Connection status: {'✅ WORKING' if connection_working else '❌ NOT WORKING'}")
63+ # print(f" - Expected status: ✅ WORKING") # Always expected to be working
64+
65+ # # Always assert that the connection is working
66+ # assert connection_working, "Server connection should be working"
67+
2968 @pystackql_test_setup (server_mode = True )
3069 def test_server_mode_connectivity (self ):
3170 """Test that server mode connects successfully."""
32- assert self .stackql .server_mode , "StackQL should be in server mode"
33- # Updated assertion to check server_connection attribute instead of _conn
34- assert hasattr (self .stackql , 'server_connection' ), "StackQL should have a server_connection attribute"
35- assert self .stackql .server_connection is not None , "Server connection object should not be None"
36-
37- print_test_result ("Server mode connectivity test" ,
38- self .stackql .server_mode and
39- hasattr (self .stackql , 'server_connection' ) and
40- self .stackql .server_connection is not None ,
41- True )
42-
71+ # Initialize class variable
72+ TestServerMode .server_available = False
73+
74+ # Perform basic server connection test
75+ connection_working = self .stackql .test_connection ()
76+
77+ if not connection_working :
78+ # Log minimal diagnostic info
79+ print ("\n ⚠️ Server connection failed" )
80+ print (f"Address: { self .stackql .server_address } :{ self .stackql .server_port } " )
81+ print ("❌ Skipping remaining server tests" )
82+
83+ # Fail with a concise message - this will be what shows in the error summary
84+ pytest .fail ("Server connection failed - please start stackql server" )
85+
86+ # Connection succeeded
87+ TestServerMode .server_available = True
88+ print ("✅ Server connection successful" )
89+
4390 @pystackql_test_setup (server_mode = True )
4491 def test_server_mode_execute_stmt (self ):
4592 """Test executeStmt in server mode."""
93+
94+ # Skip if server is not available
95+ if not TestServerMode .server_available :
96+ pytest .skip ("Server is not available, skipping test" )
97+
4698 result = self .stackql .executeStmt (REGISTRY_PULL_HOMEBREW_QUERY )
4799
48100 # Check result structure
@@ -60,6 +112,11 @@ def test_server_mode_execute_stmt(self):
60112 @pystackql_test_setup (server_mode = True , output = 'pandas' )
61113 def test_server_mode_execute_stmt_pandas (self ):
62114 """Test executeStmt in server mode with pandas output."""
115+
116+ # Skip if server is not available
117+ if not TestServerMode .server_available :
118+ pytest .skip ("Server is not available, skipping test" )
119+
63120 result = self .stackql .executeStmt (REGISTRY_PULL_HOMEBREW_QUERY )
64121
65122 # Check result structure
@@ -77,6 +134,11 @@ def test_server_mode_execute_stmt_pandas(self):
77134 @pystackql_test_setup (server_mode = True )
78135 def test_server_mode_execute (self ):
79136 """Test execute in server mode."""
137+
138+ # Skip if server is not available
139+ if not TestServerMode .server_available :
140+ pytest .skip ("Server is not available, skipping test" )
141+
80142 result = self .stackql .execute (LITERAL_INT_QUERY )
81143
82144 # Check result structure
@@ -98,6 +160,11 @@ def test_server_mode_execute(self):
98160 @pystackql_test_setup (server_mode = True , output = 'pandas' )
99161 def test_server_mode_execute_pandas (self ):
100162 """Test execute in server mode with pandas output."""
163+
164+ # Skip if server is not available
165+ if not TestServerMode .server_available :
166+ pytest .skip ("Server is not available, skipping test" )
167+
101168 result = self .stackql .execute (LITERAL_STRING_QUERY )
102169
103170 # Check result structure
@@ -115,6 +182,11 @@ def test_server_mode_execute_pandas(self):
115182 @pystackql_test_setup (server_mode = True )
116183 def test_server_mode_provider_query (self ):
117184 """Test querying a provider in server mode."""
185+
186+ # Skip if server is not available
187+ if not TestServerMode .server_available :
188+ pytest .skip ("Server is not available, skipping test" )
189+
118190 result = self .stackql .execute (HOMEBREW_FORMULA_QUERY )
119191
120192 # Check result structure
@@ -135,6 +207,11 @@ def test_server_mode_provider_query(self):
135207 @patch ('pystackql.core.server.ServerConnection.execute_query' )
136208 def test_server_mode_execute_mocked (self , mock_execute_query ):
137209 """Test execute in server mode with mocked server response."""
210+
211+ # Skip if server is not available
212+ if not TestServerMode .server_available :
213+ pytest .skip ("Server is not available, skipping test" )
214+
138215 # Create a StackQL instance in server mode
139216 stackql = StackQL (server_mode = True )
140217
@@ -158,6 +235,11 @@ def test_server_mode_execute_mocked(self, mock_execute_query):
158235 @patch ('pystackql.core.server.ServerConnection.execute_query' )
159236 def test_server_mode_execute_pandas_mocked (self , mock_execute_query ):
160237 """Test execute in server mode with pandas output and mocked server response."""
238+
239+ # Skip if server is not available
240+ if not TestServerMode .server_available :
241+ pytest .skip ("Server is not available, skipping test" )
242+
161243 # Create a StackQL instance in server mode with pandas output
162244 stackql = StackQL (server_mode = True , output = 'pandas' )
163245
@@ -186,6 +268,11 @@ def test_server_mode_execute_pandas_mocked(self, mock_execute_query):
186268 @patch ('pystackql.core.server.ServerConnection.execute_query' )
187269 def test_server_mode_execute_stmt_mocked (self , mock_execute_query ):
188270 """Test executeStmt in server mode with mocked server response."""
271+
272+ # Skip if server is not available
273+ if not TestServerMode .server_available :
274+ pytest .skip ("Server is not available, skipping test" )
275+
189276 # Create a StackQL instance in server mode
190277 stackql = StackQL (server_mode = True )
191278
@@ -208,6 +295,11 @@ def test_server_mode_execute_stmt_mocked(self, mock_execute_query):
208295
209296 def test_server_mode_csv_output_error (self ):
210297 """Test that server mode with csv output raises an error."""
298+
299+ # Skip if server is not available
300+ if not TestServerMode .server_available :
301+ pytest .skip ("Server is not available, skipping test" )
302+
211303 with pytest .raises (ValueError ) as exc_info :
212304 StackQL (server_mode = True , output = 'csv' )
213305
0 commit comments