Update ConnectorOptions handling in tests and types

- Changed the `Optional` field in `ConnectorOptions` from a boolean to a pointer to allow for nil values, enhancing flexibility in option handling.
- Updated tests in `load_test.go`, `convert_test.go`, and `assistant_test.go` to reflect the new pointer type for `Optional`, ensuring proper assertions and error handling.
- Added new test cases to validate behavior when `Optional` is nil or false, improving test coverage and robustness of the ConnectorOptions functionality.
This commit is contained in:
Max 2025-12-03 10:57:47 +08:00
parent bbba6b9fdb
commit ede240302a
4 changed files with 55 additions and 13 deletions

View file

@ -73,7 +73,8 @@ func TestLoadPath(t *testing.T) {
// ConnectorOptions
assert.NotNil(t, assistant.ConnectorOptions)
assert.True(t, assistant.ConnectorOptions.Optional)
assert.NotNil(t, assistant.ConnectorOptions.Optional)
assert.True(t, *assistant.ConnectorOptions.Optional)
assert.NotNil(t, assistant.ConnectorOptions.Connectors)
assert.Contains(t, assistant.ConnectorOptions.Connectors, "gpt-4o")
assert.Contains(t, assistant.ConnectorOptions.Connectors, "gpt-4o-mini")
@ -370,7 +371,8 @@ func TestUpdate(t *testing.T) {
require.NoError(t, err)
assert.NotNil(t, assistant.ConnectorOptions)
assert.False(t, assistant.ConnectorOptions.Optional)
assert.NotNil(t, assistant.ConnectorOptions.Optional)
assert.False(t, *assistant.ConnectorOptions.Optional)
assert.Contains(t, assistant.ConnectorOptions.Connectors, "new-connector")
})

View file

@ -609,7 +609,7 @@ func TestToAssistantModel(t *testing.T) {
if result.ConnectorOptions == nil {
t.Error("Expected ConnectorOptions to be set")
} else {
if !result.ConnectorOptions.Optional {
if result.ConnectorOptions.Optional == nil || !*result.ConnectorOptions.Optional {
t.Error("Expected ConnectorOptions.Optional to be true")
}
if len(result.ConnectorOptions.Connectors) != 2 {
@ -849,7 +849,7 @@ func TestToAssistantModelNewFields(t *testing.T) {
t.Fatal("Expected ConnectorOptions to be set")
}
if !result.ConnectorOptions.Optional {
if result.ConnectorOptions.Optional == nil || !*result.ConnectorOptions.Optional {
t.Error("Expected Optional to be true")
}
@ -1349,8 +1349,9 @@ func TestToConnectorOptions(t *testing.T) {
})
t.Run("ConnectorOptionsPointer", func(t *testing.T) {
optionalTrue := true
opts := &ConnectorOptions{
Optional: true,
Optional: &optionalTrue,
Connectors: []string{"openai", "anthropic"},
Filters: []ModelCapability{CapVision, CapToolCalls},
}
@ -1364,8 +1365,9 @@ func TestToConnectorOptions(t *testing.T) {
})
t.Run("ConnectorOptionsValue", func(t *testing.T) {
optionalTrue := true
opts := ConnectorOptions{
Optional: true,
Optional: &optionalTrue,
Connectors: []string{"openai", "anthropic"},
Filters: []ModelCapability{CapVision, CapToolCalls},
}
@ -1373,7 +1375,7 @@ func TestToConnectorOptions(t *testing.T) {
if err != nil {
t.Errorf("Expected no error, got: %v", err)
}
if !result.Optional {
if result.Optional == nil || !*result.Optional {
t.Error("Expected Optional to be true")
}
if len(result.Connectors) != 2 {
@ -1394,7 +1396,7 @@ func TestToConnectorOptions(t *testing.T) {
if err != nil {
t.Errorf("Expected no error, got: %v", err)
}
if !result.Optional {
if result.Optional == nil || !*result.Optional {
t.Error("Expected Optional to be true")
}
if len(result.Connectors) != 3 {
@ -1413,7 +1415,7 @@ func TestToConnectorOptions(t *testing.T) {
if err != nil {
t.Errorf("Expected no error, got: %v", err)
}
if !result.Optional {
if result.Optional == nil || !*result.Optional {
t.Error("Expected Optional to be true")
}
if result.Connectors != nil {
@ -1424,6 +1426,42 @@ func TestToConnectorOptions(t *testing.T) {
}
})
t.Run("MapInputOptionalFalse", func(t *testing.T) {
data := map[string]interface{}{
"optional": false,
"connectors": []string{"openai"},
"filters": []string{"vision"},
}
result, err := ToConnectorOptions(data)
if err != nil {
t.Errorf("Expected no error, got: %v", err)
}
if result.Optional == nil {
t.Error("Expected Optional to be set")
} else if *result.Optional {
t.Error("Expected Optional to be false")
}
if len(result.Connectors) != 1 {
t.Errorf("Expected 1 connector, got %d", len(result.Connectors))
}
})
t.Run("MapInputOptionalNil", func(t *testing.T) {
data := map[string]interface{}{
"connectors": []string{"openai"},
}
result, err := ToConnectorOptions(data)
if err != nil {
t.Errorf("Expected no error, got: %v", err)
}
if result.Optional != nil {
t.Errorf("Expected Optional to be nil (not set), got: %v", *result.Optional)
}
if len(result.Connectors) != 1 {
t.Errorf("Expected 1 connector, got %d", len(result.Connectors))
}
})
t.Run("InvalidInput", func(t *testing.T) {
// Test with data that can't be marshaled
invalidData := make(chan int)

View file

@ -245,7 +245,7 @@ const (
// ConnectorOptions the connector selection options
// Allows defining optional connector selection with filtering capabilities
type ConnectorOptions struct {
Optional bool `json:"optional,omitempty"` // Whether connector is optional for user selection
Optional *bool `json:"optional"` // Whether connector is optional for user selection (nil=default, false=hidden, true=shown)
Connectors []string `json:"connectors,omitempty"` // List of available connectors, empty means all connectors are available
Filters []ModelCapability `json:"filters,omitempty"` // Filter by model capabilities, conditions can be stacked
}

View file

@ -454,13 +454,14 @@ func TestSaveAssistant(t *testing.T) {
t.Run("ConnectorOptions", func(t *testing.T) {
// Test assistant with connector options
optionalTrue := true
assistant := &types.AssistantModel{
Name: "Connector Options Test",
Type: "assistant",
Connector: "openai",
Share: "private",
ConnectorOptions: &types.ConnectorOptions{
Optional: true,
Optional: &optionalTrue,
Connectors: []string{"openai", "anthropic"},
Filters: []types.ModelCapability{types.CapVision, types.CapToolCalls},
},
@ -481,7 +482,7 @@ func TestSaveAssistant(t *testing.T) {
t.Fatal("Expected connector options to be set")
}
if !retrieved.ConnectorOptions.Optional {
if retrieved.ConnectorOptions.Optional == nil || !*retrieved.ConnectorOptions.Optional {
t.Error("Expected optional to be true")
}
@ -596,13 +597,14 @@ func TestSaveAssistant(t *testing.T) {
t.Run("AllNewFieldsTogether", func(t *testing.T) {
// Test assistant with all new fields together
optionalFalse := false
assistant := &types.AssistantModel{
Name: "All New Fields Test",
Type: "assistant",
Connector: "openai",
Share: "private",
ConnectorOptions: &types.ConnectorOptions{
Optional: false,
Optional: &optionalFalse,
Connectors: []string{"openai"},
Filters: []types.ModelCapability{types.CapVision},
},