4f7c96dcc8
- pkg/avatar: 13 tests cubriendo todos los proveedores, estilos, sets, edge cases (size=0, unknown provider, chars especiales, determinismo) - shell/avatar: 6 tests con httptest server local (download OK, JPEG, HTTP 404, context cancelled, extensiones por content-type) No requiere acceso a internet — shell/avatar usa httptest. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
140 lines
3.5 KiB
Go
140 lines
3.5 KiB
Go
package avatar
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestURL_DiceBear(t *testing.T) {
|
|
opts := DefaultOptions()
|
|
u := URL(ProviderDiceBear, "test-bot", opts)
|
|
|
|
if !strings.HasPrefix(u, "https://api.dicebear.com/9.x/bottts/png") {
|
|
t.Errorf("unexpected DiceBear URL prefix: %s", u)
|
|
}
|
|
if !strings.Contains(u, "seed=test-bot") {
|
|
t.Errorf("URL should contain seed=test-bot: %s", u)
|
|
}
|
|
if !strings.Contains(u, "size=256") {
|
|
t.Errorf("URL should contain size=256: %s", u)
|
|
}
|
|
}
|
|
|
|
func TestURL_DiceBear_CustomStyle(t *testing.T) {
|
|
opts := DefaultOptions()
|
|
opts.DiceBearStyle = DiceBearPixelArt
|
|
u := URL(ProviderDiceBear, "my-agent", opts)
|
|
|
|
if !strings.Contains(u, "/pixel-art/png") {
|
|
t.Errorf("URL should use pixel-art style: %s", u)
|
|
}
|
|
}
|
|
|
|
func TestURL_RoboHash(t *testing.T) {
|
|
opts := DefaultOptions()
|
|
u := URL(ProviderRoboHash, "robot-1", opts)
|
|
|
|
if !strings.HasPrefix(u, "https://robohash.org/robot-1.png") {
|
|
t.Errorf("unexpected RoboHash URL prefix: %s", u)
|
|
}
|
|
if !strings.Contains(u, "set=set1") {
|
|
t.Errorf("URL should contain set=set1: %s", u)
|
|
}
|
|
if !strings.Contains(u, "size=256x256") {
|
|
t.Errorf("URL should contain size=256x256: %s", u)
|
|
}
|
|
}
|
|
|
|
func TestURL_RoboHash_CustomSet(t *testing.T) {
|
|
opts := DefaultOptions()
|
|
opts.RoboHashSet = RoboHashCats
|
|
u := URL(ProviderRoboHash, "cat-bot", opts)
|
|
|
|
if !strings.Contains(u, "set=set4") {
|
|
t.Errorf("URL should contain set=set4 for cats: %s", u)
|
|
}
|
|
}
|
|
|
|
func TestURL_Multiavatar(t *testing.T) {
|
|
u := URL(ProviderMultiavatar, "multi-bot", DefaultOptions())
|
|
|
|
if !strings.HasPrefix(u, "https://api.multiavatar.com/multi-bot.png") {
|
|
t.Errorf("unexpected Multiavatar URL: %s", u)
|
|
}
|
|
}
|
|
|
|
func TestURL_CustomSize(t *testing.T) {
|
|
opts := DefaultOptions()
|
|
opts.Size = 512
|
|
u := URL(ProviderDiceBear, "big-bot", opts)
|
|
|
|
if !strings.Contains(u, "size=512") {
|
|
t.Errorf("URL should contain size=512: %s", u)
|
|
}
|
|
}
|
|
|
|
func TestURL_ZeroSize_DefaultsTo256(t *testing.T) {
|
|
opts := Options{Size: 0}
|
|
u := URL(ProviderDiceBear, "zero", opts)
|
|
|
|
if !strings.Contains(u, "size=256") {
|
|
t.Errorf("zero size should default to 256: %s", u)
|
|
}
|
|
}
|
|
|
|
func TestURL_UnknownProvider_FallsToDiceBear(t *testing.T) {
|
|
u := URL(Provider("unknown"), "fallback", DefaultOptions())
|
|
|
|
if !strings.HasPrefix(u, "https://api.dicebear.com/") {
|
|
t.Errorf("unknown provider should fall back to DiceBear: %s", u)
|
|
}
|
|
}
|
|
|
|
func TestURL_SpecialCharsInSeed(t *testing.T) {
|
|
u := URL(ProviderDiceBear, "bot with spaces", DefaultOptions())
|
|
|
|
if strings.Contains(u, " ") {
|
|
t.Errorf("URL should not contain raw spaces: %s", u)
|
|
}
|
|
}
|
|
|
|
func TestAllProviders(t *testing.T) {
|
|
providers := AllProviders()
|
|
if len(providers) != 3 {
|
|
t.Errorf("expected 3 providers, got %d", len(providers))
|
|
}
|
|
}
|
|
|
|
func TestDefaultOptions(t *testing.T) {
|
|
opts := DefaultOptions()
|
|
if opts.Size != 256 {
|
|
t.Errorf("expected default size 256, got %d", opts.Size)
|
|
}
|
|
if opts.DiceBearStyle != DiceBearBottts {
|
|
t.Errorf("expected default style bottts, got %s", opts.DiceBearStyle)
|
|
}
|
|
if opts.RoboHashSet != RoboHashRobots {
|
|
t.Errorf("expected default set set1, got %s", opts.RoboHashSet)
|
|
}
|
|
}
|
|
|
|
func TestURL_Deterministic(t *testing.T) {
|
|
opts := DefaultOptions()
|
|
u1 := URL(ProviderDiceBear, "same-seed", opts)
|
|
u2 := URL(ProviderDiceBear, "same-seed", opts)
|
|
|
|
if u1 != u2 {
|
|
t.Errorf("same seed should produce same URL:\n %s\n %s", u1, u2)
|
|
}
|
|
}
|
|
|
|
func TestURL_DifferentSeeds_DifferentURLs(t *testing.T) {
|
|
opts := DefaultOptions()
|
|
u1 := URL(ProviderDiceBear, "bot-a", opts)
|
|
u2 := URL(ProviderDiceBear, "bot-b", opts)
|
|
|
|
if u1 == u2 {
|
|
t.Error("different seeds should produce different URLs")
|
|
}
|
|
}
|