yao/openapi/tests/setting/system_test.go
Max 3bc15b1039 feat(openapi): add unified /setting/* endpoints for OpenAPI
- Introduced handlers for the new /setting/* endpoints in the OpenAPI module.
- Updated import statements to include the new setting package for better organization.
- Enhanced routing capabilities to support the new settings functionality.
2026-04-28 19:33:27 +08:00

108 lines
3.4 KiB
Go

package setting_test
import (
"encoding/json"
"net/http"
"testing"
"github.com/stretchr/testify/assert"
"github.com/yaoapp/yao/openapi"
"github.com/yaoapp/yao/openapi/tests/testutils"
)
func baseURL() string {
if openapi.Server != nil && openapi.Server.Config != nil {
return openapi.Server.Config.BaseURL
}
return ""
}
// TestSystemInfo verifies GET /setting/system returns the expected structure.
func TestSystemInfo(t *testing.T) {
serverURL := testutils.Prepare(t)
defer testutils.Clean()
client := testutils.RegisterTestClient(t, "Setting System Test", []string{"https://localhost/callback"})
defer testutils.CleanupTestClient(t, client.ClientID)
token := testutils.ObtainAccessToken(t, serverURL, client.ClientID, client.ClientSecret, "https://localhost/callback", "openid profile")
req, err := http.NewRequest("GET", serverURL+baseURL()+"/setting/system", nil)
assert.NoError(t, err)
req.Header.Set("Authorization", "Bearer "+token.AccessToken)
resp, err := http.DefaultClient.Do(req)
assert.NoError(t, err)
defer resp.Body.Close()
assert.Equal(t, http.StatusOK, resp.StatusCode)
var body map[string]interface{}
err = json.NewDecoder(resp.Body).Decode(&body)
assert.NoError(t, err)
// Top-level keys
assert.Contains(t, body, "app")
assert.Contains(t, body, "deployment")
assert.Contains(t, body, "server")
assert.Contains(t, body, "client")
assert.Contains(t, body, "environment")
assert.Contains(t, body, "technical")
// app sub-fields
app, ok := body["app"].(map[string]interface{})
assert.True(t, ok)
assert.NotEmpty(t, app["name"])
assert.NotEmpty(t, app["version"])
// server sub-fields
server, ok := body["server"].(map[string]interface{})
assert.True(t, ok)
assert.NotEmpty(t, server["version"])
// technical sub-fields
tech, ok := body["technical"].(map[string]interface{})
assert.True(t, ok)
assert.NotEmpty(t, tech["listen"])
assert.NotEmpty(t, tech["db_driver"])
assert.NotEmpty(t, tech["session_store"])
}
// TestSystemInfoUnauthenticated verifies 401 when no token is provided.
func TestSystemInfoUnauthenticated(t *testing.T) {
serverURL := testutils.Prepare(t)
defer testutils.Clean()
req, err := http.NewRequest("GET", serverURL+baseURL()+"/setting/system", nil)
assert.NoError(t, err)
resp, err := http.DefaultClient.Do(req)
assert.NoError(t, err)
defer resp.Body.Close()
assert.Equal(t, http.StatusUnauthorized, resp.StatusCode)
}
// TestSystemCheckUpdate verifies POST /setting/system/check-update returns has_update.
func TestSystemCheckUpdate(t *testing.T) {
serverURL := testutils.Prepare(t)
defer testutils.Clean()
client := testutils.RegisterTestClient(t, "Setting CheckUpdate Test", []string{"https://localhost/callback"})
defer testutils.CleanupTestClient(t, client.ClientID)
token := testutils.ObtainAccessToken(t, serverURL, client.ClientID, client.ClientSecret, "https://localhost/callback", "openid profile")
req, err := http.NewRequest("POST", serverURL+baseURL()+"/setting/system/check-update", nil)
assert.NoError(t, err)
req.Header.Set("Authorization", "Bearer "+token.AccessToken)
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
assert.NoError(t, err)
defer resp.Body.Close()
assert.Equal(t, http.StatusOK, resp.StatusCode)
var body map[string]interface{}
err = json.NewDecoder(resp.Body).Decode(&body)
assert.NoError(t, err)
_, exists := body["has_update"]
assert.True(t, exists, "response must contain has_update field")
}