104 lines
2.3 KiB
Go
104 lines
2.3 KiB
Go
// ©AngelaMos | 2026
|
|
// source_test.go
|
|
|
|
package source
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestEmbeddedDefaultsParse(t *testing.T) {
|
|
got, err := Defaults()
|
|
if err != nil {
|
|
t.Fatalf("Defaults: %v", err)
|
|
}
|
|
want := map[string]bool{
|
|
"krebs": false, "thehackernews": false, "bleepingcomputer": false,
|
|
"securityweek": false, "darkreading": false, "theregister": false,
|
|
"cisa": false,
|
|
}
|
|
for _, s := range got {
|
|
if _, ok := want[s.Name]; !ok {
|
|
continue
|
|
}
|
|
want[s.Name] = true
|
|
if s.Type != KindRSS {
|
|
t.Errorf("%s: type = %q, want rss", s.Name, s.Type)
|
|
}
|
|
if s.Weight <= 0 || s.Weight > 1 {
|
|
t.Errorf("%s: weight %v out of (0,1]", s.Name, s.Weight)
|
|
}
|
|
if !s.Enabled {
|
|
t.Errorf("%s: expected enabled by default", s.Name)
|
|
}
|
|
}
|
|
for name, seen := range want {
|
|
if !seen {
|
|
t.Errorf("seed source %q missing from embedded defaults", name)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestExternalOverride(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "sources.yaml")
|
|
body := `
|
|
- name: custom
|
|
title: Custom Feed
|
|
url: https://example.com/feed.xml
|
|
type: rss
|
|
weight: 0.5
|
|
enabled: true
|
|
`
|
|
if err := os.WriteFile(path, []byte(body), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
got, err := Load(path)
|
|
if err != nil {
|
|
t.Fatalf("Load: %v", err)
|
|
}
|
|
if len(got) != 1 || got[0].Name != "custom" {
|
|
t.Errorf("external override = %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestRejectsBadURL(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "bad.yaml")
|
|
body := "- name: x\n url: not-a-url\n type: rss\n enabled: true\n"
|
|
if err := os.WriteFile(path, []byte(body), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := Load(path); err == nil {
|
|
t.Error("expected error for invalid url")
|
|
}
|
|
}
|
|
|
|
func TestRejectsDuplicateName(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "dup.yaml")
|
|
body := `
|
|
- {name: a, url: "https://a.com/f", type: rss, enabled: true}
|
|
- {name: a, url: "https://b.com/f", type: rss, enabled: true}
|
|
`
|
|
if err := os.WriteFile(path, []byte(body), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := Load(path); err == nil {
|
|
t.Error("expected error for duplicate source name")
|
|
}
|
|
}
|
|
|
|
func TestEnabledFilter(t *testing.T) {
|
|
all := []Source{
|
|
{Name: "on", Enabled: true},
|
|
{Name: "off", Enabled: false},
|
|
}
|
|
got := Enabled(all)
|
|
if len(got) != 1 || got[0].Name != "on" {
|
|
t.Errorf("Enabled filter = %+v", got)
|
|
}
|
|
}
|