feat: Implement Publisher
This commit is contained in:
123
shared/plugin/implementation/publisher/publisher_test.go
Normal file
123
shared/plugin/implementation/publisher/publisher_test.go
Normal file
@@ -0,0 +1,123 @@
|
||||
package publisher
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"cloud.google.com/go/pubsub"
|
||||
)
|
||||
|
||||
// Helper to create a test publisher directly
|
||||
func createTestPublisher() *Publisher {
|
||||
client, _ := pubsub.NewClient(context.Background(), "test-project")
|
||||
topic := client.Topic("test-topic")
|
||||
return &Publisher{
|
||||
client: client,
|
||||
topic: topic,
|
||||
config: &Config{ProjectID: "test-project", TopicID: "test-topic"},
|
||||
}
|
||||
}
|
||||
|
||||
// TestValidate tests the validate function
|
||||
func TestValidate(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
config *Config
|
||||
wantErr error
|
||||
}{
|
||||
{
|
||||
name: "Valid config",
|
||||
config: &Config{ProjectID: "test-project", TopicID: "test-topic"},
|
||||
wantErr: nil,
|
||||
},
|
||||
{
|
||||
name: "Nil config",
|
||||
config: nil,
|
||||
wantErr: ErrEmptyConfig,
|
||||
},
|
||||
{
|
||||
name: "Empty project ID",
|
||||
config: &Config{ProjectID: "", TopicID: "test-topic"},
|
||||
wantErr: ErrProjectMissing,
|
||||
},
|
||||
{
|
||||
name: "Whitespace project ID",
|
||||
config: &Config{ProjectID: " ", TopicID: "test-topic"},
|
||||
wantErr: ErrProjectMissing,
|
||||
},
|
||||
{
|
||||
name: "Empty topic ID",
|
||||
config: &Config{ProjectID: "test-project", TopicID: ""},
|
||||
wantErr: ErrTopicMissing,
|
||||
},
|
||||
{
|
||||
name: "Whitespace topic ID",
|
||||
config: &Config{ProjectID: "test-project", TopicID: " "},
|
||||
wantErr: ErrTopicMissing,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
err := validate(tt.config)
|
||||
if !errors.Is(err, tt.wantErr) {
|
||||
t.Errorf("validate() error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// TestNew tests the New function with validation errors only
|
||||
// We can't easily test the pubsub client creation parts without complex mocks
|
||||
func TestNew(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
ctx context.Context
|
||||
config *Config
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
// Should fail validation
|
||||
name: "Empty project ID",
|
||||
ctx: context.Background(),
|
||||
config: &Config{ProjectID: "", TopicID: "test-topic"},
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
// Should fail validation
|
||||
name: "Empty topic ID",
|
||||
ctx: context.Background(),
|
||||
config: &Config{ProjectID: "test-project", TopicID: ""},
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
// Should fail due to nil context
|
||||
name: "Nil context",
|
||||
ctx: nil,
|
||||
config: &Config{ProjectID: "test-project", TopicID: "test-topic"},
|
||||
wantErr: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
_, err := New(tt.ctx, tt.config)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("New() error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// TestPublish tests the behavior of the Publisher.Publish method
|
||||
// Since we can't easily mock the pubsub client and topic, we'll skip the actual test
|
||||
func TestPublish(t *testing.T) {
|
||||
t.Skip("Requires real pubsub client or complex mocking")
|
||||
}
|
||||
|
||||
// TestClose tests the behavior of the Publisher.Close method
|
||||
// Since we can't easily mock the pubsub client, we'll skip the actual test
|
||||
func TestClose(t *testing.T) {
|
||||
t.Skip("Requires real pubsub client or complex mocking")
|
||||
}
|
||||
Reference in New Issue
Block a user