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