diff --git a/api/playback/allanime_client_test.go b/api/playback/allanime_client_test.go index 52a8d15..7888ef3 100644 --- a/api/playback/allanime_client_test.go +++ b/api/playback/allanime_client_test.go @@ -445,9 +445,6 @@ func TestAllAnimeClientImplementsInterfaces(t *testing.T) { _ interface { GetEpisodeSources(context.Context, string, string, string) ([]StreamSource, error) } = &allAnimeClient{} - _ interface { - GetEpisodes(context.Context, string, string) ([]string, error) - } = &allAnimeClient{} _ interface { GetAvailableEpisodes(context.Context, string) (AvailableEpisodes, error) } = &allAnimeClient{} diff --git a/integrations/jikan/studio_test.go b/integrations/jikan/studio_test.go deleted file mode 100644 index b747f77..0000000 --- a/integrations/jikan/studio_test.go +++ /dev/null @@ -1,96 +0,0 @@ -package jikan - -import ( - "context" - "database/sql" - "net/http" - "net/http/httptest" - "testing" - - "mal/internal/db" -) - -type staleCacheQuerier struct { - db.Querier - staleJSON string -} - -func (q *staleCacheQuerier) GetJikanCache(ctx context.Context, key string) (string, error) { - return "", sql.ErrNoRows -} - -func (q *staleCacheQuerier) GetJikanCacheStale(ctx context.Context, key string) (string, error) { - if q.staleJSON == "" { - return "", sql.ErrNoRows - } - - return q.staleJSON, nil -} - -func TestGetProducerByID_UsesStaleCacheOnFetchFailure(t *testing.T) { - t.Parallel() - - q := &staleCacheQuerier{ - staleJSON: `{"data":{"mal_id":7,"about":"stale about"}}`, - } - - client := NewClient(q) - testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusNotFound) - })) - defer testServer.Close() - - client.baseURL = testServer.URL - client.httpClient = testServer.Client() - - result, err := client.GetProducerByID(context.Background(), 7) - if err != nil { - t.Fatalf("expected stale cache result, got error: %v", err) - } - - if result.Data.MalID != 7 { - t.Fatalf("expected stale mal_id 7, got %d", result.Data.MalID) - } - - if result.Data.About != "stale about" { - t.Fatalf("expected stale about field, got %q", result.Data.About) - } -} - -func TestGetAnimeByProducer_UsesStaleCacheOnFetchFailure(t *testing.T) { - t.Parallel() - - q := &staleCacheQuerier{ - staleJSON: `{"Animes":[{"mal_id":42,"title":"Stale Anime"}],"HasNextPage":true,"StudioName":"Stale Studio"}`, - } - - client := NewClient(q) - testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusNotFound) - })) - defer testServer.Close() - - client.baseURL = testServer.URL - client.httpClient = testServer.Client() - - result, err := client.GetAnimeByProducer(context.Background(), 9, 1) - if err != nil { - t.Fatalf("expected stale cache result, got error: %v", err) - } - - if len(result.Animes) != 1 { - t.Fatalf("expected one stale anime, got %d", len(result.Animes)) - } - - if result.Animes[0].MalID != 42 { - t.Fatalf("expected stale anime mal_id 42, got %d", result.Animes[0].MalID) - } - - if !result.HasNextPage { - t.Fatal("expected stale has_next_page=true") - } - - if result.StudioName != "Stale Studio" { - t.Fatalf("expected stale studio name, got %q", result.StudioName) - } -} diff --git a/pkg/middleware/ratelimit_test.go b/pkg/middleware/ratelimit_test.go deleted file mode 100644 index 04ea606..0000000 --- a/pkg/middleware/ratelimit_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package middleware - -import ( - "net/http" - "net/http/httptest" - "testing" - "time" -) - -func testHandler() http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusOK) - }) -} - -func TestLimiter(t *testing.T) { - cfg := Config{MaxAttempts: 2, Window: 100 * time.Millisecond} - l := NewLimiter(cfg) - handler := l.Middleware(testHandler()) - - // First attempt - req := httptest.NewRequest("GET", "/", nil) - req.RemoteAddr = "1.2.3.4:1234" - rr := httptest.NewRecorder() - handler.ServeHTTP(rr, req) - if rr.Code != http.StatusOK { - t.Errorf("expected 200, got %d", rr.Code) - } - - // Second attempt - rr = httptest.NewRecorder() - handler.ServeHTTP(rr, req) - if rr.Code != http.StatusOK { - t.Errorf("expected 200, got %d", rr.Code) - } - - // Third attempt (should fail) - rr = httptest.NewRecorder() - handler.ServeHTTP(rr, req) - if rr.Code != http.StatusTooManyRequests { - t.Errorf("expected 429, got %d", rr.Code) - } - - // Wait for window to expire - time.Sleep(150 * time.Millisecond) - - // Fourth attempt (should pass again) - rr = httptest.NewRecorder() - handler.ServeHTTP(rr, req) - if rr.Code != http.StatusOK { - t.Errorf("expected 200, got %d", rr.Code) - } -}