ultisuite-backend/internal/api/photos/validate_test.go
R3D347HR4Y f0f0b31043 Implement Photos API robustness and quota integration
Improve Immich-backed photos endpoints with robust mapping/error handling, full albums CRUD, reliable list pagination/sorting/filtering, and shared Nextcloud quota checks before upload.
2026-05-22 21:09:13 +02:00

74 lines
2.4 KiB
Go

package photos
import (
"testing"
"github.com/ultisuite/ulti-backend/internal/api/apivalidate"
)
func hasFieldDetail(err *apivalidate.ValidationError, field, message string) bool {
if err == nil {
return false
}
for _, d := range err.Details {
if d.Field == field && d.Message == message {
return true
}
}
return false
}
func TestValidateAlbumID(t *testing.T) {
if validateAlbumID("album-1") != nil {
t.Fatal("expected valid album id")
}
if err := validateAlbumID(""); !hasFieldDetail(err, "album_id", "required") {
t.Fatal("expected required album_id error")
}
}
func TestValidateCreateAlbum(t *testing.T) {
if validateCreateAlbum(&createAlbumRequest{Name: "Vacation"}) != nil {
t.Fatal("expected valid create album request")
}
if err := validateCreateAlbum(&createAlbumRequest{}); !hasFieldDetail(err, "name", "required") {
t.Fatal("expected missing name error")
}
if err := validateCreateAlbum(&createAlbumRequest{Name: "Trip", AssetIDs: []string{""}}); !hasFieldDetail(err, "asset_ids", "invalid") {
t.Fatal("expected invalid asset_ids error")
}
if err := validateCreateAlbum(&createAlbumRequest{Name: "Bad\nName"}); !hasFieldDetail(err, "name", "invalid") {
t.Fatal("expected invalid name error")
}
}
func TestValidateUpdateAlbum(t *testing.T) {
name := "Renamed"
if validateUpdateAlbum(&updateAlbumRequest{Name: &name}) != nil {
t.Fatal("expected valid update album request")
}
desc := "Notes"
if validateUpdateAlbum(&updateAlbumRequest{Description: &desc}) != nil {
t.Fatal("expected valid description-only update")
}
if err := validateUpdateAlbum(&updateAlbumRequest{}); !hasFieldDetail(err, "body", "required") {
t.Fatal("expected empty body error")
}
blank := " "
if err := validateUpdateAlbum(&updateAlbumRequest{Name: &blank}); !hasFieldDetail(err, "name", "required") {
t.Fatal("expected blank name error")
}
}
func TestValidateAlbumAssetsRequest(t *testing.T) {
if validateAlbumAssetsRequest(&albumAssetsRequest{AssetIDs: []string{"a1"}}) != nil {
t.Fatal("expected valid album assets request")
}
if err := validateAlbumAssetsRequest(&albumAssetsRequest{}); !hasFieldDetail(err, "asset_ids", "required") {
t.Fatal("expected required asset_ids error")
}
if err := validateAlbumAssetsRequest(&albumAssetsRequest{AssetIDs: []string{" "}}); !hasFieldDetail(err, "asset_ids", "invalid") {
t.Fatal("expected invalid asset_ids error")
}
}