mirror of
https://tangled.org/evan.jarrett.net/at-container-registry
synced 2026-09-20 09:14:16 +00:00
121 lines
4.7 KiB
Go
121 lines
4.7 KiB
Go
package db
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestGetRepositoryMetadata(t *testing.T) {
|
|
// Create in-memory test database
|
|
db, err := InitDB(":memory:")
|
|
if err != nil {
|
|
t.Fatalf("Failed to init database: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
// Insert test user
|
|
testUser := &User{
|
|
DID: "did:plc:test123",
|
|
Handle: "testuser.bsky.social",
|
|
PDSEndpoint: "https://test.pds.example.com",
|
|
Avatar: "",
|
|
LastSeen: time.Now(),
|
|
}
|
|
if err := UpsertUser(db, testUser); err != nil {
|
|
t.Fatalf("Failed to insert user: %v", err)
|
|
}
|
|
|
|
// Test 1: No manifests - should return empty strings
|
|
title, description, sourceURL, documentationURL, licenses, iconURL, err := GetRepositoryMetadata(db, testUser.DID, "nonexistent")
|
|
if err != nil {
|
|
t.Fatalf("Expected no error for nonexistent repo, got: %v", err)
|
|
}
|
|
if title != "" || description != "" || sourceURL != "" || documentationURL != "" || licenses != "" || iconURL != "" {
|
|
t.Error("Expected all empty strings for nonexistent repository")
|
|
}
|
|
|
|
// Test 2: Insert manifest with metadata
|
|
_, err = db.Exec(`
|
|
INSERT INTO manifests (did, repository, digest, hold_endpoint, schema_version, media_type, created_at,
|
|
title, description, source_url, documentation_url, licenses, icon_url)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
`, testUser.DID, "myapp", "sha256:abc123", "did:web:hold.example.com", 2, "application/vnd.oci.image.manifest.v1+json",
|
|
time.Now().Add(-2*time.Hour),
|
|
"My App", "A cool application", "https://github.com/user/myapp", "https://docs.example.com", "MIT", "https://example.com/icon.png")
|
|
if err != nil {
|
|
t.Fatalf("Failed to insert manifest: %v", err)
|
|
}
|
|
|
|
// Test 3: Retrieve metadata
|
|
title, description, sourceURL, documentationURL, licenses, iconURL, err = GetRepositoryMetadata(db, testUser.DID, "myapp")
|
|
if err != nil {
|
|
t.Fatalf("Failed to get repository metadata: %v", err)
|
|
}
|
|
|
|
if title != "My App" {
|
|
t.Errorf("Expected title 'My App', got '%s'", title)
|
|
}
|
|
if description != "A cool application" {
|
|
t.Errorf("Expected description 'A cool application', got '%s'", description)
|
|
}
|
|
if sourceURL != "https://github.com/user/myapp" {
|
|
t.Errorf("Expected sourceURL 'https://github.com/user/myapp', got '%s'", sourceURL)
|
|
}
|
|
if documentationURL != "https://docs.example.com" {
|
|
t.Errorf("Expected documentationURL 'https://docs.example.com', got '%s'", documentationURL)
|
|
}
|
|
if licenses != "MIT" {
|
|
t.Errorf("Expected licenses 'MIT', got '%s'", licenses)
|
|
}
|
|
if iconURL != "https://example.com/icon.png" {
|
|
t.Errorf("Expected iconURL 'https://example.com/icon.png', got '%s'", iconURL)
|
|
}
|
|
|
|
// Test 4: Insert newer manifest with different metadata
|
|
_, err = db.Exec(`
|
|
INSERT INTO manifests (did, repository, digest, hold_endpoint, schema_version, media_type, created_at,
|
|
title, description, source_url, documentation_url, licenses, icon_url)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
`, testUser.DID, "myapp", "sha256:def456", "did:web:hold.example.com", 2, "application/vnd.oci.image.manifest.v1+json",
|
|
time.Now(), // Most recent
|
|
"My App v2", "An even cooler application", "https://github.com/user/myapp-v2", "https://v2.docs.example.com", "Apache-2.0", "https://example.com/icon-v2.png")
|
|
if err != nil {
|
|
t.Fatalf("Failed to insert newer manifest: %v", err)
|
|
}
|
|
|
|
// Test 5: Should return metadata from most recent manifest
|
|
title, description, sourceURL, documentationURL, licenses, iconURL, err = GetRepositoryMetadata(db, testUser.DID, "myapp")
|
|
if err != nil {
|
|
t.Fatalf("Failed to get repository metadata: %v", err)
|
|
}
|
|
|
|
if title != "My App v2" {
|
|
t.Errorf("Expected title from newest manifest 'My App v2', got '%s'", title)
|
|
}
|
|
if description != "An even cooler application" {
|
|
t.Errorf("Expected description from newest manifest, got '%s'", description)
|
|
}
|
|
if licenses != "Apache-2.0" {
|
|
t.Errorf("Expected licenses 'Apache-2.0', got '%s'", licenses)
|
|
}
|
|
|
|
// Test 6: Manifest with NULL metadata fields
|
|
_, err = db.Exec(`
|
|
INSERT INTO manifests (did, repository, digest, hold_endpoint, schema_version, media_type, created_at)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
`, testUser.DID, "minimal-app", "sha256:minimal", "did:web:hold.example.com", 2, "application/vnd.oci.image.manifest.v1+json", time.Now())
|
|
if err != nil {
|
|
t.Fatalf("Failed to insert minimal manifest: %v", err)
|
|
}
|
|
|
|
// Test 7: Should handle NULL fields gracefully
|
|
title, description, sourceURL, documentationURL, licenses, iconURL, err = GetRepositoryMetadata(db, testUser.DID, "minimal-app")
|
|
if err != nil {
|
|
t.Fatalf("Failed to get repository metadata for minimal app: %v", err)
|
|
}
|
|
|
|
if title != "" || description != "" || sourceURL != "" || documentationURL != "" || licenses != "" || iconURL != "" {
|
|
t.Error("Expected all empty strings for manifest with NULL metadata fields")
|
|
}
|
|
}
|