Files
osmedeus/internal/functions/cdn_functions_test.go
T
j3ssie 1403d20a4d feat: add LLM step executor with vision and tool support, event workflow system, and inheritance
- Add LLM executor supporting OpenAI vision, tool calling, embeddings, and structured outputs
- Introduce event emitter/receiver workflows with deduplication and filtering (generate_event functions)
- Add workflow extends/override system enabling inheritance chains and step merge modes
- Update function naming to snake_case across all testdata (fileExists→file_exists, etc.)
- Add comprehensive test fixtures for linter, events, CDN, step dependencies, and extends workflows
2026-01-20 18:23:57 +08:00

306 lines
7.4 KiB
Go

package functions
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestCdnUpload_EmptyLocalPath(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_upload("", "remote/path")`,
map[string]interface{}{},
)
require.NoError(t, err)
assert.Equal(t, false, result)
}
func TestCdnUpload_EmptyRemotePath(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_upload("/local/path", "")`,
map[string]interface{}{},
)
require.NoError(t, err)
assert.Equal(t, false, result)
}
func TestCdnUpload_UndefinedArguments(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_upload()`,
map[string]interface{}{},
)
require.NoError(t, err)
assert.Equal(t, false, result)
}
func TestCdnDownload_EmptyRemotePath(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_download("", "/local/path")`,
map[string]interface{}{},
)
require.NoError(t, err)
assert.Equal(t, false, result)
}
func TestCdnDownload_EmptyLocalPath(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_download("remote/path", "")`,
map[string]interface{}{},
)
require.NoError(t, err)
assert.Equal(t, false, result)
}
func TestCdnExists_EmptyPath(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_exists("")`,
map[string]interface{}{},
)
require.NoError(t, err)
assert.Equal(t, false, result)
}
func TestCdnDelete_EmptyPath(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_delete("")`,
map[string]interface{}{},
)
require.NoError(t, err)
assert.Equal(t, false, result)
}
// Tests for new CDN functions
func TestCdnSyncUpload_EmptyLocalDir(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_sync_upload("", "remote/prefix/")`,
map[string]interface{}{},
)
require.NoError(t, err)
// Should return object with success: false
resultMap, ok := result.(map[string]interface{})
require.True(t, ok)
assert.Equal(t, false, resultMap["success"])
}
func TestCdnSyncUpload_UndefinedArguments(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_sync_upload()`,
map[string]interface{}{},
)
require.NoError(t, err)
resultMap, ok := result.(map[string]interface{})
require.True(t, ok)
assert.Equal(t, false, resultMap["success"])
}
func TestCdnSyncDownload_EmptyLocalDir(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_sync_download("remote/prefix/", "")`,
map[string]interface{}{},
)
require.NoError(t, err)
resultMap, ok := result.(map[string]interface{})
require.True(t, ok)
assert.Equal(t, false, resultMap["success"])
}
func TestCdnSyncDownload_UndefinedArguments(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_sync_download()`,
map[string]interface{}{},
)
require.NoError(t, err)
resultMap, ok := result.(map[string]interface{})
require.True(t, ok)
assert.Equal(t, false, resultMap["success"])
}
func TestCdnGetPresignedURL_EmptyPath(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_get_presigned_url("")`,
map[string]interface{}{},
)
require.NoError(t, err)
assert.Equal(t, "", result)
}
func TestCdnGetPresignedURL_WithExpiry(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_get_presigned_url("test/file.txt", 60)`,
map[string]interface{}{},
)
require.NoError(t, err)
// Returns empty string when storage not configured
assert.Equal(t, "", result)
}
func TestCdnGetPresignedURL_NoExpiry(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_get_presigned_url("test/file.txt")`,
map[string]interface{}{},
)
require.NoError(t, err)
// Returns empty string when storage not configured
assert.Equal(t, "", result)
}
func TestCdnList_EmptyPrefix(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_list("")`,
map[string]interface{}{},
)
require.NoError(t, err)
// Should return empty array when storage not configured
resultSlice, ok := result.([]interface{})
require.True(t, ok)
assert.Equal(t, 0, len(resultSlice))
}
func TestCdnList_WithPrefix(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_list("scans/")`,
map[string]interface{}{},
)
require.NoError(t, err)
resultSlice, ok := result.([]interface{})
require.True(t, ok)
assert.Equal(t, 0, len(resultSlice))
}
func TestCdnList_NoArguments(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_list()`,
map[string]interface{}{},
)
require.NoError(t, err)
resultSlice, ok := result.([]interface{})
require.True(t, ok)
assert.Equal(t, 0, len(resultSlice))
}
func TestCdnStat_EmptyPath(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_stat("")`,
map[string]interface{}{},
)
require.NoError(t, err)
// Should return null for empty path
assert.Nil(t, result)
}
func TestCdnStat_NonExistentFile(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_stat("nonexistent/file.txt")`,
map[string]interface{}{},
)
require.NoError(t, err)
// Should return null when storage not configured
assert.Nil(t, result)
}
func TestCdnStat_UndefinedArgument(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_stat()`,
map[string]interface{}{},
)
require.NoError(t, err)
assert.Nil(t, result)
}
// Test return types for sync operations
func TestCdnSyncUpload_ReturnStructure(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_sync_upload("/nonexistent", "prefix/")`,
map[string]interface{}{},
)
require.NoError(t, err)
resultMap, ok := result.(map[string]interface{})
require.True(t, ok)
// Check all expected fields exist
_, hasSuccess := resultMap["success"]
_, hasUploaded := resultMap["uploaded"]
_, hasSkipped := resultMap["skipped"]
_, hasDeleted := resultMap["deleted"]
_, hasErrorCount := resultMap["errorCount"]
assert.True(t, hasSuccess, "should have 'success' field")
assert.True(t, hasUploaded, "should have 'uploaded' field")
assert.True(t, hasSkipped, "should have 'skipped' field")
assert.True(t, hasDeleted, "should have 'deleted' field")
assert.True(t, hasErrorCount, "should have 'errorCount' field")
}
func TestCdnSyncDownload_ReturnStructure(t *testing.T) {
registry := NewRegistry()
result, err := registry.Execute(
`cdn_sync_download("prefix/", "/nonexistent")`,
map[string]interface{}{},
)
require.NoError(t, err)
resultMap, ok := result.(map[string]interface{})
require.True(t, ok)
// Check all expected fields exist
_, hasSuccess := resultMap["success"]
_, hasDownloaded := resultMap["downloaded"]
_, hasSkipped := resultMap["skipped"]
_, hasDeleted := resultMap["deleted"]
_, hasErrorCount := resultMap["errorCount"]
assert.True(t, hasSuccess, "should have 'success' field")
assert.True(t, hasDownloaded, "should have 'downloaded' field")
assert.True(t, hasSkipped, "should have 'skipped' field")
assert.True(t, hasDeleted, "should have 'deleted' field")
assert.True(t, hasErrorCount, "should have 'errorCount' field")
}
// Note: Actual CDN upload/download/delete tests require a configured
// S3-compatible storage and are not included here. The functions will
// return false when storage is not configured, which is expected.