mirror of
https://github.com/gotenberg/gotenberg.git
synced 2026-07-02 00:17:40 +08:00
59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
package api
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"log/slog"
|
|
|
|
"github.com/gotenberg/gotenberg/v8/pkg/gotenberg"
|
|
)
|
|
|
|
// ApiMock is a mock for the [Uno] interface.
|
|
type ApiMock struct {
|
|
PdfMock func(ctx context.Context, logger *slog.Logger, inputPath, outputPath string, options Options) error
|
|
ExtensionsMock func() []string
|
|
}
|
|
|
|
func (api *ApiMock) Pdf(ctx context.Context, logger *slog.Logger, inputPath, outputPath string, options Options) error {
|
|
return api.PdfMock(ctx, logger, inputPath, outputPath, options)
|
|
}
|
|
|
|
func (api *ApiMock) Extensions() []string {
|
|
return api.ExtensionsMock()
|
|
}
|
|
|
|
// ProviderMock is a mock for the [Provider] interface.
|
|
type ProviderMock struct {
|
|
LibreOfficeMock func() (Uno, error)
|
|
}
|
|
|
|
func (provider *ProviderMock) LibreOffice() (Uno, error) {
|
|
return provider.LibreOfficeMock()
|
|
}
|
|
|
|
// libreOfficeMock is a mock for the [libreOffice] interface.
|
|
type libreOfficeMock struct {
|
|
errCoreDumpedCount int
|
|
|
|
gotenberg.ProcessMock
|
|
pdfMock func(ctx context.Context, logger *slog.Logger, inputPath, outputPath string, options Options) error
|
|
}
|
|
|
|
func (b *libreOfficeMock) pdf(ctx context.Context, logger *slog.Logger, inputPath, outputPath string, options Options) error {
|
|
err := b.pdfMock(ctx, logger, inputPath, outputPath, options)
|
|
if errors.Is(err, ErrCoreDumped) {
|
|
b.errCoreDumpedCount += 1
|
|
}
|
|
if b.errCoreDumpedCount > 1 {
|
|
return nil
|
|
}
|
|
return err
|
|
}
|
|
|
|
// Interface guards.
|
|
var (
|
|
_ Uno = (*ApiMock)(nil)
|
|
_ Provider = (*ProviderMock)(nil)
|
|
_ libreOffice = (*libreOfficeMock)(nil)
|
|
)
|