2025-06-17 06:18:05 +07:00
|
|
|
package authx
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestDynamicUnmarshalJSON(t *testing.T) {
|
|
|
|
|
t.Run("basic-unmarshal", func(t *testing.T) {
|
|
|
|
|
data := []byte(`{
|
|
|
|
|
"template": "test-template.yaml",
|
|
|
|
|
"variables": [
|
|
|
|
|
{
|
|
|
|
|
"key": "username",
|
|
|
|
|
"value": "testuser"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"secrets": [
|
|
|
|
|
{
|
|
|
|
|
"type": "BasicAuth",
|
|
|
|
|
"domains": ["example.com"],
|
|
|
|
|
"username": "user1",
|
|
|
|
|
"password": "pass1"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"type": "BasicAuth",
|
|
|
|
|
"domains": ["test.com"],
|
|
|
|
|
"username": "testuser",
|
|
|
|
|
"password": "testpass"
|
|
|
|
|
}`)
|
|
|
|
|
|
|
|
|
|
var d Dynamic
|
|
|
|
|
err := d.UnmarshalJSON(data)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
// Secret
|
|
|
|
|
require.NotNil(t, d.Secret)
|
2025-07-01 00:40:44 +07:00
|
|
|
require.Equal(t, "BasicAuth", d.Type)
|
|
|
|
|
require.Equal(t, []string{"test.com"}, d.Domains)
|
|
|
|
|
require.Equal(t, "testuser", d.Username)
|
|
|
|
|
require.Equal(t, "testpass", d.Password)
|
2025-06-17 06:18:05 +07:00
|
|
|
|
|
|
|
|
// Dynamic fields
|
|
|
|
|
require.Equal(t, "test-template.yaml", d.TemplatePath)
|
|
|
|
|
require.Len(t, d.Variables, 1)
|
|
|
|
|
require.Equal(t, "username", d.Variables[0].Key)
|
|
|
|
|
require.Equal(t, "testuser", d.Variables[0].Value)
|
|
|
|
|
require.Len(t, d.Secrets, 1)
|
|
|
|
|
require.Equal(t, "BasicAuth", d.Secrets[0].Type)
|
|
|
|
|
require.Equal(t, []string{"example.com"}, d.Secrets[0].Domains)
|
|
|
|
|
require.Equal(t, "user1", d.Secrets[0].Username)
|
|
|
|
|
require.Equal(t, "pass1", d.Secrets[0].Password)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("complex-unmarshal", func(t *testing.T) {
|
|
|
|
|
data := []byte(`{
|
|
|
|
|
"template": "test-template.yaml",
|
|
|
|
|
"variables": [
|
|
|
|
|
{
|
|
|
|
|
"key": "token",
|
|
|
|
|
"value": "Bearer xyz"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"secrets": [
|
|
|
|
|
{
|
|
|
|
|
"type": "CookiesAuth",
|
|
|
|
|
"domains": ["example.com"],
|
|
|
|
|
"cookies": [
|
|
|
|
|
{
|
|
|
|
|
"key": "session",
|
|
|
|
|
"value": "abc123"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"type": "HeadersAuth",
|
|
|
|
|
"domains": ["api.test.com"],
|
|
|
|
|
"headers": [
|
|
|
|
|
{
|
|
|
|
|
"key": "X-API-Key",
|
|
|
|
|
"value": "secret-key"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}`)
|
|
|
|
|
|
|
|
|
|
var d Dynamic
|
|
|
|
|
err := d.UnmarshalJSON(data)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
// Secret
|
|
|
|
|
require.NotNil(t, d.Secret)
|
2025-07-01 00:40:44 +07:00
|
|
|
require.Equal(t, "HeadersAuth", d.Type)
|
|
|
|
|
require.Equal(t, []string{"api.test.com"}, d.Domains)
|
|
|
|
|
require.Len(t, d.Headers, 1)
|
2025-06-17 06:18:05 +07:00
|
|
|
require.Equal(t, "X-API-Key", d.Secret.Headers[0].Key)
|
|
|
|
|
require.Equal(t, "secret-key", d.Secret.Headers[0].Value)
|
|
|
|
|
|
|
|
|
|
// Dynamic fields
|
|
|
|
|
require.Equal(t, "test-template.yaml", d.TemplatePath)
|
|
|
|
|
require.Len(t, d.Variables, 1)
|
|
|
|
|
require.Equal(t, "token", d.Variables[0].Key)
|
|
|
|
|
require.Equal(t, "Bearer xyz", d.Variables[0].Value)
|
|
|
|
|
require.Len(t, d.Secrets, 1)
|
|
|
|
|
require.Equal(t, "CookiesAuth", d.Secrets[0].Type)
|
|
|
|
|
require.Equal(t, []string{"example.com"}, d.Secrets[0].Domains)
|
|
|
|
|
require.Len(t, d.Secrets[0].Cookies, 1)
|
|
|
|
|
require.Equal(t, "session", d.Secrets[0].Cookies[0].Key)
|
|
|
|
|
require.Equal(t, "abc123", d.Secrets[0].Cookies[0].Value)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("invalid-json", func(t *testing.T) {
|
|
|
|
|
data := []byte(`{invalid json}`)
|
|
|
|
|
var d Dynamic
|
|
|
|
|
err := d.UnmarshalJSON(data)
|
|
|
|
|
require.Error(t, err)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
t.Run("empty-json", func(t *testing.T) {
|
|
|
|
|
data := []byte(`{}`)
|
|
|
|
|
var d Dynamic
|
|
|
|
|
err := d.UnmarshalJSON(data)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
})
|
|
|
|
|
}
|