autobrr/pkg/torznab/torznab_test.go
soup 0391629862
chore(license): update copyright year in headers (#1929)
* chore: update copyright year in license headers

* Revert "chore: update copyright year in license headers"

This reverts commit 3e58129c431b9a491089ce36b908f9bb6ba38ed3.

* chore: update copyright year in license headers

* fix: sort go imports

* fix: add missing license headers
2025-01-06 22:23:19 +01:00

248 lines
5.2 KiB
Go

// Copyright (c) 2021 - 2025, Ludvig Lundgren and the autobrr contributors.
// SPDX-License-Identifier: GPL-2.0-or-later
//go:build integration
package torznab
import (
"context"
"encoding/xml"
"net/http"
"net/http/httptest"
"os"
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
//func TestClient_GetFeed(t *testing.T) {
// key := "mock-key"
//
// srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// apiKey := r.Header.Get("X-API-Key")
// if apiKey != "" {
// if apiKey != key {
// w.WriteHeader(http.StatusUnauthorized)
// w.Write(nil)
// return
// }
// }
// payload, err := os.ReadFile("testdata/torznab_response.xml")
// if err != nil {
// http.Error(w, err.Error(), http.StatusInternalServerError)
// return
// }
// w.Header().Set("Content-Type", "application/xml")
// w.Write(payload)
// }))
// defer srv.Close()
//
// type fields struct {
// Host string
// ApiKey string
// BasicAuth BasicAuth
// }
// tests := []struct {
// name string
// fields fields
// want []FeedItem
// wantErr bool
// }{
// {
// name: "get feed",
// fields: fields{
// Host: srv.url + "/api",
// ApiKey: key,
// BasicAuth: BasicAuth{},
// },
// want: nil,
// wantErr: false,
// },
// }
// for _, tt := range tests {
// t.Run(tt.name, func(t *testing.T) {
// c := NewClient(Config{Host: tt.fields.Host, ApiKey: tt.fields.ApiKey})
//
// _, err := c.GetFeed()
// if tt.wantErr && assert.Error(t, err) {
// assert.Equal(t, tt.wantErr, err)
// }
// //assert.Equal(t, tt.want, got)
// })
// }
//}
func TestClient_GetCaps(t *testing.T) {
key := "mock-key"
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
//apiKey := r.Header.Get("X-API-Key")
//if apiKey != key {
// w.WriteHeader(http.StatusUnauthorized)
// w.Write(nil)
// return
//}
if !strings.Contains(r.RequestURI, key) {
w.WriteHeader(http.StatusUnauthorized)
w.Write(nil)
return
}
payload, err := os.ReadFile("testdata/caps_response.xml")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/xml")
w.Write(payload)
}))
defer srv.Close()
type fields struct {
Host string
ApiKey string
BasicAuth BasicAuth
}
tests := []struct {
name string
fields fields
want *Caps
wantErr bool
expectedErr string
}{
{
name: "get caps",
fields: fields{
Host: srv.URL + "/api/",
ApiKey: key,
BasicAuth: BasicAuth{},
},
want: &Caps{
XMLName: xml.Name{
Space: "",
Local: "caps",
},
Server: Server{
Version: "1.1",
Title: "...",
Strapline: "...",
Email: "...",
URL: "http://indexer.local/",
Image: "http://indexer.local/content/banner.jpg",
},
Limits: Limits{
Max: "100",
Default: "50",
},
Retention: Retention{
Days: "400",
},
Registration: Registration{
Available: "yes",
Open: "yes",
},
Searching: Searching{
Search: Search{
Available: "yes",
SupportedParams: "q",
},
TvSearch: Search{
Available: "yes",
SupportedParams: "q,rid,tvdbid,season,ep",
},
MovieSearch: Search{
Available: "no",
SupportedParams: "q,imdbid,genre",
},
AudioSearch: Search{
Available: "no",
SupportedParams: "q",
},
BookSearch: Search{
Available: "no",
SupportedParams: "q",
},
},
Categories: CapCategories{Categories: []Category{
{
ID: 2000,
Name: "Movies",
SubCategories: []Category{
{
ID: 2010,
Name: "Foreign",
},
},
},
{
ID: 5000,
Name: "TV",
SubCategories: []Category{
{
ID: 5040,
Name: "HD",
},
{
ID: 5070,
Name: "Anime",
},
},
},
}},
Groups: Groups{Group: Group{
ID: "1",
Name: "alt.binaries....",
Description: "...",
Lastupdate: "...",
}},
Genres: Genres{
Genre: Genre{
ID: "1",
Categoryid: "5000",
Name: "Kids",
},
},
Tags: Tags{Tag: []Tag{
{
Name: "anonymous",
Description: "Uploader is anonymous",
},
{
Name: "trusted",
Description: "Uploader has high reputation",
},
{
Name: "internal",
Description: "Uploader is an internal release group",
},
}},
},
wantErr: false,
},
{
name: "bad key",
fields: fields{
Host: srv.URL,
ApiKey: "badkey",
BasicAuth: BasicAuth{},
},
want: nil,
wantErr: true,
expectedErr: "could not get caps for feed: unauthorized",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := NewClient(Config{Host: tt.fields.Host, ApiKey: tt.fields.ApiKey})
got, err := c.FetchCaps(context.TODO())
if tt.wantErr && assert.Error(t, err) {
assert.EqualErrorf(t, err, tt.expectedErr, "Error should be: %v, got: %v", tt.wantErr, err)
}
assert.Equal(t, tt.want, got)
})
}
}