yao/openapi/oauth/authorized/utils_test.go
Max 5f803ef4d4 Implement authorized script execution and enhance context handling
- Added ExecuteWithAuthorized method to the Script struct, allowing scripts to be executed with user authorization information.
- Updated existing Execute method to utilize ExecuteWithAuthorized for improved authorization handling.
- Enhanced script execution tests to verify behavior with and without authorized information, ensuring accurate context management.
- Implemented authorized information conversion to a map for easier integration with runtime environments.
- Refactored context handling in script execution to ensure authorized data is correctly passed and utilized.
2025-12-08 11:42:01 +08:00

88 lines
2.3 KiB
Go

package authorized
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/yaoapp/gou/process"
)
func TestProcessAuthInfo(t *testing.T) {
t.Run("WithNilProcess", func(t *testing.T) {
result := ProcessAuthInfo(nil)
assert.Nil(t, result)
})
t.Run("WithProcessNoAuth", func(t *testing.T) {
p := &process.Process{}
result := ProcessAuthInfo(p)
// GetAuthorized returns empty struct instead of nil, so ProcessAuthInfo will return an empty AuthorizedInfo
require.NotNil(t, result)
assert.Empty(t, result.UserID)
assert.Empty(t, result.TeamID)
assert.Empty(t, result.Subject)
})
t.Run("WithProcessWithAuth", func(t *testing.T) {
p := &process.Process{
Authorized: &process.AuthorizedInfo{
Subject: "user123",
ClientID: "client456",
UserID: "u789",
Scope: "read write",
TeamID: "t123",
TenantID: "tenant456",
SessionID: "session789",
RememberMe: true,
Constraints: process.DataConstraints{
OwnerOnly: true,
CreatorOnly: false,
EditorOnly: false,
TeamOnly: true,
Extra: map[string]interface{}{
"department": "engineering",
},
},
},
}
result := ProcessAuthInfo(p)
require.NotNil(t, result)
assert.Equal(t, "user123", result.Subject)
assert.Equal(t, "client456", result.ClientID)
assert.Equal(t, "u789", result.UserID)
assert.Equal(t, "read write", result.Scope)
assert.Equal(t, "t123", result.TeamID)
assert.Equal(t, "tenant456", result.TenantID)
assert.Equal(t, "session789", result.SessionID)
assert.True(t, result.RememberMe)
assert.True(t, result.Constraints.OwnerOnly)
assert.False(t, result.Constraints.CreatorOnly)
assert.False(t, result.Constraints.EditorOnly)
assert.True(t, result.Constraints.TeamOnly)
assert.Equal(t, "engineering", result.Constraints.Extra["department"])
})
t.Run("WithPartialData", func(t *testing.T) {
p := &process.Process{
Authorized: &process.AuthorizedInfo{
UserID: "u123",
TeamID: "t456",
Constraints: process.DataConstraints{
TeamOnly: true,
},
},
}
result := ProcessAuthInfo(p)
require.NotNil(t, result)
assert.Equal(t, "u123", result.UserID)
assert.Equal(t, "t456", result.TeamID)
assert.True(t, result.Constraints.TeamOnly)
assert.False(t, result.Constraints.OwnerOnly)
})
}