forked from baron/baron-sso
94 lines
2.2 KiB
Go
94 lines
2.2 KiB
Go
package domain
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
func TestJSONMapValue(t *testing.T) {
|
|
t.Run("nil map returns nil database value", func(t *testing.T) {
|
|
var payload JSONMap
|
|
|
|
value, err := payload.Value()
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if value != nil {
|
|
t.Fatalf("expected nil value, got %v", value)
|
|
}
|
|
})
|
|
|
|
t.Run("map marshals to JSON string", func(t *testing.T) {
|
|
payload := JSONMap{"enabled": true, "name": "baron"}
|
|
|
|
value, err := payload.Value()
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
|
|
raw, ok := value.(string)
|
|
if !ok {
|
|
t.Fatalf("expected string value, got %T", value)
|
|
}
|
|
|
|
var decoded map[string]any
|
|
if err := json.Unmarshal([]byte(raw), &decoded); err != nil {
|
|
t.Fatalf("value should be valid json: %v", err)
|
|
}
|
|
if decoded["enabled"] != true || decoded["name"] != "baron" {
|
|
t.Fatalf("unexpected decoded value: %#v", decoded)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestJSONMapScan(t *testing.T) {
|
|
t.Run("nil value becomes empty map", func(t *testing.T) {
|
|
var payload JSONMap
|
|
|
|
if err := payload.Scan(nil); err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if payload == nil || len(payload) != 0 {
|
|
t.Fatalf("expected empty map, got %#v", payload)
|
|
}
|
|
})
|
|
|
|
t.Run("byte slice value decodes JSON", func(t *testing.T) {
|
|
var payload JSONMap
|
|
|
|
if err := payload.Scan([]byte(`{"count":2,"name":"baron"}`)); err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if payload["count"] != float64(2) || payload["name"] != "baron" {
|
|
t.Fatalf("unexpected payload: %#v", payload)
|
|
}
|
|
})
|
|
|
|
t.Run("string value decodes JSON", func(t *testing.T) {
|
|
var payload JSONMap
|
|
|
|
if err := payload.Scan(`{"active":true}`); err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if payload["active"] != true {
|
|
t.Fatalf("unexpected payload: %#v", payload)
|
|
}
|
|
})
|
|
|
|
t.Run("unsupported value type returns error", func(t *testing.T) {
|
|
var payload JSONMap
|
|
|
|
if err := payload.Scan(42); err == nil {
|
|
t.Fatalf("expected unsupported type error")
|
|
}
|
|
})
|
|
|
|
t.Run("invalid JSON returns error", func(t *testing.T) {
|
|
var payload JSONMap
|
|
|
|
if err := payload.Scan(`{invalid`); err == nil {
|
|
t.Fatalf("expected invalid JSON error")
|
|
}
|
|
})
|
|
}
|