- 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.
108 lines
3.4 KiB
Go
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")
|
|
}
|