mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-08 15:39:59 +08:00
197 lines
7.5 KiB
Go
197 lines
7.5 KiB
Go
package swagger
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func Test_getBoolFromKVOrDefault(t *testing.T) {
|
|
properties := map[string]string{
|
|
"enabled": `"true"`,
|
|
"disabled": `"false"`,
|
|
"invalid": `"notabool"`,
|
|
"empty_value": `""`,
|
|
}
|
|
|
|
assert.True(t, getBoolFromKVOrDefault(properties, "enabled", false))
|
|
assert.False(t, getBoolFromKVOrDefault(properties, "disabled", true))
|
|
assert.False(t, getBoolFromKVOrDefault(properties, "invalid", false))
|
|
assert.True(t, getBoolFromKVOrDefault(properties, "missing", true))
|
|
assert.False(t, getBoolFromKVOrDefault(properties, "empty_value", false))
|
|
assert.False(t, getBoolFromKVOrDefault(nil, "nil", false))
|
|
assert.False(t, getBoolFromKVOrDefault(map[string]string{}, "empty", false))
|
|
|
|
// Test with unquoted values (as stored by RawText())
|
|
unquotedProperties := map[string]string{
|
|
"enabled": "true",
|
|
"disabled": "false",
|
|
"invalid": "notabool",
|
|
"empty_value": "",
|
|
}
|
|
|
|
assert.True(t, getBoolFromKVOrDefault(unquotedProperties, "enabled", false))
|
|
assert.False(t, getBoolFromKVOrDefault(unquotedProperties, "disabled", true))
|
|
assert.False(t, getBoolFromKVOrDefault(unquotedProperties, "invalid", false))
|
|
assert.False(t, getBoolFromKVOrDefault(unquotedProperties, "empty_value", false))
|
|
}
|
|
|
|
func Test_getStringFromKVOrDefault(t *testing.T) {
|
|
properties := map[string]string{
|
|
"name": `"example"`,
|
|
"empty": `""`,
|
|
}
|
|
|
|
assert.Equal(t, "example", getStringFromKVOrDefault(properties, "name", "default"))
|
|
assert.Equal(t, "default", getStringFromKVOrDefault(properties, "empty", "default"))
|
|
assert.Equal(t, "default", getStringFromKVOrDefault(properties, "missing", "default"))
|
|
assert.Equal(t, "default", getStringFromKVOrDefault(nil, "nil", "default"))
|
|
assert.Equal(t, "default", getStringFromKVOrDefault(map[string]string{}, "empty", "default"))
|
|
|
|
// Test with unquoted values (as stored by RawText())
|
|
unquotedProperties := map[string]string{
|
|
"name": "example",
|
|
"title": "Demo API",
|
|
"empty": "",
|
|
}
|
|
|
|
assert.Equal(t, "example", getStringFromKVOrDefault(unquotedProperties, "name", "default"))
|
|
assert.Equal(t, "Demo API", getStringFromKVOrDefault(unquotedProperties, "title", "default"))
|
|
assert.Equal(t, "default", getStringFromKVOrDefault(unquotedProperties, "empty", "default"))
|
|
}
|
|
|
|
func Test_getListFromInfoOrDefault(t *testing.T) {
|
|
properties := map[string]string{
|
|
"list": `"a, b, c"`,
|
|
"empty": `""`,
|
|
}
|
|
|
|
assert.Equal(t, []string{"a", " b", " c"}, getListFromInfoOrDefault(properties, "list", []string{"default"}))
|
|
assert.Equal(t, []string{"default"}, getListFromInfoOrDefault(properties, "empty", []string{"default"}))
|
|
assert.Equal(t, []string{"default"}, getListFromInfoOrDefault(properties, "missing", []string{"default"}))
|
|
assert.Equal(t, []string{"default"}, getListFromInfoOrDefault(nil, "nil", []string{"default"}))
|
|
assert.Equal(t, []string{"default"}, getListFromInfoOrDefault(map[string]string{}, "empty", []string{"default"}))
|
|
assert.Equal(t, []string{"default"}, getListFromInfoOrDefault(map[string]string{
|
|
"foo": ",,",
|
|
}, "foo", []string{"default"}))
|
|
|
|
// Test with unquoted values (as stored by RawText())
|
|
unquotedProperties := map[string]string{
|
|
"list": "a, b, c",
|
|
"schemes": "http,https",
|
|
"tags": "query",
|
|
"empty": "",
|
|
}
|
|
|
|
// Note: FieldsAndTrimSpace doesn't actually trim the spaces from returned values
|
|
assert.Equal(t, []string{"a", " b", " c"}, getListFromInfoOrDefault(unquotedProperties, "list", []string{"default"}))
|
|
assert.Equal(t, []string{"http", "https"}, getListFromInfoOrDefault(unquotedProperties, "schemes", []string{"default"}))
|
|
assert.Equal(t, []string{"query"}, getListFromInfoOrDefault(unquotedProperties, "tags", []string{"default"}))
|
|
assert.Equal(t, []string{"default"}, getListFromInfoOrDefault(unquotedProperties, "empty", []string{"default"}))
|
|
}
|
|
|
|
func Test_getFirstUsableString(t *testing.T) {
|
|
t.Run("empty input", func(t *testing.T) {
|
|
result := getFirstUsableString()
|
|
assert.Equal(t, "", result, "should return empty string for no arguments")
|
|
})
|
|
|
|
t.Run("single plain string", func(t *testing.T) {
|
|
result := getFirstUsableString("Check server health status.")
|
|
assert.Equal(t, "Check server health status.", result)
|
|
})
|
|
|
|
t.Run("single quoted string", func(t *testing.T) {
|
|
// This is how Go would represent a quoted string literal
|
|
result := getFirstUsableString(`"Check server health status."`)
|
|
assert.Equal(t, "Check server health status.", result, "should unquote quoted strings")
|
|
})
|
|
|
|
t.Run("multiple plain strings", func(t *testing.T) {
|
|
result := getFirstUsableString("", "second", "third")
|
|
assert.Equal(t, "second", result, "should return first non-empty string")
|
|
})
|
|
|
|
t.Run("handler name fallback", func(t *testing.T) {
|
|
// Simulates the real use case: @doc text, handler name
|
|
result := getFirstUsableString("", "HealthCheck")
|
|
assert.Equal(t, "HealthCheck", result, "should fallback to handler name")
|
|
})
|
|
|
|
t.Run("doc text over handler name", func(t *testing.T) {
|
|
// Simulates the real use case with @doc text
|
|
result := getFirstUsableString("Check server health status.", "HealthCheck")
|
|
assert.Equal(t, "Check server health status.", result, "should use doc text over handler name")
|
|
})
|
|
|
|
t.Run("empty strings before valid", func(t *testing.T) {
|
|
result := getFirstUsableString("", "", "valid")
|
|
assert.Equal(t, "valid", result, "should skip empty strings")
|
|
})
|
|
|
|
t.Run("all empty strings", func(t *testing.T) {
|
|
result := getFirstUsableString("", "", "")
|
|
assert.Equal(t, "", result, "should return empty if all are empty")
|
|
})
|
|
|
|
t.Run("quoted then plain", func(t *testing.T) {
|
|
result := getFirstUsableString(`"quoted"`, "plain")
|
|
assert.Equal(t, "quoted", result, "should unquote first quoted string")
|
|
})
|
|
|
|
t.Run("plain then quoted", func(t *testing.T) {
|
|
result := getFirstUsableString("plain", `"quoted"`)
|
|
assert.Equal(t, "plain", result, "should use first plain string")
|
|
})
|
|
|
|
t.Run("invalid quoted string", func(t *testing.T) {
|
|
// String that looks quoted but isn't valid Go syntax
|
|
result := getFirstUsableString(`"incomplete`, "fallback")
|
|
assert.Equal(t, `"incomplete`, result, "should use as-is if unquote fails but not empty")
|
|
})
|
|
|
|
t.Run("whitespace only", func(t *testing.T) {
|
|
result := getFirstUsableString(" ", "fallback")
|
|
assert.Equal(t, " ", result, "should not trim whitespace, return as-is")
|
|
})
|
|
|
|
t.Run("real world API doc scenario", func(t *testing.T) {
|
|
// This is the actual bug scenario from issue #5229
|
|
atDocText := "Check server health status."
|
|
handlerName := "HealthCheck"
|
|
|
|
result := getFirstUsableString(atDocText, handlerName)
|
|
assert.Equal(t, "Check server health status.", result,
|
|
"should use @doc text for API summary")
|
|
})
|
|
|
|
t.Run("real world with empty doc", func(t *testing.T) {
|
|
// When @doc is empty, should fall back to handler name
|
|
atDocText := ""
|
|
handlerName := "HealthCheck"
|
|
|
|
result := getFirstUsableString(atDocText, handlerName)
|
|
assert.Equal(t, "HealthCheck", result,
|
|
"should fallback to handler name when @doc is empty")
|
|
})
|
|
|
|
t.Run("complex summary with special characters", func(t *testing.T) {
|
|
result := getFirstUsableString("Get user by ID: /users/{id}")
|
|
assert.Equal(t, "Get user by ID: /users/{id}", result,
|
|
"should handle special characters in plain strings")
|
|
})
|
|
|
|
t.Run("multiline string", func(t *testing.T) {
|
|
result := getFirstUsableString("Line 1\nLine 2")
|
|
assert.Equal(t, "Line 1\nLine 2", result,
|
|
"should handle multiline strings")
|
|
})
|
|
|
|
t.Run("unicode characters", func(t *testing.T) {
|
|
result := getFirstUsableString("健康检查", "HealthCheck")
|
|
assert.Equal(t, "健康检查", result,
|
|
"should handle unicode characters")
|
|
})
|
|
}
|
|
|