You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
1.5 KiB
Go

package main
import (
"context"
"errors"
"github.com/riverqueue/river"
"os"
"testing"
)
type mockWriter struct {
called bool
filename string
data []byte
perm uint32
fail bool
}
func (m *mockWriter) WriteFile(filename string, data []byte, perm uint32) error {
m.called = true
m.filename = filename
m.data = data
m.perm = perm
if m.fail {
return errors.New("mock write error")
}
return nil
}
func TestMessageWorker_Work_Success(t *testing.T) {
called := false
mw := &MessageWorker{
dbPool: nil, // not used in this test
Writer: func(filename string, data []byte, perm os.FileMode) error {
called = true
if string(data) != "hello test" {
t.Errorf("expected message 'hello test', got '%s'", string(data))
}
return nil
},
}
job := &river.Job[MessageArgs]{
Args: MessageArgs{Message: "hello test"},
}
// The DB logic will fail, so we expect an error
ctx := context.Background()
// Call Work and expect error due to nil dbPool
err := mw.Work(ctx, job)
if err != nil {
t.Errorf("expected no error, got: %v", err)
}
if !called {
t.Error("expected writer to be called")
}
}
func TestMessageWorker_Work_WriterError(t *testing.T) {
mw := &MessageWorker{
dbPool: nil,
Writer: func(filename string, data []byte, perm os.FileMode) error {
return errors.New("fail")
},
}
job := &river.Job[MessageArgs]{
Args: MessageArgs{Message: "fail test"},
}
ctx := context.Background()
err := mw.Work(ctx, job)
if err == nil {
t.Error("expected error due to writer fail, got nil")
}
}