Skip to main content
Glama

CentralMind/Gateway

connector_test.go3.54 kB
package mongodb import ( "context" "fmt" "testing" "github.com/centralmind/gateway/connectors" "github.com/centralmind/gateway/model" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/wait" ) func TestMongoDBConnector(t *testing.T) { ctx := context.Background() // Create MongoDB container mongoContainer, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{ ContainerRequest: testcontainers.ContainerRequest{ Image: "mongo:latest", ExposedPorts: []string{"27017/tcp"}, Env: map[string]string{ "MONGO_INITDB_ROOT_USERNAME": "admin", "MONGO_INITDB_ROOT_PASSWORD": "password", }, WaitingFor: wait.ForLog("Waiting for connections"), }, Started: true, }) require.NoError(t, err) defer func() { require.NoError(t, mongoContainer.Terminate(ctx)) }() // Get mapped port mappedPort, err := mongoContainer.MappedPort(ctx, "27017") require.NoError(t, err) // Update config with container details cfg := Config{ Hosts: []string{fmt.Sprintf("localhost:%s", mappedPort.Port())}, Database: "testdb", Username: "admin", Password: "password", } // Create connector connector, err := connectors.New("mongodb", cfg) require.NoError(t, err) assert.NotNil(t, connector) // Insert test data db := connector.(*Connector).client.Database(cfg.Database) collection := db.Collection("test_collection") _, err = collection.InsertOne(ctx, map[string]interface{}{ "name": "test", "age": 30, }) require.NoError(t, err) t.Run("Ping Database", func(t *testing.T) { err := connector.Ping(ctx) assert.NoError(t, err) }) t.Run("Discovery Collections", func(t *testing.T) { tables, err := connector.Discovery(ctx, nil) assert.NoError(t, err) assert.NotEmpty(t, tables) found := false for _, table := range tables { if table.Name == "test_collection" { found = true break } } assert.True(t, found, "Expected collection 'test_collection' to exist") }) t.Run("Query Documents", func(t *testing.T) { endpoint := model.Endpoint{ Query: `{ "collection": "test_collection", "filter": { "name": "@name" } }`, Params: []model.EndpointParams{ {Name: "name", Type: "string", Required: true}, }, } params := map[string]any{ "name": "test", } rows, err := connector.Query(ctx, endpoint, params) assert.NoError(t, err) assert.Len(t, rows, 1) assert.Equal(t, "test", rows[0]["name"]) assert.Equal(t, int32(30), rows[0]["age"]) }) t.Run("Sample Data", func(t *testing.T) { samples, err := connector.Sample(ctx, model.Table{Name: "test_collection"}) assert.NoError(t, err) assert.Len(t, samples, 1) assert.Equal(t, "test", samples[0]["name"]) assert.Equal(t, int32(30), samples[0]["age"]) }) } func TestMongoDBTypeMapping(t *testing.T) { c := &Connector{} tests := []struct { name string mongoType string expected model.ColumnType }{ {"string", "string", model.TypeString}, {"number", "number", model.TypeNumber}, {"int", "int", model.TypeInteger}, {"bool", "bool", model.TypeBoolean}, {"date", "date", model.TypeDatetime}, {"object", "object", model.TypeObject}, {"array", "array", model.TypeArray}, {"unknown", "unknown", model.TypeString}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { result := c.GuessColumnType(tt.mongoType) assert.Equal(t, tt.expected, result) }) } }

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/centralmind/gateway'

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