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) } }) }