mirror of
https://github.com/gotenberg/gotenberg.git
synced 2026-08-08 16:42:15 +01:00
216 lines
4.9 KiB
Go
216 lines
4.9 KiB
Go
package pdfengines
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/gotenberg/gotenberg/v7/pkg/gotenberg"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
func TestNewMultiPDFEngines(t *testing.T) {
|
|
engine1 := &ProtoPDFEngine{
|
|
merge: func(_ context.Context, _ *zap.Logger, _ []string, _ string) error {
|
|
return nil
|
|
},
|
|
convert: func(_ context.Context, _ *zap.Logger, _, _, _ string) error {
|
|
return nil
|
|
},
|
|
}
|
|
|
|
engine2 := &ProtoPDFEngine{
|
|
merge: func(_ context.Context, _ *zap.Logger, _ []string, _ string) error {
|
|
return errors.New("foo")
|
|
},
|
|
convert: func(_ context.Context, _ *zap.Logger, _, _, _ string) error {
|
|
return errors.New("foo")
|
|
},
|
|
}
|
|
|
|
multi := newMultiPDFEngines(engine1, engine2)
|
|
|
|
if len(multi.engines) != 2 {
|
|
t.Fatalf("expected %d engines but got %d", 2, len(multi.engines))
|
|
}
|
|
|
|
if !reflect.DeepEqual(engine1, multi.engines[0]) {
|
|
t.Errorf("expected %v, but got: %v", engine1, multi.engines[0])
|
|
}
|
|
|
|
if !reflect.DeepEqual(engine2, multi.engines[1]) {
|
|
t.Errorf("expected %v, but got: %v", engine2, multi.engines[1])
|
|
}
|
|
}
|
|
|
|
func TestMultiPDFEngines_Merge(t *testing.T) {
|
|
for i, tc := range []struct {
|
|
ctx context.Context
|
|
engines []gotenberg.PDFEngine
|
|
expectErr bool
|
|
}{
|
|
{
|
|
ctx: context.TODO(),
|
|
engines: func() []gotenberg.PDFEngine {
|
|
return []gotenberg.PDFEngine{
|
|
ProtoPDFEngine{
|
|
merge: func(_ context.Context, _ *zap.Logger, _ []string, _ string) error {
|
|
return nil
|
|
},
|
|
},
|
|
}
|
|
}(),
|
|
},
|
|
{
|
|
ctx: context.TODO(),
|
|
engines: func() []gotenberg.PDFEngine {
|
|
return []gotenberg.PDFEngine{
|
|
ProtoPDFEngine{
|
|
merge: func(_ context.Context, _ *zap.Logger, _ []string, _ string) error {
|
|
return errors.New("foo")
|
|
},
|
|
},
|
|
ProtoPDFEngine{
|
|
merge: func(_ context.Context, _ *zap.Logger, _ []string, _ string) error {
|
|
return nil
|
|
},
|
|
},
|
|
}
|
|
}(),
|
|
},
|
|
{
|
|
ctx: context.TODO(),
|
|
engines: func() []gotenberg.PDFEngine {
|
|
return []gotenberg.PDFEngine{
|
|
ProtoPDFEngine{
|
|
merge: func(_ context.Context, _ *zap.Logger, _ []string, _ string) error {
|
|
return errors.New("foo")
|
|
},
|
|
},
|
|
ProtoPDFEngine{
|
|
merge: func(_ context.Context, _ *zap.Logger, _ []string, _ string) error {
|
|
return errors.New("bar")
|
|
},
|
|
},
|
|
}
|
|
}(),
|
|
expectErr: true,
|
|
},
|
|
{
|
|
ctx: func() context.Context {
|
|
ctx, cancel := context.WithCancel(context.TODO())
|
|
defer cancel()
|
|
|
|
return ctx
|
|
}(),
|
|
engines: func() []gotenberg.PDFEngine {
|
|
return []gotenberg.PDFEngine{
|
|
ProtoPDFEngine{
|
|
merge: func(_ context.Context, _ *zap.Logger, _ []string, _ string) error {
|
|
return nil
|
|
},
|
|
},
|
|
}
|
|
}(),
|
|
expectErr: true,
|
|
},
|
|
} {
|
|
multi := newMultiPDFEngines(tc.engines...)
|
|
err := multi.Merge(tc.ctx, nil, nil, "")
|
|
|
|
if tc.expectErr && err == nil {
|
|
t.Errorf("test %d: expected error but got: %v", i, err)
|
|
}
|
|
|
|
if !tc.expectErr && err != nil {
|
|
t.Errorf("test %d: expected no error but got: %v", i, err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMultiPDFEngines_Convert(t *testing.T) {
|
|
for i, tc := range []struct {
|
|
ctx context.Context
|
|
engines []gotenberg.PDFEngine
|
|
expectErr bool
|
|
}{
|
|
{
|
|
ctx: context.TODO(),
|
|
engines: func() []gotenberg.PDFEngine {
|
|
return []gotenberg.PDFEngine{
|
|
ProtoPDFEngine{
|
|
convert: func(_ context.Context, _ *zap.Logger, _, _, _ string) error {
|
|
return nil
|
|
},
|
|
},
|
|
}
|
|
}(),
|
|
},
|
|
{
|
|
ctx: context.TODO(),
|
|
engines: func() []gotenberg.PDFEngine {
|
|
return []gotenberg.PDFEngine{
|
|
ProtoPDFEngine{
|
|
convert: func(_ context.Context, _ *zap.Logger, _, _, _ string) error {
|
|
return errors.New("foo")
|
|
},
|
|
},
|
|
ProtoPDFEngine{
|
|
convert: func(_ context.Context, _ *zap.Logger, _, _, _ string) error {
|
|
return nil
|
|
},
|
|
},
|
|
}
|
|
}(),
|
|
},
|
|
{
|
|
ctx: context.TODO(),
|
|
engines: func() []gotenberg.PDFEngine {
|
|
return []gotenberg.PDFEngine{
|
|
ProtoPDFEngine{
|
|
convert: func(_ context.Context, _ *zap.Logger, _, _, _ string) error {
|
|
return errors.New("foo")
|
|
},
|
|
},
|
|
ProtoPDFEngine{
|
|
convert: func(_ context.Context, _ *zap.Logger, _, _, _ string) error {
|
|
return errors.New("bar")
|
|
},
|
|
},
|
|
}
|
|
}(),
|
|
expectErr: true,
|
|
},
|
|
{
|
|
ctx: func() context.Context {
|
|
ctx, cancel := context.WithCancel(context.TODO())
|
|
defer cancel()
|
|
|
|
return ctx
|
|
}(),
|
|
engines: func() []gotenberg.PDFEngine {
|
|
return []gotenberg.PDFEngine{
|
|
ProtoPDFEngine{
|
|
convert: func(_ context.Context, _ *zap.Logger, _, _, _ string) error {
|
|
return nil
|
|
},
|
|
},
|
|
}
|
|
}(),
|
|
expectErr: true,
|
|
},
|
|
} {
|
|
multi := newMultiPDFEngines(tc.engines...)
|
|
err := multi.Convert(tc.ctx, nil, "", "", "")
|
|
|
|
if tc.expectErr && err == nil {
|
|
t.Errorf("test %d: expected error but got: %v", i, err)
|
|
}
|
|
|
|
if !tc.expectErr && err != nil {
|
|
t.Errorf("test %d: expected no error but got: %v", i, err)
|
|
}
|
|
}
|
|
}
|