Adds internal/reddit package with a Fetcher interface and Client implementation backed by go-reddit/v2. Handles hot/top/rising/new sort variants with correct option types per the library API.
39 lines
860 B
Go
39 lines
860 B
Go
package reddit_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"somegit.dev/vikingowl/reddit-reader/internal/domain"
|
|
redditpkg "somegit.dev/vikingowl/reddit-reader/internal/reddit"
|
|
)
|
|
|
|
type mockFetcher struct {
|
|
posts []domain.Post
|
|
err error
|
|
}
|
|
|
|
func (m *mockFetcher) FetchPosts(_ context.Context, _, _ string, _ int) ([]domain.Post, error) {
|
|
return m.posts, m.err
|
|
}
|
|
|
|
func TestFetcherInterface(t *testing.T) {
|
|
mock := &mockFetcher{
|
|
posts: []domain.Post{
|
|
{ID: "t3_a", Title: "Test", Subreddit: "golang", CreatedUTC: time.Now()},
|
|
},
|
|
}
|
|
var fetcher redditpkg.Fetcher = mock
|
|
posts, err := fetcher.FetchPosts(context.Background(), "golang", "new", 25)
|
|
if err != nil {
|
|
t.Fatalf("FetchPosts: %v", err)
|
|
}
|
|
if len(posts) != 1 {
|
|
t.Fatalf("len = %d, want 1", len(posts))
|
|
}
|
|
if posts[0].ID != "t3_a" {
|
|
t.Errorf("ID = %q, want t3_a", posts[0].ID)
|
|
}
|
|
}
|