Files
mal/api/watchlist/service_test.go

72 lines
1.7 KiB
Go

package watchlist
import (
"context"
"testing"
"mal/internal/db"
)
type fakeQuerier struct {
db.Querier
upsertAnimeCalled bool
upsertEntryCalled bool
upsertEntryParams db.UpsertWatchListEntryParams
getAnimeFunc func(ctx context.Context, id int64) (db.Anime, error)
}
func (f *fakeQuerier) GetAnime(ctx context.Context, id int64) (db.Anime, error) {
if f.getAnimeFunc != nil {
return f.getAnimeFunc(ctx, id)
}
return db.Anime{}, nil
}
func (f *fakeQuerier) UpsertAnime(ctx context.Context, arg db.UpsertAnimeParams) (db.Anime, error) {
f.upsertAnimeCalled = true
return db.Anime{}, nil
}
func (f *fakeQuerier) UpsertWatchListEntry(ctx context.Context, arg db.UpsertWatchListEntryParams) (db.WatchListEntry, error) {
f.upsertEntryCalled = true
f.upsertEntryParams = arg
return db.WatchListEntry{}, nil
}
func (f *fakeQuerier) GetUserWatchList(ctx context.Context, userID string) ([]db.GetUserWatchListRow, error) {
return nil, nil
}
func TestAddEntry_RejectsInvalidAnimeID(t *testing.T) {
t.Parallel()
q := &fakeQuerier{}
svc := NewService(q, nil, nil)
err := svc.AddToWatchlist(context.Background(), "user-1", 0, "watching")
if err != ErrInvalidAnimeID {
t.Fatalf("expected ErrInvalidAnimeID, got %v", err)
}
if q.upsertAnimeCalled || q.upsertEntryCalled {
t.Fatal("expected no database writes for invalid anime id")
}
}
func TestAddEntry_RejectsInvalidStatus(t *testing.T) {
t.Parallel()
q := &fakeQuerier{}
svc := NewService(q, nil, nil)
err := svc.AddToWatchlist(context.Background(), "user-1", 1, "invalid")
if err != ErrInvalidStatus {
t.Fatalf("expected ErrInvalidStatus, got %v", err)
}
if q.upsertAnimeCalled || q.upsertEntryCalled {
t.Fatal("expected no database writes for invalid status")
}
}