- Added new endpoints for listing trash, recent, and starred files. - Implemented chunked file uploads to support large file handling. - Introduced copy and rename functionalities for file management. - Enhanced error handling with specific drive-related error responses. - Updated validation for copy and rename requests. - Improved service methods to handle new functionalities and ensure quota checks. - Updated project checklist to reflect completion of file management features.
107 lines
3.9 KiB
Go
107 lines
3.9 KiB
Go
package drive
|
|
|
|
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 TestValidateMoveRequest(t *testing.T) {
|
|
if validateMoveRequest(&moveRequest{Source: "/a", Destination: "/b"}) != nil {
|
|
t.Fatal("expected valid move request")
|
|
}
|
|
if err := validateMoveRequest(&moveRequest{Destination: "/b"}); !hasFieldDetail(err, "source", "required") {
|
|
t.Fatal("expected missing source error")
|
|
}
|
|
if err := validateMoveRequest(&moveRequest{Source: "/a"}); !hasFieldDetail(err, "destination", "required") {
|
|
t.Fatal("expected missing destination error")
|
|
}
|
|
if err := validateMoveRequest(&moveRequest{}); len(err.Details) != 2 {
|
|
t.Fatalf("expected two validation errors, got %d", len(err.Details))
|
|
}
|
|
}
|
|
|
|
func TestValidateCopyRequest(t *testing.T) {
|
|
if validateCopyRequest(©Request{Source: "/a", Destination: "/b"}) != nil {
|
|
t.Fatal("expected valid copy request")
|
|
}
|
|
if err := validateCopyRequest(©Request{Destination: "/b"}); !hasFieldDetail(err, "source", "required") {
|
|
t.Fatal("expected missing source error")
|
|
}
|
|
if err := validateCopyRequest(©Request{Source: "/a"}); !hasFieldDetail(err, "destination", "required") {
|
|
t.Fatal("expected missing destination error")
|
|
}
|
|
if err := validateCopyRequest(©Request{}); len(err.Details) != 2 {
|
|
t.Fatalf("expected two validation errors, got %d", len(err.Details))
|
|
}
|
|
}
|
|
|
|
func TestValidateRenameRequest(t *testing.T) {
|
|
if validateRenameRequest(&renameRequest{Path: "/docs", NewName: "report.pdf"}) != nil {
|
|
t.Fatal("expected valid rename request")
|
|
}
|
|
if err := validateRenameRequest(&renameRequest{NewName: "report.pdf"}); !hasFieldDetail(err, "path", "required") {
|
|
t.Fatal("expected missing path error")
|
|
}
|
|
if err := validateRenameRequest(&renameRequest{Path: "/docs"}); !hasFieldDetail(err, "new_name", "required") {
|
|
t.Fatal("expected missing new_name error")
|
|
}
|
|
if err := validateRenameRequest(&renameRequest{Path: "/docs", NewName: "bad/name"}); !hasFieldDetail(err, "new_name", "invalid") {
|
|
t.Fatal("expected invalid new_name error for slash")
|
|
}
|
|
}
|
|
|
|
func TestValidateCreateShareRequest(t *testing.T) {
|
|
if validateCreateShareRequest(&createShareRequest{Path: "/docs/file.pdf"}) != nil {
|
|
t.Fatal("expected valid share request with path only")
|
|
}
|
|
if validateCreateShareRequest(&createShareRequest{Path: "/docs/file.pdf", Role: "editor", Permissions: 0}) != nil {
|
|
t.Fatal("expected role without permissions to be accepted")
|
|
}
|
|
for _, role := range []string{"owner", "editor", "viewer", "Owner", " EDITOR "} {
|
|
if validateCreateShareRequest(&createShareRequest{Path: "/docs/file.pdf", Role: role}) != nil {
|
|
t.Fatalf("expected valid role %q", role)
|
|
}
|
|
}
|
|
if err := validateCreateShareRequest(&createShareRequest{Role: "editor"}); !hasFieldDetail(err, "path", "required") {
|
|
t.Fatal("expected missing path error")
|
|
}
|
|
if err := validateCreateShareRequest(&createShareRequest{Path: "/docs/file.pdf", Role: "admin"}); !hasFieldDetail(err, "role", "invalid") {
|
|
t.Fatal("expected invalid role error")
|
|
}
|
|
}
|
|
|
|
func TestSharePermissionsForRole(t *testing.T) {
|
|
tests := []struct {
|
|
role string
|
|
permissions int
|
|
ok bool
|
|
}{
|
|
{role: "owner", permissions: 31, ok: true},
|
|
{role: "editor", permissions: 15, ok: true},
|
|
{role: "viewer", permissions: 1, ok: true},
|
|
{role: "Owner", permissions: 31, ok: true},
|
|
{role: " EDITOR ", permissions: 15, ok: true},
|
|
{role: "admin", permissions: 0, ok: false},
|
|
{role: "", permissions: 0, ok: false},
|
|
}
|
|
for _, tt := range tests {
|
|
got, ok := sharePermissionsForRole(tt.role)
|
|
if ok != tt.ok || got != tt.permissions {
|
|
t.Fatalf("sharePermissionsForRole(%q) = (%d, %v), want (%d, %v)", tt.role, got, ok, tt.permissions, tt.ok)
|
|
}
|
|
}
|
|
}
|