102 lines
2.3 KiB
Go
102 lines
2.3 KiB
Go
package artifact
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/scriptorium/internal/domain"
|
|
)
|
|
|
|
func TestCompositeReader_Read(t *testing.T) {
|
|
reader := NewCompositeReader()
|
|
ctx := context.Background()
|
|
|
|
t.Run("inline artifact", func(t *testing.T) {
|
|
ref := domain.ArtifactRef{
|
|
Type: domain.ArtifactRefInline,
|
|
Body: "hello world",
|
|
}
|
|
art, err := reader.Read(ctx, ref)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if string(art.Body) != "hello world" {
|
|
t.Errorf("expected 'hello world', got %s", string(art.Body))
|
|
}
|
|
if art.Hash == "" {
|
|
t.Error("expected hash to be computed")
|
|
}
|
|
})
|
|
|
|
t.Run("inline artifact missing body", func(t *testing.T) {
|
|
ref := domain.ArtifactRef{
|
|
Type: domain.ArtifactRefInline,
|
|
Body: "",
|
|
}
|
|
_, err := reader.Read(ctx, ref)
|
|
if err == nil || err != ErrMissingInlineBody {
|
|
t.Errorf("expected ErrMissingInlineBody, got %v", err)
|
|
}
|
|
})
|
|
|
|
t.Run("unsupported ref type", func(t *testing.T) {
|
|
ref := domain.ArtifactRef{
|
|
Type: domain.ArtifactRefS3,
|
|
URI: "s3://bucket/key",
|
|
}
|
|
_, err := reader.Read(ctx, ref)
|
|
if err == nil {
|
|
t.Error("expected error for unsupported type")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestFileReader_Read(t *testing.T) {
|
|
content := []byte("test file content")
|
|
tmpFile, err := os.CreateTemp("", "artifact_test_*.txt")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer os.Remove(tmpFile.Name())
|
|
|
|
if _, err := tmpFile.Write(content); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
tmpFile.Close()
|
|
|
|
reader := NewCompositeReader()
|
|
ctx := context.Background()
|
|
|
|
t.Run("file artifact loading", func(t *testing.T) {
|
|
ref := domain.ArtifactRef{
|
|
Type: domain.ArtifactRefFile,
|
|
URI: tmpFile.Name(),
|
|
}
|
|
art, err := reader.Read(ctx, ref)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if string(art.Body) != string(content) {
|
|
t.Errorf("expected %s, got %s", string(content), string(art.Body))
|
|
}
|
|
if art.Name == "" {
|
|
t.Error("expected name to be inferred from filename")
|
|
}
|
|
if art.Hash == "" {
|
|
t.Error("expected hash to be computed")
|
|
}
|
|
})
|
|
|
|
t.Run("missing file path", func(t *testing.T) {
|
|
ref := domain.ArtifactRef{
|
|
Type: domain.ArtifactRefFile,
|
|
URI: "",
|
|
}
|
|
_, err := reader.Read(ctx, ref)
|
|
if err == nil || err != ErrMissingFilePath {
|
|
t.Errorf("expected ErrMissingFilePath, got %v", err)
|
|
}
|
|
})
|
|
}
|