mirror of
https://github.com/photoprism/photoprism.git
synced 2025-09-26 21:01:58 +08:00
198 lines
5.5 KiB
Go
198 lines
5.5 KiB
Go
package commands
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestShowThumbSizes_JSON(t *testing.T) {
|
|
out, err := RunWithTestContext(ShowThumbSizesCommand, []string{"thumb-sizes", "--json"})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
var v []map[string]string
|
|
if err := json.Unmarshal([]byte(out), &v); err != nil {
|
|
t.Fatalf("invalid json: %v\n%s", err, out)
|
|
}
|
|
if len(v) == 0 {
|
|
t.Fatalf("expected at least one item")
|
|
}
|
|
// Expected keys for thumb-sizes detailed report
|
|
for _, k := range []string{"name", "width", "height", "aspect_ratio", "available", "usage"} {
|
|
if _, ok := v[0][k]; !ok {
|
|
t.Fatalf("expected key '%s' in first item", k)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestShowSources_JSON(t *testing.T) {
|
|
out, err := RunWithTestContext(ShowSourcesCommand, []string{"sources", "--json"})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
var v []map[string]string
|
|
if err := json.Unmarshal([]byte(out), &v); err != nil {
|
|
t.Fatalf("invalid json: %v\n%s", err, out)
|
|
}
|
|
if len(v) == 0 {
|
|
t.Fatalf("expected at least one item")
|
|
}
|
|
if _, ok := v[0]["source"]; !ok {
|
|
t.Fatalf("expected key 'source' in first item")
|
|
}
|
|
if _, ok := v[0]["priority"]; !ok {
|
|
t.Fatalf("expected key 'priority' in first item")
|
|
}
|
|
}
|
|
|
|
func TestShowMetadata_JSON(t *testing.T) {
|
|
out, err := RunWithTestContext(ShowMetadataCommand, []string{"metadata", "--json"})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
var v struct {
|
|
Items []map[string]string `json:"items"`
|
|
Docs []map[string]string `json:"docs"`
|
|
}
|
|
if err := json.Unmarshal([]byte(out), &v); err != nil {
|
|
t.Fatalf("invalid json: %v\n%s", err, out)
|
|
}
|
|
if len(v.Items) == 0 {
|
|
t.Fatalf("expected items")
|
|
}
|
|
}
|
|
|
|
func TestShowConfig_JSON(t *testing.T) {
|
|
out, err := RunWithTestContext(ShowConfigCommand, []string{"config", "--json"})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
var v struct {
|
|
Sections []struct {
|
|
Title string `json:"title"`
|
|
Items []map[string]string `json:"items"`
|
|
} `json:"sections"`
|
|
}
|
|
if err := json.Unmarshal([]byte(out), &v); err != nil {
|
|
t.Fatalf("invalid json: %v\n%s", err, out)
|
|
}
|
|
if len(v.Sections) == 0 || len(v.Sections[0].Items) == 0 {
|
|
t.Fatalf("expected sections with items")
|
|
}
|
|
}
|
|
|
|
func TestShowConfigOptions_JSON(t *testing.T) {
|
|
out, err := RunWithTestContext(ShowConfigOptionsCommand, []string{"config-options", "--json"})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
var v struct {
|
|
Sections []struct {
|
|
Title string `json:"title"`
|
|
Items []map[string]string `json:"items"`
|
|
} `json:"sections"`
|
|
}
|
|
if err := json.Unmarshal([]byte(out), &v); err != nil {
|
|
t.Fatalf("invalid json: %v\n%s", err, out)
|
|
}
|
|
if len(v.Sections) == 0 || len(v.Sections[0].Items) == 0 {
|
|
t.Fatalf("expected sections with items")
|
|
}
|
|
}
|
|
|
|
func TestShowConfigYaml_JSON(t *testing.T) {
|
|
out, err := RunWithTestContext(ShowConfigYamlCommand, []string{"config-yaml", "--json"})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
var v struct {
|
|
Sections []struct {
|
|
Title string `json:"title"`
|
|
Items []map[string]string `json:"items"`
|
|
} `json:"sections"`
|
|
}
|
|
if err := json.Unmarshal([]byte(out), &v); err != nil {
|
|
t.Fatalf("invalid json: %v\n%s", err, out)
|
|
}
|
|
if len(v.Sections) == 0 || len(v.Sections[0].Items) == 0 {
|
|
t.Fatalf("expected sections with items")
|
|
}
|
|
}
|
|
|
|
func TestShowFormatConflict_Error(t *testing.T) {
|
|
out, err := RunWithTestContext(ShowSourcesCommand, []string{"sources", "--json", "--csv"})
|
|
if err == nil {
|
|
t.Fatalf("expected error for conflicting flags, got nil; output=%s", out)
|
|
}
|
|
// Expect an ExitCoder with code 2
|
|
if ec, ok := err.(interface{ ExitCode() int }); ok {
|
|
if ec.ExitCode() != 2 {
|
|
t.Fatalf("expected exit code 2, got %d", ec.ExitCode())
|
|
}
|
|
} else {
|
|
t.Fatalf("expected exit coder error, got %T: %v", err, err)
|
|
}
|
|
}
|
|
|
|
func TestShowConfigOptions_MarkdownSections(t *testing.T) {
|
|
out, err := RunWithTestContext(ShowConfigOptionsCommand, []string{"config-options", "--md"})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if !strings.Contains(out, "### Authentication") {
|
|
t.Fatalf("expected Markdown section heading '### Authentication' in output\n%s", out[:min(400, len(out))])
|
|
}
|
|
}
|
|
|
|
func min(a, b int) int {
|
|
if a < b {
|
|
return a
|
|
}
|
|
return b
|
|
}
|
|
|
|
func TestShowFileFormats_JSON(t *testing.T) {
|
|
out, err := RunWithTestContext(ShowFileFormatsCommand, []string{"file-formats", "--json"})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
var v []map[string]string
|
|
if err := json.Unmarshal([]byte(out), &v); err != nil {
|
|
t.Fatalf("invalid json: %v\n%s", err, out)
|
|
}
|
|
if len(v) == 0 {
|
|
t.Fatalf("expected at least one item")
|
|
}
|
|
// Keys depend on report settings in command: should include format, description, type, extensions
|
|
if _, ok := v[0]["format"]; !ok {
|
|
t.Fatalf("expected key 'format' in first item")
|
|
}
|
|
if _, ok := v[0]["type"]; !ok {
|
|
t.Fatalf("expected key 'type' in first item")
|
|
}
|
|
if _, ok := v[0]["extensions"]; !ok {
|
|
t.Fatalf("expected key 'extensions' in first item")
|
|
}
|
|
}
|
|
|
|
func TestShowVideoSizes_JSON(t *testing.T) {
|
|
out, err := RunWithTestContext(ShowVideoSizesCommand, []string{"video-sizes", "--json"})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
var v []map[string]string
|
|
if err := json.Unmarshal([]byte(out), &v); err != nil {
|
|
t.Fatalf("invalid json: %v\n%s", err, out)
|
|
}
|
|
if len(v) == 0 {
|
|
t.Fatalf("expected at least one item")
|
|
}
|
|
if _, ok := v[0]["size"]; !ok {
|
|
t.Fatalf("expected key 'size' in first item")
|
|
}
|
|
if _, ok := v[0]["usage"]; !ok {
|
|
t.Fatalf("expected key 'usage' in first item")
|
|
}
|
|
}
|