Skip to main content
Glama
FreePeak

Multi Database MCP Server

tx_test.go4.1 kB
package dbtools import ( "context" "database/sql" "errors" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) // MockTx is a mock implementation of sql.Tx type MockTx struct { mock.Mock } func (m *MockTx) Exec(query string, args ...interface{}) (sql.Result, error) { mockArgs := m.Called(append([]interface{}{query}, args...)...) return mockArgs.Get(0).(sql.Result), mockArgs.Error(1) } func (m *MockTx) Query(query string, args ...interface{}) (*sql.Rows, error) { mockArgs := m.Called(append([]interface{}{query}, args...)...) return mockArgs.Get(0).(*sql.Rows), mockArgs.Error(1) } func (m *MockTx) QueryRow(query string, args ...interface{}) *sql.Row { mockArgs := m.Called(append([]interface{}{query}, args...)...) return mockArgs.Get(0).(*sql.Row) } func (m *MockTx) Prepare(query string) (*sql.Stmt, error) { mockArgs := m.Called(query) return mockArgs.Get(0).(*sql.Stmt), mockArgs.Error(1) } func (m *MockTx) Stmt(stmt *sql.Stmt) *sql.Stmt { mockArgs := m.Called(stmt) return mockArgs.Get(0).(*sql.Stmt) } func (m *MockTx) Commit() error { mockArgs := m.Called() return mockArgs.Error(0) } func (m *MockTx) Rollback() error { mockArgs := m.Called() return mockArgs.Error(0) } // TestBeginTx tests the BeginTx function func TestBeginTx(t *testing.T) { // Setup mock mockDB := new(MockDB) // Use nil for tx since we can't easily create a real *sql.Tx var nilTx *sql.Tx = nil ctx := context.Background() opts := &sql.TxOptions{ReadOnly: true} // Mock expectations mockDB.On("BeginTx", ctx, opts).Return(nilTx, nil) // Call function under test tx, err := BeginTx(ctx, mockDB, opts) // Assertions assert.NoError(t, err) assert.Nil(t, tx) mockDB.AssertExpectations(t) } // TestBeginTxWithError tests the BeginTx function with an error func TestBeginTxWithError(t *testing.T) { // Setup mock mockDB := new(MockDB) expectedErr := errors.New("database error") ctx := context.Background() opts := &sql.TxOptions{ReadOnly: true} // Mock expectations mockDB.On("BeginTx", ctx, opts).Return((*sql.Tx)(nil), expectedErr) // Call function under test tx, err := BeginTx(ctx, mockDB, opts) // Assertions assert.Error(t, err) assert.Equal(t, expectedErr, err) assert.Nil(t, tx) mockDB.AssertExpectations(t) } // TestTransactionCommit tests a successful transaction with commit func TestTransactionCommit(t *testing.T) { // Skip this test for now as it's not possible to easily mock sql.Tx t.Skip("Skipping TestTransactionCommit as it requires complex mocking of sql.Tx") // The test would look something like this, but we can't easily mock sql.Tx: /* // Setup mocks mockDB := new(MockDB) mockTx := new(MockTx) mockResult := new(MockResult) ctx := context.Background() opts := &sql.TxOptions{ReadOnly: false} query := "INSERT INTO test_table (name) VALUES (?)" args := []interface{}{"test"} // Mock expectations mockDB.On("BeginTx", ctx, opts).Return(nilTx, nil) mockTx.On("Exec", query, args[0]).Return(mockResult, nil) mockTx.On("Commit").Return(nil) mockResult.On("RowsAffected").Return(int64(1), nil) // Start transaction tx, err := BeginTx(ctx, mockDB, opts) assert.NoError(t, err) */ } // TestTransactionRollback tests a transaction with rollback func TestTransactionRollback(t *testing.T) { // Skip this test for now as it's not possible to easily mock sql.Tx t.Skip("Skipping TestTransactionRollback as it requires complex mocking of sql.Tx") // The test would look something like this, but we can't easily mock sql.Tx: /* // Setup mocks mockDB := new(MockDB) mockTx := new(MockTx) mockErr := errors.New("exec error") ctx := context.Background() opts := &sql.TxOptions{ReadOnly: false} query := "INSERT INTO test_table (name) VALUES (?)" args := []interface{}{"test"} // Mock expectations mockDB.On("BeginTx", ctx, opts).Return(nilTx, nil) mockTx.On("Exec", query, args[0]).Return(nil, mockErr) mockTx.On("Rollback").Return(nil) // Start transaction tx, err := BeginTx(ctx, mockDB, opts) assert.NoError(t, err) */ }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/FreePeak/db-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server