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