Files
ragflow/internal/utility/metadata_test.go
Jack 0dd0ac06f8 Feature: task executor migration to go (#16549)
### Summary

Feature: Integrate parser
2026-07-08 19:08:11 +08:00

116 lines
3.1 KiB
Go

package utility
import (
"testing"
)
// =============================================================================
// UpdateMetadataTo
// =============================================================================
func TestUpdateMetadataTo_EmptyMeta(t *testing.T) {
result := UpdateMetadataTo(map[string]any{"a": 1}, nil)
if result["a"] != 1 {
t.Errorf("a = %v, want 1", result["a"])
}
}
func TestUpdateMetadataTo_NewKeysAdded(t *testing.T) {
result := UpdateMetadataTo(map[string]any{"a": 1}, map[string]any{"b": "x"})
if result["a"] != 1 {
t.Errorf("a should be preserved")
}
if result["b"] != "x" {
t.Errorf("b should be added")
}
}
func TestUpdateMetadataTo_ExistingKeyMergedToList(t *testing.T) {
result := UpdateMetadataTo(map[string]any{"author": "Alice"}, map[string]any{"author": "Bob"})
tags, ok := result["author"].([]string)
if !ok {
t.Fatalf("author should be []string, got %T", result["author"])
}
if len(tags) != 2 || tags[0] != "Alice" || tags[1] != "Bob" {
t.Errorf("author = %v, want [Alice Bob]", tags)
}
}
func TestUpdateMetadataTo_StringValuesOnly(t *testing.T) {
result := UpdateMetadataTo(map[string]any{}, map[string]any{"num": 42, "ok": true})
if _, exists := result["num"]; exists {
t.Errorf("numeric values should be skipped")
}
if _, exists := result["ok"]; exists {
t.Errorf("bool values should be skipped")
}
}
func TestUpdateMetadataTo_ListAppend(t *testing.T) {
result := UpdateMetadataTo(
map[string]any{"tags": []string{"a", "b"}},
map[string]any{"tags": []string{"c"}},
)
tags := result["tags"].([]string)
if len(tags) != 3 {
t.Errorf("tags should have 3 elements, got %v", tags)
}
}
func TestUpdateMetadataTo_StringToListMerge(t *testing.T) {
result := UpdateMetadataTo(
map[string]any{"tags": "a"},
map[string]any{"tags": "b"},
)
tags := result["tags"].([]string)
if len(tags) != 2 || tags[0] != "a" || tags[1] != "b" {
t.Errorf("tags = %v, want [a b]", tags)
}
}
func TestUpdateMetadataTo_DeduplicateList(t *testing.T) {
result := UpdateMetadataTo(
map[string]any{"tags": "a"},
map[string]any{"tags": "a"},
)
tags := result["tags"].([]string)
if len(tags) != 1 {
t.Errorf("tags should be deduplicated: got %v", tags)
}
}
func TestUpdateMetadataTo_NonDictMeta(t *testing.T) {
result := UpdateMetadataTo(map[string]any{"a": 1}, "not a dict")
if result["a"] != 1 {
t.Errorf("original should be unchanged for non-dict meta")
}
}
func TestUpdateMetadataTo_EmptyInitial(t *testing.T) {
result := UpdateMetadataTo(nil, map[string]any{"k": "v"})
if len(result) != 0 {
t.Errorf("should return empty when initial is nil")
}
}
func TestUpdateMetadataTo_FilterEmptyStrings(t *testing.T) {
result := UpdateMetadataTo(
map[string]any{},
map[string]any{"tags": []any{"a", "", "b"}},
)
tags := result["tags"].([]string)
if len(tags) != 2 {
t.Errorf("empty strings should be filtered: got %v", tags)
}
}
func TestUpdateMetadataTo_SkipOnlyEmptyStringsList(t *testing.T) {
result := UpdateMetadataTo(
map[string]any{},
map[string]any{"tags": []any{"", ""}},
)
if _, exists := result["tags"]; exists {
t.Error("all-empty list should be skipped")
}
}