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.
74 lines
2.4 KiB
Go
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")
|
|
}
|
|
}
|