Cybersecurity-Projects/PROJECTS/intermediate/security-news-scraper/internal/source/source_test.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)
}
}