package latest import "testing" func TestKaganeAPIURL(t *testing.T) { const uuid = "019f84bc-9ba0-7ed9-86f5-8b905ec7c28b" tests := []struct { name string seriesURL string want string wantOK bool }{ { name: "series page maps to its API endpoint", seriesURL: "https://kagane.to/series/" + uuid, want: "https://kagane.to/api/v2/series/" + uuid, wantOK: true, }, { name: "trailing slash is tolerated", seriesURL: "https://kagane.to/series/" + uuid + "/", want: "https://kagane.to/api/v2/series/" + uuid, wantOK: true, }, {"not a series path", "https://kagane.to/search", "", false}, {"foreign host", "https://evil.example/series/" + uuid, "", false}, {"garbage", "://", "", false}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, ok := kaganeAPIURL(tt.seriesURL) if ok != tt.wantOK || got != tt.want { t.Errorf("kaganeAPIURL(%q) = %q, %v; want %q, %v", tt.seriesURL, got, ok, tt.want, tt.wantOK) } }) } } func TestNovelfullSeriesURL(t *testing.T) { cases := []struct { name string url string want bool }{ {"series page", "https://novelfull.com/reverend-insanity.html", true}, {"foreign host", "https://evil.example/reverend-insanity.html", false}, {"not https", "http://novelfull.com/reverend-insanity.html", false}, {"not a series page", "https://novelfull.com/genre/Fantasy", false}, {"garbage", "://nope", false}, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { if got := novelfullSeriesURL(tc.url); got != tc.want { t.Fatalf("novelfullSeriesURL(%q) = %v, want %v", tc.url, got, tc.want) } }) } }